# sophon-miner

# 简介

sophon-minerVenus 矿池中的链服务组件之一,是矿工出块的调度器。与 PL 实现的 lotus-miner 不同的是:

  • 支持多个矿工出块,lotus-miner 的一个实例负责单个矿工的出块;

  • Venus 矿池中其他组件配合完成矿工的出块流程:

    • 调用 venus-wallet 进行签名及签名验证;
    • 调用 venus-sealer(将弃用) 或 venus-cluster 计算获胜证明。
  • 多个矿工合作出块,保证收益最大化。如:一个周期有多个出块时,打包不重复的消息,获得更多的小费,也可以保证消息及时上链,提升网络的TPS。

# 功能模块

sophon-miner 的主要模块有:矿工管理,出块管理。

# 矿工管理

Venus 矿池中的用户(或称为矿工)是由 sophon-auth 组件管理的,其记录了每个矿工的基础信息及身份验证信息。sophon-minersophon-auth 拉取最新的矿工列表,并周期性地进行区块生产流程。

sophon-miner 可以暂停矿工列表中任意矿工的出块,比如某个矿工的签名节点失联时,可以手动暂停该矿工的出块流程,等待签名正常后再开启出块。

sophon-miner 执行 update 更新矿工列表,通常在某些矿工退出矿池或有新的矿工加入矿池时进行。

# 出块管理

sophon-miner 的一轮出块流程如下:

  • 请求同步节点获取 Base,即 parent Tipset(通常是最近一次有出块周期的 Block集)及空轮数(空轮表示该周期没有任何矿工出块);

  • 统计本周期获得出块权的矿工及出块必要数据,如随机数,选中扇区信息等;

  • 为每个获得出块权的矿工计算获胜证明,选择消息,创建区块;

  • 验证本周期生产的区块合法性(是否存在共识错误,因为广播具有共识错误的区块会受到一定的 Fil 惩罚),广播区块。