Blogs

Plutus教程:#8 脚本

8. Plutus Scripts Cardano 使用脚本来验证操作。这些脚本是代码片段,使用 True 或 False 输出实现纯函数。脚本验证是调用脚本解释器以在适当的参数上运行给定脚本的过程。 8.1 什么是脚本? 脚本是一个程序,它决定花费输出的交易是否被授权这样做。这样的脚本称为验证器脚本,因为它验证是否允许支出。一个简单的验证器脚本将检查支出交易是否由特定密钥签名——这将完全复制简单的支付到公钥输出的行为。但是,通过一些仔细的扩展,我们可以使用脚本来表达链上有用的逻辑。EUTXO 模型的工作方式是验证器脚本传递三个参数: 数据(Datum):这是附加到脚本锁定的输出的一段数据(严格来说,同样,只有散列存在)。这通常用于携带状态。 Redeemer:这是一个附加到支出输入的数据。这通常用于从支出者向脚本提供输入。 上下文(Context):这是一条数据,表示有关支出交易的信息。这用于对输出的发送方式进行断言(例如“Bob 签名”)。 8.2 直观的例子 例如,一个孩子想坐摩天轮,但在上车之前,他们必须比安全标志高。我们可以用伪代码表达这个想法,比如: if isTallEnough(attraction=ferrisWheel,passenger=michael): getOnFerrisWheel() def isTallEnough(attraction,kid): return kid["height"] >= attraction["minimumHeight"] def getOnFerrisWheel(): print ("get On the Ferris Wheel") ferrisWheel = {"minimumHeight":120} michael = {"height":135} 在本例中,以下适用: 数据是关于这次交易的信息:michael.height。 上下文是世界的状态,此时的意思是:ferrisWheel.minimumHeight。 reedemer,是要执行的操作:getOnFerrisWheel() 验证器脚本是使用所有信息的函数 isTallEnough 8.3 定义示例 现在让我们看一个来自 DeFi 领域的例子。我们可以实现原子交换,如下所示: 数据包含交换双方的密钥,以及他们交换的内容的描述 救赎者未使用。 上下文包含交易的表示。 验证器脚本的逻辑如下:交易是否从第二方支付给第一方,包含他们应该发送的价值? 如果是这样,那么他们可能会花费这个输出并将其发送到他们想要的地方(或者我们可以坚持他们将其发送到他们的密钥,但我们不妨让他们用它做他们喜欢的事情)。 8.4 代码示例 您可以在每个智能合约上找到验证器脚本的真实代码示例,例如: Plutus 交易教程:在这个验证器上,它总是成功的。 Plutus Hello World:在此验证器上,如果数据等于“Hello”,则将其转换为整数。 Plutus Pioneers English Auction:在这条线上,验证器确保新的出价(数据)优于前一个,直到时间结束。 8.

Continue reading

Plutus教程:#7 使用基准和赎回者

7. 使用基准和赎回者 Plutus 中的两个重要元素是数据和赎回者,在这里我们将了解它们是什么以及在提交交易时如何使用这些元素。数据是一条可以与 UTXO 相关联的信息,用于携带脚本状态信息,例如其所有者或时间细节(定义何时可以使用 UTXO)。 它经常与赎回者结合使用——赎回者是交易中包含的任意信息,以向脚本提供输入。 7.1 两阶段交易验证 输入是来自先前交易的未花费输出。数据散列和值(由 ada 数量和可选的额外原生代币数量组成)存储在 UTXO 中的某个地址(公钥或公钥散列)。当脚本地址的 UTXO 是有效交易的输入时,脚本会确定是否“解锁”资金。这可以在脚本定义的特定条件(包括数据、赎回者和脚本上下文等因素的任意组合)下执行。在第一个验证阶段,交易必须由地址对应的私钥的所有者签名。 在赎回者交易的上下文中理解以下概念很重要: 脚本地址——存储资金的 Cardano 地址,由 Plutus 脚本保护,可以进一步解锁。它是 Plutus 脚本的散列。 数据哈希——在 Cardano 中,数据哈希需要附加到脚本地址处的 UTXO。这样做是为了减少内存需求并在验证交易的同时实现快速访问。 Plutus 脚本 — 账本中用于执行额外(第二阶段)交易验证的可执行程序。 数据值——发送交易赎回时,我们需要发送与锁定交易中发送的数据哈希匹配的数据值。 Redeemer 值 — 使用与数据相同的任意数据格式。 Redeemer 值附加到输入交易以从脚本解锁资金,并由脚本用于验证交易。 脚本上下文——交易的摘要,在 Plutus 脚本中也需要它来验证交易。 使用数据和赎回者的过程如下:假设 Alice 有一个带有 100 个 ADA 的 UTXO: figure-5 她想将 20 个 ADA 锁定到“datum-redeemer”脚本。 她可以通过向新的 UTXO 发送附加任意数据(即数字 42)的交易来做到这一点: figure-6 最后,有人可以用 20 个 adas 进行新的交易,这次必须指定一个赎回者: figure-7

