Blockchain

乙太坊白皮書 wrt 比特幣中的 2^187 目標是什麼?

  • March 3, 2019

報紙上說

精確的條件是每個塊的雙 SHA256 雜湊,被視為 256 位數字,必須小於動態調整的目標,在撰寫本文時約為 2^187

我的印像是 PoW 涉及在雜湊中獲取一些前導零。

有人可以解釋一下嗎?

人們常說探勘的目標是得到一定數量的“前導零”,因為這很容易形象化,但更準確的說法是,目標是找​​到x這樣的,int(SHA256(SHA256(x))) < T對於某個目標Tint( )意味著我們正在解釋256 位散列作為 256 位無符號整數。

這幾乎等同於“前導零”公式。如果您考慮兩個十六進制的 32 字節序列,那麼當解釋為整數時,具有更多前導零的序列是較小的數字。

例如,最近的一個 BTC 區塊有雜湊

0x00000000000000000003b2cd31ba3f0c99f96aee5cd7d7d0dace2e86f0afde6d

哪個小於目標

0x000000000000000000365a170000000200000000000000000000000000000000

該塊恰好在前面有更多的零,但散列為

0x000000000000000000265a170000000200000000000000000000000000000000

本來也可以,因為它比目標小,儘管有同樣多的零。

乙太坊使用了一個更複雜的 PoW 函式,但想法是一樣的:找到一些輸入來最小化某個單向函式的結果。不同之處在於,乙太坊不是針對小塊雜湊,而是使用一個稱為“混合雜湊”的欄位" 與 nonce 一起用作工作證明。這導致塊雜湊看起來是隨機的,而不是 BTC 都有許多前導零。

在比特幣中,SHA256(SHA256(x)) 稱為 Hash256,它產生 256 位輸出

  • 在默克爾樹中散列塊
  • 連接交易輸出和輸入
  • 塊頭的雜湊(以及工作證明和前一個塊的連結)

這與在整個協議中保持一致的128 位安全性是連續的。


從此答案中,您可以看到為什麼存在動態調整目標以及該行的原因:

礦業

探勘算法定義如下:

def mine(full_size, dataset, header, difficulty):
    target = zpad(encode_int(2**256 // difficulty), 64)[::-1]
    from random import randint
    nonce = randint(0, 2**64)
    while hashimoto_full(full_size, dataset, header, nonce) > target:
        nonce = (nonce + 1) % 2**64
    return nonce

乙太坊區塊也沒有前導零。相反,乙太坊有一個類似於比特幣的塊雜湊的目標。

引用自:https://ethereum.stackexchange.com/questions/54537