12月20日事件回顾

图1 截止20日13:04全网前20节点算力仍未恢复
12月20日凌晨2:00,Filecoin发生链上事故,全网节点出现同步错误,导致算力暴跌,3:02官方团队对此情况做出回应,表示正在全力排查原因, 4:12官方发布公告确定问题出现原因。

图2 12月20日凌晨3:02官网在Slack社区给予回应
据官方表示,凌晨01:49分Filecoin主链由于Specs-Actors的一个bug,于336458高度卡住。此问题的发生主要是因为源代码中对于deadline map的排序未能按照预先的设计实现,导致ParentReceipts的计算结果出现差异,大量节点认为收到的区块与自己本地验证结果不同,而不予接受,因此全网进入无法同步的状态。

图3 12月20日凌晨4:12官网在Slack社区给予回应
针对此情况,官方在凌晨6点左右发布v1.4.0版本,并强制全网进行升级。并表示升级完成后,网络将在1~2个小时内赶上所错过的区块高度,在修复期间节点挖矿速度将加快,区块高度间隔也将变短,预计区块在达到337200高度时,Filecoin主网将恢复正常挖矿速度。

图4 12月20日早晨6点官方在Slack社区发布公告

图5 截止至12月21日12:41全网算力已恢复正常
12月20日事件产生具体原因
我们在事件回顾中有提到此问题的发生主要是因为源代码中对于deadline map的排序未能按照预先的设计实现,导致ParentReceipts的计算结果出现差异,大量节点认为收到的区块与自己本地验证结果不同,而不予接受,因此全网进入无法同步的状态。
这是官方给到的一个解释,我们如果去看源代码可以发现,是Filecoin系统中的Slice排序代码出现问题,使用了索引 0-n 比较,而不是使用Deadline值比较,所以出现了错误。
AK这边来用简单的例子来为大家解释一下这个bug到底是什么意思:假设我们现在有十个苹果要比较大小,为了方便比较我们为苹果编号1~10,正常逻辑来说比较苹果本身大小之后排序是8、7、5、2、4、6、1、3、9、10,但是由于系统bug现在变成了直接对编号排序,排序变成了1、2、3、4、5、6、7、8、9、10。如果为苹果排序是一个比赛,当大家比赛逻辑都混乱以后,裁判无法依照原有规则进行判断,就造成了整个赛场混乱,无法进行下去。
集体掉算力所产生的后果
1、集体算力下降15pib
从12月20日凌晨1点到12月21日上午8点,这7个小时相当于全网矿工都在休息,没有一个节点在跑,我们按照每小时增长0.625PiB、10200FIL来计算,7小时应该增长4.375PiB和71400FIL,但是因为bug的发生全网强制停滞,对于全网来说是不是造成了一定的经济损失。(以上计算数据只是粗略估计,存在一定误差)
2、Gas达到史上最高
因为bug的问题,线上消息出现了堵塞情况,要知道Filecoin网络每个窗口期时间为30分钟,这意味着节点要在对应窗口期内对所有扇区重新检查计算一遍,若是超时了会获得惩罚,扣除一定量的质押币,本来前段时间因为Gas费暴涨,各大矿工就入不敷出,现在大批量掉算力更是雪上加霜,所以在网络恢复正常后大家都想要想自己的消息快速被打包上链,在现有机制下只能一味的提高Gas费。据AK所查到的数据最高的时候在11nano左右,可以说是在Filecoin网络中Gas最高的一段时间了。

图6 20日8:06 Base Fee截图
客观来讲,其实一个程序出现bug是不可避免的情况,科学家研究出来再完美的机器都会出现问题,更何况是一个正在茁壮成长的“生态系统”,AK觉得大家也不用太把这次的bug当做一件什么大事情来看待。虽然整体是有掉算力的情况出现,但是官方也及时做出了应对措施,相信经过这次的事件官方团队会认真排查一遍源代码,减少bug的产生,也相信经过大小矿工的共同努力Filecoin会越来越好,实现数据碎片永存的愿景。
添加新手交流群:币种分析、每日早晚盘分析
添加助理微信,一对一亲自指导:YoYo8abc