[譯] block headers

block headers 以80字節(jié)的格式進(jìn)行序列化始衅,然后作為比特幣工作量驗(yàn)證算法的一部分進(jìn)行哈希處理,使序列化頭部格式成為共識規(guī)則的一部分缭保。

bytes name 數(shù)據(jù)類型 描述
4 version int32_t block version 指示要遵循哪一組塊驗(yàn)證規(guī)則
32 previous block header hash char[32] SHA256(SHA256())hash,以前面 block 的 header 的內(nèi)部字節(jié)順序排列蝙茶。這確保在不改變該塊的頭部的情況下不能改變先前的塊艺骂。
32 merkle root hash char[32] SHA256(SHA256())是按照內(nèi)部字節(jié)排序的hash。 merkle root 源自該塊中包含的所有交易的hash值隆夯,確保在不修改頭部的情況下不會修改這些交易钳恕。
4 time uint32_t 塊時間是礦工開始散列頭部時的Unix紀(jì)元時間(根據(jù)礦工)。 必須嚴(yán)格大于前11個block的平均時間蹄衷。 根據(jù)其時鐘忧额,全節(jié)點(diǎn)將不會接受超過兩個小時的headers。
4 nBits uint32_t 此塊的header hash 的目標(biāo)閾值的編碼版本必須小于或等于愧口。
4 nonce uint32_t 任意數(shù)量的礦工都可以修改頭部 hash 來確保能夠產(chǎn)生小于或等于目標(biāo)閾值的hash睦番。 如果所有32位值都經(jīng)過測試,則可以更新時間或更改coinbase交易并更新merkle根。

哈希按內(nèi)部字節(jié)順序排列; 其他值都是小端順序托嚣。

block header的消息示例如下:

02000000 ........................... Block version: 2

b6ff0b1b1680a2862a30ca44d346d9e8
910d334beb48ca0c0000000000000000 ... Hash of previous block's header
9d10aa52ee949386ca9385695f04ede2
70dda20810decd12bc9b048aaab31471 ... Merkle root

24d95a54 ........................... Unix time: 1415239972
30c31b18 ........................... Target: 0x1bc330 * 256**(0x18-3)
fe9f0864 ........................... Nonce

Block Versions

  • Version 1:在創(chuàng)世區(qū)塊中被引入(January 2009)
  • Version 2:在Bitcoin Core 0.7.0(2012年9月)中通過軟分叉被引入巩检。如BIP34所述,有效的 version2 block 需要 block height parameter in the coinbase示启。 在BIP34中還描述了拒絕某些塊的規(guī)則; 根據(jù)這些規(guī)則兢哭,Bitcoin Core 0.7.0及更高版本在 block height 為224,412 處開始拒絕在 coinbase 中沒有 version2 的 block height,并在塊高度為224,412 的三周后夫嗓,也就是 227,930 開始拒絕新生成的 version1 的塊迟螺。
  • version3:在Bitcoin Core 0.10.0(2015年2月)中通過軟分叉被引入。當(dāng) fork 達(dá)到全面執(zhí)行(2015年7月)時舍咖,它需要嚴(yán)格按照 BIP66 中所描述的對新塊中的所有ECDSA簽名進(jìn)行DER編碼矩父。 自從Bitcoin Core 0.8.0(2012年2月)以來,不使用嚴(yán)格DER編碼的交易是非標(biāo)準(zhǔn)的谎仲。
  • version4:在 BIP65 中指定并在 Bitcoin Core 0.11.2(2015年11月)中引入的區(qū)塊浙垫,通過軟分叉開始啟動(2015年12月)。這些塊現(xiàn)在支持該BIP中描述的新OP_CHECKLOCKTIMEVERIFY操作碼郑诺。

用于 version2夹姥、3和4 升級的機(jī)制通常稱為IsSuperMajority(),該功能添加到Bitcoin Core 中以管理這些軟分支更改辙诞。有關(guān)此方法的完整說明辙售,請參閱BIP34

Merkle Trees

