@fairmint/canton-dev-tools

中文文档
0.1.14发布于 2026/11/13MITTypeScriptCommonJS构建来源已验证近 30 天下载 5534

共享本地网络 CLI, DAML 软件包工具, 以及 Fairmint 的 Canton 集成测试助手

中文使用文档
文档目录17 节
  1. 文档
  2. 安装
  3. 本地网络
  4. 先决条件
  5. 国 际
  6. 此重播中的脚本
  7. 连接一个消费者包
  8. 准备终点
  9. DAML 软件包 CLI
  10. codegen-js (第1阶段)
  11. 第二阶段: bundle-dependencies + 键 create-root-index
  12. check-dar-version-policy 额外的监视路径
  13. sync-splice-dars 配置
  14. 导入库
  15. 类型脚本帮助器
  16. 出版
  17. 发展

@fairmint/canton-dev-tools (英语)

共享Canton本地网络CLI,DAML软件包工具,以及Canton本地网络消费者的集成测试帮助.

这个软件包拥有已版本的本地网络生命周期(启动,准备,诊断,撕裂),Canton集成测试所使用的可再使用的TypeScript帮助器,以及共享的DAML多包脚本(预建,DAR政策,Splice DAR同步). 引入拥有共享本地网络生命周期.

文档

Canonical 文件住在这个仓库里:

执行: bin/canton-dev-tools 财务报告和审定财务报表 scripts/localnet-cloud.sh. CI 烟: .github/workflows/localnet-smoke.yml。 。 。 .

安装

npm install -D @fairmint/canton-dev-tools

同伴依赖 : @fairmint/canton-node-sdk (用于 TypeScript 帮助器).

本地网络

这个软件包拥有共享的 Canton localNet 生命周期. CLI 包装 广州网络快速启动 带有被钉住的版本 职责. md。 。 。 .

先决条件

  • 多克和编曲 v2
  • 首先拉出图像和靴子夹 Splice(在冷藏地上~10-15分钟)
  • 主机别名 scan.localhost, (中文(简体) ), sv.localhost,以及 wallet.localhost (CLI用无密码添加) sudo 可用时;否则手工添加)

在 npm 消费者包中, CLI 获取 cn 快速启动 在被钉住的裁判进入 ~/.cache/fairmint/canton-localnet (与 CANTON_LOCALNET_CACHE_DIR 编号 : CANTON_LOCALNET_QUICKSTART_DIR) (中文(简体) ). {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}在结账时 libs/cn-quickstart,取而代之的是子模块init.

国 际

npx canton-dev-tools start
npx canton-dev-tools readiness
npx canton-dev-tools diagnostics
npx canton-dev-tools teardown

Auth 默认为 欧斯2 (克克罗克语). 标出 HS256 JWT 的消费者 CI CANTON_LOCALNET_AUTH_MODE=shared-secret (见 职责. md) (中文(简体) ).

此重播中的脚本

npm run localnet:start
npm run localnet:readiness
npm run localnet:diagnostics
npm run localnet:teardown
npm run localnet:cip56-transfer   # Splice TestTokenV2 CIP-56 / CIP-112 smoke

连接一个消费者包

展览 localnet:* 代表二进制的脚本。 CI 通常使用共享密钥:

{
  "scripts": {
    "localnet": "CANTON_LOCALNET_AUTH_MODE=shared-secret canton-dev-tools",
    "localnet:start": "npm run -s localnet -- start",
    "localnet:readiness": "npm run -s localnet -- readiness",
    "localnet:teardown": "npm run -s localnet -- teardown"
  }
}

优先开发 工具针默认; 只设定 CANTON_LOCALNET_* 故意实验的超载.

准备终点

之后 start 编号 : readiness数字 :

服务網址
编导 JSON APIhttp://localhost:3975/v2/version
扫描http://scan.localhost:4000/api/scan/v0/dso-party-id
验证器http://localhost:3903/ (200/401) (中文(简体) )

见 npx canton-dev-tools diagnostics 财务报告和审定财务报表 .github/workflows/localnet-smoke.yml 为CI烟道.

DAML 软件包 CLI

从 DAML 多包还原根运行(multi-package.yaml + 每个包装 daml.yaml) (中文(简体) ). 软件包是自动发现的——没有回波本地 packages.ts 用于这些命令。 必要时在消费者中保留针对消费者的PACKAGE DEFS / 生成npm元数据.

npx canton-dev-tools install-dpm-sdks
npx canton-dev-tools prepare-build
npx canton-dev-tools verify-dars
npx canton-dev-tools backup-dar --package WrappedAssets-v01 --version 0.0.1
npx canton-dev-tools check-dar-version-policy --all
npx canton-dev-tools check-dar-version-policy --extra-policy-paths scripts/codegen,libs/splice
npx canton-dev-tools check-upgrade-compat
npx canton-dev-tools sync-splice-dars
npx canton-dev-tools codegen-js
npx canton-dev-tools bundle-dependencies
npx canton-dev-tools create-root-index
npx canton-dev-tools fix-splice-refs --target lib
npx canton-dev-tools prepare-release --changelog-repo Fairmint/canton-assets

