美文网首页
1.区块的创建

1.区块的创建

作者: J_zhe | 来源:发表于2018-07-03 22:54 被阅读0次

    前言:写这个教程的目的就是希望解开区块链底层的神秘面纱。本文建立在对区块链有一定了解,并且默认你会Go语言,文中将不会讲解代码的目录结构(最下方有源码地址),笔者会将比较难理解的地方抽丝剥茧出来讲解。


    创建一个简单的区块

    type Block struct {
        Height    int64  //区块的高度(编号)
        Data      []byte  //交易数据
        Timestamp int64 //时间戳
        PrevHash  []byte //上一个区块的哈希
        Hash      []byte //哈希
    }
    
    func NewBlock(height int64, data []byte, prev []byte) *Block {
        block := &Block{
            height,
            data,
            time.Now().Unix(),
            prev,
            nil,
            0,
        }
        block.Hash = block.SetHash() //区块的哈希由一系列属性计算得来
        return block
    }
    
    //生成Hash的函数
    func (blc *Block) SetHash() []byte {
        heightBytes := Int64ToBytes(blc.Height)
        timeBytes := []byte( strconv.FormatInt(blc.Timestamp, 2) )
    
        buff := [][]byte{
            heightBytes,
            blc.Data,
            timeBytes,
            blc.PrevHash,
        }
    
        buffRes := bytes.Join(buff, []byte{})
        hash := sha256.Sum256(buffRes)
        return hash[:]
    }
    
    //int64转[]byte
    func Int64ToBytes(i int64) []byte {
        var buf = make([]byte, 8)
        binary.BigEndian.PutUint64(buf, uint64(i))
        return buf
    }
    

    运行结果

    区块的高度:1
    交易数据:create block
    时间戳:%!d(string=2018-07-05 05:49:40 PM)
    上一个区块的哈希:00000000
    Hash:71de577f0e69665b95edbbf16a6d8d43bdbe20a7f5edf89f61f1de4fb13b30b4
    

    上面就是一个很简单的区块创建过程,是不是很简单呢?为了让这个教程做的简单。我们到此为止,下一节将讲解如何创建区块链并创建创世区块

    源码:https://gitee.com/itgjz/blockchain_learn/tree/master/block_chain_learn1

    相关文章

      网友评论

          本文标题:1.区块的创建

          本文链接:https://www.haomeiwen.com/subject/llksuftx.html