简单区块链设计与实现 GO语言实现区块链POW共识算法–区块定义与数据序列化

入门知识 1周前 (06-24) 14次浏览 0个评论

不断创造简单区块链设计与实现,加速成长!这是我参加“掘金日新计划·六月更新挑战”的第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/

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址