Continue reading

Plutus教程:#6 如何写Plutus交易

6. 如何写 Plutus 交易 本教程概述了什么是 Plutus 事务以及如何编写它。 这是按以下顺序完成的: 在链码上写你的 Plutus。 将 Plutus on chain code 序列化为文本信封格式(cardano-cli 需要这种格式)。 使用随附的 Plutus 脚本创建您的交易。 提交交易以执行 Plutus 脚本。 6.1 什么是 Plutus 交易 交易是包含输入和输出的一段数据,从 Alonzo 时代开始,它们还可以包含 Plutus 脚本。 输入是来自先前交易 (UTxO) 的未花费输出。 一旦 UTxO 被用作交易中的输入,它就会被花费并且永远无法再次使用。 输出由地址(公钥或公钥哈希)和值(由 ADA 金额和可选的附加本机代币金额组成)指定。 这个流程图让我们更好地了解交易的组成部分在技术层面上是什么: figure-4 简而言之,输入包含对先前交易引入的 UTXO 的引用,输出是本次交易将产生的新 UTXO。此外,如果我们考虑一下,这允许我们更改智能合约的状态,因为新数据可以包含在生成的输出中。定义 Plutus Tx 是什么也很重要。 Plutus Tx 是 Haskell 程序的特殊分隔部分的名称,用于将合约应用程序的链上部分编译到 Plutus Core(此编译后的代码然后用于验证交易,因此称为“Tx”) .生成的 Plutus Core 表达式可以是交易数据的一部分,也可以是存储在账本上的数据。这些代码段需要在区块链上进行特殊处理,称为 Plutus 脚本。 6.1.1. 为什么 从 Plutus 开发人员的角度来看,通过使用事务,我们可以控制 Plutus 脚本的执行流程。因此,交易也可以被认为是用于与智能合约交互的消息。理解交易是掌握智能合约开发的关键概念。

Continue reading

Plutus教程:#5 工具

