Cardano IOHK官网博客:组合器使Shelley硬分叉的工作变得轻松


原文及图片来自IOHK官网博客,原作者为市场部编辑Anthony Quinn,由卡尔达诺大使陈哲Anson翻译。

自从去年启动激励性测试网,标志着Shelley时代的到来之后,Cardano平台进入了快速发展的时期。在过去的30个月中,我们的Ouroboros Classic共识协议已经为Cardano Byron和ada加密货币提供了支持,我们将很快切换到Ouroboros Praos。这是我们的股权证明(PoS)协议的版本,该协议最初将在Cardano去中心化过程中为Shelley提供动力。它建立在抵押过程中,为ada持有者和股份池所有者提供奖励。

我们在2月20日用硬分叉对Cardano进行了升级,该硬分叉将主网从最初共识协议Ouroboros Classic切换到了更新版本Ouroboros BFT。这款BFT硬分叉在Ouroboros BFT协议下开始了它的过渡时期,是精简版的协议,能帮助我们切换到Praos,同时防止任何恶意行为。许多人甚至可能没有注意到,对于Daedalus钱包用户而言,这就是标准的软件更新。交易所必须手动升级,但是他们有几个星期的时间来升级,我们随时可以提供帮助。

下一事件是3月30日的“ Byron重启”。它为Cardano的许多组件发布了全新的代码,包括支持委托和去中心化的的新节点以及未来的Shelley功能。新代码库的一大优势在于,它已被重新设计为模块化,因此可以更改许多组件而不会影响其他组件。

反过来,BFT将充当Shelley硬分叉的起点,一旦我们对Haskell测试网感到满意,BFT就会发生。对于交易所,ada持有者和钱包用户而言,第二次硬分叉的过程与2月的分叉过程类似,希望这并不是一个什么大事件。

尽管表面上看起来一切顺利,但仍有许多活动在悄悄地进行着。就像鸭子在池塘中平静地游泳一样-而它的脚却疯狂地在平静的水面之下划动着-我们的区块链工程师就在辛苦地做着这样的工作。

因此,我们请了Cardano项目的两名主要工程师Duncan Coutts和Edsko de Vries,从而了解他们是如何怎么工作的。Duncan在过去三年中一直是Cardano的架构负责人,而Duncan和Edsko在他们之间已经使用Haskell长达35年。Haskell是用来开发Cardano的编程语言。

邓肯,你是怎么做到的?

邓肯:如Cardano路线图所述,IOHK的区块链工程师相信代码的顺利更新。它不是试图通过一次更新就从Ouroboros Classic过渡到Praos(这将是一项非常复杂的任务),而是使用Ouroboros BFT作为中介的两阶段方法(开篇图片)。BFT代码与在Byron重新启动时发布的Byron阶段的联盟节点和Shelley节点都兼容。这就像接力赛:一个跑步者(在我们的例子中,运行一个协议)进入切换盒,另一个跑步者正在等待;他们同步速度(因此彼此完全兼容),然后移交接力棒(操作主网),然后带有接力棒的新跑步者从交接箱继续下一圈。

Daedalus Flight流程帮助我们快速开发和测试了一个新的钱包,一旦每个人都在主网上运行了它,并且一旦我们完成了核心节点的交换,旧代码就变得多余了。我们现在正处于过渡阶段,4月24日发布了新的主网Daedalus钱包。

正如IOHK首席执行官Charles Hoskinson在其有关硬分叉的白板视频中所描述的那样,我们的目标是“优雅地进入Shelley”。进行此操作的重要工具是创建硬分叉组合器。

听起来像台机器,那它是什么呢?

邓肯:组合器只是将其他事物组合在一起的技术术语。例如,加法是数字的组合。硬分叉组合器将两个协议组合为一个协议,我们称这是两种协议的顺序组合,因为它先运行第一个协议一段时间,然后又切换到第二个协议。在我们的案例中,这是我们从BTF迁移到Praos时的两个版本的Ouroboros。

