btcpool之JobMaker
一、简介
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的更多相关文章
- btcpool之StratumServer
一.简介 StratumServer(简称sserver)接收JobMaker发送的stratumjob消息,从http api获取用户列表,对外部矿机提供服务. 二.处理stratumjob消息 s ...
- btcpool之总架构
一.架构图 二.模块划分 整个btcpool分成GbtMaker.BlockMaker.JobMaker.StratumServer.PoolWatcher.statshttpd.sharelogge ...
- btcpool之BlockMaker
一.简介 BlockServer将StratumServer发送的solvedshare数据(块头和coinbase交易)与GbtMaker发送的rawgbt数据(其他交易)一起组装成一个块,然后通过 ...
- btcpool之Stratum协议
一.简介 矿机(或挖矿软件)与矿池之间通过stratum协议通讯,它包括订阅.授权.下发难度.下发任务.提交share五种消息. 二.订阅(mining.subscribe) 矿机启动后,先和矿池建立 ...
- btcpool之GbtMaker
一.简介 GbtMaker全称getblocktemplate maker,它通过getblocktemplate rpc接口从bitcoind获得挖矿所需数据,然后把该数据发送到kafka消息队列. ...
随机推荐
- SpringMVC的入门示例---基于注解的配置
注解版的配置,主要的修改就是将原来使用<bean>创建的业务控制器对象,修改为是扫描标签扫描到容器. 1.导入包 2.在 web.xml 配置核心控制器 <?xml version= ...
- java设计模式自我总结---代理模式
代理模式是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,通俗的来讲代理模式就是我们生活中常见的中介. Spring 的AOP面向切面就是使用动态代理模式来实现的: 打个比方说:我要买房 ...
- PHP二维数组按某个字段排序
//准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...
- python 爬虫与数据可视化--爬虫基础知识
一.python中的模块 模块的安装:pip install 模块名 导入模块与函数:import requests . from pymongo import MongoClient json模块的 ...
- iphone手机浏览器文本框不触发输入中文的keyup事件
问题描述:iphone手机浏览器文本框不触发输入中文的keyup事件,在输入中文之后需要点击回退按键,才会开始搜索.问题分析:iphone手机的输入法(不管是第三方还是自带)能检测到英文或者数字的ke ...
- S0.0 计算机如何看东西
标签(空格分隔):数字图像处理 opencv 当我们用特定软件打开一张图片或者更改某些位图的格式为txt时,就会发现图像的本质不过就是一堆数据罢了. 采样 我们可以用相机采样到一幅二维图像,图像的分辨 ...
- [jzoj]2505.【NOIP2011模拟7.29】藤原妹红
Link https://jzoj.net/senior/#main/show/2505 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷 ...
- Qt写websocketpp服务端
1.下载websocketpp,地址为https://github.com/zaphoyd/websocketpp,版本为0.7. 2.下载boost,地址为https://www.boost.org ...
- java遍历List中的map的几种方法
Student 类 public class Student { private String name; private int age; private int taller; public St ...