# @fairmint/canton-dev-tools 中文文档

规范地址：https://npmcn.com/package/%40fairmint/canton-dev-tools/

版本：0\.1\.14
npm 元数据更新时间：2026-11-12T17:51:48.754Z
中文译文更新时间：2026-11-14T09:06:54.108Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40fairmint/canton-dev-tools
原文对照：https://npmcn.com/package/%40fairmint/canton-dev-tools/?lang=original
项目主页：https://github.com/Fairmint/canton-dev-tools#readme
源码仓库：https://github.com/Fairmint/canton-dev-tools

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：715 kB，171 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：1 个
- peer 依赖：@fairmint/canton-node-sdk \>=0\.0\.232 \<0\.1\.0
- 首次发布：2026-08-10T20:10:32.789Z
- 最新版本发布：2026-11-12T17:51:48.331Z
- 近 30 天下载量：5534（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：15（近 12 个月 15 个）

## 中文简介

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

## 安装

```sh
npm install @fairmint/canton-dev-tools
```

也可以使用：`pnpm add @fairmint/canton-dev-tools`、`yarn add @fairmint/canton-dev-tools`、`bun add @fairmint/canton-dev-tools`

## README

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

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

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

## 文档

Canonical 文件住在这个仓库里:

-   [本地网络](https://npmcn.com/package/%40fairmint/canton-dev-tools/#readme-localnet) ——CLI,先决条件,消费者设置,以及现成终点
-   [职责. md](https://npmcn.com/package/%40fairmint/canton-dev-tools/COMPATIBILITY.md) 被绑定的快速启动 / Splice / 书写/ 协议版本和认证默认值
-   [DAML 软件包 CLI](https://npmcn.com/package/%40fairmint/canton-dev-tools/#readme-daml-package-cli) ——多包构建,DAR政策和Splice DAR同步
-   [类型脚本帮助器](https://npmcn.com/package/%40fairmint/canton-dev-tools/#readme-typescript-helpers) —— 说 `@fairmint/canton-dev-tools/testing`

执行: [`bin/canton-dev-tools`](https://npmcn.com/package/%40fairmint/canton-dev-tools/bin/canton-dev-tools) 财务报告和审定财务报表 [`scripts/localnet-cloud.sh`](https://npmcn.com/package/%40fairmint/canton-dev-tools/scripts/localnet-cloud.sh). CI 烟: [`.github/workflows/localnet-smoke.yml`](https://npmcn.com/package/%40fairmint/canton-dev-tools/.github/workflows/localnet-smoke.yml)。 。 。 .

## 安装

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

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

## 本地网络

这个软件包拥有共享的 Canton localNet 生命周期. CLI 包装 [广州网络快速启动](https://docs.canton.network/appdev/quickstart) 带有被钉住的版本 [职责. md](https://npmcn.com/package/%40fairmint/canton-dev-tools/COMPATIBILITY.md)。 。 。 .

### 先决条件

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

在 npm 消费者包中, CLI 获取 [cn 快速启动](https://github.com/digital-asset/cn-quickstart) 在被钉住的裁判进入 `~/.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.

### 国 际

```bash
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](https://npmcn.com/package/%40fairmint/canton-dev-tools/COMPATIBILITY.md)) (中文(简体) ).

### 此重播中的脚本

```bash
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 通常使用共享密钥:

```json
{
  "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 API | `http://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`](https://npmcn.com/package/%40fairmint/canton-dev-tools/.github/workflows/localnet-smoke.yml) 为CI烟道.

## DAML 软件包 CLI

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

```bash
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 中的根索引.

```bash
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-template` | `ghc-stdlib-DA-Internal-Template` (一直适用) |
| `featured-app-v1` | `splice-api-featured-app-v1` |
| `featured-app-v2` | `splice-api-featured-app-v2` (只有在护身符需要的时候) |
| `amulet` | `splice-amulet-<pin>` |
| `da-time-types` | `daml-stdlib-DA-Time-Types` |
| `da-types` | `daml-prim-DA-Types` |
| `da-set-types` | `daml-stdlib-DA-Set-Types` |
| `splice-token-v1` | 指针燃烧/薄荷、元数据、持有、分配\*、转让指示 |
| `splice-token-standard-utils` | `splice-token-standard-utils-<pin>` |

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

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

```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`数字 :

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

图书馆导入 :

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

示例消费者脚本 :

```json
{
  "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` (多包装重置):

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

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

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

```ts
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.  `[]` (没有额外的手表)

```json
{
  "cantonDevTools": {
    "darVersionPolicyWatchPaths": ["scripts/codegen", "libs/splice"]
  }
}
```

```json
{
  "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` (当与共享默认值不同时,每回波指针)

```json
{
  "spliceRef": "<git-sha-or-tag>",
  "requiredDars": [{ "file": "splice-amulet-0.1.16.dar", "sha256": "..." }],
  "syncAdminProtos": true
}
```

`SPLICE_REF` 编号 : `SPLICE_REPO` 覆盖配置值 .

### 导入库

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

## 类型脚本帮助器

```ts
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`](https://npmcn.com/package/%40fairmint/canton-dev-tools/.github/workflows/publish.yml),哪个自动发布 `@fairmint/canton-dev-tools` 到 npm 通过 **OIDC 受托出版**。 。 。 .

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

## 发展

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

## 常见问题

### @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 和提交记录判断。

