一、架构图

二、模块划分

  整个btcpool分成GbtMaker、BlockMaker、JobMaker、StratumServer、PoolWatcher、statshttpd、sharelogger及slparser这几部分,各模块之间通过kafka消息队列通讯。

三、GbtMaker

  GbtMaker是getblocktemplate maker的简称,它通过getblocktemplate rpc接口从比特币核心(bitcoind)获取挖矿所需要的数据,然后将该数据(称其rawgbt)发送到kafka消息队列。

四、BlockMaker

  BlockMaker的作用是将StratumServer提交过来的solvedshare数据(包括block头、coinbase交易)和GbtMaker发送的rawgbt中的交易一起组成一个block,然后通过submitblock rpc提交给比特币核心。

五、JobMaker

  JobMaker解码GbtMaker发送的rawgbt,将coinbase交易按extraNonce拆分成coinbase1、extraNonce及coinbase2三部分;同时根据rawgbt中的交易生成merkle branch哈希数组,以方便用于和coinbase交易一起生成merkle root。然后将这些数据(称其stratumjob)发送到kafka消息队列。

六、StratumServer

  StratumServer除了要和各模块交互外,还要和miners交互。miner向StratumServer注册,StratumServer将该miner的extraNonce1(一般为session id,其和extraNonce2一起组成extraNonce)返回给miner。StratumServer收到stratumjob数据后,将所需要的挖矿数据下发给miner(通过mining.set_difficulty和mining.notify消息)。miner挖到一个share后,提交给StratumServer(通过mining.submit消息),若StratumServer检测该share满足爆块条件(块头哈希小于爆块target),则将该share数据(称其solvedshare)发送到kafka,然后由BlockMaker处理。若改share是有效share,则将该share数据(称其为share)发送到kafka。

七、PoolWatcher

  PoolWatcher的功能是监听其他大矿池的爆块,当其监听到其他矿池爆块后,发送空的rawgbt消息,StratumServer收到该消息后,通知miner停止挖矿。

八、statshttpd

  statshttpd收到share消息后,对算力进行统计,并提供web界面用于算力查看。

九、sharelogger

  sharelogger将收到的share消息保存到磁盘,以供slparser分析。

十、slparser

  slparser从磁盘加载并解析share消息,然后计算收益,并提供web界面用于查看收益。

btcpool之总架构的更多相关文章

  1. IBM总架构师寇文东谈程序员的职业规划

    有些年轻的程序员向我咨询,将来的路该怎么走?俗话说,条条大路通罗马.不同的路都能走向成功,到底选择哪条路,取决于自己的兴趣.可能有程序员会问:如果还没有找到自己的兴趣怎么办?我的建议是多尝试,努力做, ...

  2. IBM 总架构师:话说程序员的职业生涯

    作者:IBM 软件集团大中华区总架构师 寇卫东 有一些年轻的程序员向我咨询,将来的路应该怎么走?俗话说,条条大路通罗马.不同的路都能走向成功.到底选哪条路,取决于自己的兴趣.可能有程序员会问:如果还没 ...

  3. Spring Cloud 微服务项目实现总架构一

    Spring Cloud 服务是一种分布式服务,包括配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,主节点选举, 分布式session, 集群状态等公共组件. 一  注册机 ...

  4. 从数据分析系统总架构理解BI工具的价值所在

    ​现如今,应用商业智能BI工具的企业是越来越多了,由此也可见企业对数据分析的重视.因此,掌握一定的数据分析知识对"打工人"来说是非常重要的.现在小编就来跟大家一起来了解一下商业智能 ...

  5. [网站性能1]对.net系统架构改造的一点经验和教训

    文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...

  6. 《Inside UE4》-2-GamePlay架构(一)Actor和Component

    <Inside UE4>-2-GamePlay架构(一)Actor和Component     <Inside UE4>-2-GamePlay架构(一)Actor和Compon ...

  7. (转)对.net系统架构改造的一点经验和教训

    在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为Linux本身足够的开放性,更因为围绕传统Unix/Linux社区有大量的成熟开源解决方案,覆盖了网 ...

  8. 对.net系统架构改造的一点经验和教训(转)

    在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为Linux本身足够的开放性,更因为围绕传统Unix/Linux社区有大量的成熟开源解决方案,覆盖了网 ...

  9. 对.Net系统架构改造的一点经验和教训

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案 ...

随机推荐

  1. 2018秋季C语言学习总结

    2018秋季开始学习c语言 1.printf格式化输出函数 2.基本数据类型,int整型,float浮点型,double双精度浮点型,char字符型 3.算数运算符 +加法,-减法,*乘法,/除法,% ...

  2. Navicat for MySQL 连接Mysql8.0 报 1251

    先设置Mysql全局 cmd下输入: mysql -uroot -p root密码 use mysql; update user set host = "%" where user ...

  3. 阿里云OSS 获取目录下所有文件

    public class AliyunHandle { public static string accessKeyId = "a1uI5xxxxxxxxxrP4H"; publi ...

  4. react-native 引入某些低三方库时出现的Command `run-android` unrecognized,命令不识别错误

    在使用第三方库时react-native-swiper,执行 npm install react-native-swiper --save 再次运行react-native run-android时直 ...

  5. (一)主域相同子域不同之document.domain跨域

    一.什么是主域名,什么是子域名? 主域名又称一级域名或者顶级域名,由域名主体.域名后缀组成,比如cnblogs.com : 子域名有二级域名,比如www.cnblogs.com.三级域名,比如home ...

  6. selenium截取具体元素图片(python版)

    原理: 1.截图(整个窗口) 2.获取此元素坐标 element = driver.find_element_by_id("xx") element.location) 3.获取此 ...

  7. BZOJ.4299.Codechef FRBSUM(主席树)

    题目链接 记mx为最大的满足1~mx都能组成的数. 考虑当前能构成1~v中的所有数,再加入一个数x,若x>v+1,则mx=v,x不会产生影响:否则x<=v+1,则新的mx=x+v. 对于区 ...

  8. docker修改容器信息,打包等

    https://blog.csdn.net/x6_9x/article/details/72891404

  9. __x__(15)0906第三天__超链接

    HTML5 中的新属性. 属性 值 描述 charset char_encoding HTML5 中不支持.规定被链接文档的字符集. coords coordinates HTML5 中不支持.规定链 ...

  10. (77)Wangdao.com第十五天_JavaScript 用于数据交换的文本格式 JSON 对象

    JSON 对象 JSON (JavaScript Object Notation 的缩写) 也是一种数据,是 JavaScript 的原生对象,用来处理 JSON 格式数据.它有两个静态方法:JSON ...