@fairmint/canton-dev-tools (英语)
共享Canton本地网络CLI,DAML软件包工具,以及Canton本地网络消费者的集成测试帮助.
这个软件包拥有已版本的本地网络生命周期(启动,准备,诊断,撕裂),Canton集成测试所使用的可再使用的TypeScript帮助器,以及共享的DAML多包脚本(预建,DAR政策,Splice DAR同步). 引入拥有共享本地网络生命周期.
文档
Canonical 文件住在这个仓库里:
- 本地网络 ——CLI,先决条件,消费者设置,以及现成终点
- 职责. md 被绑定的快速启动 / Splice / 书写/ 协议版本和认证默认值
- DAML 软件包 CLI ——多包构建,DAR政策和Splice DAR同步
- 类型脚本帮助器 —— 说
@fairmint/canton-dev-tools/testing
执行: 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 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 为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数字 :
dpm codegen-js每个generated/build/<pkg>(预期)prepare-build已经完成)- 生成的印花
package.json来自 repo 根的名称/ 版本 - 按包装写
index.js编号 :index.d.ts - 在生成时修复 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-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 (类似资产形状;产品名称属于 消费者 配置 :
{
"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/)来选择软件包。 配置额外的相对前缀
使用此优先( 先胜) :
- 国 际
--extra-policy-paths <csv>(可重复;完全覆盖配置,包括[](中文(简体) ) package.json→cantonDevTools.darVersionPolicyWatchPaths- 转接根
canton-daml-tooling.json→darVersionPolicyWatchPaths [](没有额外的手表)
{
"cantonDevTools": {
"darVersionPolicyWatchPaths": ["scripts/codegen", "libs/splice"]
}
}
{
"darVersionPolicyWatchPaths": ["scripts/codegen/", "libs/splice/"]
}
路径必须相对并被控制(无) .. /绝对出逃. 任何配置下的更改
前缀选择 全部 用于政策检查的管理软件包.
sync-splice-dars 配置
默认情况下,同步使用包接的针头 config/default-splice-dars.json (主网块
0.6.14 (中文(简体) ) / 承诺 398919a5b13479877fd61587003ba7a4ba00091b,符号标准+护身符 DARs).
可选更改,顺序为:
--config <path>CANTON_SPLICE_DARS_CONFIG- 转接根
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