用途
该技能面向使用 Canton Network 的开发者,适用于以下场景:处理 Canton Network 参与者(participants)、编写或调试 DAML 智能合约、开发 Splice 应用,以及排查 LF(Daml-LF)版本与包 ID(package ID)相关的问题。
仓库层级与版本映射
三个仓库存在依赖关系:Splice(如 0.5.4)依赖 Canton(如 3.4.9),Canton 依赖 DAML SDK(如 3.4.9)。
版本映射表:
| Splice | Canton | DAML SDK | Protocol | LF Default | LF Available |
|---|---|---|---|---|---|
| 0.5.4 | 3.4.9 | 3.4.9 | PV34 | 2.1* | 2.2(已验证) |
| 0.5.3 | 3.4.8 | 3.4.8 | PV34 | 2.1* | 2.2 |
| 0.4.x | 3.3.x | 3.3.x | PV33 | 2.1 | 2.1 |
*开源 Splice 0.5.4 附带 SDK 快照 3.3.0-snapshot.20250502(早于 LF 2.2)。LF 2.2 于 2025-10-03 加入 SDK。更新到 SDK 3.4.9 可启用 LF 2.2 构建。
关键配置文件
| 用途 | 仓库 | 文件 |
|---|---|---|
| LF 版本定义 | daml | sdk/daml-lf/language/.../LanguageVersion.scala |
| damlc 目标校验 | daml | sdk/compiler/damlc/lib/DA/Cli/Options.hs |
| Canton 版本 | canton | VERSION |
| 内置 DAR | canton | community/common/src/main/daml/ |
| Splice LF 配置 | splice | project/CantonDependencies.scala |
| 包目标 | splice | daml/*/daml.yaml |
| Docker 构建 | splice | cluster/images/*/Dockerfile |
Splice LF 配置(project/CantonDependencies.scala):
val daml_language_versions = Seq("2.1") // ← LF target; change to "2.2" for upgrade
val daml_compiler_version = sys.env("DAML_COMPILER_VERSION")
包 ID 派生规则
包 ID 是以下内容的加密哈希:源内容 + LF 版本(--target)+ SDK/stdlib 版本 + 依赖包 ID。
更改 LF 版本 = 不同的包 ID = 不兼容的包。Canton 会校验升级后的包使用相同或更新的 LF 版本;在同一账本上混用 LF 版本会导致校验失败。
企业版与社区版 Canton
| 功能 | 企业版 | 社区版 |
|---|---|---|
| 交易处理 | 并行 | 顺序 |
| 数据库 | PostgreSQL、Oracle | 仅 PostgreSQL |
| HA Domain | 支持 | 仅嵌入式 |
| Pruning | 完整 | 有限 |
构建命令
# Community Canton participant
cd canton && sbt "community/app/assembly"
# Output: community/app/target/scala-2.13/canton-community.jar
# Splice applications (requires DAML_COMPILER_VERSION env var)
cd decentralized-canton-sync && sbt compile
升级到 LF 2.2(已用 SDK 3.4.9 验证)
- project/CantonDependencies.scala:
val daml_language_versions = Seq("2.2") - nix/daml-compiler-sources.json:
{ "version": "3.4.9" } - 所有 daml/*/daml.yaml:设置
sdk-version: 3.4.9和--target=2.2 - 从所有 daml.yaml 文件中移除
-Wno-ledger-time-is-alpha(SDK 3.4.9 中不存在) - 构建:
daml build -p daml/splice-util && daml build -p daml/splice-amulet
在相同 LF 版本下,社区构建的 DAR 与企业版具有相同的包 ID(2025-12-24 验证)。
故障排查
- “Unknown Daml-LF version: 2.2”:damlc 二进制不支持 2.2。用
daml damlc --help检查支持的目标;升级到 SDK 3.4.9。 - 包 ID 不匹配:构建之间使用了不同的 --target 值。检查:
unzip -p package.dar META-INF/MANIFEST.MF | grep Sdk-Version - 升级校验失败:用企业版(LF 2.2)替换社区版(LF 2.1)包。使用 DAR 注入以保持 LF 2.2 兼容性。
适用场景与限制
适用于 Canton Network 参与者、DAML 智能合约、Splice 应用的开发与调试,尤其是 LF 版本与包 ID 相关问题的排查。资料未提供该技能的具体安装方式、收费信息或平台限制,这些内容暂未提供。