Plutus教程:#3 账户模型

By George Z. September 3, 2021

3. 账户模型(Ledger Model)

与任何其他区块链一样,卡尔达诺是一个分布式账本或数据库,用于记录在链上创建的所有交易和区块。 该数据库在所有参与者之间共享记录,并与区块链活动持续同步,以提供透明和最新的信息供任何人访问。Cardano DB Sync 获取此类区块链记录,并允许用户使用 CLI 命令查询交易和区块详细信息。 为了更方便和用户友好的数据探索,您可以使用 Cardano Explorer——一个以简单方式呈现细节的图形用户界面。区块生产者在将每笔交易提交给区块之前对其进行验证。 发送方必须有足够的资金,所以不会出现双花现象,账本上的所有节点都必须达成共识。让我们仔细看看这在雪莱分类帐中是如何工作的,以及 Plutus 脚本如何改变这个过程以支持多资产交易和智能合约。

3.1 使用 Shelley 本地脚本(Native Scripts)进行交易验证(Transaction Validation)

卡尔达诺基于未花费交易输出 (UTXO) 会计模型运作。这个过程意味着它使用交易输入和输出作为记录来跟踪资金转移、所有权和余额。用户的资金作为未花费的交易输出存储,每个输出都有一个可以花费的数量。输入是来自先前交易的未花费输出。一旦输出被用作交易中的输入,它就会被花费并且永远无法再次使用。输出指定为:

  • 一个地址:包含一个支付凭证和一个可选的股权凭证,一个公共/验证密钥散列或一个脚本散列。从技术上讲,权益凭证也可以是指向注册证书的指针。
  • 一个值:反映实际可以花费的 ada 金额。

交易必须由私钥(也称为签名密钥)的所有者签署,该私钥与地址中包含的支付凭证相对应。Cardano Shelley 仅支持 ada 交易。然而,Shelley 正式规范引入了多重签名 (multisig) 脚本的概念,这些脚本本质上是原生的,完全由分类帐规则捕获。如果提供了预定义的签名组合,则这种多重签名方案允许将未花费的交易输出用作新交易的输入。例如,如果两个人必须同时签署交易,则必须提供三个密钥中的两个,等等。Multisig 是一种非常简单的语言,它允许使用 RequireSignature、RequireAllOf、RequireAnyOf 和 RequireMOf 等四个构造函数。然而,随着更多功能被添加到分类账中,脚本应该被扩展以支持用于表达一系列其他条件的附加条款。

3.2 升级 Multisig 到 Plutus Cores

随着在 Cardano 上引入多资产支持和智能合约,使用更高级的选项扩展基本的多签名脚本语言是必不可少的。将 Alonzo 规则集成到账本中(这意味着向 Cardano 添加了智能合约功能),我们添加了必要的工具和基础设施,以及对新脚本语言 Plutus Core 的支持。为了将 multisig 升级到 Plutus Core,Alonzo 账本实现了扩展未花费交易输出(EUTXO)记账模型,使用 Plutus Core 提供强大的脚本功能。EUTXO 扩展了 UTXO 模型,允许输出地址包含复杂的逻辑来决定可以使用哪些交易来解锁它们,并向所有输出添加自定义数据。为了实现这一点,脚本需要一个明确的、明确指定的脚本语言,并且数据应该附加到输出,这些数据将在执行期间传递给脚本。 Plutus Core 允许节点在交易验证期间执行这种复杂的脚本,同时在链上“存活”。他们要么以验证器脚本的形式锁定 UTXO,要么作为铸造策略来控制原生代币的铸造和燃烧。然后将救赎者数据指定为可以在 Haskell 中轻松定义的简单(代数)数据类型。在实践中,智能合约开发人员将在 Haskell 中编写验证器脚本,然后将其自动编译到 Plutus Core 中。适当的 Haskell 库通过提供用于在验证期间检查事务的核心数据类型来简化编写此类验证逻辑。这些还提供了许多辅助函数和更高级别的抽象,让合约作者可以专注于业务逻辑,而不必担心太多底层细节。

comments powered by Disqus