Understanding the Composability of Applications on Cardano | Cardano Explorer (cexplorer.io)
卡尔达诺通过两层架构支持其应用程序的可组合性,但主要是通过智能合约的模块化方法。 快来阅读更多相关内容。 在本文中,您还将了解有关可扩展性和并行性的更多信息。 总之,我们将在可组合性方面对卡尔达诺和以太坊进行快速比较。
什么是可组合性
可组合性是一个术语,指的是不同应用程序或组件协同工作并相互构建、创建新的、更复杂的功能的能力。 可组合性通常被认为是去中心化应用程序(DApp)的理想功能,尤其是在去中心化金融(DeFi)领域,用户可以组合不同的协议或服务来创建新的金融产品或市场。
可组合性使第三方开发人员能够连接他们的应用程序并将新的解决方案推向市场。 将两个(或更多)应用程序组合在一起可以允许用户通过单个界面与所有服务进行交互。 单个应用程序接口将允许访问所有组合应用程序的所有服务。
比如可以组成一个DEX和一个借贷平台。 或者你可以将两个 DEX 组合在一起。
因此,用户可以访问更多的矿池、更多的代币、更多的流动性等。DEX 可以共享订单和代币的市场价值(预言机)等。这提高了效率、盈利能力和用户满意度。
在下图中,您可以看到两个 DEX 团队同意合作并共同编写应用程序。 用户可以通过任何 DEX 的单一界面访问两个 DEX 的流动性池。
可组合性也有缺点。 通过组合应用程序,可以创建相互依赖。
可组合性引入了复杂性,因为它需要不同应用程序或组件之间的更多协调和同步,而这些应用程序或组件可能具有不同的接口、数据类型或协议。
可组合性可能会降低安全性,因为它使应用程序或组件面临更多来自彼此的风险或威胁,例如冲突、故障、攻击或漏洞。 如果一个应用程序遭到黑客攻击,可能会给另一个应用程序带来问题。
必须指出的是,DeFi 服务在经济上是相互关联的。 例如,借贷平台可以使用其他应用程序发行的稳定币。 如果稳定币因某种原因脱钩,借贷平台的用户将会受到影响。
尽管存在风险,可组合性仍然是一个理想的功能,因为它可以改善用户体验并支持创新。
Cardano 通过允许 DApp 实现以下功能来实现可组合性:
在不同的智能合约或链之间共享数据和价值,而不会产生冲突或失败。
并行运行(执行)多个智能合约,互不影响或相互影响。
与其他平台或协议(例如以太坊或比特币)连接和互操作。
Cardano 支持其 DApp(或只是应用程序)在账本级别的可组合性,即通过允许并行执行智能合约的扩展 UTXO 模型。 卡尔达诺被设计为两层架构,其中结算层处理价值转移,计算层处理智能合约的执行。 此外,智能合约的功能可以分为链上和链下逻辑。
卡尔达诺的两层架构
为了正确理解可组合性,了解卡尔达诺两层架构以及智能合约操作结果存储在账本中的方式非常重要。
智能合约的执行(无论在哪里执行)和结果在账本中的永久存储之间存在联系。 区块链平台的几乎每个组件都会影响可组合性的整体质量(还有可扩展性、安全性等)。
Cardano 旨在通过采用新颖的设计,将平台的核心功能分为两个不同的层:Cardano 结算层(CSL)和 Cardano 计算层(CCL),从而提供比其他平台更高的可扩展性、安全性和可持续性。 这种设计对可组合性有一定的影响。
CSL 负责处理用户或智能合约之间的价值转移,例如 ADA 或其他原生代币。 CSL基于扩展的UTXO模型,确保交易的确定性和可预测性。 重要的是,它允许并行执行智能合约。
CSL 中实施了 Ouroboros 权益证明共识。
CCL 负责处理智能合约的执行,例如定义应用程序逻辑和规则的 Plutus 或 Marlowe 脚本(验证器脚本、铸币策略等)。 CCL 基于称为 Plutus Core 的函数式编程语言,该语言在卡尔达诺虚拟机 (CVM) 上运行。
CCL支持多种编程语言,例如h 如 Plutus、Marlowe、Glow、Aiken 等,可以编译成 Plutus Core 并在 CVM 上运行。
与其他使用单层架构的平台(例如以太坊)相比,卡尔达诺的两层架构具有多个优势。
两层架构允许更大的灵活性和创新,因为每一层都可以独立更新和修改,而不影响另一层。 例如,CSL 可以更改其共识协议或代币模型,而不影响 CCL。 同样,CCL 可以更改(或升级)其智能合约语言或执行环境,而不会影响 CSL。
另一方面,这种架构带来了复杂性并降低了可用性,因为它需要不同层之间更多的协调和同步。 例如,CSL 和 CCL 必须维护账本状态的一致视图,并确保交易在两层之间有效且兼容。 可用性降低需要用户或开发人员使用更多步骤和工具来访问不同层或与不同层交互。
两层架构提高了平台的可扩展性,因为它减少了区块链上的负载并允许智能合约的并行执行。 例如,CSL 只需验证涉及价值转移的交易,而不需要验证智能合约的执行。 同样,CCL 可以并行运行多个智能合约,例如在不同的侧链上,而不会相互干扰。
卡尔达诺的两层架构通过允许智能合约在区块链上相互交互和合作,实现了智能合约的可组合性。
想象一下,代币 A 由智能合约(铸造策略)As 铸造,代币 B 通过 Bs 铸造。 另一个实现交换的智能合约可以同时使用 A 和 B 代币。 在这种情况下,智能合约之间并不直接交互(它们不是组合的),而是在不同智能合约之间共享代币。 我们可以在资产层面讨论可组合性。
卡尔达诺主要通过智能合约的模块化方法来实现可组合性。 即通过将智能合约分为链上和链下逻辑。 我们稍后会更详细地讨论这一点。
Plutus 脚本(验证器)由 CCL 中的 Cardano 虚拟机执行。 CCL 与 CSL 交互,CSL 是仅处理用户或智能合约之间的价值转移的层,例如 ADA 或其他原生代币。 CSL 验证并存储涉及区块链上价值转移的交易。
CSL 仅适用于智能合约的输出(布尔值 True 或 False)。 如果返回值为 True,则只能从地址(脚本地址)花费(解锁)资产。 CSL 本身并不执行或验证智能合约,而仅检查它们是否已被 CCL 执行和验证以及返回值。 CSL 根据布尔值接受或拒绝交易。
在下图中您可以看到 CSL 和 CCL。 此外,智能合约分为链上和链下逻辑。 链上逻辑由 CVM 执行,链下逻辑可以在服务器或用户本地计算机上执行。 如果验证器脚本的返回值为 True,则交易将写入 CSL 中的账本。
许多应用程序(Plutus 脚本)可以并行使用 CSL。 UTXO模型确保交易是确定性和可预测的,并且不依赖于账本或其他交易的全局状态。 因此,不同的交易或智能合约可以并行执行而不会互相干扰,只要它们不花费相同的UTXO。
UTxO 模型的并行性有助于可组合性,因为它允许智能合约在区块链上相互交互和合作,而不会产生冲突或失败。 例如,实现代币的智能合约可以被另一个实现互换、借贷平台或拍卖的智能合约使用。 UTxO 模型可以并行处理这些事务,而不会产生冲突或失败。
智能合约的模块化方法
卡尔达诺采用模块化方法,其中智能合约由两个组件组成:链上代码和链下代码。 卡尔达诺允许通过智能合约的链上和链下部分实现应用程序的可组合性。 如果您想了解有关智能合约如何在卡尔达诺上运行的更多信息,请阅读我们关于此主题的文章。 您可以跳过有关比特币和以太坊的章节。
链上代码是在区块链(CCL)上运行的脚本,用于验证涉及智能合约的交易。 它通常是一个简单的代码,用于解锁脚本地址上的资金。
链下代码可能是一个复杂的应用程序,在用户的机器或服务器上运行,以生成符合智能合约逻辑的交易(包括脚本交易和支出交易)。 这带来了巨大的灵活性,但更高的复杂性也带来了风险。 例如,这是因为要执行智能合约的逻辑,需要使用多个执行环境,例如Java虚拟机(在服务器上)和区块链上的Cardano虚拟机(在 覆铜板)。
模块化方法可以提高效率和可扩展性,因为大多数智能合约逻辑都是在链下执行的,从而减少了区块链上的负载和成本。 Plutus 脚本(验证器)级别的可组合性是可能的,但不如链外逻辑级别的可组合性那么简单。
Plutus 脚本级别的可组合性意味着智能合约的不同链上部分可以在区块链(在 CCL 中)上相互交互和协作,从而创建新的、更复杂的功能。 开发人员通常会避免这种方法,因为它带来了挑战。 不同的智能合约可能具有不同的接口、数据类型或协议,这可能导致它们彼此不兼容或不一致。 方法的标准化和统一可以帮助开发人员实现可组合性。
不同的智能合约可能具有不同的状态、依赖关系或约束,这可能使它们难以或不可能彼此协调或同步。 为了实现验证器脚本级别的可组合性,智能合约必须使用一些机制或技术来通信和调整其状态、依赖项或约束。 然而,这很可能需要团队在应用程序开发之初或稍后重新实现验证器时进行合作。
幸运的是,应用程序(智能合约)不需要在验证器(链上逻辑)级别进行交互。 在链下逻辑层面要简单得多。
在设计链下逻辑时,开发人员仅受到链上逻辑要求的最低限度限制。 他们本质上可以在设计功能时考虑到可组合性。
开发人员可以使用任何编程语言、框架或现有标准来创建智能合约的链外部分。 他们唯一需要确保的是与 Cardano 节点 API 的交互。
不同的链下应用可以自由交互,不影响其他链下应用。 在这个级别连接应用程序非常容易,对于普通开发人员来说并不是一个大挑战。
应用程序链下部分交互的结果将反映在链上部分。 最后,结果必须通过验证器记录在账本中。 换句话说,应用程序之间的链下交互必须导致构建支出交易,以解锁验证器锁定的资金。
可以说,在智能合约的链下部分层面,应用程序的可扩展性和计算复杂度几乎是无限的。 瓶颈是块大小。
CSL 支持事务并行处理(UTxO 模型)。 CCL 支持智能合约的并行执行。 智能合约的并行执行是指不同的智能合约可以并行执行,而不会互相影响或被影响,只要它们不与相同的UTxO交互。 如果智能合约链上部分的输出为True,则需要将交易存储在区块链中,即进入下一个区块。
在下图中,您可以看到智能合约的两个链外部分如何相互通信(绿色箭头)。 图中应用程序的链下部分故意更大,这表明那里实现了更复杂的逻辑。 智能合约的链上部分也可以相互通信(红色箭头)。 该图还显示了智能合约之间的交互结果如何导致创建两个写入账本的支出交易(蓝色箭头)。 支出交易会解锁脚本地址上的资金(带有脚本的交易已存储在分类账中)。
DeFi 构建者可以在 Cardano 上创建可组合的应用程序。 然而,为了实现完全可组合性,还需要解决一些挑战和限制。
智能合约语言和接口的兼容性和标准化。
应用程序的可用性和可访问性。 用户可能需要拥有多个钱包或帐户才能访问不同的应用程序。
结论
以太坊采用的智能合约整体方法在安全性和简单性方面具有优势,但在可扩展性和灵活性方面存在劣势。 卡尔达诺采用模块化方法来处理智能合约。 它在可扩展性和灵活性方面具有优势,但在安全性和复杂性方面存在劣势。
单一的方法可能会导致高额费用和拥堵,从而影响性能和性能。智能合约的可用性。 所有合约的功能都会消耗分布式网络的计算资源。 无法在链下执行部分功能。 应用程序不太灵活,因为它们受到平台提供的功能的限制。 另一方面,这也可能是一个优势,因为应用程序(相对)简单。 智能合约的所有功能都是用 Solidity(或 Vyper)编写的。 从安全角度来看,这也是有利的,因为所有交易和智能合约都由相同的共识机制验证并由相同的虚拟机执行。
在我看来,以太坊最大的缺点是需要顺序执行智能合约。 此限制源于使用基于帐户的模型。
模块化方法可以实现更高的可扩展性,因为不同的模块或层可以并行或异步处理不同的任务。 这可以减少网络负载,并且由于消耗的分布式计算资源较少,用户可以支付较低的费用。 模块化方法可以创建更复杂和多样化的智能合约。 然而,它可能会带来安全风险,因为不同的模块或层可能具有不同级别的信任和验证。 开发人员更高的灵活性和无限的选择可能会导致复杂性,从而导致区块链上的数据和逻辑出现漏洞和不一致。
卡尔达诺最大的缺点可能是标准化和统一性低。 目前有多个与标准实施相关的 CIP。 部分原因是卡尔达诺仍然是一个年轻的平台。
在下一篇文章中,我们将更详细地比较卡尔达诺和以太坊上应用程序的可组合性。