zoukankan      html  css  js  c++  java
  • 区块链中区块的构成详解

           区块链是一个链式存储结构,区块就是链式存储结构中的数据元素,区块链由区块相互连接形成单向链式结构,其中第一个区块被称为创始区块。

           那作为区块链的数据元素,区块的构成又是怎样的呢?

      其实,每个区块的大小被规定不能超过1M,它的结构分为两部分,区块头和区块体。

     

      区块头共80字节,分为6个部分:versionprevBlockHashmerkleRoottime difficultyTargetnonce

      version:大小为4字节,记录了区块头的版本号,用于跟踪软件/协议的更新;

      prevBlockHash:大小为32字节 ,记录了该区块的上一个区块的Hash地址;

      merkleRoot:大小为32字节,记录了该区块中交易的merkle树根的哈希值;

      time:大小为 4字节,记录了该区块的创建时间戳;

      difficultyTarget:大小为4字节,记录了该区块链工作量证明难度目标;

      nonce:大小为4字节,记录了用于证明工作量的计算参数。

      区块体的内容是该区块的交易信息,包括交易数量和交易数据。区块体共分为三部分:

      numTransactionsBytesnumTransactionstransactions

      numTransactionsBytes:大小为1字节,记录了交易数量占用的字节数;

      numTransactions:大小为0-8个字节,记录了区块内的交易数量;

      transactions:大小不确定,记录了区块内存的多个交易数据。

      在区块体部分中,numTransactions(记录区块内交易数量)是存储交易信息的重要字段,将numTransactions(记录区块内交易数量)部分使用压缩存储方式,这样可以大量的节约存储空间。numTransactionsBytes字段的存在是为了指出numTransactions在区块体中存在的部位,为读取交易数量而做准备,因此,应最先读取numTransactionsBytes字段值,并根据该字段值的不同做出如下规定:

      如果numTransactionsBytes字段值小于253,则交易数量为numTransactionsBytes字段值作为;

      如果numTransactionsBytes字段值等于253,则交易数量为numTransactionsBytes字段值之后的两个字节;

      如果numTransactionsBytes字段值等于254,则交易数量为numTransactionsBytes字段值之后的4个字节;

      否则,交易数量为numTransactionsBytes字段值之后的8个字节。

    作者:f珞珈山神

    原文链接:https://www.kg.com/article/507675167221223424

  • 相关阅读:
    topcoder srm 320 div1
    topcoder srm 325 div1
    topcoder srm 330 div1
    topcoder srm 335 div1
    topcoder srm 340 div1
    topcoder srm 300 div1
    topcoder srm 305 div1
    topcoder srm 310 div1
    topcoder srm 315 div1
    如何统计iOS产品不同渠道的下载量?
  • 原文地址:https://www.cnblogs.com/space007/p/9897075.html
Copyright © 2011-2022 走看看