You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过脚本传递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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:22:13