松露部署的合同无法通过Etherscan进行验证

问题描述 投票:3回答:3

我面临的问题是,松露生成的字节码不同于solcjs(本地编译器),也不同于Remix(在线编译器)。因此,我无法通过Etherscan验证我的合同(参见https://etherscan.io/verifyContract

我的环境:

OS: Ubuntu 15.10

$ uname -a
Linux sasha 4.2.0-42-generic #49-Ubuntu SMP Tue Jun 28 21:26:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

$ truffle version
Truffle v3.2.4

$ solcjs --version
0.4.11+commit.68ef5810.Emscripten.clang

我试图做的:

1)我创建了一个简单的智能合约Ownable:

pragma solidity ^0.4.11;

contract Ownable {
    address public owner;

    function Ownable() {
        owner = msg.sender;
    }

    modifier onlyOwner {
        if (msg.sender != owner) throw;
        _;
    }

    function transferOwnership(address newOwner) onlyOwner {
        if (newOwner != address(0)) {
            owner = newOwner;
        }
    }
}

2)启动一个新的松露项目并将Ownable.sol复制到“合同”文件夹中。

所以项目的结构必须如下:

test-comtract
-- contracts
   -- Ownable.sol
-- migrations
   -- 1_initial_migration.js
   -- 2_deploy_contracts.js
-- test
truffle.js

3)编制松露项目:

$ cd test-comtract 
$ truffle compile

编译完成后,将创建“build”文件夹。

4)转到“build”文件夹并在那里搜索Ownable.json文件。在此文件中,在“unlinked_binary”属性中搜索生成的字节码。值如下所示:

0x6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b60f3806100386000396000f300606060405263ffffffff60e060020a6000350416638da5cb5b8114602a578063f2fde38b146053575bfe5b3415603157fe5b6037606e565b60408051600160a060020a039092168252519081900360200190f35b3415605a57fe5b606c600160a060020a0360043516607d565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460985760006000fd5b600160a060020a0381161560c25760008054600160a060020a031916600160a060020a0383161790555b5b5b505600a165627a7a72305820607fc60d96cffbd50e58fbc028c1e4b6f3dfdf356bd439390481a479ef8d25500029

5)试图通过Remix在线编译器编译。 HTTPS // ethereum.github.io /浏览器的坚固性/#版本= soljson-v0.4.11 + commit.68ef5810.js&优化=真

编译结果如下:

6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b610119806100396000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b81146043578063f2fde38b14606c575bfe5b3415604a57fe5b60506087565b60408051600160a060020a039092168252519081900360200190f35b3415607357fe5b6085600160a060020a03600435166096565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460b15760006000fd5b600160a060020a0381161560e8576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b505600a165627a7a723058201eb1de901e30ec9818544272a4c70946cd9cb7cd848237ba3dca118e44d771a60029

6)尝试通过solcjs帮助编译:

$ cd test-comtract/contracts 
$ solcjs --optimize --bin Ownable.sol

在“test-comtract / contracts”文件夹中将创建文件“Ownable.sol:Ownable.bin”

6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b610119806100396000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b81146043578063f2fde38b14606c575bfe5b3415604a57fe5b60506087565b60408051600160a060020a039092168252519081900360200190f35b3415607357fe5b6085600160a060020a03600435166096565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460b15760006000fd5b600160a060020a0381161560e8576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b505600a165627a7a7230582083a10cb56ea55b0a181cbc132bdf1bd4e0e8a02d5664db73bbc62217f0b7b8d00029

结果:SolJS字节码与Remix字节码相同,但与松露字节码不同。

7)我还通过松露将Ownable.sol部署到以太坊(TEST_NET)。您可以通过以下网址查看:

https://ropsten.etherscan.io/address/0x6c8e1b321ce94b12069222b543558d4159527ecd

也许有人面临这样的问题。我会非常感激地听到任何版本的原因。也许这是Truffle框架的一个已知错误。在谷歌我发现更多的文章描述了类似的问题,但没有人提出解决方案。我非常需要帮助

提前致谢!

- 亚历克斯

blockchain ethereum truffle consensys-truffle
3个回答
2
投票

在solc / truffle-compile中有一个编译器优化,此时etherscan在编译契约时不支持。

https://github.com/trufflesuite/truffle-compile/blob/331809c73389f27f9dda40229061bb75b18f27ca/index.js#L70

发送评论给etherscan关于它!


1
投票

有一个验证程序2.0支持Truffle的编译。

https://etherscan.io/verifyContract2


0
投票

你可以做我做的事情并开始猜测优化级别和编译器。你可能会在100次尝试后得到它。我做到了。从现在开始,我不会在松露的主网上部署任何东西。它非常适合测试和开发,但它与etherscan不一致。为此,您需要连接所有内容并在将来使用remix。

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