btcpool之总架构
一、架构图

二、模块划分
整个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之总架构的更多相关文章
- IBM总架构师寇文东谈程序员的职业规划
有些年轻的程序员向我咨询,将来的路该怎么走?俗话说,条条大路通罗马.不同的路都能走向成功,到底选择哪条路,取决于自己的兴趣.可能有程序员会问:如果还没有找到自己的兴趣怎么办?我的建议是多尝试,努力做, ...
- IBM 总架构师:话说程序员的职业生涯
作者:IBM 软件集团大中华区总架构师 寇卫东 有一些年轻的程序员向我咨询,将来的路应该怎么走?俗话说,条条大路通罗马.不同的路都能走向成功.到底选哪条路,取决于自己的兴趣.可能有程序员会问:如果还没 ...
- Spring Cloud 微服务项目实现总架构一
Spring Cloud 服务是一种分布式服务,包括配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,主节点选举, 分布式session, 集群状态等公共组件. 一 注册机 ...
- 从数据分析系统总架构理解BI工具的价值所在
现如今,应用商业智能BI工具的企业是越来越多了,由此也可见企业对数据分析的重视.因此,掌握一定的数据分析知识对"打工人"来说是非常重要的.现在小编就来跟大家一起来了解一下商业智能 ...
- [网站性能1]对.net系统架构改造的一点经验和教训
文章来源:http://www.admin10000.com/document/2111.html 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为 ...
- 《Inside UE4》-2-GamePlay架构(一)Actor和Component
<Inside UE4>-2-GamePlay架构(一)Actor和Component <Inside UE4>-2-GamePlay架构(一)Actor和Compon ...
- (转)对.net系统架构改造的一点经验和教训
在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为Linux本身足够的开放性,更因为围绕传统Unix/Linux社区有大量的成熟开源解决方案,覆盖了网 ...
- 对.net系统架构改造的一点经验和教训(转)
在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案,这不仅仅是因为Linux本身足够的开放性,更因为围绕传统Unix/Linux社区有大量的成熟开源解决方案,覆盖了网 ...
- 对.Net系统架构改造的一点经验和教训
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 在互联网行业,基于Unix/Linux的网站系统架构毫无疑问是当今主流的架构解决方案 ...
随机推荐
- LinkedList阅读
package java.util; import java.util.function.Consumer; public class LinkedList<E> extends Abst ...
- 剑指offer字符串列表
字符串 面试题5:替换空格 面试题20:表示数值的字符串 面试题58:翻转字符串 面试题58(二):左旋转字符串
- day15.Python内置函数
作用域相关 locals() -- 获取执行本方法所在命名空间的局部变量的字典 globals() -- 获取全局变量的字典 print(locals()) print(globals()) {'_ ...
- Monolog手册参考
https://api.kdyby.org/namespace-Monolog.Handler.html
- cache 缓存的处理
, ) { ? ? ) && ? lstorage.remove(key) : sstorage.remove(key) } /** * 更新缓存配置文件 */ Cache.proto ...
- Nginx模块 ngx_http_limit_req_module 限制请求速率
The ngx_http_limit_req_module module (0.7.21) is used to limit the request processing rate per a def ...
- jQuery 对象 等操作
/////////////////////下面为文件夹重命名功能区///////////////////////// $(".wpul .rename").click(functi ...
- 根据文件大小自动判断单位B,KB,MB,GB
<php> /** * 文件大小格式化 * @param integer $size 初始文件大小,单位为byte * @return array 格式化后的文件大小和单位数组,单位为by ...
- ajax 三种数据格式
1.JSON(格式要正确,可以引jar包操作) servlet代码 package com.hsp.action; import java.io.IOException; import java.io ...
- haskell实现简易计算器
> module Main where > import System.IO > import Data.Char > import Control.Monad > im ...