merkle root 是使用此塊中所有交易的TXID構(gòu)建的飞涂,但首先需要按照共識規(guī)則的要求排列TXID:

  • coinbase 交易的 TXID 總是排在第一位旦部。
  • 此塊中的任何輸入都可以使用同時出現(xiàn)在此塊中的輸出(假設(shè)花費(fèi)是有效的)。但是较店,對應(yīng)于輸出的TXID必須放置在與輸入對應(yīng)的TXID之前的某個點(diǎn)士八。 這可以確保整個區(qū)塊鏈的交易在輸入之前都有與之對應(yīng)的輸出。

如果一個塊只有一個 coinbase 交易梁呈,coinbase TXID將會被用作merkle root 的hash婚度。

如果一個塊只有一個coinbase交易和一個其他交易,那么這兩個交易的TXID按順序排列官卡,連接成64個原始字節(jié)蝗茁,然后SHA256(SHA256())hash在一起最終形成 merkle root。

如果一個塊有三個或更多的交易寻咒,則會形成中間的Merkle樹行哮翘。 TXID按順序排列并配對,從coinbase交易的TXID開始毛秘。 每個對連接在一起作為64個原始字節(jié)和SHA256(SHA256())hash形成第二行hash饭寺。 如果有一個奇數(shù)(非偶數(shù))的TXID,則將最后一個TXID與其自身的副本連接并進(jìn)行hash。 如果第二行中有兩個以上的hash佩研,則重復(fù)該過程以創(chuàng)建第三行(并且柑肴,如有必要,可以進(jìn)一步重復(fù)以創(chuàng)建附加行)旬薯。 一旦獲得一行只有兩個hash值晰骑,這些hash值被連接并哈希來產(chǎn)生merkle root。

上面邏輯有點(diǎn)繞绊序,我們通過一張圖來直觀感受一下:


merlke.png

串聯(lián)時硕舆,TXID和中間hash總是以內(nèi)部字節(jié)順序排列,并且當(dāng)它放入block header時骤公,生成的merkle root也按照內(nèi)部字節(jié)順序排列抚官。

Target nBits

target threshold 是一個256位無符號整數(shù),header hash 必須等于或低于該header 才能成為塊鏈的有效部分阶捆。 然而凌节,header 字段 nBits僅提供32位空間,因此目標(biāo)號碼使用一些稱為“緊湊”的精確格式洒试,其工作方式類似于科學(xué)記數(shù)法的基本256版本:

nBits.png

作為一個 base-256 的數(shù)字倍奢,nBits可以像字節(jié)一樣快速地解析,這與解析10進(jìn)制科學(xué)記數(shù)法中的小數(shù)相同:

serailize.png

盡管 target threshold 應(yīng)該是一個無符號整數(shù)垒棋,但原始 nBits 實(shí)現(xiàn)繼承了已簽名數(shù)據(jù)類的屬性卒煞,如果設(shè)置了有效數(shù)的高位,則target threshold為負(fù)值叼架。 這是無用的 - header hash被視為無符號數(shù)畔裕,因此它永遠(yuǎn)不會等于或低于負(fù)目標(biāo)閾值。 Bitcoin Core以兩種方式處理這個問題:

  1. 在解析nBits時乖订,Bitcoin Core 將負(fù)目標(biāo)閾值轉(zhuǎn)換為零目標(biāo)扮饶,該header hash可以等于(理論上至少)。
  2. 當(dāng)為nBits創(chuàng)建一個值時乍构,Bitcoin Core 會檢查它是否會產(chǎn)生nBits贴届,這會被解釋為負(fù)值; 如果是這樣,它將有效位數(shù)除以256蜡吧,并將指數(shù)增加1以產(chǎn)生具有不同編碼的相同數(shù)字。

難度1占键,允許的最小難度昔善,在mainnet和當(dāng)前testnet上由nBits值0x1d00ffff表示。 Regtest模式使用不同的難度值1-0x207fffff畔乙,uint32_max以下可以編碼的最高值; 這允許在regtest模式下幾乎立即構(gòu)建塊君仆。

Serialized Blocks

