内容简介:原理就不介绍了,具体可以去看我的另一篇区块链重要的 数据层、网络层、共识层、激励层下面的代码只是展示了数据层上面的东西,后续会把剩余的补充上,好好学习,天天向上。加油。
原理就不介绍了,具体可以去看我的另一篇 通过一个App Demo的演示深入理解区块链运行原理 代码只是最简单的,只是简单的实现了对一个区块的定义以及区块之间的联系。在这里p2p,激励,共识都没有。
区块链重要的 数据层、网络层、共识层、激励层
下面的代码只是展示了数据层上面的东西,后续会把剩余的补充上,好好学习,天天向上。加油。
package main import ( "bytes" "crypto/sha256" "encoding/binary" "fmt" "os" "time" ) // 实现int转换成byte数组 func Int2Byte(num int64) []byte { var buffer bytes.Buffer err := binary.Write(&buffer, binary.BigEndian, num) CheckErr(err) return buffer.Bytes() } func CheckErr(err error) { if err != nil { fmt.Println("err:", err) os.Exit(1) } } //区块的结构 type Block struct { Version int64 PrevBlockHash []byte Hash []byte TimeStamp int64 TargetBits int64 Nonce int64 MerkeRoot []byte Data []byte } func NewBlock(data string, prevBlockHash []byte) *Block { block := &Block{ Version: 1, PrevBlockHash: prevBlockHash, TimeStamp: time.Now().Unix(), TargetBits: 10, Nonce: 5, MerkeRoot: []byte{}, Data: []byte(data)} block.SetHash() return block } // int -> byte func (block *Block) SetHash() { tmp := [][]byte{ //实现将int转成byte数组的函数 Int2Byte(block.Version), block.PrevBlockHash, Int2Byte(block.TimeStamp), block.MerkeRoot, Int2Byte(block.Nonce), block.Data} //将区块个字段连接成一个切片,使用[]byte{}进行连接 data := bytes.Join(tmp, []byte{}) //算出hash的值 hash := sha256.Sum256(data) block.Hash = hash[:] } func NewGenesisBlock() *Block { return NewBlock("Genesis Block!", []byte{}) } type BlockChian struct { //使用切片保存区块,用于模拟区块链 blocks []*Block } func NewBlockChain() *BlockChian { //创建一个区块链 return &BlockChian{[]*Block{NewGenesisBlock()}} } func (bc *BlockChian) AddBlock(data string) { // 防止区块越界 if len(bc.blocks) <= 0 { os.Exit(1) } lastBlock := bc.blocks[len(bc.blocks)-1] block := NewBlock(data, lastBlock.Hash) bc.blocks = append(bc.blocks, block) } func main() { // 实例化一个区块链 bc := NewBlockChain() //添加block bc.AddBlock("测试第一个BTC") bc.AddBlock("测试第二个EOS") //打印出信息 for i, block := range bc.blocks { fmt.Println("=========block num:", i) fmt.Println("data", string(block.Data)) fmt.Println("Version:", block.Version) fmt.Printf("Hash:%x\n", block.Hash) fmt.Printf("TimeStamp:%d\n", block.TimeStamp) fmt.Printf("MerkeRoot:%x\n", block.MerkeRoot) fmt.Printf("None:%d\n", block.Nonce) } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Web 2.0界面设计模式
黄玮 / 电子工业出版社 / 2013-9-1 / 59
本书集Web 2.0的发展及特点、Web 2.0界面设计模式基本理论、实际模式实践及代码实现等诸多内容于一身,具有很强的实用性。这些内容不是简单的顺序堆砌,而是以Web 2.0界面设计模式和应用为主线,其中完美地穿插了各种与之相关的Web 2.0设计理念、用户行为模式、用户体验及基于Dojo的实现方式等相关知识,真正做到将Web 2.0界面设计模式所需要的方方面面的知识有机地融为一个整体。实现不需......一起来看看 《Web 2.0界面设计模式》 这本书的介绍吧!