Mining-Theory

比特幣(和其他加密貨幣)隨機數循環

  • March 7, 2021

我最近開始關注加密市場上發生的事情,並且作為開發人員很長一段時間,我決定看看我們在公共訪問中擁有的軟體。

所以我在這裡向所有加密專家提出一個問題:從比特幣協議規範看來,比特幣將接受任何滿足目標(塊)比特條件的隨機數。我見過的每個公開的礦工都在 nonce1 和 nonce2 上使用順序循環。實際問題:為什麼人們在每個執行緒中為 nonce 實現 +1,而不是,假設有 2 個執行緒從一開始就 +1;第二個是從隨機數間隔的末尾開始計算-1?

以我的拙見,如果您在同一間隔上執行多個執行緒會更快……或者,在完美的世界中,將整個間隔分成 N 個子間隔,讓每個執行緒都做自己的事情。從數學的角度來看,使用這種方法,我們似乎會獲得更高的命中“黃金隨機數”的機率,而不是在整個區間內 +1。我在這裡錯了嗎?

說了這麼多,我已經下載了區塊鏈並執行了幾個測試來查看 uint32_t 間隔中的隨機數分佈。結果並沒有讓我感到驚訝……我有非常均勻的隨機數分佈,例如:奇數隨機數:49.997 偶數隨機數:50.003

將 uint32_t 拆分為 1024 個相同的間隔,並查看現有區塊鏈中有多少隨機數位於每個間隔中。結果是一樣的:均勻分佈。

再次,為什麼它在礦工循環中是+1?即使(+3),(-2)(理論上)與其他人(+1)相比,(理論上)找到黃金隨機數的機會(更快)更好。

獲勝隨機數的分佈向 0 傾斜,因為這是一種選擇效應:大多數人從 0 開始搜尋隨機數,因此首先找到較低的隨機數,即使可能還有更高的隨機數可以產生獲勝塊: 獲勝的 nonce 值分佈

這很好地說明了隨機數的分佈是均勻的: 有效隨機數和散列的直方圖

來源:https ://en.bitcoin.it/wiki/Distribution_of_nonces_and_hashes

因此,礦工循環中的 +1 是更改 nonce 的最簡單方法,它之所以有效,是因為有效的 nonce 分佈是均勻的。ASIC 通常以非常不同的方式處理隨機數。此外,ASIC 可以非常快速地掃描整個 nonce 範圍,因此從哪裡開始尋找有效的 nonce 並不重要。

引用自:https://bitcoin.stackexchange.com/questions/36860