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

在PolygonScan验证Solidity合约时提交代码报错该如何解决?

你当前验证失败的核心原因是使用了单文件验证模式,直接粘贴的合约代码中包含@openzeppelin/contracts开头的外部依赖导入声明,区块浏览器无法直接解析npm包路径的依赖,因此抛出错误。

你可以按照以下步骤完成验证:

1 先确认基础配置完全匹配部署参数
  • 编译器版本:选择和你部署合约时完全一致的Solidity小版本,你代码声明的是pragma solidity ^0.8.7,不要选择高于你实际部署用的版本
  • EVM版本:和部署时的EVM版本保持一致,无特殊配置的情况下选London即可
  • 优化配置:如果部署时开启了合约优化,需要同步打开优化开关,填写和部署时一致的runs数值(默认多为200),未开启则选择关闭
2 选择合适的代码提交方式

两种可选方案,任选其一即可:

方案一:单文件验证(最常用)

你需要先将合约代码扁平化,也就是把所有import的外部依赖(包括OpenZeppelin的相关合约)全部合并到同一个文件中:

  • 如果你用Remix开发,可以直接使用自带的Flattener插件生成扁平化代码
  • 如果你用Hardhat/Truffle开发,可以执行对应框架的扁平化命令(比如Hardhat为npx hardhat flatten)
  • 生成扁平化代码后,删除重复的SPDX许可声明,只保留一个,再将完整代码粘贴到输入框即可

方案二:多文件验证

在验证页面选择多文件上传模式,按你本地项目的路径结构,分别上传以下文件即可,不需要修改原合约的import路径:

  • 你自己编写的主合约文件
  • 依赖的@openzeppelin/contracts/access/Ownable.sol以及它自身引用的所有依赖文件
  • 依赖的@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol以及它自身引用的所有依赖文件
3 补充构造参数(如果需要)

如果页面未自动识别构造函数参数,你需要手动填入你部署时传入的三个参数(_name、_symbol、_initBaseURI)对应的ABI编码,编码可以从你部署合约的链上交易详情中提取。

内容的提问来源于stack exchange,提问作者Michael Downey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:03