完整文档页面(中文翻译)。文末附有来源说明。

阅读英文版

appdevmodulesm3-contract-templates

合约模板

学习如何定义 Daml 合约模板——Canton 智能合约的核心构建块

简介

首先编写一个非常小的 Daml 模板,表示一种自行发行、不可转让的代币。作为最小模板,它本身并不实用——稍后你会让它更有用——但足以展示最基本概念:

  • 交易
  • Daml 模块与文件
  • 模板
  • 合约
  • 签署方
可运行 `dpm new intro-contracts --template daml-intro-contracts` 加载本节代码。

Daml 账本基础

与多数称为「账本」的结构一样,Daml 账本就是一系列提交。所谓提交,指参与方成功向账本提交一笔交易后的最终结果。

交易 是本章将逐步细化的概念。最基本例子是合约的创建与归档。

合约从存在已提交的创建交易起为活跃,直至存在已提交的归档交易。

单个合约是不可变的:活跃合约不能被修改。你只能通过对活跃合约集创建新合约或归档旧合约来变更它。

Daml 规定 Daml 账本上哪些交易合法;Daml 代码中的规则统称为 Daml 模型合约模型

Daml 模块与文件

每个 .daml 文件在顶部定义一个 Daml 模块

module Token where

Daml 注释以 -- 引入:

-- A Daml file defines a module.
module Token where

模板

template 定义可创建的合约类型及谁有权创建。合约模板的实例。

template Token
  with
    owner : Party
  where
    signatory owner

template 关键字声明模板,后接名称。

Daml 对空白敏感,用缩进组织。首行以下缩进的内容属于模板体。

合约 包含数据,称为创建参数或简称参数with 块通过列出字段名与类型定义创建参数的数据类型。单冒号 : 表示「类型为」,可读作「模板 Token 带有类型为 Party 的字段 owner」。

Token 合约有一个类型为 Party 的字段 owner。模板 with 块中声明的字段在模板其余部分(where 块内)处于作用域。

签署方

signatory 关键字指定合约的签署方。这些是创建或归档合约所需权限的参与方——如同真实合同。每个合约至少有一个签署方。

此外,Daml 账本保证参与方能看到使用其权限的所有交易。即合约签署方保证能看到该合约的创建与归档。

下一步

Choices 中,你将学习如何用 choice 为合约添加行为。


本文由 CC Privacy Club 根据 Canton Network 官方文档(CC-BY-4.0)整理翻译,仅供学习;实现细节以官方最新版本为准。