一、简介

  JobMaker从kafka消息队列接收rawgbt消息,然后解码该消息中的gbt数据,生成Job,发送到kafka消息队列。

二、StratumJob结构

  StratumJob结构是JobMaker的核心数据结构,其字段如下:

三、coinbase交易

  The first transaction in a block, called the coinbase transaction, must have exactly one input, called a coinbase. The coinbase input currently has the following format.

  忽略隔离见证,coinbase交易只有一个输出,其结构如下:

  其中value为gbt数据中coinbasevalue。

四、生成Job

  JobMaker从kafka接收到rawgbt消息(包含时间、gbthash及gbt数据三部分)后,先判断该消息是否过期(超过1分钟),若该消息已经过期,则忽略该消息。然后解码该消息的gbt数据部分。若该gbt对应的块高度小于最近一次的Job的块高度,则不进行处理。若该gbt对应的块高度等于最近一次的Job的块高度且最近一次的Job不是空块Job,则也不进行处理。否则用该gbt数据来生成StratumJob,生成流程如下:

1、计算生成gbthash(其实rawgbt消息中已包含gbthash,但没保存);

2、生成64位jobId(高32位为当前时间戳,接下来24位取gbthash中的3字节,低8位为JobMaker服务器id);

3、从gbt数据中获取previousblockhash、height、version、bits、curtime、mintime、coinbasevalue、default_witness_commitment等数据;

4、用bits生成networkTarget(其实gbt数据中包含了target);

5、将prevHash转换成小端字节序;

6、解码gbt数据中的transactions,并生成merkle branch哈希数组(用于快速生成block header的merkle root);

7、生成coinbase input:

  a)由于coinbase input没有用到UTXO,所以hash为32字节0,index为0xffffffff(即-1);

  b)将块高度(长度+实际高度,由于当前块的高度用3字节就能表示,所以当前长度为3)、当前时间戳(长度4+时间戳小端字节序)、coinbase info(一般是矿池信息,可在配置文件中配置)、12字节0xEE占位符(给extraNonce占位)写到CScript,然后由该CScript生成coinbase input中的script bytes、height及coinbase script;

  c)sequence为0xffffffff;

8、用gbt数据中的coinbasevalue及挖矿钱包地址(可在配置文件中配置)生成coinbase output ;

9、将coinbase交易序列化,然后按12字节0xEE占位符分割成coinbase1(占位符之前)和coinbase2(占位符之后)两部分;

然后将生成的Job序列化成json数据并发送到kafka消息队列的StratumJob主题。

五、其他

1、整个coinbase交易分成coinbase1、extraNonce及coinbase2三部分。其中extraNonce由4字节的extraNonce1和8字节的extraNonce2组成,extraNonce1一般为矿机在StratumServer上的session id,extraNonce2由矿机计算并提交给矿池。

2、coinbase交易与其他交易生成block header的merkle root,但为了快速生成merkle root,用其他交易生成merkle branch哈希数组(矿池会将该数组下发给矿机),然后由coinbase交易与merkle branch数组生成merkle root。另外将coinbase交易拆分成变动(extraNonce)和不变动(coinbase1及coinbase2)部分,可以快速生成coinbase交易。

btcpool之JobMaker的更多相关文章

  1. btcpool之StratumServer

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

  2. btcpool之总架构

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

  3. btcpool之BlockMaker

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

  4. btcpool之Stratum协议

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

  5. btcpool之GbtMaker

    一.简介 GbtMaker全称getblocktemplate maker,它通过getblocktemplate rpc接口从bitcoind获得挖矿所需数据,然后把该数据发送到kafka消息队列. ...

随机推荐

  1. Hibernate Envers

    一.目的Hibernate Envers的目的是提供应用程序实体数据的历史版本,记录执行数据变更历史. 二.用途Hibernate Envers记录的审计数据,主要用于意外丢失数据找回.审查数据合法性 ...

  2. BZOJ4836 [Lydsy1704月赛]二元运算 分治 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8830036.html 题目传送门 - BZOJ4836 题意 定义二元运算$opt$满足 $$x\ opt\ y ...

  3. CodeForces 958F3 Lightsabers (hard) 启发式合并/分治 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8835443.html 题目传送门 - CodeForces 958F3 题意 有$n$个球,球有$m$种颜色,分 ...

  4. TopCoder SRM704 Div1 800 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM704-800.html 题解 考虑构造一个 $n = 20$ 的图. 先把所有 $i$ 都连向 $i-1$ ...

  5. Doctirne---查询更新等操作

    使用Doctrine进行mysql更删改查操作,事务处理,生命周期的管理 1.先记录最简单的插入操作 $em = $this->getDoctrine()->getManager(); / ...

  6. Nikita and string [思维-暴力] ACM

    codeforces Nikita and string time limit per test   2 seconds memory limit per test   256 megabytes O ...

  7. redis日志格式

    在redis.conf中,在大概65行左右有个loglevel # 指定日志记录级别# Redis总共支持四个级别:debug.verbose.notice.warning,默认为verbose# d ...

  8. C/C++中的内存对齐问题和pragma pack命令详解

    这个内存对齐问题,居然影响到了sizeof(struct)的结果值.突然想到了之前写的一个API库里,有个API是向后台服务程序发送socket请求.其中的socket数据包是一个结构体.在发送soc ...

  9. ubuntu16.04 anaconda的安装和卸载

    第一次安装: 1.直接从官网下载了anaconda安装包,然后bash ...sh安装. 2.过程中主要需要选择安装路径,为了把安装的软件都放在一起,我新建了一个install_software在系统 ...

  10. java实现文章敏感词过滤检测

    SensitivewordFilter.java import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...