IOHK官网博客:不断优化Cardano

image
原文来自IOHK Tim Harrison,由卡尔达诺大使陈哲Anson翻译

网络优化之道在于循序渐进的调整

作为权益证明区块链,Cardano 具有高度安全性和网络故障弹性。在 Ouroboros 共识算法、使用形式方法的内置 Haskell 和同行评审的学术研究的驱动下,卡尔达诺旨在提供一个坚如磐石的环境,以去中心化和高度可扩展的方式处理全球数百万笔交易。

在我们之前的博文中,我们讨论了网络性能——系统在处理、验证和签署交易时作为一个整体是如何工作的。如果您想要一个长期构建的系统,那么在最早的设计阶段就做到这一点至关重要。然而,网络容量是一种宝贵的资源,因此对于最有效的性能指标,计算、内存、存储和网络资源的有效消耗至关重要。

卡尔达诺旨在灵活。它旨在最大限度地提高吞吐量,同时允许对不断增长的需求做出响应。随着网络的发展,我们正在调整协议参数以适应价格波动、扩展可扩展性和吞吐量属性。因此,让我们仔细看看我们将如何随着时间的推移优化网络性能。

定义堵塞

高效的系统——从网络到道路——旨在最大限度地减少拥堵,同时在拥堵发生时实现有效管理。在区块链术语中,拥塞意味着网络过度饱和并且在处理大量交易和签署相关块时遇到困难。平均而言,在给定的 epoch 中,卡尔达诺区块的利用率约为 25%,这表明网络通常并不拥挤,并且有大量的备用容量来处理更多的交易。

卡尔达诺旨在即使在严重饱和的情况下也能保持公平和高弹性。让我们提醒自己当前的参数设置,并查看计划中的未来优化。当前的性能指标取决于以下措施:

• 吞吐量— 传输的数据量。当前块大小设置为 64 KB。单个 Plutus 脚本交易当前限制为 16 KB,简单交易通常最多可占用 300 字节左右。这些措施已经过平衡,以确保良好的网络利用率,同时最大限度地减少交易延迟。如果立即大幅增加,用户将面临更多的区块采用延迟。这是因为吞吐量和及时性相互矛盾——最大化吞吐量意味着更好的网络性能,但是当系统严重饱和时,这可能以增加延迟为代价。

• 及时性——即区块采用时间。区块采用的总“预算”设置为 5 秒,以便区块在网络中传播(95% 的权益),而 Plutus 脚本的预算约为 50 毫秒。这旨在允许块包含脚本和简单的交易而没有垄断。

最近,用户记录到交易处理的等待时间增加,这是由于大量 NFT(不可替代令牌)下降造成的。这种过饱和的原因在于,大量的 NFT 被一次性释放,导致以下情况:

• 大量同时进行的 NFT 交易

• 多个用户试图购买同一个 NFT 并因此试图同时处理交易

• 同时向无法购买 NFT 的用户退款交易

这种情况造成了 NFT 销售的网络稀缺性,因此对该服务的需求巨大——占供应量的 43,000%。还值得注意的是,“拥堵”期持续了不到一小时。

这是一个不断增长的市场,NFT 创建者已经开始迭代他们的流程,以尽量减少此类下降对用户体验的影响。现在还早,我们都在快速学习。需要注意的是,NFT 的铸造过程是完全可并行化的,这意味着该过程没有限制。一旦铸造,存储可编程交换代码和交易所需资产的 NFT 就可以与市场互动了。

但至少在中短期内,这是建设更高效的交通系统而不是拓宽道路的问题。一些开发人员已经在专门为 NFT drop 生产此类系统,这应该会降低成本和短期网络负载。

去中心化交易所(DEX)

许多基于 Cardano 构建的早期 DApp 是 DEX 或去中心化交易所。在某些应用程序中,用户在放置时往往会遇到争用命令。因为 DApp 设计的先决条件是将整个状态保持在一个 UTXO 内(而不是分布在多个 UTXO 中),所以未来的交易会依赖于前一交易的输出。这被广泛称为并发“问题”。然而,再次将汽车比喻成“问题”,就像在英国或日本靠左行驶是“问题”一样。它确实需要一个学习曲线,但最终它只是一种不同的做事方式。如果开发人员不这样做,是的,他们会遇到问题!它本质上也不是更复杂——只是需要一种不同的方法。

Cardano的 EUTXO 模型不同于基于账户的模型。基于 Cardano 构建的 DApp 应该摆脱单线程状态机风格,直接向下抽象到 EUTXO,构建一个涉及 EUTXO 图中并发边的解决方案。重要的是使用不同的 UTXO 集,从而加强并行性,这将提高系统的吞吐量,同时保持单个操作的性能相同。当然,这确实需要改变任何习惯于以太坊方法的开发人员的思维方式。然而,基于 UTXO 的模型比基于账户的模型更安全,因为将所有状态保存在一个账户中更容易受到攻击。如果正确使用并行技术,用户将享受吞吐量和可扩展性方面的改进结果,而链下解决方案更适用于 UTXO 分类账。有关更多详细信息,请阅读并发博客文章以及如何构建可扩展的 Plutus DApp。我们将在适当的时候发布关于此的更多内容,以提供有关充分利用该模型的更多指导。

