Plutus教程:#11 交易

By George Z. September 1, 2021

11. 交易成本和决定论

卡尔达诺的定价方法主要依赖于市场需求而不是实际供应。随着最近智能合约的推出,将有不止一种需求在争夺共同供应。因此,考虑相对定价和绝对定价至关重要。一种方法是检查智能合约定价、非同质代币 (NFT) 操作等对一些共同价值的影响——在我们的例子中,是卡尔达诺处理能力的消耗。Cardano 账本的设计专注于高保证、安全和经过验证的形式验证。与此策略保持一致,确保事务处理的确定性也很重要,这意味着用户可以在实际执行之前预测事务的影响和结果。

随着智能合约支持的引入,保证交易执行成本以及交易在提交之前在分类账上的行为的能力变得更加突出。此功能不同于其他区块链,包括以太坊,其他网络活动会影响 gas 成本。 Cardano 和 Plutus 脚本的确定性也保证了这种能力。在 Alonzo 中处理交易的最小 ada 值的计算与之前 Mary 的计算不同。 Alonzo 中不再有 minUTxOValue 协议参数,因为它在玛丽时代末期已被弃用。但是,Alonzo 仍然强制要求每个 UTXO 必须包含一定数量的 ada,这取决于条目的大小。 UTXO 中与大小相关的最小 ada 数量称为 min-ada 值,现在使用 Alonzo 参数coinsPerUTxOWord 计算。在此处阅读有关 Alonzo min-ada-value 计算细节的更多信息。

11.1 决定论

在事务和脚本处理的上下文中,确定性是可预测性的同义词。 这意味着用户可以在本地(链下)预测他们的交易将如何影响分类账的链上状态,而不会遇到以下情况:

  • 意外的脚本验证结果或失败
  • 意外费用
  • 意外的分类帐或脚本状态更新

11.2 验证

处理交易的一个重要方面是验证它正在采取的行动。当一个事务在该操作的特定字段中包含数据时,它正在执行一个操作。例如,当一个交易在其输入字段中包含对 U 的引用时,它正在花费 UTXO U,当它的 mint 字段包含 X 时,它正在铸造一个令牌 X。Cardano 使用脚本来验证操作。这些脚本是代码片段,使用 True 或 False 输出实现纯函数。脚本验证是调用脚本解释器以在适当的参数上运行给定脚本的过程。可以为以下操作执行脚本验证:

  • 花费由脚本地址锁定的 UTXO:运行的脚本是其哈希形成地址的脚本。
  • 铸造令牌:运行的脚本是其散列形成正在铸造的令牌的策略 ID 的脚本。
  • 奖励提取:运行的脚本是其散列形成抵押地址的脚本。
  • 应用证书:运行的脚本是其散列形成证书作者凭据的脚本。 除了让节点知道要运行哪个脚本之外,所有事务操作都指示如何组合传递给该脚本的参数。由于 Plutus 脚本的实现,Alonzo 在 Cardano 上引入了一种新的交易验证方法。

11.3 分类帐更新

Alonzo 更改分类帐上的数据如下:

  1. Plutus 脚本可以锁定 UTXO。
  2. 一个新组件添加到 UTXO 的输出部分的内容中,可实现类似脚本状态的功能。除了资产和地址,被 Plutus 脚本锁定的 UTXO 还包含一个数据。数据是一段数据,可以被认为是对脚本状态的解释。
  3. 有许多新的协议参数用于对交易施加额外的验证要求。这些包括脚本可以消耗的计算资源的上限。

为了支持 Plutus 脚本,事务已升级如下:

  1. 对于它的每个操作,交易现在带有一个用户指定的参数,称为赎回者。根据脚本,救赎者可以服务于不同的目的。例如,它可以充当用户在拍卖中的出价,或用户在猜谜游戏中的猜测,以及许多其他功能。
  2. 事务为每个脚本指定计算执行预算。
  3. 为了确保交易能够支付其执行费用,Alonzo 引入了抵押品。
  4. 交易包含完整性哈希,需要确保它没有被破坏、过时等。

该节点执行新的、特定于 Alonzo 的检查,以确保正确构建交易。例如,它不得超过最大执行资源预算。它还调用 Plutus 脚本解释器来运行脚本。非确定性 gas 模型可以向用户收取不可预测的高额费用。在 Cardano 脚本中,这种不确定性的来源是通过要求将资源预算本身以及支付此预算所需的费用包含在交易中来解决的。在 Alonzo 中,用户可以在构建交易时在本地预测两者。脚本执行必然返回 True 或 False,并且不会无限循环。这样做的原因是脚本执行的每个操作都占用非零数量的资源,这些资源由解释器跟踪。如果超出交易指定的预算,脚本执行终止并返回 False。

以下关键点使脚本和交易验证的结果可预测:

  • 当应用于相同的参数时,脚本解释器将始终终止并返回相同的验证结果。
  • 交易必须修复将在验证期间传递给脚本解释器的所有参数。
  • 事务指定它正在采取的所有需要​​脚本验证的操作。
  • 交易上的强制签名确保它不会被对手以导致脚本失败的方式改变。
  • 在 EUTXO 分类账模型中应用交易是确定性的。 脚本验证失败或成功确实会影响交易的处理方式。但是,对于给定交易,True 或 False 结果以及与任一结果相关的分类帐更改是可预测的。

脚本验证失败或成功确实会影响交易的处理方式。 但是,对于给定交易,True 或 False 结果以及与任一结果相关的分类帐更改是可预测的。进一步阅读:

  • 关于抵押机制
  • Plutus 脚本的成本模型参数
  • Cardano 上的交易验证毫无意外:第 1 部分
  • 毫无意外的交易验证:第 2 部分(关于验证和抵押的两个阶段
comments powered by Disqus