波卡联合创始人Robert:平行链的未来规划和 Rococo 的重构

PolkaWorld

    本文整理自 10 月 14 日波卡联合创始人 Robert Habermeier 在「Sub0 Online 2021」Substrate 开发者大会上关于平行链的演讲,由 PolkaWorld 翻译和整理。
    
    我今天其实就是要讲讲平行链,包括:怎样实现、目前到什么阶段了、未来有什么计划。
    我是 Polkadot 的创始人之一,从 2016 年就开始和 Gav 一起在做 Polkadot,我也是平行链代码库和实现的主程序员和团队负责人。所以我今天分享的内容是来自第一线的。
    平行链 V1 开发线路图
    首先我们来看看时间线,看看平行链是怎样发展到今天的。
    
    在 Polkadot 的开发周期初期我们花了大量的时间,去构建 Substrate、BABE 和 GRANDPA 共识算法、lib p2p。其实平行链的开发,需要提前完成这里面的很多基础组件。所以我们在 5 月发表了《实现者指南》的第一版草案,这个指南其实就是一个巨大的实现文档,它描述了我们的动机,我们在写这样大量的代码时的想法。因为当你深入到一个很大的软件开发项目时,你真的需要去思考所有的部分要怎样组合在一起。这些部分不会自然地融合到一起,你不能今天写点这块,明天写点那块,你需要去思考每一块要怎样放在正确的位置。所以说,如果你要做某件事情,就像我们在做的事 —— 上线平行链一样,那么类似《实现者指南》这样的东西就至关重要,它可以确保代码是经得起推敲的,它是一个基本的基础设施组件。
    所以《实现者指南》是在 2020 年 5 月发表的,这时我们就郑重地开始开始去构建。它所做的一件事是,把平行链代码分为了四个主要部分:
    1、支持和可用性:验证人从收集人那里找到区块,然后说我觉得这个区块不错,把它包含到链上,然后保证检查区块所需的数据存在。
    2、批准检查:安全性的一大部分就来自于这里,它是一种方式,一旦平行链区块上链了,验证人通过一种安全的方式随机自我选择,这种方式就会检查是否他们应该恢复这些数据,然后自己检查区块。
    3、争议处理:也就是如果一个验证人检测到了某个东西是恶意的,那么它就需要去联系其他的验证人,让他们可以参与和检查。这种情况发生的概率极低,比如是 20 个小数点左右的概率,在批准检查阶段没有人发现这个区块是恶意的,此时事态就会迅速升级。所以说这些组件其实都是环环相扣的,来保证平行链的安全性和可扩展性。如果你去攻击这条链的话,你不会失去几百万美金的概率只有十万亿分之一,而且在每一次你去攻击时都是一样的。
    4、审计:在过去的几个月中,我们雇了 SR Labs 去做代码审计,去检查实现,试图找出 Bug。他们进行了独立的评审,检查了平行链的不同部分。现在我们也请他们做了其他一些部分代码的审计。他们提出了几个 Bug,不算太多,目前我们修复了 50% 左右,剩下的也有了解决方案。
    这就引出了技术敏捷性的概念,也就是在 Rococo 和 Kusama 上进行审计和重大部署之后,平行链已经准备好初始产品版本发布了,要注意的是,我们要修复显著的审计问题,安排在 12 月之前完成。真实环境下的部署也非常重要,我们有一个 Rococo 测试网,是一个多地区测试网,Parity 运行着它所有的节点,这个网络也没有经济价值,所以它只是用来试一试技术是否可行,我们可以看到在几百个节点的情况下这项技术有什么表现。
    我们还会看到在 Kusama 上的真实环境测试,因为在进入到真实环境之前,你永远不知道实际上会发生什么。我们可以试着在 Rococo 上尽可能地去中心化,但是直到进入真实世界前,你其实也不知道真实的情况会如何。Kusama 上有 900 个验证人,分布在全球,你根本不知道这些节点是谁在运行,他们只是在自己买来或租来的电脑上运行了一个程序而已。
    敏捷 vs 成熟
    
    那么,敏捷和成熟相比,意味着什么呢?
    敏捷的意思就是,它能用,但是它还没有到达最终形态。代码的功能都完整了,该有的功能都有。也用高标准测试过了,在各种边缘情况下都测试了,和各种模块都结合地很好。还有安全专业机构进行了独立的评审,我们还模拟了可能的攻击,看看该系统是否可靠。实际上如果你现在去看 Rococo 测试网的话,你会发现有敌对的节点正在试图去破坏网络,但是没有成功。但是,如果说某个东西是敏捷的,它可能还是存在 Bug,可能还需要重大优化。
    相对的就是成熟的这一类代码,当某件事已经演化到一个阶段,经过了几年的使用后,它已经是一个基础性的、大负载的、可靠性很高的基础设施,我们就会说它是成熟的。所以有很多优化可以去做,它是经过了实战考验的。比如说以太坊在 2016 年经历的上海攻击,那时大家真的在努力地试着去摧毁以太坊网络。当现实世界中的某些东西被证明可以承受经济攻击时,这是朝着成熟迈出的一大步。
    代码是稳定的,更多地在维护代码,而不是开发代码。这意味着在这这时创新并没有那么多了,因为它的基础设施和增长更多地都是一些边缘创新。
    走向成熟的道路
    那么,我们走向成熟的道路是什么?沿着这条道路前进的一些步骤是什么?我将介绍一些主要的步骤。
    我认为其中的一些非常重要的即将发生的事情是上下文执行、平行线程和一般的网络优化。所以我将深入聊聊这三件事。
    
    如果你观察过 Kusama 或 Rococo 网络,你会看到每 12 秒包含一个区块。这不是出于协议的限制,而是实现的限制。所以上下文执行就是为了从 12 秒出块加速到 6 秒出块。在我们目前 Rococo 和 Kusama 上的很短的区块执行时间中,又只有很少的时间是真正用于区块的执行的。
    上下文执行的想法是显著增加区块执行时间,它基本上是关于提前准备区块,有点像是在链下进一步构建平行链,然后慢慢地把这些东西放到主中继链上。而不是在平行链区块马上就要被包含到中继链上时再去构建这些区块。这是我们已经制定好的优化方案,我们已经为它制定了设计,它是接下来的优先事项之一。
    另一件即将发生的有趣事情是平行线程,它是建立在一个区块又一个区块的基础上的平行链插槽的动态调度。这是什么意思呢?目前平行链是有专用的执行时间的,这些时间通过拍卖来购买,可能是 6 个月、12 个月或 24 个月的时间专属于我,我可以在任何我想使用系统的时候去执行一个区块。而平行线程更像是一种即用即付的模型,它和平行链非常相似,其实代码实际上并没有特别不同,它实际上只影响我们所说的支持和收集阶段。对于我之前说到的一些阶段,比如可用性、批准检查和争议等,平行线程和平行链是一模一样的。
    网络优化是一个比较大的部分。这是点对点网络,正如 Gav 在之前的演讲中提到的一样,点对点网络是一个挑战,它非常困难,因为在客户端服务器模型中,你必须标记一些服务器,就能快速回复。但是当你在做点对点网络的时候,挑战就是尽可能有效和快速地分发数据,并且具有低冗余和高交付保证,其实很难做到这一点。我认为在网络优化方面有很多马上就要够得到的成果,这将极大地提高实现的性能。
    所以我觉得这些都是平行链方面在不久的将来可以关注的一些点。
    重构 Rococo
    接下来我想聊聊 Rococo 测试网,包括这对社区意味着什么,大家可以怎样参与进来。
    
    之前我提到了 Parity 在运行所有的 Rococo 节点,它的作用主要集中在内部测试上,我们会运行前沿代码,快速修改,部署对抗性节点之类的。但这确实意味着当我们在开发过程中发现了错误,我们偶尔会破坏这条链,这使得对于想在上面部署自己的平行链的团队来说,这条链变成了一个非常困难的部署环境。Substrate 开发者需要有一个地方来部署和测试跨链解决方案。随着目前版本的 XCM 更加稳定,大家已经可以真正使用那些跨链创新了,那么一个测试环境就变得非常重要。
    所以在这里我要向你隆重介绍 Rococo 改造计划
    
    我们的想法是,Parity 会在 Rococo 测试网上保持向后兼容性,以确保它不会重新启动。所以当你注册平行链的时候,不用像在 Kusama 和 Westend 里那样再去更新你的节点或 runtime,这意味着你可以计划在更长的时间内使用 Rococo,并真正将其用作与其他团队合作的地方。
    另一点是自动平行链插槽。我们构建了一种调度程序,将 Rococo 上的时间分配给注册使用它的团队,这样他们就可以获得长度为一周插槽。这些插槽会在可用性的基础上自动且公平地分配给团队。不过我们特别会优先考虑已在实时网络上部署链的团队,也会优先考虑加入了 Substrate Builder Program 的团队。
    当然我们也会非常注重社区。我们鼓励在 Rococo 上进行跨链通信和实验,尤其是在更高层次上,不仅是部署平行链,还包括在平行链链之上部署一些东西,比如我们希望可以看到用户界面或去中心化应用程序开发者,可以去利用多条平行链,并且享受在这个测试网中进行创造。而不仅仅是那些超级硬核的特别底层的开发者。
    我在这列出了一个时间表,说明一些 Rococo 改造的计划是什么样的。
    
    今天我宣布了我们打算改造 Rococo,我们还将很快发表一篇更长的博客文章来详细描述。
    然后就是技术方面的跟进,包括制定新的链规范,制定一些参数,比如 Session 是多长时间,更换验证人的频率如何等,我们会把这些都自动化。
    最后就是朝着 Rococo 的最终重启进发,我们将不再把这条链用于内部测试。目标是在 11 月底完成这一步。
    以上就是我的演讲,谢谢!
    
  • 欢迎学习 Substrate:?
        https://substrate.dev/
  • 关注 Substrate 进展:
        https://github.com/paritytech/substrate
  • 关注 Polkadot 进展:
        https://github.com/paritytech/polkadot