Midnight版本兼容性检查Skill midnight-tooling:midnight-compatibility

本技能用于管理和检查Midnight区块链开发框架中各组件的版本兼容性。它提供了详细的版本关系图、编译器与运行时匹配指南、包版本管理最佳实践以及版本升级工作流。关键词包括:Midnight版本兼容性、Compact编译器、pragma语言版本、ZK电路、区块链开发、版本管理、npm ci、破坏性变更、证明服务器、组件依赖。

链开发 0 次安装 6 次浏览 更新于 2/26/2026

name: midnight-tooling:midnight-compatibility description: 用于检查Midnight版本兼容性、理解pragma language_version、验证编译器与运行时版本关系,或排查Midnight组件间版本不匹配错误时使用。

Midnight 版本兼容性

理解Midnight组件间的版本关系。

组件概览

Midnight开发涉及多个版本化组件:

组件 用途 版本检查命令
Compact 开发者工具 管理编译器的CLI compact --version
Compact 编译器 将.compact文件编译为ZK电路 compact compile --version
compact-runtime JavaScript运行时库 npm list @midnight-ntwrk/compact-runtime
ledger 核心账本类型 npm list @midnight-ntwrk/ledger
midnight.js JavaScript SDK npm list @midnight-ntwrk/midnight.js
证明服务器 ZK证明生成 Docker镜像标签

版本关系

语言版本(在pragma中)
         │
         ▼
┌─────────────────────────┐
│   Compact 编译器        │ ──── 生成 ───▶ 合约制品
│   (例如,0.26.0)      │
└─────────────────────────┘
         │
         │ 必须匹配
         ▼
┌─────────────────────────┐
│   compact-runtime       │
│   (例如,0.9.0)       │
└─────────────────────────┘
         │
         │ 与以下兼容
         ▼
┌─────────────────────────┐
│   ledger, midnight.js   │
│   证明服务器            │
└─────────────────────────┘

检查当前兼容性矩阵

权威来源是Midnight发布说明中的支持矩阵。

检查当前推荐版本:

/midnight:versions

或直接解析:

python3 ${CLAUDE_PLUGIN_ROOT}/scripts/parse-support-matrix.py

Pragma 语言版本

每个Compact合约必须声明其语言版本:

pragma language_version 0.18;

ledger {
  // ...
}

Pragma 规则

  1. 必须匹配编译器能力:编译器必须支持声明的版本
  2. 一致性:项目中的所有合约应使用相同的pragma
  3. 升级时更新:升级编译器时,如果语言版本发生变化,请更新pragma

查找编译器的语言版本

编译器版本(例如,0.26.0)映射到语言版本(例如,0.18.0):

# 检查发布说明以获取映射
/midnight:changelog compact

近期映射(请通过发布说明验证):

  • 编译器 0.26.0 → 语言 0.18.0 (Minokawa)
  • 编译器 0.25.0 → 语言 0.17.0

包版本指南

使用精确版本

package.json 中,始终使用精确版本:

{
  "dependencies": {
    "@midnight-ntwrk/compact-runtime": "0.9.0",
    "@midnight-ntwrk/ledger": "4.0.0",
    "@midnight-ntwrk/midnight.js": "2.1.0"
  }
}

切勿使用

  • ^0.9.0 (允许次要版本更新)
  • ~0.9.0 (允许补丁版本更新)
  • >=0.9.0 (允许任何较新版本)

为什么精确版本很重要

Midnight组件有严格的兼容性要求。一个组件的次要版本更新可能需要更新其他组件。使用范围版本可能导致:

  • 静默不兼容
  • “在我机器上能运行”的问题
  • 不同lockfile导致的CI失败

使用 npm ci

为了实现可重复构建,请使用 npm ci 而不是 npm install

# npm ci 使用 package-lock.json 中的精确版本
npm ci

# npm install 可能会在semver范围内更新
npm install  # 生产环境请避免使用

编译器版本管理

列出可用版本

compact list

列出已安装版本

compact list --installed

切换默认版本

# 更新到最新版本
compact update

# 切换到特定版本
compact update 0.25.0

为单次编译使用特定版本

# 使用 +版本 前缀
compact compile +0.25.0 src/contract.compact contract/

这在以下情况下很有用:

  • 针对多个编译器版本进行测试
  • 在开发新合约的同时维护旧合约
  • 渐进式迁移

证明服务器版本

证明服务器必须与您的合约兼容:

# 检查可用标签
docker search midnightnetwork/proof-server

# 拉取特定版本
docker pull midnightnetwork/proof-server:4.0.0

# 运行特定版本
docker run -p 6300:6300 midnightnetwork/proof-server:4.0.0 -- midnight-proof-server --network testnet

版本间的破坏性变更

升级时,请检查发布说明中的破坏性变更:

/midnight:changelog compact

常见的破坏性变更包括:

  • 新的保留关键字(例如,0.18.0中的 slice
  • 运行时函数重命名
  • 类型系统变更
  • 新的pragma要求

版本升级工作流

  1. 检查当前版本/midnight:versions
  2. 检查目标版本:查看兼容性矩阵
  3. 阅读发布说明/midnight:changelog <组件>
  4. 更新 package.json:使用精确版本
  5. 更新编译器compact update <版本>
  6. 更新 pragma:如果语言版本发生变化
  7. 清理安装rm -rf node_modules && npm ci
  8. 重新编译compact compile src/*.compact contract/
  9. 测试:运行您的测试套件

附加资源

  • references/compatibility-matrix.md - 详细的版本兼容性表
  • references/pragma-guide.md - Pragma声明指南

有关版本问题的故障排除,请参阅 midnight-debugging 技能。