Merkle-Tree

對默克爾樹算法感到困惑

  • March 22, 2014

從頁面<https://en.bitcoin.it/wiki/Protocol_specification>,我了解 merkle 樹的工作方式類似於

默克爾([a,b,c,d]) = h( h(a,b), h(c,d) )

但是當我執行層協議<http://mining.bitcoin.cz/stratum-mining/>時,它的工作原理是這樣的

默克爾([a,b,c,d]) = h(h(h(a,b),c),d)

這是程式碼

def build_merkle_root(self, merkle_branch, coinbase_hash_bin):
   merkle_root = coinbase_hash_bin
   for h in self.merkle_branch:
       merkle_root = doublesha(merkle_root + binascii.unhexlify(h))
   return binascii.hexlify(merkle_root)

我想念什麼嗎?

Stratum 伺服器在響應中提供了一個部分散列的 merkle 分支……礦工需要為此提供“A”(生成/coinbase 交易)與“第一個”交易 (B) 連接。數組的其餘元素是默克爾樹的“預計算”部分。如 slush 的 bitcoin.cz 網站 ( <http://mining.bitcoin.cz/stratum-mining> ) 所示,“merkle_branch - 雜湊列表,將用於計算 merkle 根。這不是所有交易的列表,它只包含默克爾樹算法步驟的準備雜湊。”

Stratum 伺服器為 merkle 分支返回的項目本質上是 [b,h(c,d)…] 預先計算的,以減少稍後完成 merkle 根所需的計算次數。

引用自:https://bitcoin.stackexchange.com/questions/19588