IOHK官网博客:并发性——卡尔达诺智能合约和 eUTXO 模型

image
原文来自IOHK官网博客 Olga Hryniuk,由卡尔达诺大使陈哲Anson翻译

卡尔达诺的 eUTXO 模型提供了一个安全且通用的环境,来处理多个操作而不会出现系统故障

Cardano是一个基于 UTXO 的区块链,它利用与其他基于账户的区块链(如以太坊)不同的去中心化应用程序 (DApp) 编程范式。 Cardano 使用的特定风格是 Alonzo 升级引入的扩展未花费交易输出 (eUTXO) 模型。 eUTXO 提供了更高的安全性,允许智能合约执行成本的可预测性(没有令人不快的意外),因此提供了一种不同的并行化方法。

eUTXO继承了 UTXO(比特币)模型的每个分支设计,其中一个分支根据定义是需要一系列验证的交易序列。为了将逻辑拆分到不同的分支并实施更多的并行性,使用多个 UTXO 构建 DApp 和其他解决方案至关重要。这在扩展方面提供了好处,就像开发比特币服务先决条件将一个钱包分成子钱包一样。

基于 Cardano 构建的 DApp 不限于每个区块的一笔交易。事实上,区块预算(即它可以容纳的最大交易数量)允许执行数百个简单的交易和几个复杂的脚本。然而,eUTXO 模型只允许花费一次交易输出。鉴于用户在尝试访问同一个 UTXO 时可能会面临争用问题,因此使用许多不同的 UTXO 很重要。请注意,这很重要,除非这样的设计会受益于严格的客户排序。 UTXO 集可用于实现包含信号量的设计模式。此外,不同的用户可以与一个智能合约进行交互,不会出现任何并发故障。这是因为智能合约可以处理构成其当前状态的许多不同的 UTXO,以及允许解释这些 UTXO 的链下元数据。

并行执行

区块链以不同方式实现交易处理的不变性和透明度。任何区块链系统都应该具有一组属性来满足对安全且快速的操作处理不断增长的需求,即:

吞吐量——系统在特定时间段内可以执行的操作数。例如,这与一秒钟内处理的交易或智能合约的数量有关。

性能——系统运行的速度。性能衡量交易或智能合约执行的时间。

可扩展性——系统在不使网络过载或影响性能属性的情况下执行多项操作的能力。

通过增加并行度,我们最终可以提高系统的吞吐量,同时保持单个操作的性能不变,但这种可扩展性总是受到争用程度的限制。

谈到可扩展性,我们还区分了并发性、并行性和争用等系统属性。并发性对于允许多个参与者在不相互干扰的情况下在特定任务上取得进展至关重要。并行性允许在没有任何干扰的情况下同时进行此类进程。当多个参与者在同时或并行工作时相互干扰时,就会发生争用。

理解并发性

并发可能会也可能不会提高系统的性能、吞吐量或响应能力。并发量限制了可以执行的最大并发操作数。

为了在基于 UTXO 的区块链中获得实际的性能改进,处理器或其他参与者应该能够同时执行多个操作。并发级别越高,最大可能的并行度就越高。然后,这种方法转化为性能改进和吞吐量。与基于帐户的系统(如以太坊)相比,它还具有显着的优势。

在 UTXO 账本上部署 DApp 是不同的

Cardano的 DApp 部署方法是不同的,因此它需要学习曲线和不同的方法。这就像使用不同的编程语言一样:有一个目标——部署解决方案,但为此目的使用的编程语言有很多。

最大化并发是一项需要学习的技能:开发人员需要以严格限制争用机会的方式编写代码(例如,通过避免共享状态和意外依赖)。然后系统必须将这种并发性转换为并行性。许多开发人员已经确定了解决此问题的方法,而其他开发人员仍在开发解决方案。简单地将经验教训移植到一个区块链上是行不通的;虽然学习曲线有点陡峭,但结果表明这是值得的。

无论哪种方式,重要的是要了解在 Cardano 上部署可扩展的 DApp,开发人员不能只使用经过调整的以太坊合约。 Cardano 基于 UTXO 模型;它不是基于帐户的。这意味着单个链上状态将无法满足 Cardano 上的并发属性。相反,DApp 应该在许多 UTXO 之间拆分它们的链上状态。这将增加其应用程序的并发性,从而实现更高的吞吐量。

我们的教育团队之前在 Plutus Pioneer 课程中分享了一个简单的 AMM 风格的 DEX 实现。虽然这对于教学目的很有用,但该架构不会直接支持需要订单簿方法和额外并发性的商业 DEX。希望部署在 Cardano 主网上的开发人员需要相应地提高架构的可扩展性。

我们在最近的 Djed 稳定币论文中提出了一个解决方案。对于 Cardano 上的 Djed 实现,订单簿建模模式受到青睐,其中订单制造商负责将任何铸造或销毁订单转发到稳定币智能合约,并对每个潜在的稳定币买家或卖家征收额外的激励费用,储备金币。多种安全机制——通过广泛使用不可替代的代币 (NFT)——也被用来保证交易的唯一性、每个提交订单的正确性,并防止抢先攻击。 NFT 代币还用于报告成功或失败的铸造和销毁订单。我们将很快发布一篇关于此的更完整的文章。

要了解有关可扩展性的更多信息,您可以阅读如何设计可扩展的 Plutus 应用程序并了解如何使用订单簿模式在 Cardano 上组织 DApp。开发人员还提出了 eUTXO 智能合约架构的并发和确定性方法,这可能被视为 Hydra 论文中引入的并行状态机步骤的概括,以实现多步状态机。许多其他开发人员和社区成员也在 Twitter 上发表了论文、视频、文章和有用的主题,概述了他们的方法。这是关于社区将如何继续开发自己的创新解决方案的精彩一课,因为随着平台的成熟,方法变得更加标准化。

展望未来

Alonzo硬分叉活动将介绍 Plutus 1.0 的核心构建块。这是生态系统发展的开始。虽然现在还为时过早,但 Alonzo 测试网允许我们的开发人员提前评估系统属性并构建可扩展的 DApp——为他们的主网启动做准备。数十个项目已经在使用 Plutus 环境的本地实例。随着主要公共测试网很快支持智能合约,我们预计在未来几周和未来几个月内活动将显着增加。本月晚些时候,卡尔达诺峰会(9 月 25 日至 26 日)将展示其中许多项目,并提供有关智能合约路线图和技术堆栈持续发展的重要更新。开发者活动、黑客马拉松,当然还有 Project Catalyst 的结果,将继续为这个快速增长的开发者生态系统带来新的工具和想象。

如果您是开发人员,如果您希望为您的项目提供资金,请确保加入我们的 Discord 社区并参与 Project Catalyst。

我要感谢 Lars Brünjes、Jann Müller 和 Manuel Chakravarty 在博客文章准备期间提供的技术投入和支持。

原文链接:Concurrency and all that: Cardano smart contracts and the eUTXO model - IOHK Blog