ITPub博客

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

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

原创 区块链 作者:兄弟连区块链入门教程 时间:2018-10-16 11:45:12 0 删除 编辑

核心机制总结

  • 同时监听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配置文件

//是否使用testnettestnet = true;jobmaker = {
//发送stratum job间隔秒数
stratum_job_interval = 20;//gbt生命周期秒数
gbt_life_time = 90;//空gbt(即不含交易)生命周期秒数
//此值应>=10empty_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数据结构定义:

// 域名币混合挖矿

uint32_t nmcAuxBits_;

uint256 nmcAuxBlockHash_;

uint256 nmcNetworkTarget_;

int32_t nmcHeight_;

string nmcRpcAddr_;

string nmcRpcUserpass_;

// 方法定义略

};

```


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31557831/viewspace-2216514/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-11

  • 博文量
    79
  • 访问量
    59480