一、简介

  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编码

  

btcpool之GbtMaker的更多相关文章

  1. btcpool之总架构

    一.架构图 二.模块划分 整个btcpool分成GbtMaker.BlockMaker.JobMaker.StratumServer.PoolWatcher.statshttpd.sharelogge ...

  2. btcpool之BlockMaker

    一.简介 BlockServer将StratumServer发送的solvedshare数据(块头和coinbase交易)与GbtMaker发送的rawgbt数据(其他交易)一起组装成一个块,然后通过 ...

  3. btcpool之StratumServer

    一.简介 StratumServer(简称sserver)接收JobMaker发送的stratumjob消息,从http api获取用户列表,对外部矿机提供服务. 二.处理stratumjob消息 s ...

  4. btcpool之Stratum协议

    一.简介 矿机(或挖矿软件)与矿池之间通过stratum协议通讯,它包括订阅.授权.下发难度.下发任务.提交share五种消息. 二.订阅(mining.subscribe) 矿机启动后,先和矿池建立 ...

  5. btcpool之JobMaker

    一.简介 JobMaker从kafka消息队列接收rawgbt消息,然后解码该消息中的gbt数据,生成Job,发送到kafka消息队列. 二.StratumJob结构 StratumJob结构是Job ...

随机推荐

  1. 2、使用rpm包安装grafana

    Grafana最新版本4.3.1安装从官网下载相关的rpm包 http://docs.grafana.org/installation/rpm/ 1.下载二进制包,安装 [root@localhost ...

  2. JAVA 动态代理原理和实现

    在 Java 中动态代理和代理都很常见,几乎是所有主流框架都用到过的知识.在面试中也是经常被提到的话题,于是便总结了本文. Java动态代理的基本原理为:被代理对象需要实现某个接口(这是前提),代理对 ...

  3. Punycode

    Punycode是一个根据RFC 3492标准而制定的编码系统,主要用于把域名从地方语言所采用的Unicode编码转换成为可用于DNS系统的编码 “中文域名”不被标准的解析服务器支持,需转化为Puny ...

  4. matplotlib figure图像-【老鱼学matplotlib】

    如果我们想要显示多个图像,有点类似多窗口显示图像这个概念,则就会用到plt.figure() 直接上例子: import numpy as np import pandas as pd import ...

  5. 禁用大陆ip段

    https://www.ip2location.com/free/visitor-blocker 有 .htaccess web.config等 以iis为例 打开C:\Windows\System3 ...

  6. POJ 2391 Ombrophobic Bovines (二分答案+floyd+最大流)

    <题目链接> 题目大意: 给定一个有$n$个顶点和$m$条边的无向图,点$i$ 处有$A_i$头牛,点$i$ 处的牛棚能容纳$B_i$头牛,每条边有一个时间花费$t_i$(表示从一个端点走 ...

  7. BZOJ.4598.[SDOI2016]模式字符串(点分治 Hash)

    LOJ BZOJ 洛谷 点分治.考虑如何计算过\(rt\)的答案. 记\(pre[i]\)表示(之前的)子树内循环匹配了\(S\)的前缀\(i\)的路径有多少,\(suf[i]\)表示(之前的)子树内 ...

  8. 英语口语练习系列-C36-城市-谈论活动-登高

    词汇-城市 city your favorite city a place you would like to visit metropolis capital landscape enchantin ...

  9. css 制作菜单

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  10. python学习:缩进

    缩进 一要求: 官方建议打四个空格.tab键不建议使用,放到其他操作系统容易出现混乱.(打四个空格太费劲) 二实现: 简便方法:每按一下tab键自动换成四个空格.notepad++ 设置里首选项-制表 ...