1. 程式人生 > >區塊鏈中區塊的構成詳解

區塊鏈中區塊的構成詳解

       區塊鏈是一個鏈式儲存結構,區塊就是鏈式儲存結構中的資料元素,區塊鏈由區塊相互連線形成單向鏈式結構,其中第一個區塊被稱為創始區塊。

       那作為區塊鏈的資料元素,區塊的構成又是怎樣的呢?

  其實,每個區塊的大小被規定不能超過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