Comparison of fees on Cardano and Ethereum platforms | Cardano Explorer (cexplorer.io)
在上一篇文章中,我们解释了如何在比特币、以太坊和卡尔达诺上运行脚本或智能合约。 在本文中,我们将比较卡尔达诺和以太坊。 我们将主要关注费用。 我们将解释费用取决于什么,以及团队在构建平台时所做的设计选择如何影响这些费用。
执行智能合约的成本
分布式网络中智能合约的执行会消耗计算机资源。 用户必须支付费用才能执行智能合约。 执行合约比验证正常交易需要更多的资源,因此费用通常更高。 为了衡量在以太坊上执行智能合约所需的计算量,使用了 GAS 的概念。 GAS 是一个单位,代表以太坊虚拟机(EVM)可以完成的最小工作量。
EVM 可以执行的每个操作都有固定的 GAS 成本。 例如,两个数字相加需要 3 GAS,而在内存中存储一个值需要 20 GAS。 在同一个智能合约中执行相同的步骤将始终花费相同数量的 GAS。
用户费用取决于 GAS 成本,即每单位 GAS 支付的 ETH 数量。 GAS 成本不是由协议固定的,而是由用户在提交交易或部署智能合约时设置。 验证者可以获得的 ETH 越多,交易或智能合约就越有可能被包含在下一个区块中。
用户在同一个智能合约中执行相同的操作必须支付不同数量的 ETH,具体取决于他们选择的 Gas 价格。 Gas价格是一种基于市场的机制,允许用户竞标有限的网络资源。
GAS 模型对用户来说有一些优点和缺点。 一方面,它允许他们对费用有一定的控制权,并根据交易或智能合约的紧迫性和重要性确定其优先级。 另一方面,它也给估算和管理费用以及确保交易或智能合约成功及时执行带来了一些复杂性和不确定性。
卡尔达诺使用与以太坊不同的费用系统,不依赖于 GAS 或 GAS 成本。
Cardano 的费用系统基于两个协议参数:A 和 B。一笔交易的最低费用(tx)的计算公式为:费用 = A + B * 大小(tx),其中:
A和B是可以调整的协议参数
size(tx) 是交易大小(以字节为单位)
参数 A 反映了处理任何交易的固定成本,无论其规模或复杂程度如何。 参数 B 反映了处理交易的可变成本,具体取决于交易的大小。 交易规模越大,存储和处理它所需的资源就越多。
协议参数A和B当前分别设置为0.155381 ADA和0.000043946 ADA/字节。 例如,如果一笔交易的大小为 200 字节,则费用将为 0.164271 ADA (0.155381 + 0.000043946 * 200)。
卡尔达诺上的交易费用与其计算复杂性或网络拥塞无关。 它仅取决于交易大小,而交易大小由交易中输入、输出、证书和元数据的数量和类型决定。 因此,卡尔达诺上的费用系统比以太坊上的燃料模型更简单、更可预测。
对于在以太坊上执行相同的合约,用户每次可以支付不同数量的 ETH,而在卡尔达诺的情况下,ADA 中的费用每次都是相同的。 以太坊上的费用是不可预测的,而卡尔达诺上的费用是可预测的。 ETH 和 ADA 的市场价值也是不可预测的,这让一切变得复杂。
卡尔达诺的收费系统也存在一些局限性和挑战。 一个限制是它不允许用户通过支付更高的费用来优先处理他们的交易,就像他们在以太坊上所做的那样。 卡尔达诺上的所有交易都受到权益池运营商的平等对待。 事务处理更加可预测,因为它遵循先到先服务的原则。 这是用户在某些情况下所期望的行为,但并不总是有利的。
另一个挑战是协议参数A和B必须仔细校准,以平衡用户、开发者和矿池运营商的利益,并适应交易量、硬件价格和ADA市场价值的变化。
交易失败
卡尔达诺和以太坊之间的另一个区别涉及失败交易的支付以及失败交易对分类账的影响。
在以太坊上,用户还必须为失败的交易支付 ETH。 这是因为验证者仍然需要确认交易并执行智能合约,即使它们失败或恢复。 该费用是根据交易消耗的计算资源支付的,无论其结果如何。 这可能会给用户带来意想不到的成本和损失。
用户可以预先在本地验证交易是否会通过网络的验证。 这是因为卡尔达诺使用确定性交易验证方案,这意味着交易的结果和影响可以在账本上执行之前预测。 卡尔达诺还使用两阶段验证方法,第一阶段检查交易是否正确构建并可以支付费用,第二阶段运行交易中包含的脚本。 如果交易在本地通过了这两个阶段,那么它也会在网络上传递它们,除非中间处理的其他交易导致账本状态发生变化。
如果交易在第一阶段失败,则立即丢弃,并且不支付任何费用。 如果交易通过了第一阶段但在第二阶段失败了,它仍然被包含在一个区块中,并支付费用,但该交易对账本状态没有(不可预测的)影响。 这是因为卡尔达诺使用扩展的 UTXO 模型,确保交易是确定性和可预测的。
以太坊上的交易可能会对账本产生不可预测的影响,具体取决于它们调用的智能合约的结果。 某些操作可能会由于各种原因而失败或恢复,例如:
Gas 耗尽:如果一笔交易或智能合约超出其 Gas 限额(即用户愿意支付的最大 Gas 量),那么它将失败并恢复其所有效果,但仍会消耗所有 GAS 并支付费用 最高费用。
无效操作码:如果交易或智能合约遇到无效操作码,即 EVM 无法识别的指令,那么它将抛出异常并恢复其所有效果。 这可能是由于智能合约代码中的错误或恶意尝试利用漏洞而发生的。
恢复操作码:如果交易或智能合约显式调用恢复操作码(这是一条允许智能合约中止执行并恢复其所有效果的指令),那么它将执行此操作。 发生这种情况的原因有多种,例如未能满足某些条件、触发某些事件或执行某些规则。
这些对账本的不可预测的影响可能会给发起交易或部署智能合约的用户带来意想不到的成本和损失。 例如,如果用户将 ETH 发送到因任何原因失败或恢复的智能合约,则用户将丢失他们发送的 ETH,并为失败的交易支付费用。
模块化与整体方法
卡尔达诺和以太坊平台在处理智能合约执行和验证方面采用不同的方法。 卡尔达诺采用模块化方法,其中智能合约由两个组件组成:链上代码和链下代码。 以太坊采用整体方法,智能合约完全在区块链上执行和验证。
不同的方法会对费用、性能、安全性和可扩展性产生影响。 链上服务的费用取决于可扩展性。
让我们首先看看可扩展性。
以太坊的 GAS 模型存在一些可扩展性问题,因为它造成了网络容量的瓶颈和费用波动的根源。 网络容量受到区块 GAS 限制的限制,即验证者可以包含在区块中的最大 GAS 量。 区块 GAS 限制不是由协议固定的,而是由验证者根据他们的偏好和激励进行投票。 区块 GAS 限制越高,一个区块中可以处理的交易或智能合约就越多,但验证者验证和存储该区块所需的资源也就越多。
以太坊上的这些可扩展性问题对用户和开发人员都产生了负面影响。 用户必须为其交易或智能合约支付高额且不可预测的费用,这降低了其可用性和可负担性。 开发人员必须处理其应用程序复杂且不确定的费用估算和管理,这增加了他们的开发成本和风险。
卡尔达诺的费用系统比以太坊的 GAS 模型具有一些可扩展性优势,因为它不依赖于 GAS。 网络容量不受区块 GAS 限制,而是受区块大小限制。 块大小限制确保所有块都可以由所有验证器有效地验证和存储,无论其计算资源如何。
卡尔达诺的费用是稳定的,因为它们仅取决于交易规模,而交易规模由其内容和结构决定。 交易大小不会随网络活动或事件变化太大,因为它不能反映其计算复杂性或紧迫性。
卡尔达诺的这些可扩展性优势使用户和开发人员都受益匪浅。 用户可以为其交易或智能合约支付低廉且可预测的费用,这提高了其可用性和可负担性。 开发商可以处理简单且一定的费用对其应用程序进行计算和管理,从而降低了开发成本和风险。
费用对交易规模的依赖还有另一个优点,我们将在下面讨论。
卡尔达诺的费用系统还存在一些未来需要解决的可扩展性挑战。 一项挑战是它没有考虑跟踪累积的链状态(特别是 UTXO)的内存成本。 所有验证器都必须将 UTXO 存储在内存中,以验证新交易或智能合约。 随着卡尔达诺上处理更多的交易或智能合约,更多的 UTXO 被创建并存储在内存中,这增加了验证器的内存消耗和成本。
正如我们已经说过的,另一个挑战是用户无法通过支付更高的费用来优先处理他们的交易或智能合约。
现在让我们看一下理解智能合约的不同概念。
卡尔达诺采用模块化方法,其中智能合约由两个组件组成:链上代码和链下代码。 我们在引言中提到的文章中详细描述了它。 您可以在下图中看到简化版本。
链上代码是在区块链上运行的脚本(验证器脚本),用于验证涉及智能合约的交易。 链下代码是在用户机器上运行的应用程序,用于生成符合智能合约逻辑的交易。 链上代码是用 Plutus 编写的,并编译成 Plutus Core,这是一种在卡尔达诺虚拟机(CVM)上运行的低级语言。 链下代码可以用任何可以与 Cardano 节点 API 交互的语言编写。
需要注意的是,验证器脚本通常很小并且操作最少。 它主要只是通过执行简单的操作来解锁资金,例如检查签名、验证哈希值或比较值。
链上逻辑还可以执行一些复杂的操作,例如生成随机数、创建不可替代的代币或实现状态机。
然而,这些操作通常比在链下逻辑中实现时更昂贵且效率更低。 它们的执行需要区块链上每次执行更多的资源,这可能会很昂贵。 因此,它们通常很少使用,并且仅在必要时使用。 关于费用,后端实现了更复杂的逻辑。 后端可以是用户的桌面钱包,也可以是在服务器上运行的在线服务。
链下逻辑还可以与其他智能合约交互或在链下使用代币。 这些交互在区块链上执行之前仍然需要经过链上逻辑的验证。 因此,它们通常受到与链上逻辑相同的规则和约束,例如需要签名、哈希值或值。
以太坊采用整体方法,智能合约完全在区块链上执行和验证。 智能合约是用高级语言(例如 Solidity 或 Vyper)编写的,并编译成在以太坊虚拟机(EVM)上运行的字节码。 网络上的每个节点都必须为涉及智能合约的每笔交易运行相同的智能合约代码。
简单来说,EVM 只处理链上逻辑。 以太坊智能合约的所有操作(逻辑)都必须在合约中定义,交易只是调用这些操作。 一笔交易可以触发智能合约中的一个或多个功能或操作,具体取决于它提供的数据和价值。 然后,智能合约根据其逻辑和规则执行功能或操作,并相应地更新其状态。 您可以在下图中看到它。
卡尔达诺的模块化方法在费用和可扩展性方面比以太坊的整体方法具有一些优势。
可以在卡尔达诺上以非常低的费用创建复杂的服务。 大多数功能可以在链外执行,只有必要的部分在链上执行。 卡尔达诺交易越小,费用就越少。 链下费用自然可以显着降低(如果用户在本地运行后端,则几乎没有费用)。
就以太坊而言,所有智能合约逻辑都在链上执行。 如果智能合约代码复杂且庞大,那么它会自动增加 ETH 费用。 开发人员被迫编写尽可能小且简单的合约。 他们可能倾向于跳过一些验证,以使单个操作的执行成本更低。 合同的复杂性增加了费用。
卡尔达诺的模块化方法通过减少区块链上的负载并允许智能合约的并行执行来提高其可扩展性。 由于大部分智能合约逻辑是在链外执行的,区块链只需验证调用链上代码的交易,这减少了其计算和存储需求。
以太坊的可扩展性受到其单一性的限制这种方法会增加区块链的负载并阻止智能合约的并行执行。 由于所有智能合约逻辑都是在链上执行的,网络上的每个节点都必须为涉及的每笔交易运行每个智能合约代码,这增加了其计算和存储要求。 此外,由于所有事务都必须按顺序处理(共享全局状态),因此它们可能会相互干扰并在平台上造成瓶颈或处理延迟。
结论
一些人认为费用市场是获得部分链上资源的最佳解决方案,而另一些人则认为区块链网络有一天将只向富人开放。 我敢说,如何正确设置收费政策是一个悬而未决的话题,包括比特币交易。 如果链上服务的费用要低且稳定,就必须解决可扩展性问题。
不可能明确地说卡尔达诺或以太坊哪个更好。 两个平台都有优点和缺点。 这始终取决于团队想要实现什么功能以及特定平台为他们提供什么。
用户总是喜欢以尽可能低的费用来获得最好的服务。 第三方开发者必须适应这一点并构建用户想要使用并愿意付费的应用程序。 对于大多数人来说,支付 1 美元进行常规交易和 5 美元执行智能合约的成本过高,难以接受。 技术发展必须继续。