Development

如何從“getblocktemplate”請求中散列數據

  • April 24, 2016

我一直在閱讀很多文章,試圖了解如何對從返回的數據進行雜湊處理getwork;但我完全忽略了getblocktemplate

我只是想了解如何將下面的所有數據放在一起以生成雜湊,以形成有效的塊(使用各種隨機數)。

抱歉,如果這已經得到回答。我知道有很多關於如何組合塊頭和使用中間狀態等的文章。我理解的大部分內容;但它的數據組成卻有getblocktemplate很大不同,真的讓我失望。

如果有人願意解釋整個散列過程(從採礦的角度),我將非常感激。一個程序化的解釋將是理想的,因為我正在嘗試製作我自己的挖礦客戶端。

{
   "result":{
       "version":2,
       "previousblockhash":"00000000000000075f2f454573766ffae69fe41d6c7ccfcabbf8588fcd80ed52",
       "transactions":[
                 {     
                       "data":"0100000001cba672d0bfdbcc441d171ef0723a191bf050932c6f8adc8a05b0cac2d1eb022f010000006c493046022100a23472410d8fd7eabf5c739bdbee5b6151ff31e10d5cb2b52abeebd5e9c06977022100c2cdde5c632eaaa1029dff2640158aaf9aab73fa021ed4a48b52b33ba416351801210212ee0e9c79a72d88db7af3fed18ae2b7ca48eaed995d9293ae0f94967a70cdf6ffffffff02905f0100000000001976a91482db4e03886ee1225fefaac3ee4f6738eb50df9188ac00f8a093000000001976a914c94f5142dd7e35f5645735788d0fe1343baf146288ac00000000",
                       "hash":"7c90a5087ac4d5b9361d47655812c89b4ad0dee6ecd5e08814d00ce7385aa317",
                       "depends":[],
                       "fee":10000,
                       "sigops":2
                 },
                 ...
           ],
       "coinbaseaux":{
           "flags":"062f503253482f"
       },
       "coinbasevalue":2501100000,
       "target":"0000000000000026222200000000000000000000000000000000000000000000",
       "mintime":1379549850,
       "mutable":[
           "time",
           "transactions",
           "prevblock"
       ],
       "noncerange":"00000000ffffffff",
       "sigoplimit":20000,
       "sizelimit":1000000,
       "curtime":1379553872,
       "bits":"19262222",
       "height":258736
   },
   "error":null,
   "id":"curltest"
}

wiki 有一個非常好的解釋,帶有一個 python 執行,可以將您從 GBT 輸出帶到共享送出。您還可以查看 Luke-Jr 的“gmp-proxy”中的一些實現,它將 GBT 響應轉換為getwork兼容的介面。

<https://en.bitcoin.it/wiki/Getblocktemplate>

<https://gitlab.com/bitcoin/eloipool/blob/master/gmp-proxy.py>

您可能想查看 BIP 22 和 23,以及 libblkmaker 原始碼(其中包括一個使用範例)。

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