SuperAPI AI 工具集

multinetwork

编程与开发

查看项目

更新于 10-15 12:40

技能介绍

Multi-Network Midnight Skill 用于指导开发者构建一套能够在 Midnight 全部四种网络目标上运行的 DApp。其基本判断是:网络之间的差异只有三点——端点、证明服务器(本地 Docker 与 ProofStation),以及 DUST 流程(手动注册与赞助)。除此之外,代码逻辑保持一致。

主要参考资料包括官方本地 Docker 栈与资金 CLI 仓库 github.com/midnightntwrk/midnight-local-dev,以及官方参考 DApp 仓库 github.com/midnightntwrk/example-counter(standalone 与 preprod 模式)。

四种网络概览:undeployed 使用 networkId 'undeployed',用于本地开发与 CI,证明服务器为本地 Docker :6300,DUST 流程为手动注册(创世钱包种子已注资);preview 使用 networkId 'preview',用于测试网上的活跃开发,证明服务器为 1AM ProofStation(api-preview.1am.xyz),DUST 由赞助,用户不付费;preprod 使用 networkId 'preprod',用于预发布与集成测试,证明服务器可用本地 Docker :6300 或 ProofStation,DUST 为手动注册(faucet → NIGHT → DUST);mainnet 使用 networkId 'mainnet',用于生产环境,证明服务器为 1AM ProofStation(api.1am.xyz),DUST 由赞助。关键区别在于:preview 与 mainnet 上由 1AM 钱包通过 ProofStation 赞助所有费用,用户无需持有 NIGHT 或 DUST;而在 undeployed 与 preprod 上必须自行运行证明服务器,并在交易前手动注册 NIGHT UTXO 以生成 DUST。

本地 Docker 栈(undeployed):运行本地 undeployed 网络需要三个 Docker 容器——Midnight 节点、索引器和证明服务器,无法只运行证明服务器。推荐使用 midnight-local-dev,通过 git clone、npm install、npm start 启动,该命令会检测容器是否已运行、通过 Docker Compose 拉取并启动三个容器、初始化创世主钱包(种子 0x00...01)并注册其 DUST,随后提供资金菜单为测试账户转移 NIGHT 并注册 DUST。连接参数为:networkId undeployed、indexer http://localhost:8088/api/v3/graphql(注意本地使用 v3 而非测试网的 v4)、indexerWS ws://localhost:8088/api/v3/graphql/ws、node http://localhost:9944、proofServer http://localhost:6300。也可直接用 Docker Compose(standalone.yml)启动,但需自行管理创世钱包初始化与 DUST 注册。文中给出了相关 Docker 镜像与版本(Midnight Node 0.21.0、Indexer 3.1.0、Proof Server 7.0.0,标注为截至 2026 年)。Lace 浏览器钱包在选择“Undeployed”时会自动连接本地栈(硬编码 localhost:9944、8088、6300)。本地测试账户注资支持 JSON 文件方式(获得 NIGHT 并注册 DUST,最多 10 个账户、每个 50,000 NIGHT)和 Bech32 地址方式(仅 NIGHT,不注册 DUST)。创世主钱包种子为 0x0000000000000000000000000000000000000000000000000000000000000001。

技能提供了网络配置示例代码(src/config/networks.ts),定义 NetworkId、DustMode(sponsored/manual)、NetworkConfig 接口与四种网络的 NETWORKS 映射,以及 getActiveNetwork() 与 applyNetworkId() 函数,后者需在任何 SDK 操作前于启动时调用一次。

统一 Provider 构建器(src/config/providers.ts)覆盖:ZK 配置 Provider(Node.js 的 NodeZkConfigProvider 从文件系统加载;浏览器的 FetchZkConfigProvider 通过 fetch 加载)、证明 Provider(面向本地 Docker 或 ProofStation 的 httpClientProofProvider;浏览器配合 1AM 钱包时由钱包扩展负责证明,无需证明服务器)、公共数据 Provider(indexerPublicDataProvider)、私有状态 Provider(Node.js 使用持久化 LevelDB;浏览器使用内存实现,页面刷新即丢失)。

WalletProvider 与 MidnightProvider(Node.js 无头环境,适用于所有网络):该桥接在所有网络上一致。signTransactionIntents 变通方案在所有网络均需使用,属于钱包 SDK 的缺陷而非网络特定问题——signRecipe 硬编码了 'pre-proof' 标记,但已证明的 UnboundTransaction 意图包含 'proof' 数据,会导致 “Failed to clone intent”;对 baseTransaction 传 proofMarker='proof',对 balancingTransaction 传 'pre-proof'。代码还说明了 state() 是 Observable,必须订阅而不能作为属性访问。

DUST 流程按网络区分:undeployed 为手动(注册 NIGHT UTXO 后等待 DUST 累积);preview 为赞助(1AM ProofStation 支付所有费用);preprod 为手动(faucet 获取 NIGHT → 注册 UTXO → 等待 DUST);mainnet 为赞助。ensureDust() 示例函数对赞助网络直接返回,检查是否已有 DUST、筛选未注册的 NIGHT UTXO 并提交注册交易,最后等待 DUST 余额大于 0(preprod 上可能需数分钟)。

钱包初始化(Node.js,所有网络)使用 wallet-sdk 相关包:HDWallet、generateRandomSeed、Roles、ShieldedWallet、UnshieldedWallet、createKeystore、PublicKey、InMemoryTransactionHistoryStorage、DustWallet、WalletFacade 等。正文在该处未完整给出后续代码。

限制与环境信息:文档中的 Docker 镜像版本标注为截至 2026 年;本地索引器路径为 v3 而非 v4;浏览器端私有状态为内存实现,刷新会丢失;signTransactionIntents 属于 SDK 缺陷的变通方案;preprod 上 DUST 累积可能需要数分钟;关于收费、价格、具体使用步骤之外的额外功能,资料未提供。