一、架构图

二、模块划分

  整个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. 关于Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/springmvc-demo-01-start]]出错的解决方法

    出错的详情: 严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache ...

  2. apache负载调优

    Apache负载调优 watch -n 1 -d "pgrep httpd|wc -l"  #apache动态查看连接数     ps aux | grep httpd | wc ...

  3. 微信支付现金红包接口应用实例代码说明和DEMO详解,适合用来做微信红包营销活动、吸粉利器

      本文详细介绍微信红包开发的接口,商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,领取到红包后,用户的资金直接进入微信零钱.后面带有具体调用php实例   总结一下:需要注意的是PEM秘 ...

  4. Java Spring Boot VS .NetCore (三)Ioc容器处理

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  5. idea整合 spring boot jsp mybatis

    spring  boot  开发起来确实要简单许多 ,spring boot  包含了 spring mvc ;内置tomcat   ;启动只需要主方法即可 1.使用idea新建一个spring bo ...

  6. redis启动过程源码解析

    redis整个程序的入口函数在server.c中的main函数,函数调用关系如下图1,调用顺序为从上到下,从左至右. 图1 redis启动函数调用图 main函数源码如下,1-55行根据配置文件和启动 ...

  7. [Python]Python中的浅复制与深复制

    看python的文档,发现list有copy方法,描述说效果同a[:]. 感觉有点惊讶,之前一直以为a[:]执行的是深复制. test了一下,发现确实如果a中存在可变对象,如list/set/dict ...

  8. [POJ2559]Largest Rectangle in a Histogram (栈)

    题意 如图所示,在一条水平线上有n个宽为1的矩形,求包含于这些矩形的最大子矩形面积(图中的阴影部分的面积即所求答案). 思路 一个很老的,也是一个很好的题目. 维护一个单调栈即可. 不过在洛谷SP18 ...

  9. Python 小知识 杂七杂八 随手记

    1.assert 断言语句 例1:    print ‘11111111111’ assert 1==2 print ‘22222222’ 如果没有 assert 程序会输出  ‘1111111111 ...

  10. container

    容器是轻量级的操作系统级虚拟化,可以让我们在一个资源隔离的进程中运行应用及其依赖项.运行应用程序所必需的组件都将打包成一个镜像并可以复用.执行镜像时,它运行在一个隔离环境中,并且不会共享宿主机的内存. ...