基于區(qū)塊鏈塊的數(shù)據(jù)解析
塊是一種數(shù)據(jù)結(jié)構(gòu),可以很好地計(jì)算元數(shù)據(jù)。所有交易都必須包含在一個(gè)有效的塊中,才能被認(rèn)為是最終的。網(wǎng)絡(luò)上的所有節(jié)點(diǎn)都將存儲(chǔ)一個(gè)塊的副本,以驗(yàn)證新的交易并與其他節(jié)點(diǎn)共享數(shù)據(jù)。
塊結(jié)構(gòu)
是regtest 網(wǎng)絡(luò)的起源塊,正如你所看到的,它并不是一個(gè)正常的人所能夠看懂的。接下里,我們將學(xué)習(xí)數(shù)據(jù)是如何從左到右編碼的。
{block header} {transaction counter} {transacTIons}
塊頭
{version 4B} {previous block hash 32B} {merkle root hash 32B} {TIme 4B}{bits 4B} {nonce 4B}
· version(4個(gè)字節(jié))-塊格式版本。
· 以前的塊哈希(32字節(jié))就是上一個(gè)塊的哈希值。這一點(diǎn)很重要,因?yàn)閴K的哈希值是從最開(kāi)始計(jì)算的,因此取決于前一個(gè)塊的值,然后將每個(gè)新塊與接下來(lái)的塊聯(lián)系起來(lái)。這是區(qū)塊鏈中的連接。
· merkle root哈希(32字節(jié))也就是塊中所有交易的merkle樹(shù)的哈希值。如果任何交易被更改、刪除或重新排序,它將更改merkle root哈希值。這就是要鎖定塊中所有交易的原因。
· TIme(4字節(jié))—Unix時(shí)間戳(秒)。由于世界各地每個(gè)節(jié)點(diǎn)的時(shí)鐘都不能保證同步,因此只需要在網(wǎng)絡(luò)其余部分的2小時(shí)內(nèi)同步即可。
· bits(4字節(jié))——緊湊格式的目標(biāo)哈希值。塊哈希必須等于或小于這個(gè)值,才能被認(rèn)為是有效的。
· nonce(4字節(jié))——可以是任何4字節(jié)的值,并且在挖掘過(guò)程中不斷更改,直到找到一個(gè)有效的塊哈希值。
值
· 版本- 01000000 (1)
· 上一個(gè)塊哈希——000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
· merkle root 哈希- 3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a
· TIme?— dae5494d (1296688602 Wednesday, February 2, 2011 11:16:42 PM GMT)
· bits ?—ffff7f20(7fffff0000000000000000000000000000000000000000000000000000000000)
· nonce?—?02000000 (decimal 2)
注意: 請(qǐng)記住,比特幣使用的是小端字節(jié)順序的格式,這可能看起來(lái)是倒著的。您可以使用所提供的工具$reverse_endian{hex}來(lái)反轉(zhuǎn)十六進(jìn)制字符串的順序。
交易
01(1)塊中的交易
· 交易計(jì)數(shù)器(可變長(zhǎng)度)——塊中以可變的整數(shù)表示的交易數(shù)。