5. Plutus 工具 Alonzo 硬分叉通过建立基础设施并添加使用 Plutus 进行功能智能合约开发的工具,为卡尔达诺分类账带来了核心智能合约功能。 这意味着用户、开发人员和组织现在可以基于智能合约解决方案安全地构建去中心化应用程序 (DApps)。开发人员可以使用不同的工具在 Cardano 上评估和部署智能合约。 下面我们来看看这些工具、它们的主要功能并指出使用它们的确切来源。 5.1 Plutus Playground Plutus Playground 为在 Cardano 区块链上发布智能合约之前编写和测试智能合约提供了一个环境。它是一个用于探索性 Plutus 开发的轻量级、基于 Web 的环境。除了提供用于编写​​和执行智能合约的基于 Web 的模拟器外,Plutus Playground 还允许开发人员访问已编写的流行智能合约。 Plutus Playground 中提供了可帮助您入门的教程。 Plutus Playground 可通过网络浏览器访问,无需安装软件。界面分为三个部分: 编辑 模拟 交易 模拟器显示了合约在 Cardano 区块链上的表现。这样做的一个重要方面是,它可以作为不具备高级开发人员技能的人的培训工具,因为它展示了工作原理。用户可以定义和修改与合约交互的钱包,以及影响结果的操作。然后可以评估结果以查看区块链上发生了什么以及交易如何发生。有关更多信息,请观看 Plutus 应用程序编译和测试教程或访问 Plutus GitHub 存储库。 5.2 Plutus 应用程序后端(Application Backend) Plutus 应用程序后端 (PAB) 使开发人员能够与智能合约进行交互。它是一种链下后端服务,用于在整个生命周期中管理和处理应用程序实例的需求。该服务包括与外部客户端(例如钱包前端)的交互,并充当 Plutus 应用程序、节点、钱包后端和最终用户之间的中介。这种交互是通过 PAB 命令和模拟组件实现的,这些组件可以方便地模拟和集成 DApp。在接下来的几周内,随着我们迭代和添加新功能,我们将推出一系列版本的 PAB。 PAB 的目的是: 提供 Plutus 应用程序运行的标准化环境 提供纪律严明的状态管理 向外部客户端提供可发现的接口 跟踪智能合约使用的链上信息 在模拟环境中工作 处理请求,例如运行合约实例,将用户输入转发到这些实例,以及将分类帐状态更改事件通知这些实例。 下图提供了 PAB 架构的概览:

Continue reading

Plutus教程:#4 用例

4. Plutus 用例(Use Cases) Plutus 实现的典型高级用例包括但不限于: 预言机——功能齐全的预言机,将链下数据带入链上,与智能合约进行交互并为其提供信息。此外,预言机为 Plutus 应用程序创建了一个集中且可信的链下数据馈送(例如,与来自各种中心化交易所的价格馈送进行交互)。 DEX 代币交换——创建一个实现,允许用户在去中心化交易所支持的代币之间进行交换。用户可以创建流动性池(或向现有池添加资金),提供交换所需的硬币。作为回报,他们可以为使用其资金的所有交易赚取少量费用。用户还可以为任何受支持代币的流动性池做出贡献,从而以交易费的形式获得佣金。当向池提供流动性时,用户会收到代表该存款的流动性代币。合约应计算费用,然后根据每个提供者在流动性池中的份额分配给流动性提供者。 借贷——创建一个借贷协议,使用户能够以可信赖的方式借贷他们选择的加密货币,同时提供稳定和可变的利率。用户可以作为存款人或借款人参与。为了进行交易,贷方必须将其资金存入流动资金池,以便借款人可以从此类流动资金池中借款。存款人会收到计息代币作为回报。每个池都留作储备,以防止波动。 NFT;铸造和买卖 NFT – 构建用于铸造、发送和接收 NFT 到钱包中的核心功能,以及其他可能的开放场景和扩展。 去中心化金融 (DeFi) 工具——创建与智能合约集成的多功能仪表板(基于网络或移动),为本地代币交易者带来价值。这些产品可以有多个功能仪表板来显示代币余额和流动性池等。他们还可以将交换和提供流动性等多种功能捆绑到单个交易中,从而更容易采用 DeFi。 加密支持的稳定币 – 使用 Cardano 上的 Atala 身份系统创建基于链抵押品的新稳定币实现。这种实施可以包括转移限制、资产冻结等。 4.1 Plutus 的合作伙伴计划(Partners Program) 为了准备 Alonzo,我们启动了 Plutus 合作伙伴计划。 该计划召集了软件公司的全明星团队来应对智能合约编程挑战,包括上面列出的用例。 该计划的目标是启用使用 Plutus 语言构建的智能合约实施,作为传入的外部去中心化 DApp 开发人员的指导示例。 这些后来也可以作为更广泛的卡尔达诺社区的规范示例。 我们将很快分享这些实现的细节。

Continue reading

Plutus教程:#3 账户模型

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 库通过提供用于在验证期间检查事务的核心数据类型来简化编写此类验证逻辑。这些还提供了许多辅助函数和更高级别的抽象,让合约作者可以专注于业务逻辑,而不必担心太多底层细节。

