为了账号安全,请及时绑定邮箱和手机立即绑定

请问有源码吗?

老师,请问有源码吗?能分享一下给大家吗?

正在回答

3 回答

package core

import (
   "fmt"
   "log"
)

type Blockchain struct {
   Blocks []*Block
}


//创世区块链
func NewBlockChain() *Blockchain {
   genesis := GenerateOriginBlock()
   blockchain := Blockchain{}
   blockchain.AppendBlock(&genesis)
   return &blockchain
}

//每一个新数据都创建一个区块,方便外部调用
func (bc *Blockchain)SendData(data string) {
   preBlock := bc.Blocks[len(bc.Blocks) - 1]
   newBlock := GenerateNewBlock(*preBlock, data)
   bc.AppendBlock(&newBlock)
}


//往区块链里添加区块
func (bc *Blockchain) AppendBlock(newBlock *Block) {
   if len(bc.Blocks) == 0 {//第一个区块
      bc.Blocks = append(bc.Blocks,newBlock)
      return
   }
   if !isValid(*newBlock,*bc.Blocks[len(bc.Blocks) - 1]) {
      log.Fatal("Invalid block")
   }
   bc.Blocks = append(bc.Blocks,newBlock)
}

//打印区块链
func (bc *Blockchain) Print()  {
   for _,block := range bc.Blocks {
      fmt.Printf("Index:%d\n",block.Index)
      fmt.Printf("PrevHash:%s\n",block.PrevBlockHash)
      fmt.Printf("Hash:%s\n",block.Hash)
      fmt.Printf("Timestamp:%d\n",block.Timestamp)
      fmt.Printf("Data:%s\n",block.Data)
   }
}
//新区块校验
func isValid(newBlock Block,oldBlock Block) bool {
   if newBlock.Index - 1 != oldBlock.Index {
      return false
   }

   if newBlock.PrevBlockHash != oldBlock.Hash {
      return false
   }

   if calculateHash(newBlock) != newBlock.Hash {
      return false
   }
   return true
}


0 回复 有任何疑惑可以回复我~
package core

import (
   "fmt"
   "log"
)

type Blockchain struct {
   Blocks []*Block
}


//创世区块链
func NewBlockChain() *Blockchain {
   genesis := GenerateOriginBlock()
   blockchain := Blockchain{}
   blockchain.AppendBlock(&genesis)
   return &blockchain
}

//每一个新数据都创建一个区块,方便外部调用
func (bc *Blockchain)SendData(data string) {
   preBlock := bc.Blocks[len(bc.Blocks) - 1]
   newBlock := GenerateNewBlock(*preBlock, data)
   bc.AppendBlock(&newBlock)
}


//往区块链里添加区块
func (bc *Blockchain) AppendBlock(newBlock *Block) {
   if len(bc.Blocks) == 0 {//第一个区块
      bc.Blocks = append(bc.Blocks,newBlock)
      return
   }
   if !isValid(*newBlock,*bc.Blocks[len(bc.Blocks) - 1]) {
      log.Fatal("Invalid block")
   }
   bc.Blocks = append(bc.Blocks,newBlock)
}

//打印区块链
func (bc *Blockchain) Print()  {
   for _,block := range bc.Blocks {
      fmt.Printf("Index:%d\n",block.Index)
      fmt.Printf("PrevHash:%s\n",block.PrevBlockHash)
      fmt.Printf("Hash:%s\n",block.Hash)
      fmt.Printf("Timestamp:%d\n",block.Timestamp)
      fmt.Printf("Data:%s\n",block.Data)
   }
}
//新区块校验
func isValid(newBlock Block,oldBlock Block) bool {
   if newBlock.Index - 1 != oldBlock.Index {
      return false
   }

   if newBlock.PrevBlockHash != oldBlock.Hash {
      return false
   }

   if calculateHash(newBlock) != newBlock.Hash {
      return false
   }
   return true
}



0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问有源码吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信