在聯合挖礦中,什麼是 pdiff、bdiff 和 ldiff?
在聯合挖礦中,似乎存在三個不同的使用難度術語。顯然,Stratum 協議使用
bdiff
,BTCGuild 使用pdiff
,並且在這個 bitcointalk執行緒Ldiff
中提到的各種 Scrypt 池中很常見。
pdiff
,bdiff
, 和的含義是什麼ldiff
?它們有什麼不同?
pdiff、bdiff 和 ldiff 的含義是什麼?
這些數字是網路的目前難度。
bdiff
是整個比特幣網路的目標難度。ldiff
是整個萊特幣網路的目標難度。pdiff
是您的游泳池的目標難度。您可能知道,難度是衡量找到低於給定目標值的雜湊的難度。
它們有什麼不同?
bdiff 1 == pdiff 1 == ldiff 1,還是它們之間有什麼關係?
**TL;DR:**不。這違背了遇到多重困難的目的。
這是一個多部分的答案;我會嘗試以一種有意義的方式來劃分它。
比特幣
困難
比特幣網路具有全球區塊難度(
bdiff
)。有效塊的雜湊值必須小於或等於此目標。礦池也有一個特定於礦池的共享難度,設置共享的下限(pdiff
通常為 1)。計算
是如何
bdiff
計算的?
bdiff
是基於已知散列的近似值,其中前 32 位為零,其餘為 1。難度 = 難度_1_target / current_target
(目標是 256 位數字)
難度_1_target 對於衡量難度的各種方式可能有所不同。傳統上,它表示一個散列,其中前 32 位為 0,其餘為 1(這稱為“池難度”或“pdiff”)。比特幣協議將目標表示為精度有限的自定義浮點類型;結果,比特幣客戶通常以此為基礎來估算難度(這被稱為“bdiff”)。
該值如何儲存?
每個塊為其實際的十六進制目標儲存一個打包表示[…]。目標可以通過預定義的公式從中得出。例如,如果塊中的打包目標是
0x1b0404cb
,則十六進制目標是0x0404cb * 2**(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000
請注意,該
0x0404cb
值是這種格式的有符號值。該欄位的最大合法值是0x7fffff
,而最小的是0x008000
。要獲得更大的值,您必須將其向下移動一個完整字節的正有效值。如何計算(估計)
bdiff
?假設您的值為 1 (
0x1d00ffff
)0x00ffff * 2**(8*(0x1d - 3)) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
那將是
0x00000000FFFF00000000000000000000000000000000000000000000000000000 / 0x00000000000404CB0000000000000000000000000000000000000000000000000 = 16307.420938523983
萊特幣
困難
因為萊特幣是基於比特幣
ldiff
計算的bdiff
。它是相對於已知散列(256 位數字,其中前 32 位為零,其餘為 1)的近似值。計算
ldiff
以同樣的方式計算bdiff
是。它們都具有最大值(基本上)和最小值 1/4096
因為萊特幣植根於比特幣,這也意味著
ldiff
它是一個近似值,而不是一個精確值。游泳池
困難
pdiff
是相對於所討論的加密貨幣而言的。在比特幣和萊特幣礦池的情況下,它代表的是同一件事;但是,例如,在 Namecoin 池中,難度可能不是 1,或者可能會以不同的方式計算。這令人困惑,因為有問題的 256 位數字是0x1d00ffff
. 該號碼最初沒有被稱為任何東西。但是,一旦開始聯合挖礦,它就通俗地稱為pdiff
. 但它在聯合採礦之前就已經存在了。池子正好把它作為他們的目標難度,因為bdiff
已經是一個東西,所以名字pdiff
被換成了數字0x1d00ffff
。請注意,礦池通常使用非截斷目標,並且通常使用 1 的難度。這意味著即使在相同的加密貨幣中,實際上也沒有明確的定義
pdiff
;但是,我知道沒有與這些規則相矛盾的池/池軟體,因為它們是可取的。請記住,任何人都可以讓他的游泳池做任何他想做的事。
pdiff
是相對的。計算
假設這是一個標準池,計算與 基本相同
bdiff
,但有一個例外:假設目標值仍然是
0x1d00ffff
。維基說池通常使用“非截斷目標”所以,而不是0x00000000FFFF00000000000000000000000000000000000000000000000000000
我們得到
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
其中,當計算時,產生
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF / 0x00000000000404CB0000000000000000000000000000000000000000000000000 = 16307.669773817162