Marlowe是一个开源的特定领域语言(DSL),为社区提供了一套产品,将催化Cardano在金融领域的应用。它不断地被增强和更新,而命令行界面(CLI)就是你不能没有的东西。因此,我们创建了一个更方便的方式,使用新的CLI工具与Marlowe互动。这个新的工具为那些想从命令行运行合同的用户支持一个简单明了的工作流程。它让你专注于Marlowe合同本身,而工具则管理合同的输入和状态的细节。此外,它将Plutus的许多方面以及与Cardano节点本身的互动自动化,以减少用户的负担。
目的
新的Marlowe CLI工具促进了Marlowe合约的内部开发和测试。这包括测量交易规模,提交交易,测试钱包的集成,以及调试验证器。它还为Marlowe合约提供了与外部开发者工作流程和工具集的整合,类似于Cardano开发社区如何将Cardano CLI工具大量整合到各种服务中,如库、龙头、代币铸造、市场等。
这也是在Marlowe正式推出之前对我们的代码进行压力测试的重要一步,因为它提供了早期访问testnet上的特性和功能,随后在mainnet上。
此外,这个新的CLI工具将成为培训用户如何快速使用Marlowe的有用工具。我们将在即将到来的Marlowe先锋计划中演示如何使用它,该计划将在未来几周内启动。请继续关注我们的Marlowe Discord频道,以了解该课程开始的时间和你如何参与的细节。
运行Marlowe合同
marlowe-cli命令支持几种运行Marlowe合同的细粒度和高层次的工作流程,但在这里我们将专注于抽象出Marlowe使用Plutus语言的具体情况的工作流程。该工具的安装方式与其他Cardano工具类似,使用标准的Cabal或Nix命令。基本的使用只涉及几个命令。
- 从一个模板中创建一个合同的例子
- 初始化合约,以便可以提交创建交易
- 对合约应用输入
- 从合同中提取资金
- 提交一个创建、应用输入或提取的交易
- 查询一个合同的历史
图1:在命令行运行Marlowe合同的高级工作流程。每个矩形对应于运行一个marlowe-cli命令。
有几种方法来设计Marlowe合同,但最简单的是使用CLI的模板命令或Marlowe Playground。我们也可以使用Haskell,JavaScript,或者其他任何可以输出所需的JSON文件的语言来创建合同,这些文件体现了合同和它的初始状态。CLI的模板命令可以生成简单的测试合同、托管合同、零息债券、代币互换和补仓。Playground包含了八个合同的例子,但你也可以用它来设计一个自定义的Marlowe合同。
一旦一个合约被创建并定义了它的开始状态,CLI的初始化命令就会将这些信息与它将被运行的Cardano网络的细节捆绑在一起。由此产生的单一JSON格式的.marlowe文件包含运行或研究Marlowe合约所需的所有信息。除了合约和它的当前状态,它还包含了Marlowe验证器的地址,它的Plutus脚本的序列化副本,以及网络细节。从这个JSON文件中检查和提取信息对于学习Marlowe的工作方式很有帮助,但对于运行Marlowe合同来说并不是必须的。一旦这些必要的信息被捆绑,CLI的运行执行命令将实际的Plutus交易提交给Cardano区块链,打印关于交易的统计数据,并等待确认。
将输入应用于合约的过程更简单。CLI的prepare命令让你设置向合约存入资金,在其中做出选择,或通知它。这需要以前的.marlowe文件作为输入,并产生一个新的文件作为输出,你可以用execute命令提交。如果输入是非法的或不及时的,prepare命令会警告你。
提取由Marlowe合同支付的资金是通过提款命令完成的,该命令允许你选择接收资金的地址。地址的选择为支付资金提供了灵活性,因此,输出地址不会被 "硬塞 "进合同本身。
查询一个合约的历史也可以从命令行中进行,或者你可以使用Cardano区块链探索器。
前景
命令行工具还提供了高级功能,用于创建和操作Marlowe合约中涉及的Plutus验证器、基准点、赎回者和哈希值。合约也可以被压缩(使用Merkle哈希值),这使得它有可能运行远大于Cardano协议对交易规模和内存限制的合约。你也可以使用CLI在PAB上运行Marlowe合约,不需要UTxO管理,而是让钱包来管理它。
这个CLI工具会定期增强,以满足开发者的需求。除了进一步简化Marlowe的工作流程外,该工具的合约测试功能也在扩大。
请加入我们的Marlowe Discord频道,参与讨论,提出问题,并听取Marlowe的最新消息。