用Go语言打造区块链[1]
来源:互联网 发布:施工进度网络计划绘制 编辑:程序博客网 时间:2024/05/16 10:00
最早由李笑来处了解到。
中文翻译文字部分看这里:
https://zhuanlan.zhihu.com/p/29971930
学好Go语言走遍天下都不怕。以下代码建立了一个非常原始的电子账本:
package mainimport ( "bytes" "crypto/sha256" "fmt" "strconv" "time")type Block struct { Timestamp int64 Data []byte PrevBlockHash []byte Hash []byte}func (b *Block) SetHash() { timestamp := []byte(strconv.FormatInt(b.Timestamp, 10)) headers := bytes.Join([][]byte{b.PrevBlockHash, b.Data, timestamp}, []byte{}) hash := sha256.Sum256(headers) b.Hash = hash[:]}/* 初始化第一个块*/func NewBlock(data string, prevBlockHash []byte) *Block { block := &Block{time.Now().Unix(), []byte(data), prevBlockHash, []byte{}} block.SetHash() return block}type Blockchain struct { blocks []*Block}/* 添加 区块*/func (bc *Blockchain) AddBlock(data string) { prevBlock := bc.blocks[len(bc.blocks)-1] newBlock := NewBlock(data, prevBlock.Hash) bc.blocks = append(bc.blocks, newBlock)}func NewGenesisBlock() *Block { return NewBlock("Genesis Block创始块", []byte{})}/* 用创始块创建一个区块链的函数*/func NewBlockchain() *Blockchain { return &Blockchain{[]*Block{NewGenesisBlock()}} /*我不太理解这种语法,层层深入?*/}func main() { /* 初始化 */ bc := NewBlockchain() /* 添加记录 */ bc.AddBlock("Send 1 BTC TO L") bc.AddBlock("Send 2 BTC to R") /* 查看我们最终存储结果 */ for _, block := range bc.blocks { fmt.Printf("Prev: hash:%x\n", block.PrevBlockHash) fmt.Printf("Data: %s\n", block.Data) fmt.Printf("Hash: %x\n", block.Hash) fmt.Println() }}
阅读全文
0 0
- 用Go语言打造区块链[1]
- 用 Go 构建一个区块链 ---- Part 1: 基本原型
- [译]用go进行区块链开发1:基本原型
- 用 Go 构建一个区块链 -- Part 4: 交易(1)
- 用 Go 构建一个区块链 -- Part 2: 工作量证明
- [译]用go进行区块链开发2:工作量证明
- 用 Go 构建一个区块链 -- Part 5: 地址
- 用 Go 构建一个区块链 -- Part 7: 网络
- 【区块链】go ethereum 安装与使用
- [译]用go进行区块链开发3:持久化与CLI
- 用 Go 构建一个区块链 -- Part 3: 持久化和命令行接口
- 用 Go 构建一个区块链 -- Part 6: 交易(2)
- go语言学习 1-初识go语言
- 如何用Go语言打造一个高性能MySQL Proxy
- 微软联手R3财团打造企业级区块链平…
- 亿书倾力打造区块链茶座,助力技术分享
- 吕旭军:如何打造区块链数字资产交易?
- Go语言1-入门
- 11.20(1)
- Python机器学习库sklearn网格搜索与交叉验证
- 计算机视觉-椒盐噪声输出
- anaconda在windows系统上的报错修复
- 超级详细的仿QQ滑动删除的效果
- 用Go语言打造区块链[1]
- 微信公众号的开发学习《1》
- Redis安装系统服务1073错误
- Hibernate应用(一)
- 11.20(2)
- 计算机视觉-中值滤波
- 【docker】top命令报错 “TERM environment variable not set.”
- 史上最全最强SpringMVC详细示例实战教程(转)
- Historian实时数据库连接