午夜工具:合约部署 midnight-tooling:contract-deployment

本技能用于在Midnight区块链网络上部署Compact智能合约。它涵盖了从编译合约、配置网络端点(索引器、证明器)、处理交易确认到部署验证和错误排查的完整流程。适用于开发者在测试网或主网进行合约部署,并支持CI/CD自动化脚本设置。关键词:Midnight区块链,Compact智能合约,合约部署,测试网,主网,网络配置,部署验证,CI/CD,ZK电路。

智能合约 0 次安装 0 次浏览 更新于 2/26/2026

名称:午夜工具:合约部署 描述:用于将Compact合约部署到Midnight测试网或主网,配置网络端点,处理部署确认,排查部署失败问题,或为CI/CD设置部署脚本。

合约部署

将Compact智能合约部署到Midnight测试网或主网,并进行正确的配置、验证和错误处理。

使用时机

  • 首次部署已编译的Compact合约
  • 为部署配置网络端点
  • 处理部署交易确认
  • 排查失败的部署
  • 为CI/CD设置部署脚本

核心概念

部署流程

  1. 编译合约 - 使用 compact compile 生成构件
  2. 配置网络 - 设置索引器、证明器和节点端点
  3. 为部署者注资 - 确保账户有足够的tDUST(测试网)或DUST(主网)
  4. 提交交易 - 部署合约并等待确认
  5. 验证部署 - 在链上查询合约地址

网络配置

网络 索引器 证明器 使用场景
测试网 indexer.testnet.midnight.network prover.testnet.midnight.network 开发、测试
主网 indexer.midnight.network prover.midnight.network 生产环境

合约构件

使用 compact compile 后,输出目录包含:

  • contract.cjs - 合约字节码和电路
  • contract.d.cts - 合约接口的TypeScript类型定义
  • circuit-keys/ - ZK电路证明密钥

参考文档

文档 描述
deployment-config.md 网络配置和环境设置
network-endpoints.md 端点URL和连接模式

示例

示例 描述
single-contract/ 部署单个合约
multi-contract/ 部署具有依赖关系的多个合约

快速开始

1. 配置网络

import { NetworkConfig } from '@midnight-ntwrk/midnight-js-types';

const config: NetworkConfig = {
  indexer: 'https://indexer.testnet.midnight.network',
  indexerWs: 'wss://indexer.testnet.midnight.network/ws',
  prover: 'https://prover.testnet.midnight.network',
};

2. 加载合约构件

import { Contract } from './contract.cjs';
import type { ContractTypes } from './contract.d.cts';

const contractArtifact = Contract;

3. 部署

import { deployContract } from '@midnight-ntwrk/midnight-js-contracts';

const deployedContract = await deployContract({
  wallet,
  artifact: contractArtifact,
  initialState: { /* 初始账本状态 */ },
  config,
});

console.log('部署地址:', deployedContract.address);

常见模式

基于环境的配置

const getNetworkConfig = (): NetworkConfig => {
  const network = process.env.MIDNIGHT_NETWORK || 'testnet';

  if (network === 'mainnet') {
    return {
      indexer: 'https://indexer.midnight.network',
      indexerWs: 'wss://indexer.midnight.network/ws',
      prover: 'https://prover.midnight.network',
    };
  }

  return {
    indexer: 'https://indexer.testnet.midnight.network',
    indexerWs: 'wss://indexer.testnet.midnight.network/ws',
    prover: 'https://prover.testnet.midnight.network',
  };
};

带重试机制的部署

async function deployWithRetry(
  config: DeployConfig,
  maxRetries = 3
): Promise<DeployedContract> {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      return await deployContract(config);
    } catch (error) {
      if (attempt === maxRetries) throw error;
      console.log(`第 ${attempt} 次尝试失败,正在重试...`);
      await new Promise(r => setTimeout(r, 2000 * attempt));
    }
  }
  throw new Error('重试后部署失败');
}

部署验证

async function verifyDeployment(
  address: string,
  indexer: IndexerClient
): Promise<boolean> {
  try {
    const contractInfo = await indexer.getContractInfo(address);
    return contractInfo !== null;
  } catch {
    return false;
  }
}

相关技能

  • midnight-setup - 部署前的环境准备
  • contract-calling - 调用已部署的合约
  • lifecycle-management - 部署后的合约管理
  • midnight-ci - CI/CD中的自动化部署

相关命令

  • /midnight:check - 验证环境是否已准备好进行部署