3月14日起开始在Filecoin 虚拟机上部署智能合约吧→

解决2020年12月19日发生的链上中断:原因、影响以及带来的启示

2020年12月19日,Filecoin网络出现了链上中断,这意味着在一个时间窗口内可以创建新的区块,但矿工们无法就新块达成共识,因为每个人计算的数值都不一样。得益于整个社区成员、矿工和开发者的快速响应——在4小时内发布了一个修复方案,之后网络在7小时内实现了完全恢复。本文介绍了本次事件遇到的问题、中断带来影响、快速响应以及接下来的工作。

故障原因

故障发生的根本问题是对存储矿工参与者实施方案中的对象映射进行潜在非确定性的迭代。参与者是在Go中进行的。对 Go的映射进行遍历是已知具有不确定性的,参与者使用一种模式,即在进行迭代对迭代结果总是进行排序(强制执行静态分析)。不幸的是,在对两个这样的映射进行排序时使用的比较函数出现了错误,导致排序无效(见#1335)。因此,不同的节点以不同的顺序处理映射条目,导致了不同的结果和Gas消耗量。

这一代码路径实际上只有通过以下方式才能实现:(a)单个矿工声明同时终止多个扇区,或(b)单个矿工同时恢复多个分区的故障。(另外两种代码路径也能达到这一点,但在实践中极不可能)。在这一点之前,这两种路径都没有在主网中实践过以多个扇区/分区作为数据来暴露非确定性。中断是由多个扇区同时终止引发的。

Filecoin参与者的测试涵盖了有关代码,但不包括验证不同测试运行之间确定性执行的机制。对Lotus节点实施的集成测试没有涵盖到同时终止多个扇区。

带来的影响

最重要的是,在中断期间没有丢失任何数据。虽然无法挖出新块且暂时中止了网络上的交易,但一旦网络恢复运行,所有存放在存储提供者处的数据都是安全的且可以随时使用。此外,要注意到的是Filecoin协议的规范规定,即使在链上中断的情况下也可以检索数据。因此,虽然在事件发生期间无法进行链上交易,但Filecoin网络的核心功能依然完好。此外,所采取的修复措施确保了挖矿业务本身不会因中断而受到惩罚;相反,惩罚被暂时中止以优先考虑并鼓励网络恢复。

快速响应

发现问题、确认问题、修复故障和重新部署的速度十分迅速:

  • 事件发生15分钟内,自动监测触发警报;
  • 30分钟内,矿工和实施方案开发者应声汇合开始解决问题
  • 4个小时内,开发者确认并发布故障修复方案
  • 7小时内,足够多的节点采用了该修复方案并通过多数共识算力使网络恢复正常

对于一个年轻的分布式网络来说,这是一个令人难以置信的快速响应。即使是成熟的区块链也时常会遇到链上中断和分叉的情况,Filecoin解决此次事件的时间与已经运行了几年的链相差无几。整个社区应该为这次事件的处理速度感到骄傲。

只有通过世界各地的多个团队协同工作和共同努力,才有可能实现故障的修复。整个生态中的各方合作共同达成了这一目标:矿工们发现并报告了这一问题,并提请开发者注意;工程团队协调开发并发布了一个经过同行评审的补丁,以解决根本问题,同时通过社区渠道沟通这一修复的状态;全球各地的网络参与者开始应用该补丁,并尽快使网络重新上线。虽然希望此类紧急的事件不会重复发生,但Filecoin生态内参与和关注度给人们带来了深刻的印象。

接下来的工作

构建区块链就像构建软件火箭一样,是非常复杂的技术,很难在第一次尝试时就把所有事情都做得完美。就像真正的火箭一样,事情可能会以意想不到的方式出错;当这种情况发生时,重要的是要有基础设施来尽快解决这个问题,将其影响降到最低,并减少再次发生的可能性。

为此,多个团队已着手编写和执行事后分析,以确定对参与者/lotus的测试覆盖率以及对网络基础设施/通信的警报和问题升级的额外改进,来帮助减少未来的这种情况的发生。

感谢Filecoin社区的耐心、辛勤工作和投入,使这项新技术中的问题不断被解决。随着每一个问题的发现和解决,网络进一步成熟并成为稳定、可靠和经受过考验的平台。

Filecoin是一个开源的云存储市场、协议和加密货币
icon_client
filecoin_request_icon
filecoin_data_icon
filecoin_data_icon_black
icon_miner
icon_miner_other
filecoin_data_icon_black