适用于: Virtual Environments 和公共网络(主网和测试网)。同一插件同时处理两者;请在
hardhat.config.ts 中将其指向正确的网络。tenderly.verify()。
在公共网络上,插件默认公开验证。要私密验证(仅在您的项目/组织内可见),请在
hardhat.config.ts 中设置 privateVerification: true。请参阅配置认证和验证可见性。版本和兼容性
根据您与 Hardhat 一起使用的 Ethers 版本,您需要下载相应版本的 Tenderly-Hardhat 插件。验证方法
Tenderly-Hardhat 插件支持三种合约验证方法。-
自动验证(推荐):只需导入并设置插件。这种方式非常适合部署期间的验证,因为过程是完全自动化的。自动验证适用于普通的 Hardhat 部署设置,以及使用 hardhat-ignition。通过使用
TENDERLY_AUTOMATIC_VERIFICATION环境变量来控制自动验证。 - 手动验证(低代码):在您的代码中提供显式验证步骤,适用于部署后验证、条件验证(例如仅在测试失败后)或验证工厂合约实例等场景。
- 详尽手动验证(高代码):提供对验证过程的详细控制,指定库地址、源代码和编译器配置。这对于使用不同编译器版本或设置来验证多个合约是必要的。
示例
探索自动验证过程最好的方法是参考我们 GitHub 仓库中的示例。 所有示例都使用示例Greeter 合约。直接浏览示例项目:
Tenderly-Hardhat 插件设置
按照下面的步骤安装并初始化 Tenderly-Hardhat 插件。 在以下部分中,您将了解如何使用不同的验证方法验证合约。自动验证
在使用 Ethers.js 部署合约时会无缝进行自动验证。自动验证方法将在收集编译器设置、已部署合约的地址和源代码后自动执行验证。 要启用或禁用自动验证,请使用插件识别的TENDERLY_AUTOMATIC_VERIFICATION 环境变量。
当 Tenderly-Hardhat 插件检测到合约已部署,且 Ethers 已收到部署交易的收据时,将验证合约。
要启用此功能,您需要在使用 Ethers 的辅助方法 ethers.deployContract() 和 ethers.getContractFactory() 部署合约时 await 部署,方法是分别在合约实例上调用 waitForDeployment() 或 deployed()。
验证代理合约
使用hardhat-upgrades 部署和升级的代理合约的自动验证在以下版本的 @tenderly/hardhat-tenderly 包中可用:
- >= 1.10.0
- >= 2.1.0
1.x.x < 1.10.0 和 2.x.x < 2.1.0,请按照代理验证指南进行操作。
手动验证
通过tenderly.verify() 进行的低代码验证使您能够在部署脚本或 Hardhat 测试中显式指定验证的确切时点。
此方法特别适合:
- 通过自定义脚本验证之前部署的合约。
- 验证工厂合约创建的实例。
- 通过在失败测试套件末尾(
after)选择性地验证合约来增强测试运行,从而加快执行速度。
TENDERLY_AUTOMATIC_VERIFICATION 更改为 false 以禁用自动验证。
verify 函数
verify() 函数接受一个对象,您必须在其中提供:
- 合约的
name - 合约部署的
address - 合约使用的
libraries(可选)
必须在合约部署之后调用
verify()。如果您在部署时执行验证,需要在 Ethers 6 中 await waitForDeployment(),在 Ethers 5 中 await deployed()。详尽手动验证
方法verifyMultiCompilerAPI() 让您完全控制验证过程,允许您指定验证过程的每一个细节。
通常不推荐这样做,但如果您正在验证使用不同编译器版本或配置编译的合约,它会很有用。
完全受控的验证方法允许您显式:
- 指定合约的源代码(
sources) - 设置编译参数(
compiler) - 设置链接的库(
libraries)
验证参数
verifyMultiCompilerAPI() 方法接受一个参数——一个合约对象数组。每个合约对象由以下部分组成: