Blockchain
這個 2^32 是從哪裡來的?
幾個月前,我正在研究計算幾種加密貨幣的挖礦收入。當試圖計算 BTC 收入時,我發現這個值是 1/2^32,它被描述為沿著找到或解決一個塊的機率線的某個地方。我在某個網站上發現了這個,談論找到我認為投資百科的新區塊的可能性。
但是這個 2^32 是如何找到的,隨著時間的推移它會發生多大的變化?
在比特幣挖礦中,有幾個相關的術語:
- “目標”是給定塊候選的最大允許散列值(即,如果塊的散列最終低於或等於目標,則該塊是工作證明有效的)。在撰寫本文時(塊 737759),目標是
862674725460762741916416231468109512880228678412271616
十進製或0x901ba0000000000000000000000000000000000000000
十六進制。- “最大目標”是目標可以達到的最大值。有各種規則來管理各種塊的目標。它每 2016 個區塊更新一次,具體取決於這些區塊被開采的時間。如果該時間超過 2 週,則目標會上升(使挖礦更容易)。如果該時間少於 2 週,則目標會下降(使採礦變得更加困難)。目標的上下變化不能超過 4 倍。最後,目標永遠不能超過*(2 16 -1)2 208*,即
26959535291011309493156476344723991336010898738574164086137773096960
十進製或0xffff0000000000000000000000000000000000000000000000000000
十六進制。我們不確切知道這個值是如何選擇的,但它與目標如何以塊的形式編碼有關。它是目標的絕對上限;如果調整規則會使其更高,則使用此值。- 塊的“功”是2 256與目標之間的比率。它對應於礦工需要為候選塊進行的雜湊嘗試的預期數量,並且是任何雜湊嘗試有效的機率的倒數。如果目標有最大值,它的功等於2 256 / ((2 16 -1)2 208 ) = 2 48 / (2 16 - 1) ≈ 2 32 + 2 16 + 1。在確定要接受多個有效候選者中的哪條鏈時,比特幣節點會選擇累積工作量最高的一條(其所有區塊中所有工作值的總和)。目前的工作值(每塊)是
134224506433140884946014
。- 一個塊的“難度”是最大目標與其目標之間的比率。這是一個僅用於人類消費的值,在協議級別不存在。由於定義的方式,難度始終至少為 1。目前的難度約為
31251101365711.12
.有了所有這些定義,很容易看出工作量和塊的難度之間存在固定的比例。這個比例正好是最大目標的功,或者難度的功 1: 2 48 / (2 16 - 1) ≈
4295032833.000015
,略大於2 32 + 2 16 + 1。換句話說,任何雜湊嘗試導致有效塊的機率大約是難度的1 比*2 32倍。*也許這就是你想知道的數字。如果是這樣,答案很簡單,這個數字是難度定義的副作用,永遠不會改變。它與挖礦的實際運作方式無關,因為難度純粹是人類的便利;實際協議適用於目標值。
其他系統可以隨心所欲地定義難度,但這將不在此處討論。