2020年12月19日,Filecoin网络出现了链上停止,这意味着在一个时间窗口内,可以创建新的区块,但矿工们无法就产生的状态达成共识,每个人计算的数值都不一样。得益于整个社区成员、矿工和开发者的快速响应——官方在4小时内发布了一个修复方案,网络在7小时内实现了完全恢复。这篇文章描述了遇到的问题、中断的影响、快速响应以及接下来的工作。
原因
潜在的问题是对存储矿工参与者实现中的对象映射进行潜在的不确定性迭代。角色在Go中实现的。众所周知,遍历Go映射是不确定的,并且参与者在使用迭代之前实施了始终对迭代结果进行排序的模式。不幸的是,在对两个这样的地图进行排序时使用的比较函数出现了错误,导致排序无效。因此,不同的节点以不同的顺序处理地图条目,从而导致不同的结果和gas消耗。
这个代码路径实际上只有通过以下方式才能达到:(a)一个矿工同时宣布多个扇区终止,或者(b)一个矿工同时恢复跨越多个分区的故障。。在此之前,这些路径在主网中都没有使用多个扇区/分区作为数据,从而暴露了不确定性。暂停是由多个扇区的同时终止引发的。
Filecoin参与者的测试涵盖了所讨论的代码,但不包括验证不同测试运行之间确定性执行的机制。Lotus节点实现的集成测试未涵盖多个扇区。
故障影响
最重要的是在中断期间,没有任何数据丢失。虽然无法建造新的区块暂时抑制了网络上的交易,但一旦网络恢复运行,所有存储的数据都是安全的,可以随时使用。此外要注意的是,Filecoin协议的规范规定,即使在链上停止的情况下也可以检索数据。因此,虽然在事件发生期间无法进行链上交易,但Filecoin网络的核心功能依然完好。此外,已采取的修复措施确保了采矿业务本身不会因中断而受到惩罚;相反,为了降低优先级并鼓励网络恢复,暂时降低了共识削减。
快速反应
首先发现、识别、修复和部署潜在问题的速度也很显著:
在事件发生后15分钟内,自动监测触发了警报。
三十分钟内,矿工和开发人员应声而至,聚集在一起。
在四个小时内,开发人员发现并发布了问题的修复方案。
在7小时内,有足够多的节点采用了该修复程序,通过了多数共识的功率阈值,使网络恢复正常。
对于一个年轻的去中心化网络来说,这是一个令人难以置信的反应速度。即使是成熟的链也时常会遇见停链和分叉的情况,Filecoin解决此事的时间与已经运行了几年的链相差无几,整个社区都应该为这次事件的处理速度感到骄傲。
这次恢复全靠全世界多个团体的共同努力得以实现。整个生态系统中的各方合作实现了这一目标:矿工发现并报告了这一问题,并提醒开发者注意;工程团队协调开发并发布了一个经过同行评审的补丁,以解决根本问题,同时通过社区渠道沟通这一修复的状态;全球各地的参与者努力应用该补丁,并尽快使网络重新上线。虽然如此紧急的事件可能不会重复发生,但这是Filecoin生态系统内参与和关注度的一个令人印象深刻的展示。
下一步怎么做
构建区块链就像造火箭一样,都是非常复杂的技术,很难在第一次尝试时就把所有事情都做对,意外可能会以意想不到的方式出现。当错误发生时,重要的是要有基础框架以尽快解决这个问题,将坏影响降到最低,并降低再次发生的可能性。
为了实现这个目标,多个团队已经开始编写和执行事后分析,以确定验证参与者?/?lotus的测试覆盖的额外改进,以及跨网络基础设施?/?通信的警报和问题升级,以帮助减轻未来的事件。
感谢Filecoin社区的耐心、辛勤工作和投入,这项新技术中的错误将不断被修正。随着每一个问题被发现和解决,网络将进一步发展成为一个稳定、可靠和可验证的平台。
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。