兄弟连区块链教程btcpool矿池源码分析JobMaker模块解析

栏目: 数据库 · 发布时间: 7年前

内容简介:JobMaker,用于监听kafka获取最新的比特币Gbt消息、以及域名币NmcAuxBlock消息,并用二者构造StratumJob再发送给kafka。另附StratumJob数据结构定义:

btcpool矿池-JobMaker模块解析

核心机制总结

  • 同时监听kafka KAFKA_TOPIC_RAWGBT和KAFKA_TOPIC_NMC_AUXBLOCK,以支持混合挖矿
  • 接收的Gbt消息,如果与本地时间延迟超过60秒将丢弃,如果延迟超过3秒将打印log
  • 可用的Gbt消息,将以gbtTime+isEmptyBlock+height来构造key写入本地Map,另gbtHash也会写入本地队列
  • 本地gbtHash队列仅保存最近20条,本地gbtMap中Gbt消息有效期:非空Gbt有效期90秒,空Gbt有效期15秒,过期将清除

    • 有效期可从配置文件中指定
  • Gbt消息如果高度低于本地Gbt高度,且本地Gbt非空,且与本地时间间隔没超过2倍stratumJobInterval_,Gbt消息将丢弃
  • 三种情况下将立即向kafka发送StratumJob:

    • 高度大于本地高度(即已发现新块)
    • 高度与本地高度相同,但前个Job为空块Job,但新Gbt非空块
    • 达到预定的时间间隔20秒(可从配置文件中指定)

JobMaker命令使用

JobMaker,用于监听kafka获取最新的比特币Gbt消息、以及域名币NmcAuxBlock消息,并用二者构造StratumJob再发送给kafka。

jobmaker -c jobmaker.cfg -l log_dir
#-c指定jobmaker配置文件
#-l指定日志目录

jobmaker.cfg配置文件

//是否使用testnet
testnet = true;

jobmaker = {
//发送stratum job间隔秒数
stratum_job_interval = 20;

//gbt生命周期秒数
gbt_life_time = 90;

//空gbt(即不含交易)生命周期秒数
//此值应>=10
empty_gbt_life_time = 15;

//最近一次stratum job发送时间写入文件
file_last_job_time = "/work/xxx/jobmaker_lastjobtime.txt";

//区块版本,默认为0表示使用bitcoind返回的区块版本
block_version = 0;
};

//kafka集群
kafka = {
brokers = "1.1.1.1:9092,2.2.2.2:9092,3.3.3.3:9092";
};

//zookeeper集群
zookeeper = {
brokers = "1.1.1.1:2181,2.2.2.2:2181,3.3.3.3:2181";
};

pool = {
//支付地址
payout_address = "my2dxGb5jz43ktwGxg2doUaEb9WhZ9PQ7K";
//coinbase info
coinbase_info = "region1/Project BTCPool/";
};

另附StratumJob数据结构定义:

class StratumJob {
public:
//jobId: timestamp + gbtHash, 目的为保证不重复
uint64_t jobId_;
//gbtHash
string gbtHash_;
//前一个区块哈希
uint256 prevHash_;
//前一个区块哈希(小字节序)
string prevHashBeStr_;
//区块高度
int32_t height_;
//coinbase交易
string coinbase1_;
string coinbase2_;
//merkle树枝
vector<uint256> merkleBranch_;

//区块版本
int32_t nVersion_;
//难度目标
uint32_t nBits_;
//时间戳
uint32_t nTime_;
//最小有效时间
uint32_t minTime_;
//挖矿奖励
int64_t coinbaseValue_;
//见证承诺(如未启用隔离见证,此处为空)
string witnessCommitment_;
//nBits转Target难度目标
uint256 networkTarget_;

//域名币混合挖矿
uint32_t nmcAuxBits_;
uint256 nmcAuxBlockHash_;
uint256 nmcNetworkTarget_;
int32_t nmcHeight_;
string nmcRpcAddr_;
string nmcRpcUserpass_;
//方法定义略
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

移动交互设计精髓

移动交互设计精髓

班格 (Cameron Banga)、温霍尔德 (Josh Weinhold) / 傅小贞、张颖鋆 / 电子工业出版社 / 2015-4-1 / CNY 89.00

越来越多的人正涌入移动应用领域,而设计和体验将是移动应用成败的关键。作者通过上百款应用的设计实践,系统化地梳理了移动应用的设计方法论,在理解用户、跨平台和适配设计、移动组件应用、界面视觉感染力、简约设计等方面都进行了深入阐述。此外,作者还介绍了一些非常实用的移动设计工具,分享了设计师该如何与开发工程师协同工作,以及如何收集用户反馈、甄别版本迭代的更新需求等。 《移动交互设计精髓——设计完美的......一起来看看 《移动交互设计精髓》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具