backup-dar / 版本政策/ 升级- 匹配跳过 Test 默认的软件包。 过 --package 与达磨. yaml 名称, source dir, 或模糊的别名( 如. wrappedAssets) (中文(简体) ).

codegen-js (第1阶段)

通用DAML = JS 对声明的软件包具有约束力步骤 codegen.js 内 daml.yaml数字 :

  1. dpm codegen-js 每个 generated/build/<pkg> (预期) prepare-build 已经完成)
  2. 生成的印花 package.json 来自 repo 根的名称/ 版本
  3. 按包装写 index.js 编号 : index.d.ts
  4. 在生成时修复 Splice 命名空间 lib/ 树( 可选) @fairmint/* → __bundled__ 在当前时重写)

第二阶段: bundle-dependencies + 键 create-root-index

由配置驱动的 stdlib/ Splice 捆绑并合并出版 lib/ 创建。 开车经过 daml-js-bundle.json (或 --config 编号 : package.json → cantonDevTools.damlJsBundle) (中文(简体) ). 没有产品包名称是硬码 ——消费者选择预设和 描述他们在 JSON 中的根索引.

npx canton-dev-tools bundle-dependencies [--root <dir>] [--config <path>]
npx canton-dev-tools create-root-index [--root <dir>] [--config <path>]
npx canton-dev-tools fix-splice-refs --target lib

内建预设( 只有 Stdlib / Splice) :

预设代码套装
da-internal-templateghc-stdlib-DA-Internal-Template (一直适用)
featured-app-v1splice-api-featured-app-v1
featured-app-v2splice-api-featured-app-v2 (只有在护身符需要的时候)
amuletsplice-amulet-<pin>
da-time-typesdaml-stdlib-DA-Time-Types
da-typesdaml-prim-DA-Types
da-set-typesdaml-stdlib-DA-Set-Types
splice-token-v1指针燃烧/薄荷、元数据、持有、分配*、转让指示
splice-token-standard-utilssplice-token-standard-utils-<pin>

针( 可选) : pins.amulet (默认) 0.1.19, (中文(简体) ), pins.tokenStandardUtils (默认) 2.0.0) (中文(简体) ).

示例 daml-js-bundle.json (类似资产形状;产品名称属于 消费者 配置 :

{
  "generatedJsDir": "generated/js",
  "presets": [
    "da-internal-template",
    "featured-app-v1",
    "featured-app-v2",
    "amulet",
    "da-time-types",
    "da-types",
    "da-set-types",
    "splice-token-v1",
    "splice-token-standard-utils"
  ],
  "pins": {
    "amulet": "0.1.19",
    "tokenStandardUtils": "2.0.0"
  },
  "rootIndex": {
    "outputDir": "lib",
    "sourcePackage": { "namePrefix": "WrappedAssets" },
    "copy": ["DA", "Splice", "__bundled__", "WrappedAssets"],
    "namespaces": ["WrappedAssets", "DA", "Splice"],
    "templateConstants": {
      "WRAPPED_ASSETS_TEMPLATES": {
        "burnMintFactory": {
          "from": "./WrappedAssets/BurnMint/module",
          "binding": "WrappedAssetsBurnMintFactory"
        },
        "burnOffer": {
          "from": "./WrappedAssets/BurnOffer/module",
          "binding": "BurnOffer"
        },
        "wrappedAsset": {
          "from": "./WrappedAssets/Holding/module",
          "binding": "WrappedAsset"
        },
        "frozenWrappedAsset": {
          "from": "./WrappedAssets/Holding/module",
          "binding": "FrozenWrappedAsset"
        }
      }
    },
    "postBundlePresets": [
      "da-time-types",
      "da-types",
      "splice-token-v1",
      "splice-token-standard-utils",
      "da-set-types"
    ]
  }
}

或者指向文件从 package.json数字 :

{
  "cantonDevTools": {
    "damlJsBundle": "./daml-js-bundle.json"
  }
}

图书馆导入 :

import {
  runCodegenJs,
  bundleDependencies,
  createRootIndex,
  fixSpliceRefs,
  resolveDamlJsBundleConfig,
  BUNDLE_PRESET_IDS,
} from '@fairmint/canton-dev-tools/daml';

示例消费者脚本 :

{
  "scripts": {
    "prepare-build": "canton-dev-tools prepare-build",
    "codegen": "npm run build && canton-dev-tools codegen-js && canton-dev-tools bundle-dependencies && canton-dev-tools create-root-index && canton-dev-tools fix-splice-refs --target lib",
    "prepare-release": "canton-dev-tools prepare-release"
  }
}

NFT / Captable 合并钩保持消费者-本地(第二阶段范围外).

可选发布后缀为 root package.json (多包装重置):

{
  "cantonDevTools": {
    "codegenPublishSuffixes": {
      "OpenCapTableReports-v01": "reports",
      "WrappedAssets-v01": null
    }
  }
}

null 以根包名称发布。 单个代码包默认为根名.

图书馆导入(第1阶段助手):

import {
  runCodegenJs,
  createPackageIndexes,
  updateGeneratedPackagesFromRoot,
  fixSpliceRefs,
  collapseManifestLines,
  verifyPackageImports,
  applyGeneratedImportRewrites,
} from '@fairmint/canton-dev-tools/daml';

check-dar-version-policy 额外的监视路径

默认情况下, 自动选择只处理软件包 daml.yaml 编号 : daml/ 来源和来源 dars/<package>/ 备份(加上锁入 diffs)作为软件包输入变化。 OCP等还原物也需要共享 投入(scripts/codegen/, (中文(简体) ), libs/splice/)来选择软件包。 配置额外的相对前缀 使用此优先( 先胜) :

  1. 国 际 --extra-policy-paths <csv> (可重复;完全覆盖配置,包括 [](中文(简体) )
  2. package.json → cantonDevTools.darVersionPolicyWatchPaths
  3. 转接根 canton-daml-tooling.json → darVersionPolicyWatchPaths
  4. [] (没有额外的手表)
{
  "cantonDevTools": {
    "darVersionPolicyWatchPaths": ["scripts/codegen", "libs/splice"]
  }
}
{
  "darVersionPolicyWatchPaths": ["scripts/codegen/", "libs/splice/"]
}

路径必须相对并被控制(无) .. /绝对出逃. 任何配置下的更改 前缀选择 全部 用于政策检查的管理软件包.

sync-splice-dars 配置

默认情况下,同步使用包接的针头 config/default-splice-dars.json (主网块 0.6.14 (中文(简体) ) / 承诺 398919a5b13479877fd61587003ba7a4ba00091b,符号标准+护身符 DARs). 可选更改,顺序为:

  1. --config <path>
  2. CANTON_SPLICE_DARS_CONFIG
  3. 转接根 splice-dars.json (当与共享默认值不同时,每回波指针)
{
  "spliceRef": "<git-sha-or-tag>",
  "requiredDars": [{ "file": "splice-amulet-0.1.16.dar", "sha256": "..." }],
  "syncAdminProtos": true
}

SPLICE_REF 编号 : SPLICE_REPO 覆盖配置值 .

导入库

import {
  prepareBuild,
  discoverManagedPackages,
  runCodegenJs,
} from '@fairmint/canton-dev-tools/daml';

类型脚本帮助器

import {
  buildLocalnetClientConfig,
  getLocalnetParticipantAdminLedgerClient,
  findCreatedContractId,
  buildTransferFactoryTransferCommand,
  SPLICE_TEST_TOKEN_V2_SHA256,
} from '@fairmint/canton-dev-tools/testing';

CIP-56 / CIP-112 帮助者瞄准Splice splice-test-token-v2 参考文件DAR.

出版

每一次推/出 main 运行 .github/workflows/publish.yml,哪个自动发布 @fairmint/canton-dev-tools 到 npm 通过 OIDC 受托出版。 。 。 .

  • package.json 版本为一层. 意向小/相干起伏:在合并前设置一个比npm最新版本更高的版本;CI发布准确版本.
  • 常规补丁自动递增 从 npm 最新/ 已存在的标签的上方.

发展

npm install
npm run build
npm test
npm run pack:check

版本与发布记录

@fairmint/canton-dev-tools 共发布 15 个版本,首次发布于 2026/08/11;过去 12 个月发布了 15 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.14latest2026/11/131 天前
0.1.132026/10/091 个月前
0.1.122026/09/241 个月前
0.1.112026/09/231 个月前
0.1.102026/08/192 个月前
0.1.92026/08/133 个月前

关于 @fairmint/canton-dev-tools 的常见问题

@fairmint/canton-dev-tools 是什么?

共享本地网络 CLI, DAML 软件包工具, 以及 Fairmint 的 Canton 集成测试助手

如何安装 @fairmint/canton-dev-tools?

在项目目录运行 npm install @fairmint/canton-dev-tools,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@fairmint/canton-node-sdk(>=0.0.232 <0.1.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 canton-dev-tools,可以用 npx canton-dev-tools 直接运行。

@fairmint/canton-dev-tools 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fairmint/canton-dev-tools 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@fairmint/canton-dev-tools 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@fairmint/canton-dev-tools 可以商用吗?

@fairmint/canton-dev-tools 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fairmint/canton-dev-tools 的下载量有多少?

根据 npm 官方下载统计,@fairmint/canton-dev-tools 在 2026/10/14 – 2026/11/12 这 30 天内被下载 5,534 次,日均约 184 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fairmint/canton-dev-tools 还在维护吗?

最新版本 0.1.14 发布于 2026/11/13(1 天前);至今共发布 15 个版本,其中过去 12 个月发布了 15 个;首次发布于 2026/08/11。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。