技術向!深入淺的告訴你比特幣區塊鏈的數據結構!

區塊鏈是當下的一個熱門詞彙,可是你真的瞭解區塊鏈的結構嗎?今天比特貓就和大家一起探討一下比特幣的區塊鏈數據結構。

先補充點兒基礎知識:哈希指針。在計算機語言中指針的意思是某個數據的地址。哈希指針是某數據的地址及該數據哈希值的結合。在《基於默克爾樹的SPV證明》一文中比特貓已經簡單聊過區塊鏈的鏈式結構,即新產生的區塊中包含一項哈希指針指向前一個區塊。區塊鏈的第一個區塊是創世區塊。正是因為哈希指針的使用確保了比特幣的防篡改特性。這是因為假設第K個區塊被篡改,那麼用第K個區塊數據生成的哈希值就不能和第K+1個區塊記錄的哈希值匹配。

技術向!深入淺的告訴你比特幣區塊鏈的數據結構!

一個完整的區塊包含以下數據:

(1)神奇數:神奇數為0xD9B4BEF9,這是一個固定值,作為區塊之間的分隔符;

(2)區塊大小:該字段之後的區塊的大小,單位為字節;

(3)區塊頭:包含版本號、前一個區塊的哈希指針、默克爾樹根、時間戳、工作量證明的目標特徵值、Nonce;

(4)交易個數:記錄了當前區塊的交易個數;

(5)交易記錄。

神奇數、區塊大小、交易個數的概念都比較好理解,重點聊一聊區塊頭的各項數據和交易記錄的各項數據。

區塊頭包含以下數據:

(1)版本號:生成該區塊所用的比特幣協議版本;

(2)前一個區塊的哈希指針:當前區塊通過保存前一個區塊的哈希指針指向前一個區塊,前一個區塊指向更前一個區塊,這樣便形成了一個鏈式結構,這也是區塊鏈的由來;

(3)默克爾樹根:在《基於默克爾樹的SPV證明》一文中比特貓聊過默克爾樹,在此不再贅述,注意的一點是默克爾樹的葉子節點和交易記錄是一一有序對應的;

(4)時間戳:比特幣的時間戳是Unix時間戳,即從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒;

(5)工作量證明的目標特徵值:由於比特幣的挖礦難度是動態調整的,該數據正是用於調整挖礦難度的;

(6)Nonce:運行比特幣挖礦程序的礦機不斷對區塊進行hash運算,如果生成的hash值不是以規定個數的0開頭,則增加Nonce值,繼續運算hash值。即Nonce是一個挖礦特徵數據。

一條完整的交易記錄包含以下數據:

(1)交易生成時間;

(2)交易的hash指針:指向該交易所花費的比特幣所在交易的哈希指針;

(3)交易記錄索引編號:本次交易的索引編號;

(4)交易輸入地址:記錄本次交易輸出比特幣的地址;

(5)交易輸出地址:記錄本次交易接收比特幣的地址;

(6)輸入地址數量;

(7)輸出地址數量;

(8)數字簽名;

(9)版本號:生成該交易所用的比特幣協議版本;


分享到:


相關文章: