由于 evmversion 的原因,通过 Etherscan API 验证智能合约时出错

问题描述 投票:0回答:1

当我使用与标准编译器版本不同的 evm 版本时,我在使用 Etherscan API 验证合约时遇到问题。

详细来说,我正在使用 v0.8.21 进行编译,并针对巴黎(对于 L2)。

一旦我通过 API 提交验证,如下所示:

curl --location 'https://api-goerli.etherscan.io/api' \
--form 'apikey="<MY-API-KEY>"' \
--form 'module="contract"' \
--form 'action="verifysourcecode"' \
--form 'contractaddress="<MY-CONTRACT ADDRESS>"' \
--form 'sourceCode="// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

/**
 * @title Storage
 * @dev Store & retrieve value in a variable
 */
contract Storage {

    uint256 number;

    /**
     * @dev Store value in variable
     * @param num value to store
     */
    function store(uint256 num) public {
        number = num;
    }

    /**
     * @dev Return value 
     * @return value of '\''number'\''
     */
    function retrieve() public view returns (uint256){
        return number;
    }
}"' \
--form 'contractname="Storage"' \
--form 'compilerversion="v0.8.21+commit.d9974bed"' \
--form 'optimizationUsed="1"' \
--form 'runs="200"' \
--form 'constructorArguements=""' \
--form 'evmversion="paris"' \
--form 'licenseType="3"'

我收到以下错误:

Fail - Unable to verify. Compiled contract deployment bytecode does NOT match the transaction deployment bytecode.

如果我尝试使用此处的 API 演示,它也会失败 https://etherscan.io/sourcecode-demo.html

但是如果我从 etherscan 网站上的合约页面本身手动验证,它就可以工作。

我认为它没有通过 API 直接读取 `evmversion` 参数。

您有遇到过类似的问题吗?

solidity smartcontracts etherscan
1个回答
0
投票

--form 'compilerversion="<YOUR-COMPILER-VERSION>"'

如果您指定的版本与编译时使用的版本不同,则会出现此错误。

我使用版本

v0.8.18+commit.87f61d96
进行编译,并在标志中指定版本,它可以工作。

--form 'compilerversion="v0.8.18+commit.87f61d96"' 

© www.soinside.com 2019 - 2024. All rights reserved.