使用命令行将合同清单上载到注册表
您可以使用命令行验证部署元数据,并将其从选定的 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
OZ_MANIFEST_PATH 变量设置为其项目本地路径。
- 配置注册表端点。为计划上载的清单类型设置注册表端点变量。使用 shell 的安全环境变量机制或项目配置的 Hardhat 变量机制;不要将凭证或专用端点提交到源控制。例如,一次性 shell 调用可以为任务提供值,如以下示例中所示。
对于 Oracle Blockchain Platform 环境,还要提供项目配置所需的目标链信息和 RPC 代理授权令牌。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 主机名派生。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 - 通过选择以下模式之一选择要上载的内容。
# 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 immutableall和erc7201模式需要ERC7201_MANIFEST_UPLOAD_REGISTRY_ENDPOINT变量。all和immutable模式需要SOLC_UPLOAD_REGISTRY_ENDPOINT变量。对于由 Blockchain App Builder 生成的打包导入项目或数字资产合同,ERC-7201 模式就足够了。 - 使用
--dry-run选项验证所选清单文件,并在不发布的情况下上载配置。npx hardhat upload-contract-manifest --mode all --dry-run - 成功执行模拟运行后,运行相同的命令,不使用
--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 变量是否都适用于同一目标环境。
|