一、简介

  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. SQL Server中文排序混乱

    在sql语句中指定了含有中文的列进行排序,但排序结果看起来毫无规则,并不是按照拼音进行排序的检查了DB的Collation后,发现是SQL_Latin1_General_CP1_CI_AS解决方法: ...

  2. git用代码库文件完全覆盖本地/git不能提交jar的设置

    用代码库中的文件完全覆盖本地工作版本. 方法如下: git reset --hard git pull 操作后 本地该目录下所有修改都会被删除!!! 谨慎操作! 项目目录下 文件:.gitignore ...

  3. Python学习笔记四

    一.装饰器 1.知识储备 函数对象 函数可以被引用 函数可以当参数传递 返回值可以是函数 可以当作容器的元素 def func1(): print (666) def func2(): print ( ...

  4. php获取两个时间戳之间相隔多少天多少小时多少分多少秒

    /** * 返回两个时间的相距时间,*年*月*日*时*分*秒 * @param int $one_time 时间一 * @param int $two_time 时间二 * @param int $r ...

  5. ABP使用Miniprofiler监测EF

    在上篇教程中,我们在WebApi项目中集成了Miniprofiler,本篇文章中,将继续集成Miniprofiler EF6,以实时监测分析EF的执行语句.执行效率等.Miniprofiler会针对E ...

  6. Spring注解式事务解析

    #Spring注解式事务解析 增加一个Advisor 首先往Spring容器新增一个Advisor,BeanFactoryTransactionAttributeSourceAdvisor,它包含了T ...

  7. Codeforces 750E New Year and Old Subsequence 线段树 + dp (看题解)

    New Year and Old Subsequence 第一感觉是离线之后分治求dp, 但是感觉如果要把左边的dp值和右边的dp值合起来, 感觉很麻烦而且时间复杂度不怎么对.. 然后就gun取看题解 ...

  8. stm32位操作详解

    stm32位操作详解 STM32位操作原理 思想:把一个比特分成32位,每位都分配一个地址,这样就有32个地址,通过地址直接访问. 位操作基础 位运算 位运算的运算分量只能是整型或字符型数据,位运算把 ...

  9. WRITE T AFTER ADVANCING 2 LINES

    WRITE T AFTER ADVANCING 2 LINES 意思是“在前进两行之后打印T记录内容”  (ADVANCING 和 LINE 字可省略) WRITE T BEFORE ADVANCIN ...

  10. C#-导入Excel 内容到 DataTable中

    C#-导入Excel 内容到 DataTable中 直接传入文件路径,支持所有Excel格式. 缺点:如果数据量庞大会很占内存. public static DataTable ImportExcel ...