Development
如何從“getblocktemplate”請求中散列數據
我一直在閱讀很多文章,試圖了解如何對從返回的數據進行雜湊處理
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 原始碼(其中包括一個使用範例)。