不断创造简单区块链设计与实现,加速成长!这是我参加“掘金日新计划·六月更新挑战”的第9天,点击查看活动详情
区块链POW共识算法
区块链分布式系统简单区块链设计与实现,共识算法系统是它的灵魂,pow是工作量证明,证明你做了一定的工作量。 (按劳动力、综合算力分配)
块定义和数据序列化
在我们实现pow之前,我们需要搭建区块链的基本框架(相当于有一个工作目标),我们可以简化比特币的基本结构,写一个最简单的区块数据结构,然后用切片来存储生成的块,并使用哈希将它们链接在一起。代码实现:
1、定义块结构
创建block.go文件 go type Block struct { int64 //时间戳数据[]byte //数据域[]byte //上一个块的哈希值 Hash []byte //当前块的哈希 }
2、区块计算哈希值
实现哈希计算函数 go //区块集内部哈希方法 func (b *Block)SetHash(){ //将时间戳转换为[]byte :=[]byte(strconv.(b.,1) //将前一个区块的哈希、交易信息和时间戳连接在一起 headers:=bytes.Join([][]byte{b.,b.Data,},[]byte{} ) //计算哈希本区块哈希值:=sha256.Sum256(headers) b.Hash=hash[:] }
3、创世块创建
“`go //创建Block,返回Block指针 func(data string, []byte)*Block{ //构造block block:=&Block{time.Now().Unix(),[]byte( data),,[]byte{}} //设置哈希块。SetHash() 返回块 }
//创世区块创建,返回创世区块 区块指针 func ()*Block{ return (“创世区块”,[]byte{})
} ““
4、区块链功能实现
区块链是使用块指针类型的切片实现的
创建.go文件 go //:指向块类型的指针切片 struct { Blocks []*Block } //增加方法(添加指向切片的指针) //添加块 func (bc ) (data string) { //获取上一个区块信息:=bc.Blocks[len(bc.Blocks)-1] :=(data,.Hash) bc.Blocks=append(bc.Blocks,) } //准备函数,它通过创世块创建和初始化区块链。 func ()* { return &{[]*Block{()}} }
5、测试和使用
“`go package main import (“fmt” )
func main() { //初始化bc:=() //创建区块记录 bc.(“小明给了我1ETH”) bc.(“小芳给了我2ETH”) //遍历_,block := range bc.Blocks { fmt.Printf(“prev,hash:%xn”,block.) fmt.Printf(“Data:%sn”,block.Data) fmt.Printf(“Hash:%x n”,block.Hash) fmt.Println()
} } “`
注意:如果不在GOPATH目录下,需要设置go mod
最后看目录结构:
挖矿网Ethos中文站简单易用的挖矿系统,为挖矿产业提供教程软件以及矿机测评交易信息等,挖矿网各种数字货币挖矿收益对比计算,挖矿网介绍挖矿的工具,以及矿场的最新消息等。http://www.ethospool.com/