btcpool之GbtMaker
一、简介
GbtMaker全称getblocktemplate maker,它通过getblocktemplate rpc接口从bitcoind获得挖矿所需数据,然后把该数据发送到kafka消息队列。
二、btc块头结构
GbtMaker从bitcoind获取的数据包含两部分,一是用于生成块头的数据,二是待打包的交易数据。所以要先了解比特币块头结构:
三、getblocktemplate
getblocktemplate rpc返回数据包括以下内容:
version:(数值)首选区块版本号
previousblockhash:(字符串)当前最新区块hash
height:(数值)下一区块高度
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
四、bitcoind ZMQ
bitcoind支持ZMQ通知监听者有新块或新交易到达,只需要在启动时配置相应选项(-zmqpubhashblock及-zmqpubhashtx)即可。监听者接收到bitcoind的新块通知后,立即调用getblocktemplate rpc接口获取新数据,然后将其发送到kafka消息队列。另外GbtMaker也会每隔段时间通过getblocktemplate rpc接口从bitcoind获取数据,然后将其发送到kafka消息队列。
五、rawgbt消息
GbtMaker从bitcoind获取挖矿数据后,打包成rawgbt消息发送到kafka消息队列。rawgbt消息包含三部分:
1、当前时间戳
2、getblocktemplate返回数据的hash,称其为gbthash
3、getblocktemplate返回数据的base64编码