解析平行链:实现过程、技术难点、未来发展方向等

PolkaWorld

共 4837字,需浏览 10分钟

 · 2021-06-12

加入 PolkaWorld 社区,共建 Web 3.0!


  • 平行链是如何从研究论文,变成代码实现的?

  • 平行线程、嵌套中继链等,未来将如何发展?

  • 平行链可扩展性的极限在哪里?


在 2021 Polkadot Decoded 的圆桌讨论 “解析平行链:谁做了平行链?平行链是什么?为什么要有平行链?” 中,研究员 Jeff、代码实现者 Rob 和主持人 Joe 一起讨论了一些对于平行链发展很重要的问题。PolkaWorld 在本文中总结了该圆桌主要内容。


Jeff:Jeff Burdges,W3F 密码学研究员,做了很多平行链开发方面的研究

Rob:Robert Habermeier,波卡联合创始人/Parity 核心开发者,带领实现团队让平行链能够在实际中运行起来

Joe:Joe Petrowski,W3F 技术集成负责人,本场圆桌主持人



Joe:大约一年半以前,Jeff 带领着一个团队发表了一篇关于可用性和有效性的论文。在实现时,这个方案已经改变了很多。Jeff,你可以简单谈一谈这篇论文的想法是如何产生的吗?


Jeff:我们从以太坊生态那里获得了一些想法,比如使用纠删码的想法。但是围绕这些想法的一些具体的东西,比如如何优化分片,都没有正式确定下来。


在 2019 年末,我们决定要把这些想法正式化,提出更精确的方法。一般来说,我们设计复杂协议的方式是,我会写下所有可能的设计选项,然后用排除法。


在 2020 年初,我写下了这个设计,并且和大家讨论,我们注意到了一些问题,我想出了一个叫 “Two-phase inclusion” 的技巧。也就是说在真正开始之前,平行链中继链必须知道一个区块,验证人必须说这个区块是有效的。


之后我们开始做纠删码,然后开始做真正的检查它的工作。这样做的好处之一是,因为有人在这个过程中投入了很多切身利益,从而会限制其可以尝试的次数。从而做到如果你要攻击它,那么你也会毁掉你自己。它不是加密学安全性,而是分布式系统安全性,但是是合理的。


Joe:对于不熟悉分片的人来说刚刚说的可能有点抽象。其实就是,我们有一千个验证人,当你想要包含这些平行链区块中的一个时,你其实需要把数据块发给所有验证人,涉及到费用、复杂性、网络、存储等,让所有人都得处理这个消息,所以你想要真正确保这些消息是有效消息,而且是有理由的。


Jeff:是的。纠删码其实挺老了,有不同类型的纠删码。不过一般来说当如果你用密码学的话,一般是使用一些基于拉格朗日插值法或者里德-所罗门码之类的。原因是它的阈值很陡峭,所以我们可以从任何三分之一的碎片,来恢复全貌。


那我们怎么做呢?我们有平行链区块,叫做候选区块,我们有 3f+1 个验证人。那么我们把这些东西纠删码为 3f+1 个碎片,你只要有了任何的 f+1 个碎片,就可以重构原始区块。也就是说只要比 1/3 多一点点的碎片,你就可以重构原始区块。


这是一种很古老的数学方法,实际上是让我们的速度更快。根据我们目前的验证人数量,我们必须找到一些比较新的论文,来进行优化。这就是我们今年做的事 —— 去大大优化纠删码。我们让它的运行速度快了 400 倍,渐进地看其实更快。从 O(N²) 算法到了 O(log n) 算法。这让计算变得没有那么的有负担。之后我们可能还会做得更好。这是我们最近的一个突破,当然了如果我们能在更早就解决的话就好了哈哈哈。


Joe:把这些研究变成代码,其实也是很大的挑战。我们去年年中上线了 Rococo 测试网,Rob 可以谈谈这个协议的实现早期遇到的一些挑战吗?


