Filecoin 0.3.2 是 Filecoin 一个里程碑版本,修复了很多 Bug ,而且还上线了时空证明(PoSt)提交功能。 最近星星国际鑫航技术团队处理完 矿池系统Gamma OS多币种挖矿集成之后,我们的程序猿们又迅速开始了Filecoin 0.3.2版本的测试。
先说下这几天测试的时候碰到的问题:
在启动挖矿之后,尽管我们星际鑫航的 Miner 节点完成了几个 sector 的密封,大约有 13GB,但是在 https://stats.kittyhawk.wtf/storage/mining 查看存储算力的时候,发现只显示了 268 MB, 也就是说,我们只有一个扇区的时空证明(PoSt)被接受了。
造成这个问题的直接原因是(存储)证明集合的更新方式不合理导致的,当前版本只会在提交 PoSt 的时候更新存储算力。 而由于是空证明生成时间比较长,大约需要 1000 区块(16小时)。所以虽然我的矿工密封了很多数据,但是没有提交 PoSt 之前,这些数据并不能转换为存储算力。
你可能会问,为什么第一个 sector 密封完成之后马上就显示算力了呢?这个问题官方也给出了解释:
这里是引用
There is a special case for the first commitSector where we immediately add that sector to the proving set and start the proving period. This ensures miners get power quicker. This is the first submitPoSt that shows up on chain for any miner.
这里是引用
显然,第一个 commitSector 只是个特例,能让你快速获得算力,获得及时反馈,让你知道你的节点是正常工作的。
这里有个地方需要解释一下就是,正如白皮书上所说的那样,PoSt 的生成真的是串行生成的,所以比较慢, 已经有开发者提交 issue 建议使用并行生成 PoSt,这个为应该会在下个版本修复。
可以看到这次提交的参数(Parameter) 比较短,只有 268 字节。
gljDgVjAq5Tg13sfkQJLfpQbZ2nuPCuDI0zn3CtHjlp4PTwQqkP01CI0THxjfy2LQCWVIZBLmMYWjCRza/CVCH5oybqtgOOSlKU8dLEJq2Xd2JPpTo1xRONOEvQ/HJeAD3ZedNf+BGmM65oX7sOTlI8uUpgyFusQUX/yZyhAkAc2khv/x2fExadr3LX4ysSdTU+fs6FFhh46PPO65BYhX16CJtD2KcZB2sZHqNPf9+0PyWsEPhp+cL7prpdx++FjF6rQfXbWQkH2
过了几小时,发现第二个 submitPoSt 出现在了 14150 区块。
这次的 submitPoSt 参数明显长了很多(2080 Bytes), 然后我再去 https://stats.kittyhawk.wtf/ 查询之后发现我的 Proven Storage 已经增加到 16.4 GB 了。存储算力也增加到 16374562816 / 3143916060672 了。 但是我此时已经完成 24 GB 的数据密封了。所以还是有一部分数据没有提交 PoSt。
另外,值得一提的是,有开发者反馈,如果不能在规定的时间内提交 PoSt(或者是 PoSt 丢失,无法恢复),矿工将被永远从网络中删除。 https://github.com/filecoin-project/rust-fil-proofs/issues/738
所以说,对于不能及时提供 PoSt 的矿工,惩罚还是很严重的,可能比我们之前预想说是扣除抵押还要严重一些。
最后 Github 上有不少同学问我怎么去查询指定的矿工的 submitPoSt 在哪些区块。这里给出一个比较笨但是比较使用的方法。
假设我们要查询的矿工地址为 t2zmkmdccog3da2n5rnmkyrzvvuoklbcpymcapxay
第一步,把所有跟当前矿工相关的区块全部找出,过滤掉不包含 submitPoSt 的区块
第二步,使用 jq 工具把对应的区块高度(height字段)全部找出来
第三步,找到对应高度区块的哈希值,假设我们需要找到 13093 区块的哈希值
这里特别要注意, 这里的过滤条件是 “height”:“13094”,因为区块结构中只有 parents,也就是上一个区块的哈希值。
第四步,通过官方的区块浏览器浏览对应的区块详情
https://explorer.user.kittyhawk.wtf/blocks/{blockHash} 这里只需要把对应的 blockHash 换成你想要查询的区块哈希的就可以了。
比如 https://explorer.user.kittyhawk.wtf/blocks/zDPWYqFD5tojAeydhYFuRGzttSAHPcQP2Gj35G5mn6t2WRT8W9Mi
或者你也可以直接使用命令行工具查询区块详情
到此,你应该知道如何查询自己的 submitPoSt 记录了。
前面说了这么多,总结一下,通过亲身测试,以及与Filecoin项目组核心开发者确认:
1、提交的参数长度越长,增加的存储算力就越大;
2、数据存储之后,算力值并没有同步提升,需要等到下次提交POST之后才能同步提升算力。
3、预计该BUG将在下个大的版本中解决。
星际鑫航技术团队将持续投入一部分精力在filecoin的技术研究上,同时我们也正在内部开发一些filecoin生态应用,欢迎持续关注我们。
有任何Filecoin相关技术问题,欢迎与我们交流探讨。