1.区块的创建

前言:写这个教程的目的就是希望解开区块链底层的神秘面纱。本文建立在对区块链有一定了解,并且默认你会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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 說到 後來 後來 我終究還是從她的身旁走了過去 所有關於她的任何事 我再也無法參與 也無法表示 後來的後來 聽說 ...
    近半百的孤獨阅读 254评论 0 0
  • 命运从不在手,奇迹却可以寻找,将来也许可以改变,但最美丽的原来缺早已失去。紧紧拥抱,你所拥有。
    a404f911dcae阅读 199评论 0 0
  • 冬日的暖阳把整个客厅照得温暖又亮堂,一并把骨子里的活跃细胞给暖活了,兴奋起来的嘉嘉在爬行垫爬来爬去,如同一只不停追...
    demi小猫阅读 243评论 0 0