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编码
btcpool之GbtMaker的更多相关文章
- btcpool之总架构
一.架构图 二.模块划分 整个btcpool分成GbtMaker.BlockMaker.JobMaker.StratumServer.PoolWatcher.statshttpd.sharelogge ...
- btcpool之BlockMaker
一.简介 BlockServer将StratumServer发送的solvedshare数据(块头和coinbase交易)与GbtMaker发送的rawgbt数据(其他交易)一起组装成一个块,然后通过 ...
- btcpool之StratumServer
一.简介 StratumServer(简称sserver)接收JobMaker发送的stratumjob消息,从http api获取用户列表,对外部矿机提供服务. 二.处理stratumjob消息 s ...
- btcpool之Stratum协议
一.简介 矿机(或挖矿软件)与矿池之间通过stratum协议通讯,它包括订阅.授权.下发难度.下发任务.提交share五种消息. 二.订阅(mining.subscribe) 矿机启动后,先和矿池建立 ...
- btcpool之JobMaker
一.简介 JobMaker从kafka消息队列接收rawgbt消息,然后解码该消息中的gbt数据,生成Job,发送到kafka消息队列. 二.StratumJob结构 StratumJob结构是Job ...
随机推荐
- All about Using Burp Suite
1.how to use burpsuite I can't thank them enough for allowing us to test web application ,making su ...
- 使用Selenium+ChromeDriver登录微博并且获取cookie
using OpenQA.Selenium;using OpenQA.Selenium.Chrome; public class GetSinaCookie { private static stri ...
- .NET Core 添加Java 服务引用(WebService) 曲折历程(一)
背景: 需要在HangFire定时任务中加入请求Java开发的WebService接口.定时获取数据同步数据.现有的代码是在VS2017 ,.Net Core 下创建的,添加WS发现系统不支持. 在C ...
- js分析 邮箱地址加密 [email protected]
0.参考 https://segmentfault.com/q/1010000000117476 javascript里function之前加上感叹号 ' ! ' 会怎么样? // 这么写会报错,因为 ...
- Android+openCV 的坑
之前一直用IntelliJ IDEA 导入 opencv_android_sdk 的 java 包,在最后一步finish时,始终出错. 后来重新安装Android Studio 重复以上步骤,能顺利 ...
- Imcash:坐下来认真和你们说说话
筹备已久的Imcash终于快上线了,上线后会用作品向你们证明你们的选择是正确的.在准备的半年期间里,团队从调研.设计.市场.人员.技术方面都尽量按照最高要求来配置.从一站式服务平台到现在的资产管家,每 ...
- jsp页面上的下拉框案例(Struts2)
<s:select></s:select>包含的属性有:list="" :name="" :value="" ...
- EHDU-1039 asier Done Than Said?
Password security is a tricky thing. Users prefer simple passwords that are easy to remember (like b ...
- 2019-2-13TextBox技巧
清空所有的TextBox文本框 思路:这些TextBox都是在一个窗体上的,这时候我们可以利用一个循环去遍历窗体上所有的TextBox控件.(代码如下) foreach (Control i in C ...
- CMake入门
CMake入门 CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程).他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似 ...