Sha256

為什麼塊頭是 80 字節,而不是 128 字節(= 兩個 SHA-256 塊)?

  • June 14, 2015

根據比特幣開發者參考,區塊頭總共有 80 個字節:

字節名稱
4個版本
32 前一個區塊頭雜湊
32 默克爾根雜湊
4次
4 大使

據我了解,中間狀態(第一個 SHA 塊)包含 64 個字節的塊頭(特別是哪些欄位我不知道,但我知道它不包含隨機數),第二個 SHA 塊包含其餘部分,只有 80-64 = 16 個字節。這是否意味著第二個 SHA 塊填充了 64 - 16 = 48 個字節?如果是這樣,為什麼不讓 nonce 欄位,例如,48 - 4 = 42 字節更大(即 52 字節而不是 4 字節)?

那樣的話,extranonce不必在生成事務中,從而加快雜湊,不是嗎?

本來可以這樣做,但代價是增加了儲存和發送塊頭所需的空間量。似乎區塊頭儲存是 Satoshi 的一個大問題,(白皮書中甚至有一節關於它)但事實證明它並不重要。

這是否意味著第二個 SHA 塊填充了 64 - 16 = 48 個字節?

是的,(來源)但你的推理是有缺陷的。即使 nonce 空間太大以至於它擴展到另一個塊,那也只是意味著中間狀態將代表除最後一個塊之外的所有塊(密碼學意義上的塊,而不是比特幣意義上的塊)之後的狀態。

此外,如果塊頭正好是 128 字節,則填充會將其擴展到第三個塊。在此之前,您只有 119 個字節。

那樣的話,extranonce 不必在生成事務中,從而加快雜湊,不是嗎?

並不真地。您可以在增加額外隨機數之前檢查 2^32 個雜湊值,之後您只需要執行十個左右的雜湊值即可重新開始挖礦。

通常,在現代 ASIC 中,即使是這部分也已被解除安裝。ASIC 中將有某種小型處理器,例如 ARM 核心,它將塊模板作為輸入並輸出塊頭供 SHA256 核心處理。

因此,成本不是速度,而是複雜性。

就像比特幣中的許多事情一樣,我認為這是一個在當時是有意義的技術決定,但老化得不好。

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