Merkle-Tree
對默克爾樹算法感到困惑
從頁面<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 根所需的計算次數。