比特幣區塊鏈的數據結構

我們回到兩個人轉賬交易的過程中,去理解比特幣區塊鏈的數據結構。


我發起一筆交易,即我向整個區塊鏈網絡廣播,我和你兩個人想進行這筆交易:我向你的地址中轉入一筆比特幣,無須你的許可。
但只有當這筆交易被打包進最新的比特幣區塊中時,這筆交易才真正完成。通常來說,當在一筆交易所在的區塊之後又增加 5 個區塊,即包括它自己在內一共經過 6 次確認時,這筆交易可認為被完全確認。按比特幣每個區塊的確認時間 10 分鐘估算,即一筆交易最終確認要經過約 1 小時。
這裡包括了兩步:一是交易被打包進候選區塊,每個節點可以按規則生成不同的候選區塊;二是節點挖礦成功,候選區塊被成功地加到區塊鏈的尾部,成為最新的正式區塊。
那麼,把一筆交易打包進區塊是什麼意思呢?這涉及區塊鏈最基礎的數據結構,這也是它不可篡改的基礎。
以下討論可能略顯枯燥,但卻是認識比特幣與區塊鏈的最基礎的知識,我儘量以通俗的語言來解釋。
區塊鏈之所以被稱為 blockchain,是因為它的數據塊以鏈狀的形式存儲著。從第一個區塊即所謂的創世區塊開始,新增的區塊不斷地被連到上一個區塊的後面,形成一條鏈條。
每個區塊由兩個部分組成——區塊頭部和區塊數據。其中,區塊頭部中有一個哈希指針指向上一個區塊,這個哈希指針包含前一個數據塊的哈希值。哈希值可以被看成是數據塊的指紋,即在後一個區塊的頭部中均存儲有上一個區塊數據的指紋。如果上一個區塊中的數據被篡改了,那麼數據和指紋就對不上號,篡改行為就被發現了。要改變一個區塊中的數據,對其後的每個區塊都必須相應地進行修改。

比特幣區塊鏈設計有一種機制讓這種修改難以發生,我們稍後在談到“工作量證明”和“比特幣挖礦”時再詳細討論。

一個區塊中的數據是被打包進這個區塊的一系列交易。這些交易按照既定的規則被打包形成特定的二叉樹數據結構——梅克爾樹(Merkle trees)。按目前的比特幣區塊的大小,一個區塊中能容納的交易數量在 2000 個左右,比如在第 526957 個區塊中容納了 1804 個交易。

可通過如下網站查看比特幣區塊鏈的數據信息:https://blockchain.info/。

比特幣區塊鏈的數據結構中包括兩種哈希指針,它們均是不可篡改特性的數據結構基礎。一個是形成“區塊+鏈”(block+chain)的鏈狀數據結構,另一個是哈希指針形成的梅克爾樹(見圖 1)。鏈狀數據結構使得對某一區塊內的數據的修改很容易被發現;梅克爾樹的結構起類似作用,使得對其中的任何交易數據的修改很容易被發現。

比特幣區塊鏈的數據結構


圖1:比特幣區塊鏈的“區塊鏈”與梅克爾樹

參考內容:http://c.biancheng.net/view/1896.html


分享到:


相關文章: