奇怪的动物会被人保护起来,但是奇怪的人确通常都会被大家所排斥。

北京时间 2021年06月24日,Lotus Github 仓库发布了 v1.10.0 Release 版本。

Lotus v1.10.0 版本发布

如图所示,这是一个强制更新版本,更新高度为 892800,UTC 时间 2021-06-30 22:00,北京时间为: 2021-07-01 06:00,主要更新为引入 Filecoin network v13,代号为 HyperDrive 升级。

本文将对本次网络升级进行解读,尤其重点解读大家可能比较关注的关于扇区批量提交的新的 API 的使用。

首先咱们先看看本次更新的主要内容,其实主要就是新增了几个重要 FIP 的实现(上面截图上面有写明)。

  1. FIP-0008: 增加 PreCommitSector 消息批量提交的方法(PreCommitSector 消息聚合)
  2. FIP-0011: 删除报告共识错误的奖励
  3. FIP-0012: DataCap 充值 FIL(之前 DataCap 是一次性分配的,容量用完了要新增地址) + 客户端地址
  4. FIP-0013: 添加 ProveCommitSectorAggregated 方法(ProveCommitSector 消息聚合)以减少链上拥堵
  5. FIP-0015: 重新启用 FIP-0009(从 BaseFee 销毁中免除 Window PoSts,Window PoSts 消息手续费不再收 BaseFee 影响)

具体详情大家可以到官方 GitHib filecoin-project/FIPS 项目中查看原型,也可以看下我之前的一篇博客 矿工应该了解的几个 Filecoin 重要的 FIP

接下来咱们重点讲一下本次的 FIP-0008FIP-0013 实现,因为这个是跟矿工运维人员密切相关的内容。

备注:本文所用到的代码为 filecoin-project/lotus 项目 的 Master 分支 CommitID 为: 715176698ffa1ac089963765d65a2dd355364114

1. 消息聚合配置

Sealing 新增配置

[Sealing]
  FinalizeEarly = false
  BatchPreCommits = true
  MaxPreCommitBatch = 256
  MinPreCommitBatch = 1
  PreCommitBatchWait = "24h0m0s"
  PreCommitBatchSlack = "3h0m0s"
  AggregateCommits = true
  MinCommitBatch = 4
  MaxCommitBatch = 819
  CommitBatchWait = "24h0m0s"
  CommitBatchSlack = "1h0m0s"
  TerminateBatchMax = 100
  TerminateBatchMin = 1
  TerminateBatchWait = "5m0s"
参数名称 参数说明
FinalizeEarly 是否提前发起 FinalizeSector 操作,也就是在 C2 上链之前就执行 FinalizeSector 操作。
BatchPreCommits 是否启用 PreCommitSector 消息聚合功能
MaxPreCommitBatch 单条 SubmitPreCommitBatch 消息最多聚合 PreCommitSector 消息条数,注意: 每个矿工每年聚合消息的数量最多不得超过 1EiB 的算力
MinPreCommitBatch 单条 SubmitPreCommitBatch 消息最少聚合 PreCommitSector 消息条数
PreCommitBatchWait SubmitPreCommitBatch 消息最大等待时长,超过时间自动提交
PreCommitBatchSlack SubmitPreCommitBatch 强制提交缓存时间,默认 3h,也就是说如果当前 SubmitPreCommitBatch 聚合消息中有扇区在 3 小时内过期的话就立即强制提交。该值不得超过 31.5h
AggregateCommits 是否启动 ProveCommitSector 消息聚合功能
MinCommitBatch 单条 SubmitCommitAggregate 消息少多聚合 ProveCommitSector 消息条数
MaxCommitBatch 单条 SubmitCommitAggregate 消息最多聚合 ProveCommitSector 消息条数
CommitBatchWait SubmitCommitAggregate 消息最大等待时长,超过时间自动提交。最大值为 30 天
CommitBatchSlack SubmitCommitAggregate 强制提交缓冲时间,默认 1h,也就是说如果当前 SubmitCommitAggregate 聚合消息中有扇区/订单在 1 小时内过期的话就立即强制提交。该值设置的越小,消息提交的失败率越高。
TerminateBatchMax 批量终止扇区聚合消息最多条数
TerminateBatchMin 批量终止扇区聚合消息最少条数
TerminateBatchWait 批量终止扇区聚合消息最长等待时间,超时自动提交

Gas Fee 新增配置

[Fees]

  [Fees.MaxPreCommitBatchGasFee]
    Base = "0.025 FIL"
    PerSector = "0.025 FIL"
  [Fees.MaxCommitBatchGasFee]
    Base = "0.05 FIL"
    PerSector = "0.05 FIL"

这些配置都非常容易看懂,就不解释了。

另外:配置的定义的源码分别在 lotus 项目中 node/config/def.go 以及 specs-actors 项目中的 policy.go 文件中,有兴趣的同学可以去看下源码。

2. 消息聚合操作

由于线上的网络目前还不支持新代码,因此我们在本地搭建 dev-net 测试。由于篇幅原因,怎么搭建本地测试网络这里就略过了, 如果不知道怎么搭建本地网络的,请参考官方文档 Run a Filecoin local dev-net

  1. 批量操作的命令在 lotus-miner sectors batching 子命令中:

  2. 查看 lotus-miner info 的时候会多出两种状态的扇区 SubmitPreCommitBatchSubmitCommitAggregate

  3. 查看 SubmitPreCommitBatchSubmitCommitAggregate 消息

    sector list 里面也可以看到:

  4. 默认 SubmitPreCommitBatchSubmitCommitAggregate 消息是要累积到最大扇区数或者有扇区过期的时候才会提交的,你也可以通过下面的命令手动提交:

    提交 SubmitPreCommitBatch 消息:

    提交 SubmitCommitAggregate 消息:

参考阅读

  • https://github.com/filecoin-project/lotus/releases/tag/v1.10.0
  • https://github.com/filecoin-project/community/discussions/74#discussioncomment-885578