1、簡介數組
GbtMaker全稱getblocktemplate maker,它經過getblocktemplate rpc接口從bitcoind得到挖礦所需數據,而後把該數據發送到kafka消息隊列。編碼
2、btc塊頭結構blog
GbtMaker從bitcoind獲取的數據包含兩部分,一是用於生成塊頭的數據,二是待打包的交易數據。因此要先了解比特幣塊頭結構:接口
3、getblocktemplate隊列
getblocktemplate rpc返回數據包括如下內容:字符串
version:(數值)首選區塊版本號rpc
previousblockhash:(字符串)當前最新區塊hashget
height:(數值)下一區塊高度kafka
coinbasevalue:(數值)區塊獎勵+礦工費消息隊列
bits:(字符串)下一區塊的壓縮目標
target:(字符串)下一區塊目標,可由bits計算出來
mintime:(數值)下一區塊時間的最小時間戳
curtime:(數值)當前時間戳
transactions:(數組)待打包到下一個區塊的非coinbase交易,交易結構:
data:(字符串)16進制編碼的交易數據
txid:(字符串)小端字節序16進制編碼的交易id
hash:(字符串)小端字節序16進制編碼的hash,包括witness數據
depends:(數組)。。。
fee:(數值)交易費
sigops:(數值)total SigOps cost, as counted for purposes of block limits
weight:(數值)total transaction weight, as counted for purposes of block limits
4、bitcoind ZMQ
bitcoind支持ZMQ通知監聽者有新塊或新交易到達,只須要在啓動時配置相應選項(-zmqpubhashblock及-zmqpubhashtx)便可。監聽者接收到bitcoind的新塊通知後,當即調用getblocktemplate rpc接口獲取新數據,而後將其發送到kafka消息隊列。另外GbtMaker也會每隔段時間經過getblocktemplate rpc接口從bitcoind獲取數據,而後將其發送到kafka消息隊列。
5、rawgbt消息
GbtMaker從bitcoind獲取挖礦數據後,打包成rawgbt消息發送到kafka消息隊列。rawgbt消息包含三部分:
一、當前時間戳
二、getblocktemplate返回數據的hash,稱其爲gbthash
三、getblocktemplate返回數據的base64編碼