根據(jù)當(dāng)前的共識規(guī)則,除非序列化大小小于或等于1 MB,否則塊無效返咱。下面介紹的所有字段均按序列化的大小計算

bytes name 數(shù)據(jù)類型 描述
80 block header block_header block header 部分中描述的格式钥庇。
Varies txn_count compactSize uint 此區(qū)塊中的交易總數(shù),包括coinbase交易咖摹。
Varies txns raw transaction 此塊中的每筆交易都是原始交易格式评姨。交易必須與他們的TXID出現(xiàn)在merkle樹的第一行中相同的順序出現(xiàn)在數(shù)據(jù)流中。

在一個區(qū)塊中的第一筆交易必須是一個coinbase交易萤晴,該交易應(yīng)收集并消費(fèi)本區(qū)塊交易支付的任何交易費(fèi)用吐句。

block height低于6,930,000的所有 block 都有權(quán)獲得新創(chuàng)建的比特幣價值的區(qū)塊補(bǔ)貼,這也應(yīng)該用于coinbase交易店读。 (區(qū)塊補(bǔ)貼從50比特幣開始嗦枢,每210,000塊減半 - 大約每四年一次,截至2017年11月屯断,為12.5比特幣文虏。)

交易費(fèi)和區(qū)塊補(bǔ)貼一起被稱為區(qū)塊獎勵。如果它試圖花費(fèi)比塊獎勵可用的更多價值殖演,則coinbase交易是無效的氧秘。


本文由copernicus 團(tuán)隊(duì) 冉小龍 翻譯,轉(zhuǎn)載無需授權(quán)剃氧!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敏储,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子朋鞍,更是在濱河造成了極大的恐慌已添,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滥酥,死亡現(xiàn)場離奇詭異更舞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)坎吻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門缆蝉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘦真,你說我怎么就攤上這事刊头。” “怎么了诸尽?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵原杂,是天一觀的道長。 經(jīng)常有香客問我您机,道長穿肄,這世上最難降的妖魔是什么年局? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮咸产,結(jié)果婚禮上矢否,老公的妹妹穿的比我還像新娘。我一直安慰自己脑溢,他們只是感情好僵朗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著焚志,像睡著了一般衣迷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酱酬,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天壶谒,我揣著相機(jī)與錄音,去河邊找鬼膳沽。 笑死汗菜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挑社。 我是一名探鬼主播陨界,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼痛阻!你這毒婦竟也來了菌瘪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤阱当,失蹤者是張志新(化名)和其女友劉穎俏扩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弊添,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡录淡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了油坝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫉戚。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖澈圈,靈堂內(nèi)的尸體忽然破棺而出彬檀,到底是詐尸還是另有隱情,我是刑警寧澤瞬女,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布凤覆,位于F島的核電站,受9級特大地震影響拆魏,放射性物質(zhì)發(fā)生泄漏盯桦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一渤刃、第九天 我趴在偏房一處隱蔽的房頂上張望拥峦。 院中可真熱鬧,春花似錦卖子、人聲如沸略号。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玄柠。三九已至,卻和暖如春诫舅,著一層夾襖步出監(jiān)牢的瞬間羽利,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工刊懈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留这弧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓虚汛,卻偏偏與公主長得像匾浪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卷哩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蛋辈,服務(wù)發(fā)現(xiàn),斷路器将谊,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 一冷溶、快速術(shù)語檢索 比特幣地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串...
    不如假如閱讀 15,899評論 4 88
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network瓢娜,根據(jù)使用者...
    保川閱讀 5,946評論 1 13
  • 膨脹罐使用時該注意哪些事項(xiàng)呢挂洛?捷登小編以我司wozi膨脹罐為例為您整理如下: 1.wozi膨脹罐出廠時預(yù)充壓力已設(shè)...
    捷登閱讀 542評論 0 0
  • 是否黑夜只懂得絢爛寂寞 清醒著放逐冰冷每個段落 倒不如天空瞬間花火 用不著揣測感情脈絡(luò) 期待通常隱含錯過 后來沒記...
    曉歌閱讀 164評論 0 0