比特幣區塊鏈區塊結構
比特幣的區塊數據結構
本文介紹區塊鏈的區塊數據結構。先看看區塊的結構示意圖:
區塊結構示意
區塊分Header 和 body,header是元數據,包含版本號,前一塊的hash值,隨機數,目標Hash。 Body是交易記錄,交易記錄都以merkel樹狀結構存儲,交易記錄在葉子節點,父子節點其子節點的hash值。
具體的字段與結構
數據項 | 描述 | 長度 |
---|---|---|
Magic No(魔法數) | 0xD9B4BEF9 (固定不變) | 4字節 |
Blocksize (塊大小) | 到區塊結束的字節長度 | 4字節 |
BlockHeader 塊頭 | 包含六個字段 | 80字節 |
TransactionCount 交易數量 | 正整數 | 1~9字節 |
Transaction 交易 | 交易列表 | 交易數量決定 |
表格1 區塊結構字段
數據項 | 描述 | 長度 |
---|---|---|
Version | 區塊版本號 | 4字節 |
HashPreBlock | 前一區塊的Hash值256位 | 32字節 |
HashMerkleRoot | 塊交易記錄的MerkleRoot節點的hash | 256字節 |
Time | 時間戳 | 4字節 |
Bits | 壓縮格式當前 | 4字節 |
Nonce隨機數 | 從0開始的32位數 | 4字節 |
表格2 區塊Heaer結構字段
Header有幾個字段特別強調,
HashPreBlock:這個是這區塊上一個塊的hash值,這樣讓區塊組成鏈,若前面區塊值被修改,很容易通過hash值驗證出來,這保證歷史的區塊內容不可變。
Bits:控制挖礦的難度,要求計算出來的Hash值必須小於或等於這個目標Hash值,所以目標Hash值越低,計算匹配難度越高。
Nonce隨機數:挖礦就是通過修改隨機數,讓整個區塊的hash值能滿足目標hash值的要。
區塊的創建
程序取當前區塊鏈的最新一區塊作爲新建區塊的前一hash,時間戳組成header, 交易交易列表按優先級入塊以Merkeltree存放,最後的Merkle 節點Hash,最後通過隨機數,計算出來的滿足條件的Hash值
挖礦:
有了上面的結構和理解,就很容易理解挖礦做的是什麼了。挖礦就是不斷嘗試隨機數,讓區塊的hash值能小於或等於目標hash值的,而挖礦到現在變得越來越專業,私人完全沒機會,大礦主將隨機數任務拆分,多節點計算,原來每個節點獨自挖坑變成一個礦場的多個礦工協同,礦場則越來越集中。諷刺的是,比特幣希望是去中心化,但挖礦卻必須集中化才能勝出。 所以理想很豐滿,現實卻很骨感,能發揮生產力最大效率,獲得最大利益的的纔是王道。