使用命令行将合同清单上载到注册表

您可以使用命令行验证部署元数据,并将其从选定的 Hardhat 项目发布到合同注册表服务。

upload-contract-manifest Hardhat 任务将项目的可升级或不可变合同清单发布到配置的注册表服务。

成功部署后,从打包的合同项目的根目录运行任务。该任务从项目中读取部署清单文件。以下文件是标准位置:
  • OpenZeppelin 清单:.openzeppelin/unknown-<chain-id>.json
  • ERC-7201 清单:.obp-da/.erc7201/deployedContracts-<chain-id>.json
  • 不可变/固体清单:.obp-da/.solc/deployedContracts-<chain-id>.json
使用目标环境的链 ID 代替 <chain-id>。如果您的 OpenZeppelin 清单存储在其他位置,请将 OZ_MANIFEST_PATH 变量设置为其项目本地路径。
  1. 配置注册表端点。为计划上载的清单类型设置注册表端点变量。使用 shell 的安全环境变量机制或项目配置的 Hardhat 变量机制;不要将凭证或专用端点提交到源控制。例如,一次性 shell 调用可以为任务提供值,如以下示例中所示。
    ERC7201_MANIFEST_UPLOAD_REGISTRY_ENDPOINT="https://registry.example/erc7201" \
    SOLC_UPLOAD_REGISTRY_ENDPOINT="https://registry.example/solc" \
    npx hardhat upload-contract-manifest --mode all
    对于 Oracle Blockchain Platform 环境,还要提供项目配置所需的目标链信息和 RPC 代理授权令牌。
    BESU_CHAIN_ID="<chain-id>" \
    BESU_RPX_PROXY_AUTH_TOKEN="<rpc-proxy-token>" \
    ERC7201_MANIFEST_UPLOAD_REGISTRY_ENDPOINT="https://registry.example/erc7201" \
    SOLC_UPLOAD_REGISTRY_ENDPOINT="https://registry.example/solc" \
    npx hardhat upload-contract-manifest --mode all
    端点值是显式配置。不要假定注册表 URL 可以从 Oracle Blockchain Platform 主机名派生。
  2. 通过选择以下模式之一选择要上载的内容。
    # Upload both applicable manifest types.
    npx hardhat upload-contract-manifest --mode all
    
    # Upload the OpenZeppelin and ERC-7201 manifest content.
    npx hardhat upload-contract-manifest --mode erc7201
    
    # Upload immutable/Solidity contract manifest content only.
    npx hardhat upload-contract-manifest --mode immutable
    all 和 erc7201 模式需要 ERC7201_MANIFEST_UPLOAD_REGISTRY_ENDPOINT 变量。all 和 immutable 模式需要 SOLC_UPLOAD_REGISTRY_ENDPOINT 变量。对于由 Blockchain App Builder 生成的打包导入项目或数字资产合同,ERC-7201 模式就足够了。
  3. 使用 --dry-run 选项验证所选清单文件,并在不发布的情况下上载配置。
    npx hardhat upload-contract-manifest --mode all --dry-run
  4. 成功执行模拟运行后,运行相同的命令,不使用 --dry-run 选项进行发布。如果您的项目支持它,请设置 UPLOAD_CONTRACT_MANIFEST_TIMEOUT_MS 变量以增加上载超时并为附加诊断输出设置 UPLOAD_CONTRACT_MANIFEST_VERBOSE=true。请勿在详细日志或共享终端输出中包含密钥。

故障排除

条件 解决方法
找不到任务 确认清单上载插件已安装、由 hardhat.config.ts 文件导入并使用上载任务进行配置。
缺少必需的清单 首先部署到所选环境,确认链 ID,并检查所需的清单位置。对于非标准 OpenZeppelin 清单,请将 OZ_MANIFEST_PATH 变量设置为正确的项目本地文件。
注册表端点缺失或无效 为所选模式提供 http 或 https 端点。erc7201 和 immutable 模式使用不同的端点变量。
Oracle Blockchain Platform 上载未经授权 验证所选 Oracle Blockchain Platform 环境以及 BESU_CHAIN_ID 和 BESU_RPX_PROXY_AUTH_TOKEN 变量是否都适用于同一目标环境。