Continue reading

Plutus教程:#2 理解扩展的UTXO

2. 理解扩展的UTXO模型(Etended UTXO Model) 卡尔达诺(如比特币)是一种基于未花费交易输出(UTXO)的区块链,它使用不同于其他基于账户的区块链(如以太坊)的账本会计模型。 Cardano 实施了创新的扩展未花费交易输出 (EUTXO) 模型,该模型由 Alonzo 升级引入,以支持多资产和智能合约。 2.1 概述 在 UTXO 模型中,交易有输入和输出,其中输入是先前交易的未花费输出。资产存储在分类帐中的未花费输出中,而不是帐户中。一旦输出被用作交易中的输入,它就会被花费并且永远无法再次使用。输出由地址(公钥或公钥哈希)和值(由 ada 金额和任何可选的附加本机令牌金额组成)指定。输出的地址决定了允许哪些交易“解锁”输出并将其用作输入。交易必须由地址对应的私钥的所有者签署。将地址视为“锁”,只能通过正确的“钥匙”(正确的签名)“解锁”。这些输出中的每一个都指定了存储在其中的资产数量及其地址。未花费的输出是不可变的,因此交易可能会消耗整个输出,但不能更改它。总之,交易消耗之前交易的未花费输出,并产生可用作未来交易输入的新输出。用户的钱包管理这些 UTXO 并发起涉及用户拥有的 UTXO 的交易。 每个区块链节点始终维护所有 UTXO 子集的记录。 这称为 UTXO 集。 从技术上讲,这就是链状态,它存储在每个节点的数据目录中。 当一个新块被添加到链中时,链状态会相应地更新。 这个新区块包含最新交易的列表(当然,包括已用 UTXO 的记录,以及自上次更新链状态以来创建的新交易)。 每个节点都维护着链状态的精确副本。 figure-2 2.2 Cardano 的扩展 UTXO 模型 EUTXO 模型从两个方面扩展了 UTXO 模型: 它通过使用锁和钥匙的类比概括了“地址”的概念。 EUTXO 模型中的地址可以包含脚本形式的任意逻辑,而不是将锁定限制为公钥和签名密钥。例如,当节点验证交易时,节点会确定是否允许交易使用某个输出作为输入。交易将查找输出地址提供的脚本,如果交易可以使用输出作为输入,则将执行脚本。 UTXO 和 EUTXO 之间的第二个区别是,除了地址和值之外,输出还可以携带(几乎)任意数据。通过允许脚本携带状态信息,这使得脚本更加强大。 此外,EUTXO 通过允许输出地址包含复杂逻辑来决定哪些交易可以解锁它们,以及通过向所有输出添加自定义数据来扩展 UTXO 模型。在验证地址时,脚本将访问输出携带的数据、正在验证的交易以及一些称为赎回者的附加数据,交易为每个输入提供这些数据。通过查找所有这些信息,脚本有足够的上下文来在高度复杂的情况和用例中给出“是”或“否”的答案。EUTXO 以脚本的形式启用任意逻辑。这种任意逻辑检查交易和数据,以决定是否允许交易使用输入。具有图结构的 UTXO 模型与一些现有的启用智能合约的区块链使用的基于帐户的模型有着根本的不同。因此,适用于基于账户的区块链上的 DApp 的设计模式不会直接转化为卡尔达诺。因为数据的底层表示不同,所以需要新的设计模式。EUTXO 继承了 UTXO(比特币)模型的每个分支设计,其中一个分支根据定义是一系列需要一系列验证的交易。为了将逻辑拆分到不同的分支并实施更多的并行性,必须使用多个 UTXO 构建 DApp 和其他解决方案。这在扩展方面提供了好处,就像开发比特币服务先决条件将一个钱包分成子钱包一样。

Continue reading

Plutus教程:#1 导读

