昨天,我向Ropsten (https://ropsten.etherscan.io/address/0x1fe59c223fa4e9781237f0f49a15ca598069cc30)部署了一份合同,该合同依赖于ABI编码器的V2。因此,它包括语句
pragma experimental ABIEncoderV2;我尝试使用我的稳定代码的扁平版本运行Etherscan的代码验证(https://ropsten.etherscan.io/verifyContract2),匹配编译器版本、优化标志、优化器运行等。然而,代码验证结果是否定的。
早在6月份,当我用同样的务实方式部署合同时,我从Etherscan处得到消息说,他们不支持ABIEncoderV2。尽管Remix的编译只发出警告,而Etherscan声称支持在Remix上编译的合同。
所以我在寻找替代方案。有人能支持这样一个假设,即仍然导致代码验证问题的是缺乏对ABIEncoderV2的支持吗?此外,对于智能合同的公共代码验证,还有其他选择吗?
干杯,
延斯·伊瓦尔
发布于 2019-06-19 07:30:07
当我试图将源代码压缩为单个文件并将其上传到etherscan.io时,验证源代码不适用于我。我认为这是因为多文件项目中的pragma experimental ABIEncoderV2;只应用于某些文件,但是当您将文件夷为平地时,它将应用于整个源代码。
通过编译预扁平化版本来部署二进制got解决了这个问题:
truffle-flattener或etherlime flatten压缩源代码发布于 2018-09-19 22:14:16
你试过用0.4.25编译吗?在这样做之后,我能够删除ABIEncoderV2,并且我的验证开始工作。
发布于 2018-12-04 14:49:26
确保将pragma experimental ABIEncoderV2;行放在具有Solidity版本的行后面。由于某些原因,如果它位于版本号之前,则编译方式不同。
https://ethereum.stackexchange.com/questions/58309
复制相似问题