当前位置:   article > 正文

区块链公链代码_公有链实现代码

公有链实现代码

区块链公链

 type Block struct {
	Index  int64
	TimeStamp int64
	Data  []byte
	PrevBlockHash []byte
	Hash []byte
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

新的block

func  NewBlock(index int64,data ,prevBlockHash []byte) *Block  {
	block :=&Block{index,time.Now().Unix(),data,prevBlockHash,[]byte{}}
	block.setHash() //设置当前区块Hash
	return  block
}
  • 1
  • 2
  • 3
  • 4
  • 5

hash计算

func (b *Block)setHash()  {
	timestamp :=[]byte(strconv.FormatInt(b.TimeStamp,10))
	index := []byte(strconv.FormatInt(b.Index,10))
	headers :=bytes.Join([][]byte{timestamp,index,b.PrevBlockHash},[]byte{})
	hash:=sha256.Sum256(headers)
	b.Hash =hash[:]  //保存Hash结果在当前块的Hash中
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

创世纪块

func NewGenesisBlock() *Block  {
	return  NewBlock(0,[]byte("first block"),[]byte{})
}
  • 1
  • 2
  • 3

定义区块链

type Blockchain struct {
  blocks []*Block
}
  • 1
  • 2
  • 3

添加区块

func  NewBlockchain()*Blockchain  {
	return &Blockchain{[]*Block{NewGenesisBlock()}}
}
  • 1
  • 2
  • 3

创建新区块

func (bc *Blockchain)AddBlock(data string)  {
	prevBlock :=bc.blocks[len(bc.blocks)-1]
	newBlock :=NewBlock(prevBlock.Index+1,[]byte(data),prevBlock.Hash)
	bc.blocks =append(bc.blocks,newBlock)
}
  • 1
  • 2
  • 3
  • 4
  • 5

主函数

func main(){
	bc :=NewBlockchain()
	bc.AddBlock("Joy send 1 BTC to Jay")
	bc.AddBlock("Jakc sent 2 BTC to Jay")

	for  _,block := range bc.blocks{
		fmt.Printf("Index :%d\n" ,block.Index)
		fmt.Printf("TimeStamp: %d\n",block.TimeStamp)
		fmt.Printf("Data: %s\n",block.Data)
		fmt.Printf("PrevHash: %x\n",block.PrevBlockHash)
		fmt.Printf("Hash: %x\n",block.Hash)
		fmt.Println("_____________________________")
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/608507
推荐阅读
相关标签
  

闽ICP备14008679号