一、简介

  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太少时,难度控制器会减半降低难度。

最新文章

  1. SpringMVC常用配置-文件上传-基于Servlet 3.0
  2. freemarker
  3. mysqli常用错误处理函数
  4. HTML+CSS学习笔记 (10) - CSS格式化排版
  5. objectC时间用法
  6. WinForm聊天室
  7. 关于AVL实现的代码记录
  8. 使用devstack搭建openstack Newton 版本的坑
  9. 201521123057 《Java程序设计》 第6周学习总结
  10. salesforce lightning零基础学习(一) lightning简单介绍以及org开启lightning
  11. Java反射异常:java.lang.NoSuchFieldException
  12. ==运算符和equals()方法的区别
  13. Thymeleaf的一些操作
  14. ERP承接新后台优惠规则问题
  15. 下载神器(vip下载速度)
  16. Linux命令:readonly
  17. JS高级 - 面向对象5(继承,引用)
  18. spring学习 八 面向切面编程(AOP)概述
  19. hdu 5826 physics 物理题
  20. 用python解析pdf中的文本与表格【pdfplumber的安装与使用】

热门文章

  1. Dapper结合Repository模式的应用
  2. sklearn标准化-【老鱼学sklearn】
  3. Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 排列组合,Prufer编码
  4. Python中append()与extend()的区别
  5. 自己总结的C#编码规范--7.文档下载 & 总结
  6. [C#] 動的にアセンブリをロードする
  7. http连接基础类,负责底层的http通信
  8. 2019-2-21.NET中异常类(Exception)
  9. Elasticsearch学习笔记二
  10. BZOJ 4763