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

阅读英文版

appdevmodulesm1-development-stack

Canton 开发技术栈

构建 Canton Network 应用的工具与技术概览

本页介绍构建 Canton 应用时使用的开发技术栈。理解这些组件有助于看清整体如何衔接。

技术栈概览

flowchart TB
    subgraph App[你的应用]
        FE[前端<br>React、Vue 等]
        BE[后端<br>TypeScript、Java、Python]
        SC[智能合约<br>Daml]
    end

    subgraph Tools[开发工具]
        SDK[Daml SDK]
        DPM[dpm<br>包管理器]
        DAML[Daml 编译器]
        SCRIPT[Daml Script]
        VSC[VS Code 扩展]
        SANDBOX[Sandbox]
    end

    subgraph Infra[Canton 基础设施]
        LOCAL[LocalNet<br>开发]
        PART[Participant 节点]
        PQS[PQS<br>查询服务]
    end

    SC --> DAML
    DAML --> SDK
    SDK --> LOCAL
    FE --> BE
    BE --> PART
    BE --> PQS

智能合约层

Daml

Daml 是 Canton 的智能合约语言——面向多方工作流的函数式语言。

方面详情
范式函数式编程
类型系统强类型,支持类型推断
编译为Daml-LF(账本格式)
主要用途定义合约、choice、授权

示例:

template Token
  with
    owner : Party
    issuer : Party
    amount : Decimal
  where
    signatory issuer
    observer owner

    choice Transfer : ContractId Token
      with newOwner : Party
      controller owner
      do create this with owner = newOwner

Daml 编译器

Daml 编译器(dpm build)将 Daml 源码编译为 DAR(Daml Archive),可部署到 participant 节点。

# 编译 Daml 代码
dpm build

# 输出:包含已编译合约的 .dar 文件

应用层

后端集成

后端通过 Ledger API 连接 Canton。

选项协议适用场景
gRPC APIgRPC/Protobuf高性能、强类型
JSON APIHTTP/JSON集成更简单、适合 Web

语言支持:

  • TypeScript/JavaScript(dpm codegen-js 可生成代码)
  • Java(dpm codegen-java 可生成代码)
  • 任意语言均可通过 gRPC 或 JSON API 接入

社区还提供 Python、Rust、Go 等绑定。

代码生成

从 Daml 代码生成类型安全的绑定:

# 生成 TypeScript 绑定
dpm codegen-js .dar -o generated

# 生成 Java 绑定
dpm codegen-java .dar -o generated

生成代码提供:

  • 类型安全的合约表示
  • 命令提交辅助
  • 事件处理工具

前端

可使用任意 Web 框架,常见选择:

框架说明
ReactCanton 生态中最常见
Vue良好替代
Angular企业偏好

前端通常经后端连接,由后端处理 Ledger API 通信。

开发工具

Daml SDK

Daml SDK 打包 Canton 开发所需组件:

组件用途
Daml 编译器编译智能合约
Daml Script测试并与合约交互
Sandbox单节点 Canton 测试
Canton runtime运行本地 participant
Console交互式管理
Templates项目脚手架

dpm(Daml 包管理器)

管理依赖与构建流程:

# 初始化项目
dpm init

# 添加依赖
dpm add package-name

# 构建
dpm build

VS Code 扩展

Daml VS Code 扩展(Daml Studio)提供:

  • 语法高亮
  • 类型检查
  • 错误诊断
  • 代码导航
  • 集成终端

扩展随 DPM 自动安装。需要 VS Code 1.87 及以上。在项目目录运行 dpm studio 可启动 Daml Studio。

基础设施组件

LocalNet

LocalNet 是用于开发的本地 Global Synchronizer 模拟:

# 通过 QuickStart 启动 LocalNet
make setup
make build
make start

# 或通过 Daml SDK 运行单节点
dpm sandbox

LocalNet 提供:

  • 本地同步器
  • 本地 participant 节点
  • 测试用 Canton Coin
  • 无外部依赖

Participant 节点

Participant 节点是验证者中托管 Canton 运行时的部分,负责:

  • 托管你的 Party
  • 存储合约数据
  • 执行 Daml 逻辑
  • 暴露 Ledger API

生产环境中,它作为验证者的一部分运行。

PQS(Participant Query Store)

PQS 提供基于 SQL 的复杂数据查询:

用例Ledger APIPQS
简单查询良好良好
复杂聚合有限优秀
报表困难容易
实时更新优秀优秀

PQS 维护与账本状态同步的 PostgreSQL 数据库。

开发工作流

典型流程

flowchart LR
    WRITE[编写 Daml] --> COMPILE[编译]
    COMPILE --> TEST[本地测试]
    TEST --> ITERATE[迭代]
    ITERATE --> WRITE

    TEST --> DEPLOY[部署到 DevNet]
    DEPLOY --> VALIDATE[验证]
    VALIDATE --> PROMOTE[提升到 TestNet]

步骤

  1. 编写 定义业务逻辑的 Daml 合约
  2. 编译daml builddpm build
  3. 测试(Daml Script 或 LocalNet)
  4. 构建 后端集成
  5. 部署 到 DevNet 做集成测试
  6. 提升 经 TestNet 至 MainNet

QuickStart 项目

cn-quickstart 仓库提供完整示例及构建工具:

组件技术
合约Daml
后端TypeScript
前端React
基础设施Docker Compose LocalNet
# 克隆并运行
git clone https://github.com/digital-asset/cn-quickstart
cd cn-quickstart
direnv allow
cd quickstart
make install-daml-sdk
make setup
make build
make start

与其他平台工具对照

用途EthereumCanton
智能合约SolidityDaml
构建工具Hardhat/Foundrydaml build/dpm
IDERemix、VS CodeVS Code + Daml 扩展
测试Mocha、Foundry testsDaml Script
本地网络Hardhat node、AnvilLocalNet、Canton Sandbox
APIJSON-RPCLedger API(gRPC/JSON)
索引The GraphPQS

下一步

运行示例应用。 开始编写智能合约。

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