Rob:我记得第一次跟平行链相关的代码提交是在 2018 年下半年,2019 年中有了我们所说的 V0 协议的初稿,在最初的几年中,我们更多地投入在 BABE、GRANDPA 共识上,也就是出块和区块确认方面,那时候其实还没有真的深入研究平行链的东西,因为平行链的部分更复杂,需要更多的开发时间。


从 2019 年中后期到 2020 年初左右,事情有了很大的进展,就像刚刚 Jeff 提到的,研究团队开始真正把协议确定下来了,像是可用性确保了平行链区块仍然存在,以便其他人可以检查它们,来进行额外的检查,从而确保安全性。


我觉得实现所有的这些研究其实非常困难。如果你在构建任何类型的系统,那么你每向系统添加一点额外的复杂性,那么创建该系统所需的时间就会指数级增加。这个规则也同样适用于代码,因为一旦你达到了一定的代码量,其实真的很难再添加更多的东西,因为新的东西一定会扰乱、破坏之前做好的一些东西。


所以说有一个好的设计和规划是很重要的,在我们迭代协议的时候,我们肯定会来来回回做一些研究。但是 2020 年的时候,我们把精力放在了《实现者指南》上,在那里面进行迭代,而不是在代码里。我可以和 Jeff 和 Al(Alistair) 通话,来讨论论文草案里的内容,然后写一个页面来说明 “我们会这样写代码”,而不是直接就去写代码,我们用这种方法节省了几周的时间,之后我可以把这些写代码的工作分配给很多个开发者。


所以我觉得在建设这样的系统的时候,有一个很好的计划很重要。还有就是有一个模块化的系统,这样的话你可以添加一个独立部分的代码,你可以把这些代码整理成小的包,而不是一整个系统,因为一个人很难搞定一整个庞杂的系统。


Joe:说到目前的阶段。现在 Kusama 已经上线了 Shell 空白链,Rococo 上已经有了 12 条平行链,但是 Kusama 的出块时间在 12 秒左右,我们正在解决这个问题。为了将出块时间提高到 6 秒,并且在 Kusama 上上线更多的链,短期内我们面临的挑战是什么?


Rob:我觉得这一切本质上说都归结到网络。Kusama 有 900 个验证人,这些验证人都是一些拥有 KSM 的人,在全球部署了节点来同步链。这件事很酷,这可能是全球最大的验证人集之一。


但是当你向这个网络添加一些复杂性,比如添加平行链的时候,肯定就会增加很多负载。其实我们之前也在 Rococo 上用相同的参数测试过,但是在 Kusama 上的效果却完全不同,因为在 Kusama 上验证人节点在全球各地运行,所以最主要的挑战就是让网络代码尽可能平稳地运行。我们写网络代码的时候,做了很多反作弊的机制,这种东西就是,如果没人捣乱的时候你都注意不到它的存在,但是如果有人作恶,你就会发现这些防御机制非常重要。


Jeff:没错。当我们添加越来越多的平行链的时候,会出现更多的计算负载,我们会看看到时候会如何发展,我们会如何在这个过程中成长。其实观察这些操作会如何影响网络,也是一个渐进的学习过程。


Joe:这就是 Kusama 存在的意义,不是吗?


Rob:没错。随着平行链变多,验证人的负载肯定会变多的。因为验证人要验证一个区块,并且要把自己的币抵押在区块背后,其他的一些验证人就会自我选择去做检查。平行链越多,你要做的计算就会越多,虽然计算量应该比平行链增加的数量慢,这也是为什么这个网络是可扩展的,而不是像其他一些区块链一样不可扩展。但是作为验证人,你可能还是需要在每秒内验证几十个区块。


Joe:我们聊点更实际的吧,聊下接下来一年波卡和 Kusama 的计划吧。我们有一个平行线程的规划,其实现在在 UI 里面已经能看到了,因为链在升级为平行链之前,都是以平行线程的形式注册的。但是之后我们会让平行线程更加的实用,你们可以谈谈平行线程的设计、实现,为了实现它还剩下哪些工作待完成吗?