优化路线图

我们在发布时的重点始终是在优化之前提供核心功能和正确性。这一直是我们的既定目标。我们将继续监控性能和基准调整。随着网络的发展和卡尔达诺以更高的容量运行,我们将调整参数化以跟上网络需求。这些是逐步升级,将在接下来的几个月内逐步实施,以确保更改满足网络要求,并且不会对不同的属性做出妥协。

我们进行了广泛的分析,并开始实施节点指标,以准确衡量数据扩散时间。数据扩散是在验证区块链的节点之间分配交易和区块的过程。必须为节点提供所需的信息,以便共识算法可以做出决定。

我们可能会实施从交易提交到交易采用的平均等待时间。除此之外,我们正在调查和分析将在短期和长期内反复提高网络性能的场景,包括:

• 块大小增加——块大小增加意味着一个块中有更多交易。好处是在网络饱和期间,区块采用交易的等待时间会更少。然而,有一个权衡。更大的块需要更长的时间在网络上传播。这也意味着节点将需要更多时间来验证交易。尽管增加块大小是提高网络性能的一种选择,但应谨慎执行此类更改。为确保增加不会影响区块采用时间,我们将在高饱和时期逐步更改参数并评估结果。这不是一步更新,而是一种迭代方法,将为我们提供清晰的结果并帮助确保最有效的调整。

• 内存池大小——目前,内存池的大小设置为 128 KB,是当前块大小的两倍。内存池用作网络缓冲区,在将交易包含到块中时可能会导致短暂延迟。然而,内存池大小的增加不会提高网络吞吐量——交易队列将保持不变。内存池允许公平采用新的交易,这些交易根据彩票算法选择的生产节点随机进入。

• 脚本压缩——鉴于当前交易大小设置为 16 KB,我们将继续致力于压缩,这允许协议以透明的方式“压缩”代码。这意味着由于大小减小,一个区块中有更多的脚本交易——开发人员将能够提交更复杂的代码,将其压缩到 16 KB 或更少,并且将为其他交易留下更多空间。

EUTXO架构

正如我们之前的并发博客文章中所述,卡尔达诺的 EUTXO 模型在设计 DeFi 应用程序时消除了所有类别的问题。除了 EUTXO 并行处理交易的本机能力之外,该模型的确定性特性确保开发人员和用户可以避免浪费“gas”。

也就是说,EUTXO model 与基于帐户的模型不同。将用于基于帐户的系统的应用程序架构提升和转移到基于 EUTXO 的系统将导致应用程序设计欠佳。专为 Cardano 的 EUTXO 模型设计的应用程序将提供最佳的用户体验。

我们将在短期内发布更深入的技术探讨,探讨开发人员如何优化订单提交和处理,例如,针对 EUTXO 模型。

迭代与改进

因此,随着我们不断发展和迭代,幕后还有很多工作正在进行。现在还处于早期阶段,我们将不断评估网络性能并相应地调整参数。在短期内,我们将能够通过更均匀地分布权益分配和奖励分配计算来缓解 NFT 丢弃拥塞。反过来,这将使我们能够增加块大小,消除时间边界处的停顿和拥塞,并消除计算尖峰(这会导致块传播速度变慢)。区块大小的逐渐增加也将让我们评估网络性能的最佳情况,这些结果将很快在网络上可见。

我们还计划将账本状态移至磁盘存储以减轻链上负载,同时实现脚本压缩和链上共享功能。最终确定后,它们将极大地补充网络调整。

在中期,Hydra 将带来额外的能力。从长远来看,我们的首席科学家和团队将继续围绕定价框架研究其他方法和机制,并增强 Ouroboros 协议以提高交易吞吐量。在以后的博客文章中将详细介绍这一点!

两个月

距离卡尔达诺智能合约时代开始仅两个月。无论围绕“发布”的期望和期待有多大,这永远不会是一次成功的升级。正如生态系统建立动力总是需要时间一样,随着对网络需求的增长,总会有一段时间的适应和调整。我们正在旅途中,理解社区反馈仍然是关键。与许多令人兴奋的新项目#BuildingOnCardano 交谈时,我们正在更好地了解他们的计划和目标——以及他们面临的任何问题——以便我们能够根据需要提供支持和服务。我们也在密切关注社区辩论。

现在还为时尚早,我们都还在学习。然而,按照设计,卡尔达诺旨在与其新生但已经充满活力的生态系统一起灵活发展。让我们继续建设!

如果您是一名开发人员并需要指导、支持,或者只是想顺便参加我们的公开会议之一聊天 - 请确保您加入我们不断发展的 Discord 技术社区。

感谢 John Woods、Vitor Silva、Kevin Hammond、Duncan Coutts、Romain Pellerin、Michael Peyton Jones、Jean-Frederic Etienne 和 Olga Hryniuk 在准备这篇博文时给予的支持和反馈。

原文链接:Optimizing Cardano - IOHK Blog