區塊鏈中區塊的構成詳解
區塊鏈是一個鏈式儲存結構,區塊就是鏈式儲存結構中的資料元素,區塊鏈由區塊相互連線形成單向鏈式結構,其中第一個區塊被稱為創始區塊。
那作為區塊鏈的資料元素,區塊的構成又是怎樣的呢?
其實,每個區塊的大小被規定不能超過1M,它的結構分為兩部分,區塊頭和區塊體。
區塊頭共80位元組,分為6個部分:version,prevBlockHash,merkleRoot,time difficultyTarget,nonce。
version:大小為4位元組,記錄了區塊頭的版本號,用於跟蹤軟體
prevBlockHash:大小為32位元組 ,記錄了該區塊的上一個區塊的Hash地址;
merkleRoot:大小為32位元組,記錄了該區塊中交易的merkle樹根的雜湊值;
time:大小為 4位元組,記錄了該區塊的建立時間戳;
difficultyTarget:大小為4位元組,記錄了該區塊鏈工作量證明難度目標;
nonce:大小為4位元組,記錄了用於證明工作量的計算引數。
區塊體的內容是該區塊的交易資訊,包括交易數量和交易資料。區塊體共分為三部分:
numTransactionsBytes,numTransactions,transactions
numTransactionsBytes:大小為1位元組,記錄了交易數量佔用的位元組數;
numTransactions:大小為0-8個位元組,記錄了區塊內的交易數量;
transactions:大小不確定,記錄了區塊記憶體的多個交易資料。
在區塊體部分中,numTransactions(記錄區塊內交易數量)是儲存交易資訊的重要欄位,將numTransactions(記錄區塊內交易數量)部分使用壓縮儲存方式,這樣可以大量的節約儲存空間。numTransactionsBytes欄位的存在是為了指出numTransactions在區塊體中存在的部位,為讀取交易數量而做準備,因此,應最先讀取
如果numTransactionsBytes欄位值小於253,則交易數量為numTransactionsBytes欄位值作為;
如果numTransactionsBytes欄位值等於253,則交易數量為numTransactionsBytes欄位值之後的兩個位元組;
如果numTransactionsBytes欄位值等於254,則交易數量為numTransactionsBytes欄位值之後的4個位元組;
否則,交易數量為numTransactionsBytes欄位值之後的8個位元組。
作者:f珞珈山神