一、简介

  StratumServer(简称sserver)接收JobMaker发送的stratumjob消息,从http api获取用户列表,对外部矿机提供服务。

二、处理stratumjob消息

  sserver从kafka消息队列中接收JobMaker发送的StratumJob消息。先判断该Job是否超时或重复,若是则不进行后续处理。保存该Job。接着判断该Job的prevBlockHash(上一区块哈希)是否与最近一次广播的Job的prevBlockHash是否相同,若不同,则将之前所有Job都设置为stale并将该Job广播给所有矿机;若相同且最近一次广播的Job是空块block(poolwatcher会发送空块block),若不同否则将该Job广播给所有矿机。

三、获取userlist

  btcpool没有提供账号模块,所以最简单的方式是另外实现一个账号模块并提供http api接口,然后sserver通过http api没隔一段时间取获取一批账号。 

四、与矿机通讯

  矿机与sserver建立连接后(每台矿机对应一个session),通过stratum协议通讯,具体细节见《btcpool之stratum协议》。矿机先向矿池订。然后请求授权,矿池对矿机的请求授权进行验证--判断账号(或用户名)是否有效,若无效则返回错误。授权通过后,保存用户id及矿工名,并将默认挖矿难度及最新的Job下发给矿机。矿机计算到符合目标的share后,提交给矿池,然后矿池对该share进行处理。当有新Job并需要广播时,sserver将新Job广播给所有矿机。但某个矿机的挖矿难度需要调整时,sserver给矿机下发新难度。

五、处理share

  矿池收到矿机提交的share(包含任务号、时间戳、nonce及extraNonce2)后,先判断该share是否无效(重复、对应的Job已stale或时间无效、share不符合Job的target),若无效则返回error给矿机并增加该矿机的无效share数量,若该矿机最近提交的无效share数量没有超过上限,则将该share发送到kafka消息队列(为了统计拒绝率)。否则将share发送到kafka消息队列,并返回成功给矿机。另外判断其是否符合块的target,若是则将该块及coinbase交易发送到kafka消息队列并将所有的Job设置为stale。

六、调整挖矿难度

  sserver会为每个session维护一个难度控制器,当矿机提交的share太频繁时,难度控制会翻倍增加难度,当矿机提交的share太少时,难度控制器会减半降低难度。

btcpool之StratumServer的更多相关文章

  1. btcpool之总架构

    一.架构图 二.模块划分 整个btcpool分成GbtMaker.BlockMaker.JobMaker.StratumServer.PoolWatcher.statshttpd.sharelogge ...

  2. btcpool之BlockMaker

    一.简介 BlockServer将StratumServer发送的solvedshare数据(块头和coinbase交易)与GbtMaker发送的rawgbt数据(其他交易)一起组装成一个块,然后通过 ...

  3. btcpool之JobMaker

    一.简介 JobMaker从kafka消息队列接收rawgbt消息,然后解码该消息中的gbt数据,生成Job,发送到kafka消息队列. 二.StratumJob结构 StratumJob结构是Job ...

  4. btcpool之Stratum协议

    一.简介 矿机(或挖矿软件)与矿池之间通过stratum协议通讯,它包括订阅.授权.下发难度.下发任务.提交share五种消息. 二.订阅(mining.subscribe) 矿机启动后,先和矿池建立 ...

  5. btcpool之GbtMaker

    一.简介 GbtMaker全称getblocktemplate maker,它通过getblocktemplate rpc接口从bitcoind获得挖矿所需数据,然后把该数据发送到kafka消息队列. ...

随机推荐

  1. 怎么给PDF文件交换页面

    在使用PDF文件的时候有文件页面的排版错误的时候,这个时候就需要交换页面了,那么怎么给PDF文件交换页面呢,在使用PDF文件的时候需要交换页面的时候要怎么做呢,下面小编就为大家分享一下PDF文件交换页 ...

  2. docker 安装mysql数据库 <二>

    一.下载mysql数据库 #网易镜像中心https://c.163.com/hub#/m/home/ #采用网易加速地址,不加速时下载非常的慢 docker pull hub.c..com/libra ...

  3. centos7安装elasticsearch

    [root@aaron tools]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.1.zi ...

  4. Concept of function continuity in topology

    Understanding of continuity definition in topology When we learn calculus in university as freshmen, ...

  5. VS2013安装Boost

    boost的编译和使用,经过搜集资料和总结,记录成文.感谢文后所列参考资料的作者. 1 下载 地址:http://sourceforge.net/projects/boost/files/boost/ ...

  6. ajax 传递中文字符参数 问题

    使用ajax 传递中文字符串时, 服务端会接收不到预期的 中文字符. 此时,需要对 js中的中文字符参数进行 编码,  到达服务端后, 再为其解码 即可. 前端: var url = '....'; ...

  7. 熟悉Linux常用命令

    cd命令:切换目录 (1)切换到目录 /usr/localcd / usrcd / local (2)去到目前的上层目录cd .. (3)回到自己的主文件夹cd ls命令:查看文件与目录 (4)查看目 ...

  8. 让AI简单且强大:深度学习引擎OneFlow技术实践

    本文内容节选自由msup主办的第七届TOP100summit,北京一流科技有限公司首席科学家袁进辉(老师木)分享的<让AI简单且强大:深度学习引擎OneFlow背后的技术实践>实录. 北京 ...

  9. VUE iview date-picker取时间范围...

    x HTML <script src="//unpkg.com/vue/dist/vue.js"></script> <script src=&quo ...

  10. iOS 如何查看APP的jetsamEvent日志

    1.如何在iPhone上查看 设置-通用-分析-分析数据- JetsamEvent+日志 打头的系统日志. 2.如何在Mac 上查看此类分析日志 1.手机链接MAC 2.打开iTunes,点开手机图标 ...