Rob:平行线程跟平行链差不多,主要区别在于它被调度的方式不同。我们有一个调度程序,如果你是平行链,那么每个区块都会被安排到;如果你是平行线程,那么你需要进行拍卖,平行线程收集人可以互相竞争,来获得写入区块的的权利。这会带来收集方面的网络改变,当你是平行线程出块人的时候,你需要让验证人知道你有区块要提交。


所以总的来说挑战有三点:调度程序、拍卖、网络方面的改变。


Jeff:其实当时做平行线程有种设计,但是最后我们选择了有拍卖的这个。因为这个设计可以更好地防止作弊,但是对于平行线程来说,如果它们出于某些原因无法提交区块的话,它们可能会丢失资源。所以我们还得再看看一些经济方面的问题。


Joe:我们说过会把一些核心功能从中继链中释放出来,下放到平行链中,来进一步实现可扩展性,和实现嵌套中继链(Nested relaychain)的想法。你们想谈谈为什么要这样做吗?


Jeff:其实相比 “嵌套中继链” 的说法,我更愿意称其为 “中继链分片”,因为嵌套中继链听起来像是某一条链是主导地位。


从某种意义上说,中继链的分片比我们现在已经做到的(平行链分片)还要简单一些。不过我觉得可能会在超过 3000 个验证人的时候来做这个事,我想告诉大家现在还不用急着去实现它。在这之前,我们希望能先让中继链的功能尽可能简单,我觉得这样对于开发者来说工作量是最小的。


Rob:目前来看,Staking 和选举模块和一些治理功能其实是比较重的,会给中继链带来较大的负载。所有中继链上发生的事,中继链验证人都需要去执行。而根据设计,发生在平行链上的事情只需要验证人的子集来处理。所以这就是可扩展性的来源,把每个验证人机器都需要执行的事变得尽可能少。


我觉得安全地去提炼出 Staking 和治理之类的东西其实挺难的。因为波卡有一些故障模式,比如一个机制是在进行争议分析的时候的时候,链可能会被阻止出块。你可能无法进行 Slash 交易,验证人集无法更新交易等。这些都是很棘手的挑战。


不过这个其实也不是很紧急。在这之前,我们应该会优化节点那边,比如如何处理平行链和网络消息,来获得更高的扩展性,和运行更多的平行链。


Jeff:我觉得我们的目标应该是,虽然这个目标可能无法达到,但是目标应该是达到同等水平,让每条平行链有一个验证人。这个可能无法实现,但是当我们到达这个情况的时候,我们应该知道这个极限的存在,然后朝其他的方向努力。


Joe:刚刚你说 3000 个验证人,意味着 3000 条平行链。Rob 你作为实现者,怎么评价这个目标?


Rob:(笑)暂时还做不到,这是肯定的。我觉得代码经过一轮优化之后能运行 80-100 条平行链,我就很开心了,而且这对社区来说也绰绰有余了。


Jeff:是的。最终我们可能会到达一个点,用户耗尽了,我们得开始说服更多的人来使用,所以我猜可能会有很多次这样的爆发。


Rob:我想是的,我觉得这有点像波卡治理遇到的挑战 —— 拍卖计划的长尾效应是什么?因为在某些时候,如果所有的技术进展顺利,那么我们可能有能力运行更多的平行链,甚至可能超出市场对平行链的需求。但是我们也不希望平行链的资源被一些垃圾项目填满,占用个两年,当然之后社区的发展赶上来了(平行链的位子又会不够用),肯定会有这种来来回回的发展过程。


  • 欢迎学习 Substrate: 

    https://substrate.dev/

  • 关注 Substrate 进展:

    https://github.com/paritytech/substrate

  • 关注 Polkadot 进展:

    https://github.com/paritytech/polkadot

更多内容:


不懂就问 5 | 平行链拍卖对波卡生态有什么影响?

波卡周报 | Statemine 已添加 NFT 和 asset 资产模块!

Statemine 获得 Kusama 网络首个免费平行链插槽!


扫码关注公众号,回复 “1” 加入波卡群

关注 PolkaWorld

发现 Web 3.0 时代新机遇


点个 “在看” 再走吧!

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报