如何通过脚本传递bytes参数完成Hardhat+Etherscan合约验证?
解决Hardhat验证带bytes类型构造函数参数的合约问题
完全可以通过编写Hardhat脚本来传递数组化后的参数完成验证,命令行转义问题确实容易导致bytes参数传递失败,脚本方式能彻底规避这个问题,具体步骤如下:
- 创建验证脚本
在项目的scripts目录下新建一个文件(比如verify-with-bytes.js),写入以下代码:
const { ethers } = require("hardhat"); async function main() { // 替换成你的合约部署地址 const targetContract = "0xYourContractAddress"; // 将十六进制字符串转为Solidity兼容的bytes类型参数 // 这里把你需要的bytes内容写成0x开头的十六进制格式,比如对应\x01\x02\x03\x04就是0x01020304 const bytesArg = ethers.utils.arrayify("0x01020304"); // 调用Hardhat的验证任务 await hre.run("verify:verify", { address: targetContract, constructorArguments: [bytesArg], network: "goerli" }); } main() .then(() => process.exit(0)) .catch(err => { console.error(err); process.exit(1); });
- 执行验证脚本
在终端运行以下命令触发验证:npx hardhat run scripts/verify-with-bytes.js --network goerli
额外说明:
- 如果你的bytes参数是部署时生成的变量,可以直接在脚本里复用那个变量,不用重新转换
ethers.utils.arrayify支持标准的0x十六进制字符串,能精准映射到Solidity的bytes类型,不会出现命令行转义丢失的问题
内容的提问来源于stack exchange,提问作者Josif Hamed
相关产品推荐
相关产品推荐

