内容简介: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_; //方法定义略 };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 兄弟连区块链教程以太坊源码分析core-genesis创世区块源码分析
- 兄弟连区块链教程eth源码解析区块数据结构
- 【以太坊源码解析】-区块数据结构
- 兄弟连区块链入门教程以太坊源码分析hashimoto源码分析(一)
- 兄弟连区块链教程以太坊源码分析chain-indexer区块链索引二
- 以太坊源码分析:fetcher模块和区块传播
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript语言精粹
道格拉斯•克罗克福德 (Douglas Crockford) / 赵泽欣、鄢学鹍 / 电子工业出版社 / 2012-9-1 / 49.00元
JavaScript 曾是“世界上最被误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax 的到来,JavaScript“从最受误解的编程语言演变为最流行的语言”,这除了幸运之外,也证明了它其实是一门优秀的语言。Douglas Crockford 在本书中剥开了JavaScript 沾污的外衣,抽离出一个具有更好可靠性、可读性和可维护性的JavaScript 子集,让你看......一起来看看 《JavaScript语言精粹》 这本书的介绍吧!