關於 Stratum 池的 Merkle 根雜湊的問題
這些問題的部分靈感來自這篇關於池操作員的 Merkle root hashing 的文章。我的理解是,對於 Stratum 挖礦來說,礦池唯一要做的散列就是生成 Merkle 分支(每個區塊必須執行一次,並且對於礦池中的所有礦工都一樣?)。我的問題是:
- 在終端設備(礦工/ASIC)方面,(我相信)礦工必須在更改 extranonce2 欄位後重新計算 Merkle 根。如果我有多個礦工連接到一個連接到採礦池的“採礦代理”,我假設每個終端設備都會為更改後的 coinbase 交易而不是採礦代理生成自己的 Merkle 根?
- 如果是計算 Merkle 根的終端設備,是在 ASIC 本身上完成還是解除安裝?我連結的文章表明它已解除安裝,但為什麼 - 因為這不會更慢?下一個 Merkle 根是否在 ASIC 執行前一個標頭的散列時預先計算?
- 是否有人(大致)了解所執行的總 SHA256 雜湊的哪一部分來自 Merkle 根計算(不是 PoW 雜湊)?
任何幫助/澄清表示讚賞。
我連結的文章表明它已解除安裝,但為什麼 - 因為這不會更慢?下一個 Merkle 根是否在 ASIC 執行前一個標頭的散列時預先計算?
它並沒有明顯變慢,因為 merkle 根計算構成的雜湊計算量可以忽略不計。實施更快的默克爾根計算可能根本不值得付出額外的努力。請記住,ASIC 的雜湊晶片可能不僅僅是愚蠢的 SHA256d 晶片。他們可能會實施其他優化(例如 ASICBoost),或者只是捆綁更多的操作而不僅僅是 SHA256d,這樣就不可能重新利用它們來進行 merkle 根計算。
是否有人(大致)了解所執行的總 SHA256 雜湊的哪一部分來自 Merkle 根計算(不是 PoW 雜湊)?
大約為 0。merkle 根計算的雜湊數與 PoW 雜湊數相比非常小,基本上為 0。
現代區塊中有大約 3000 筆交易。給定
n
二叉樹中的葉子,總共有2n - 1
節點。當應用於 merkle 樹時,這意味著存在2n - 1
雜湊。所以對於一個完整的塊,為了計算默克爾根,大約需要 6000 個雜湊值。現在考慮單個標頭的隨機數範圍有 4294967295 個可能的值,因此要為 PoW 計算 4294967295 個雜湊值。這意味著為單個隨機數範圍計算的雜湊中只有 0.001% 用於 merkle 根。
此外,絕大多數 merkle 根雜湊是由池伺服器完成的。礦工只需要做其中的一小部分 - 只是涉及 coinbase 交易的分支。為了使數學更容易,假設我們的塊有 4096 筆交易,所以默克爾樹有 12 層。這意味著單個礦工在用他們的 extranonce 修改 coinbase 後只需要計算 12 個雜湊,而不是 8192 個雜湊。與 PoW 本身的雜湊總數相比,這可以忽略不計,基本上是 0。