By George Z. September 1, 2021
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 模型,允许输出地址包含复杂的逻辑来决定哪些交易可以解锁它们,并向所有输出添加自定义数据。与其他会计模型相比,该模型具有独特的优势。交易验证的成功或失败仅取决于交易本身及其输入,而不取决于区块链上的任何其他内容。因此,在将交易发送到区块链之前,可以在链下检查交易的有效性。如果某个其他事务同时消耗了该事务所期望的输入,则该事务仍然可能会失败。但是,如果所有输入仍然存在,则保证交易成功。
1.3 Plutus 核心(Core)
Plutus Core 是 Cardano 用来实现 EUTXO 模型的脚本语言。 它是一种类似于 Haskell 的简单的函数式语言,并且可以使用 Haskell 的很大一部分来编写 Plutus Core 脚本。 作为智能合约作者,您无需编写任何 Plutus Core; 相反,所有 Plutus Core 脚本都是由 Haskell 编译器插件生成的。这些脚本将由节点在链上的“实时”交易验证期间执行。 他们要么以验证器脚本的形式锁定 EUTXO,要么作为铸造策略锁定,控制原生代币的铸造和燃烧。在实践中,在开发智能合约时,您将使用 Haskell 编写验证器脚本,然后使用名为 Plutus Tx 的 GHC 插件将这些脚本自动编译到 Plutus Core 中。
1.4 Plutus 应用程序框架(Plutus Application Framework)
PAF 提供对 Plutus 应用程序常用服务的轻松访问。使用框架库部署的应用程序可以在 Plutus 应用程序后端运行,它为访问区块链和其他问题(如持久性、日志记录和监控)提供运行时支持。在 PAF 之上编写的应用程序自动提供 HTTP 和 WebSocket 接口,可以从 Web 浏览器与应用程序交互。验证器脚本的链上状态只能由花费和产生脚本输出的交易修改。在编写 Plutus 应用程序时,我们不仅需要考虑应用程序的链上部分(Plutus Core 脚本),还需要考虑构建和提交交易的链下部分。链下代码是用 Haskell 编写的,就像链上代码一样,不像以太坊,链上代码是用 Solidity 编写的,而链下代码是用 JavaScript 编写的。这样,业务逻辑只需编写一次。然后可以在验证器脚本和构建运行验证器脚本的交易的代码中使用此逻辑。
1.5 Plutus 应用程序后端(Plutus Application Backend)
PAB 目前正在开发中,将执行 Plutus 应用程序的链下组件。 它将管理对钱包后端和节点的应用程序请求,存储应用程序状态,并提供用于管理应用程序实例的 HTTP API。
1.6 Plutus 原生代币(Native Tokens)
每个原生代币都有自己的铸造策略,它决定了可以铸造和销毁代币的条件。 随着 Plutus 的部署,用户将能够在 Haskell 中编写铸造策略并将它们编译到 Plutus Core。 在铸币或销毁过程中,Plutus Core 策略脚本将在铸币或销毁交易的上下文中执行,脚本必须批准或禁止该操作。 通过支持创建更复杂的铸造策略并允许以去信任的方式创建 NFT,此功能将进一步加速 Cardano 上不可替代代币 (NFT) 的增长。
1.7 Plutus 的优势
Plutus 提供了相当大的安全优势。 它提供了一种更简单、更健壮的方式来证明您的智能合约是正确的,并且不会遇到以前智能合约语言设计中发现的问题。Plutus 为智能合约和分布式应用程序开发提供了一种新的集成方法,比以前的替代方案更方便、更安全。 链上和链下代码都基于相同的语言。 您使用统一的代码库,然后 Plutus 工具链会自动将其分为链上和链下代码和包以进行部署。此外,与以太坊相比,Plutus 支持用户定义的代币(可替代和不可替代的原生代币,需要更少的代码。