Blockchain
乙太坊白皮書 wrt 比特幣中的 2^187 目標是什麼?
報紙上說
精確的條件是每個塊的雙 SHA256 雜湊,被視為 256 位數字,必須小於動態調整的目標,在撰寫本文時約為 2^187
我的印像是 PoW 涉及在雜湊中獲取一些前導零。
有人可以解釋一下嗎?
人們常說探勘的目標是得到一定數量的“前導零”,因為這很容易形象化,但更準確的說法是,目標是找到
x
這樣的,int(SHA256(SHA256(x))) < T
對於某個目標T
,int( )
意味著我們正在解釋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
乙太坊區塊也沒有前導零。相反,乙太坊有一個類似於比特幣的塊雜湊的目標。