笔记:在ETHERSCAN上验证合约源代码成功的点滴笔记

欢迎来到WEB3新世界,我是WEB3新世界探险者

一、相关网址,包括作介绍的:

https://forum.openzeppelin.com/t/how-to-verify-a-contract-on-etherscan-bscscan-polygonscan/14225/21

https://info.etherscan.com/contract-verification-constructor-arguments/

https://forum.openzeppelin.com/t/error-unable-to-generate-contract-bytecode-and-abi/6212

二、关于ABI编码工具的新认知

工具在此:

https://abi.hashex.org/

昨天只能算是最粗浅地理解了工具的知识。今天数百次失败,反复用这个工具,终于整出点新的认知来。

1.在etherscan等验证智能合约源代码的页面上,最下面填写ABI的CODE的地方只需要填写的是建构函数(constructor)在部署合约时需要填写的参数(原本直接写在建构函数中的调用基合约的那种已经写死的实参不需要填写),也就根本不需要使用工具进行编码操作。

2.承上。如果把ABI普通代码(Json字符串)填写到编码工具中时,中间部分建构函数选择后,也没有要求填写任何实参内容,那也说明不需要填写ABI CODE到ETHERSCAN的验证界面上。

3.只有在部署合约时,手动填写了可变(这一次部署和下一次部署可以填写不同内容的意思)的实参的情况下,才需要填写ABI code

三、对验证源码不成功的一类错误的认知

今天遇到最多的错误是这样的:

post image

就是说,现在上传的源代码和部署合约时使用的源代码的编码结果不一样。

我认真分析了编码结果不一样的地方:

总结出以下可能的原因:

1.部署时和验证源代码时选择的编译器版本不同,必须完全相同才行

2.如果在验证界面下面确实输入了ABI CODE(这儿主要填写的是建构函数的参数的编码),则这个编码会被自动追加到每一个上传的源代码文件的编码字符的后面,如果与部署合约时输入的建构函数的参数的编码有一点点不同,都会造成无法对应,就会出现 上面的错误提示。

包括部署智能合约时根本没有输入建构函数的参数(因为建构函数根本没有形参),而在验证智能合约源代码时又输入了ABI CODE,这肯定是会失败的。

四、四天后补充一点:

有时使用像:

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol";

这样的代码还是会在etherscan上发布源时失败,说是找不到文件,最好的就是全部放在一个文件夹的根目录下,本地文件在一起。

Web3世界原住民社区 欢迎你的加入,在这里我们一起探讨全新的WEB3世界的未来,寻找更新更好的生活的渠道,来吧,走进新时代。

这是Web3世界原住民社区 的DISCORD链接。

社群正在建设中,刚刚起步,正在招募志同道合者,让我们一起建造更美好的WEB3.0的世界吧。