在 Solana 进行了持续一年的开发之后,昨天我们首次尝试使用外部验证者启动完全去中心化集群,为我们的激励测试网 Tour de SOL 做好准备。能够将这项技术投入到社区应用中我们简直万分激动。
今天,我们希望与所有参与者及更广泛的群体一起分享这段历程、我们的想法,以及测试期间发现的一些问题。
测试用的参数
使用 5 个 Solana 节点启动集群,稍后预计加入 50 个外部验证者
所有节点在开始时均获得 1 个 SOL,建议取其中的 50% 进行权益质押(与 Solana 节点匹配)
由于在最后时刻发现一些漏洞,因而禁用了快照(用于加快验证者追赶速度)
不需要 GPU,因为目标是维持空载集群,而非发送大量交易。
所有节点均使用最新稳定版本 v0.16.6。
测试过程
在测试开始的 2 小时前,我们解决了最终问题,确保验证者能够正常上载,即收集公共密钥、密钥库用户名等。
在上午 8:05 左右,我们开始重启/启动测试集群。但在此之前,必须先确保所有验证者断开连接,因为我们还需要解决一些漏洞才能正确支持多个分叉。在重启之前,仍有 2 个验证者未与集群断开连接,但我们还是继续推进。
在我们宣布集群启动开始后,大家纷纷浮现出以下表情:
在此期间,我们开始打赌集群将在多久后关闭,怡情娱乐的同时也有助于放松思绪:
不等我们通知验证者集群已成功启动,一些热切的员工就已经迫不及待了。
太平洋时间上午 8:27,我们要求验证者连接。随后,系统立即显示了错误日志,其中大部分报告”未找到下一主节点”。
尽管如此,集群仍然取得了预期进展,直到第 5 epoch 才开始出现问题。当时,我们发现了来自外部验证者的大量新权益,以及缺少主节点和大块冻结/新分叉。
最终,在太平洋时间上午 8:50 左右,集群不再进展。第一次测试的时长接近 30 分钟,这已超出了我们的预期。
在集群第一次故障后,我们于太平洋时间上午 9:45 重启集群进行第二次尝试,然而遇到了同样的问题,导致集群再次故障。
所以我们决定到此为止,结束第一次测试。我们收集了一些有效数据,并需要花些时间进行分析并纠正发现的问题,在此之前不断重启集群并没有太大价值。
本次测试发现的主要问题
在领导和验证节点间出现的 BlockhashNotFound 问题可能导致分叉宕机
在我们之前的测试中我们就间断性和偶发性的发现了这个问题… 但是在外部测试中我们很快就发现了这个问题。从这次外部测试中收集到的日志正是我们修复这个问题[1]所需要的。
权益抵押设定流程反了
我们已经对脚本进行了配置来加速验证者们注册的过程,这对于开发中的工作流程来说很有帮助。但在现实中这并不是一个配置验证者节点的理想方式。这些脚本会先在验证者节点们开始运行之前就进行质押,这在事后看来是一个首尾倒置的操作。正确的步骤应该是:(1)启动验证者节点而不进行任何质押;(2)观察节点已经开始工作并且进行持续投票;(3)进行质押。不过这只是简单的流程上的修复而已。
64kb 的 UDP 包还真的是个问题
我们先前的测试大多基于运行在云服务器上的节点之间,这些节点轻松加愉快地发送大型 UDP 包,而几乎没有丢包的情况。但这个情况似乎并不普遍适用于更广泛的互联网,即使是低至的 1% 的丢包率也是相当大的损失,并对验证者的推进产生了影响。这将需要对网络层模块进行一些手术以限制 UDP 包的大小。这将需要一定的工作量,但这绝对是又一个宝贵的经验教训。
其他观察
我们的文档对于进行这次测试来说还是相当匮乏的
某些脚本的用途不是很清楚
有些验证者节点使用了 GPU 来参与测试,但他们的 CUDA 在 3.5 以下。结果这些节点当时就被踢出了网络。
接下来怎么做!
我们将努力改进文档来为未来的测试尝试作准备,整理一些常见的问题并将他们转化为一份为验证节点们准备的完整文档。
鉴于已确定的一些问题,我们将用一个新的阶段零来取代阶段一。并且将阶段一之后的所有阶段的时间都推后一个月。
关于阶段零:阶段零将在八月份的剩余时间中进行,届时我们将持续进行测试来处理这些出现的问题。八月期间的这个测试是临时性质的,但我们将提前至少 48 小时发出通知给所有有兴趣参与的验证者们。
写在最后
对我们来说,第一次的有外部验证者参与的测试是一个巨大的成功。不仅整个集群保持运行的时间超出了我们的预期,我们还发现了许多以前没有观察到的主要漏洞。因此,我们要对参与我们第一次测试的所有50 个验证者[2]表示感谢。在测试之前、期间和之后发生的热血事件都使我们感到震惊。我们还对在这个过程中展现出巨大耐心、积极性和支持度的社区感到非常的惊讶。
可以说,虽然我们做的事情很有趣也很有意义,但没有你们我们无法做到这一点。所以在此我们所有 Solana 的团队成员都想衷心的说一声:谢谢!
最后再 shotout 一下来自 Dokia Capital 的 Aurel。他成功成为了我们第一次测试中的”集群杀手”。让我们看看下次谁能获此殊荣吧!哈哈!