Bitcoin-Core
真實的挖礦程式碼如何處理難度?
我最近想出了
"how to mine bitcoin using python"
or"how to mine bitcoin using golang"
,因為我一直在觀察所有這些原始碼,我不僅感到困惑,而且還有一些問題。一些使用 python 的開發人員一直說,
difficulty calculates the leading 0s on the hash
在使用區塊鏈瀏覽器後,我認為這不是真的,因為目前的難度太高,無法leading 0s
在確定“我們挖了一個塊”的雜湊上。難度的比特幣維基也只是簡單地解釋了它。那麼它是如何治療的呢?挖礦軟體對雜湊算法有難度嗎?
困難實際上是人類可讀的表達方式。在底層,比特幣協議使用目標. 目標是一個自定義的 4 字節浮點值,編碼一個指數和一個尾數,該尾數表示用作有效塊的塊雜湊上限的數字。
在找到困難期的最後一個區塊後,目標每 2016 個區塊更新一次。它取決於難度週期的第一個和最後一個區塊的時間戳以及之前的目標:
new_target = old_target × (t_last - t_first)/14 days
每個看到這兩個塊的全節點都可以計算新的目標。
礦工將未經確認的交易組裝成區塊模板,創建 coinbase 交易並填充剩餘的標頭欄位以生成候選區塊,通過散列其標頭並將候選區塊的雜湊值與目標進行比較以確定是否已找到區塊來測試每個候選區塊。從高度 693,504 開始的目前目標
0x17136aa2
是0x000000000000000000136aa20000000000000000000000000000000000000000
. 如果我數對了,這個十六進制數將轉換為具有 75 個前導零的二進制數。在目前大約 109.7 EH/s 的雜湊率下,網路將嘗試大約 6.6×10 22個候選塊,直到找到一個塊。