所有这些的聪明之处在于,使用离散模块来完成其工作,同时尽可能少地让两者了解彼此和区块链。简洁是关键,而这一过程中我们会提取所谓的“抽象”细节。大多数共识模块甚至不必知道它们正在处理一种加密货币,并且可能会将几乎任何东西都放在区块链上。例如,我们在研讨会上使用Ouroboros区块链上的神奇宝贝Ledger作为一个示例。唯一不同的是Ledger规则,而共识是相同的。您只需进行设置即可–在语法术语中“实例化“它-使用玩神奇宝贝而不是UTXO样式记帐的规则。[对技术有兴趣的读者,请注意Edsko在之后的博客文章中进一步研究“抽象”过程和组合器。

您让它听起来很简单!

邓肯:实际上这很棘手,因为Cardano会同时运行ada加密货币和其他很多东西。可以将其想象为在开车行驶和拖曳大篷车时改变汽车的所有车轮。因此,我们必须确保能够以完全可靠的方式执行此操作。

我们本可以将其作为一次性任务来解决,但是使用协议组合器以通用方式完成此任务是有意义的。我们之所以选择这种方法,是因为我们可以获得更好的结果,并且对确保代码正常运行至关重要的测试变得更加容易。最重要的是,还会有更多的硬分叉,这使选择更加明确。例如,当我们接近Cardano发展的顶点并跨过Goguen,Basho和Voltaire阶段时,每个阶段至少会有一个硬分叉。

那么,您如何应对棘手的问题呢?

邓肯:好吧,首先,我们必须要执行,而无需研究。研究人员将单个协议描述为独立的,完美的东西。但这不是我们的位置。在开始使用其他链条之后,我们正在尝试运行Praos。这项研究并未涵盖Edsko正在进行的工作,即以一种通用的方式从一种协议过渡到另一种协议,而且很难,很复杂。所有细节都需要很多思考,需要花费很多时间。但是在Cardano代码库之间切换并不是学者可以期望的那种发布。它没有新颖性,只是一个实施问题。

埃德斯科,您能举个例子吗?

正如Duncan所说,对于研究人员来说,这些实现问题是微不足道的,但处理它们是我们工作的99%。考虑到区块链的时间问题,这几个礼拜我一直不停的努力。时间划分为多个时间空挡,每个空挡最多可包含一个块。在现实世界中,我们经常需要在时间空挡号码和时间之间进行转换,例如,当某个节点需要知道“轮到我了吗?”以生成下一个区块时。这是Cardano的基础,但是空挡的长度在硬分叉之后改变。对于拜伦来说,时间空挡是20秒;对于雪莱来说,将是两秒钟,甚至一秒钟。要真正使事情复杂化,制作硬分叉的确切时间点取决于链本身。但是,我需要知道转换点在什么时候。这很麻烦:要进行时间空挡转换,我需要知道区块链的状态,但是要知道状态,我需要知道时间空挡的转换!

这是真正鸡与蛋领域,有许多复杂的事物需要解开。我们必须非常精确地对待事情。从理论上讲,这可能是微不足道的,但是很难弄清事物并确保它不是一个循环问题。

我们无法承担错的责任,那么您怎么知道自己是对的呢?

邓肯:这是一个很好的问题。我的答复是,您从两个层面来回答。第一个是知识分子:您分析问题,数学,与同事交谈并进行角力,直到您看到所有问题如何融合。其次,我们进行了所有QuickCheck测试,以使我们确信它可以完成我们认为的操作。我们进行了广泛的测试,这些测试确实将我们带入了您可能不会想到的异常情况,包括这种转换。每次更改一行代码,我们都可以进行100,000个测试。[LaünBrünjes撰写了有关Haskell的创始人之一John Hughes如何帮助IOHK制定其测试策略的文章。]

埃德斯科:是的,我同意这两点。在组合器方面,我通过考虑我编写的代码需要提供的保证,以及反过来又需要分类账的保证,来解决这些问题。我画了一个数学证明,证明这种“如果-那么”推理确实是合理的,然后转向形式化方法团队。正式的方法团队是建立描述区块链的数学规则的人员,然后他们可以以提供所需保证的方式来调整规则。

关于邓肯的第二点,我知道我上面提到的时间问题通过数学思考和测试是正确的。当我们拥有完整的区块链时,时序决策很容易,但是当我们必须对未来进行预测时,时序决策就很难。幸运的是,我们的设置方式意味着我可以轻松创建测试区块链。因此,我可以创建一个完整的区块链,然后将该链切成两半。我将前半部分视为现在。并设置另一半。然后,我可以使用“现在”(上半部分)对“未来”(下半部分)做出预测,并对照整体(在此基础上容易进行计算)进行验证。如果他们匹配,那么我知道一切都很好。

您什么时候开始的?

埃德斯科:邓肯提出OBFT的天才想法之后。因此,我一直在考虑关闭和关闭组合器18个月。从2018年10月开始对Ouroboros进行模块化重写的一开始,这就是一个设计目标,我第一次致力于GitHub存储库。此后不久,2018年12月,我们与OBFT和Praos进行了原型演示。

有多少人参与其中?

邓肯:许多人一直在研究共识代码,但是只要遇到任何困难,例如组合器,我们就会把它交给埃德斯科:他是我们的软件工程师,非常出色!这是Haskell编程的一种自由攀登方式,而不是借助正式方法的支持来攀登。

最后还有什么的想法要分享吗?

邓肯:现在正在逐步淘汰正在运行的代码,并且不久之后一个月前运行Cardano的代码将不再存在。一旦每个人都在主网上运行了新代码,并且一旦我们完成了核心节点之间的交换,旧代码就变得多余了。我们现在正处于过渡阶段,没有人大喊着天空正在塌落,没有人注意到它。

埃德斯科:就其本身而言,这是一个相当大的成就。OBFT的思想对于进行过渡至关重要,但是一旦我们过渡到Shelley,它就不再重要。这是我们真正放弃传统代码的一种方法,这通常很难做到,因为银行知道它们的成本。

邓肯:如果一切正常,您将不会注意到(背后发生的)任何事情。

邓肯和埃德斯科,谢谢您的宝贵时间。

原文链接: https://iohk.io/en/blog/posts/2020/05/07/combinator-makes-easy-work-of-shelley-hard-fork/