Mining-Technical-Details

比特幣挖礦算法

  • April 8, 2021

我正在查看一些範例探勘算法和一些範常式式碼,有些東西我並沒有真正理解。他在簡單的比特幣探勘算法中說,最簡單的礦工會這樣工作:

The simplest miner would work like this:

    1. Request a new [Getwork][1] from a given pool/bitcoind with specified credentials
    2. For nonce=0;nonce<0xFFFFFFFF;nonce++
    - Set Getwork Data nonce
    - SHA-256 hash the Getwork Data ([block header][2])
    - Check if hash result is smaller than Getwork Target, if so, submit a share
    - If more than 1 second passed since you received Getwork, stop the loop
    3. GOTO: 1

我不明白的是第 2 步,第 4 部分。讓我們考慮上述腳本通過 uart 埠連接到 FPGA。我不會等到 FPGA 真正找到一個有效的 nonce 並通過 UART 線送出 none 嗎?為什麼我會在 1 秒後退出循環,然後再次完成整個過程。這對我來說沒有意義,因為 fpga 只有幾秒鐘來增加給定工作的隨機數,然後它會繼續下一個工作?這甚至是多麼現實,因為即使再次送出相同的工作,它也會經歷相同的循環,最終將無濟於事。我在這裡犯了什麼錯誤?我正在談論的範常式式碼:

<https://github.com/progranism/Open-Source-FPGA-Bitcoin-Miner/blob/master/projects/Verilog_Xilinx_Port/sources/software/miner.py>做同樣的事情。它說golden.wait(timeout) 而不是僅僅呼叫golden.wait() 並阻塞直到找到一個nonce

被散列的數據不斷更新。區塊頭包含一個時間欄位,每隔幾秒更新一次。如果它沒有超時並重置(獲取新工作),則該算法將在一個陳舊的標頭上工作。

“生成時,你會不斷地對塊頭進行雜湊處理。當你在處理它時,塊也會偶爾更新。” <https://en.bitcoin.it/wiki/Block_hashing_algorithm>

完全不知道這是如何工作的,我會假設:

  • 其他人得到同樣的工作
  • 你咀嚼數據的時間越長,其他人已經解決問題的可能性就越高
  • 即使這在每次迭代時都在網路上等待,它也會在獲得工作後啟動 1 秒計時器

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