1. 了解Plutus Plutus 是 Cardano 的原生智能合约语言。它是一种用 Haskell 编写的图灵完备语言,而 Plutus 智能合约实际上是 Haskell 程序。通过使用 Plutus,您可以对正确执行智能合约充满信心。它借鉴现代语言研究,提供基于 Haskell 的安全、全栈编程环境,Haskell 是领先的纯函数式编程语言。Alonzo 升级通过将 Plutus 脚本集成到区块链上,为卡尔达诺带来了令人兴奋和备受期待的功能。这些脚本现在可以在 Cardano 上实现智能合约,从而首次为去中心化应用程序 (DApp) 提供大量新用例。如果您想开始,请访问 Plutus Playground 以了解如何编写 Plutus 程序和使用教程并为您提供帮助。您还应该阅读此处提供的解释器和教程,并参考 Plutus 解释以了解有关 Plutus 语言本身的更多信息。 1.1 Plutus 智能合约 (Smart Contract) Plutus 智能合约由在区块链上运行的部分(链上代码)和在用户机器上运行的部分(链下或客户端代码)组成。 链下代码可以使用 Plutus 应用程序框架(PAF)编写,然后该代码由 GHC(Glasgow Haskell 编译器)编译,而链上代码则由 Plutus 编译器编译成 Plutus Core。 figure-1 1.2 Plutus 使用的会计模型 Cardano 使用扩展的 UTXO 记账模型 (EUTXO),它扩展了未花费 (U) 交易 (TX) 输出 (O) 记账模型 (UTXO) 模型(由比特币使用)。在 UTXO 模型中,交易有输入和输出,其中输入是先前交易的未花费输出。一旦输出被用作交易中的输入,它就会被花费并且永远无法再次使用。输出由地址(公钥或公钥哈希)和值(由 ada 数量和可选的附加本机令牌数量组成)指定。EUTXO 扩展了 UTXO 模型,允许输出地址包含复杂的逻辑来决定哪些交易可以解锁它们,并向所有输出添加自定义数据。与其他会计模型相比,该模型具有独特的优势。交易验证的成功或失败仅取决于交易本身及其输入,而不取决于区块链上的任何其他内容。因此,在将交易发送到区块链之前,可以在链下检查交易的有效性。如果某个其他事务同时消耗了该事务所期望的输入,则该事务仍然可能会失败。但是,如果所有输入仍然存在,则保证交易成功。

Continue reading

Plutus教程:#10 并发机制

10. 理解并发 (concurrency) 并发可能会也可能不会提高系统的性能、吞吐量或响应能力。 并发量限制了可以执行的最大并发操作数。为了在基于 UTXO 的区块链中获得实际的性能改进,处理器或其他参与者应该能够同时执行多个操作。 并发级别越高,最大可能的并行度就越高。 然后,这种方法转化为性能改进和吞吐量。 与基于帐户的系统(如以太坊)相比,它还具有显着的优势。 10.1 在 UTXO 账本上部署 DApp 是不同的 Cardano 的 DApp 部署方法是不同的,因此它需要学习曲线和不同的方法。这就像使用不同的编程语言:有一个目标 - 部署解决方案,但为此目的使用的编程语言太多。最大化并发是一项需要学习的技能:开发人员需要以严格限制争用机会的方式编写代码(例如,通过避免共享状态和意外依赖)。然后系统必须将这种并发性转换为并行性。许多开发人员已经确定了解决此问题的方法,而其他开发人员仍在开发解决方案。简单地将经验教训移植到一个区块链上是行不通的;虽然学习曲线有点陡峭,但结果表明这是值得的。无论哪种方式,重要的是要了解要在 Cardano 上部署可扩展的 DApp,开发人员不能只使用经过调整的以太坊合约。 Cardano 基于 UTXO 模型;它不是基于账户的,这意味着单个链上状态将不满足 Cardano 的并发属性。相反,DApp 应该在许多 UTXO 之间拆分它们的链上状态。这将增加其应用程序的并发性,从而实现更高的吞吐量。要了解有关可扩展性的更多信息,您可以阅读如何设计可扩展的 Plutus 应用程序并了解有关如何使用模式在 Cardano 上组织 DApp 的更多信息,请阅读订单簿模式。

Continue reading

Plutus教程:#11 交易

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.

Continue reading