2017-06-22 53 views
1

我面臨的問題是,松露生成與solcjs(本地編譯器)和Remix(在線編譯器)不同的字節碼。爲此和我無法驗證我的合同throght Etherscan(見https://etherscan.io/verifyContract松露部署的合同不能通過Etherscan驗證

我enviromnment:

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)我創建了一個可擁有智能簡單合同:

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 

後。

4)進入「build」文件夾並在那裏搜索Ownable.json文件。在這個文件中搜索「unlinked_binary」屬性中生成的字節碼。的值如下所示:

0x6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b60f3806100386000396000f300606060405263ffffffff60e060020a6000350416638da5cb5b8114602a578063f2fde38b146053575bfe5b3415603157fe5b6037606e565b60408051600160a060020a039092168252519081900360200190f35b3415605a57fe5b606c600160a060020a0360043516607d565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460985760006000fd5b600160a060020a0381161560c25760008054600160a060020a031916600160a060020a0383161790555b5b5b505600a165627a7a72305820607fc60d96cffbd50e58fbc028c1e4b6f3dfdf356bd439390481a479ef8d25500029

5)試圖通過混音在線編譯器來編譯。 HTTPS // ethereum.github.io /瀏覽器的堅固性/#版本= soljson-v0.4.11 + commit.68ef5810.js &優化=真

編譯的結果如下所示:

6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b610119806100396000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b81146043578063f2fde38b14606c575bfe5b3415604a57fe5b60506087565b60408051600160a060020a039092168252519081900360200190f35b3415607357fe5b6085600160a060020a03600435166096565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460b15760006000fd5b600160a060020a0381161560e8576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790 555b5b5b505600a165627a7a723058201eb1de901e30ec9818544272a4c70946cd9cb7cd848237ba3dca118e44d771a60029

6)試圖編譯通過有助於solcjs:

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

在 「測試comtract /合同」 文件夾將創建的文件「Ownable.sol:可擁有。BIN」

6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b610119806100396000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b81146043578063f2fde38b14606c575bfe5b3415604a57fe5b60506087565b60408051600160a060020a039092168252519081900360200190f35b3415607357fe5b6085600160a060020a03600435166096565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460b15760006000fd5b600160a060020a0381161560e8576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b505600a165627a7a7230582083a10cb56ea55b0a181cbc132bdf1bd4e0e8a02d5664db73bbc62217f0b7b8d00029

結果:SolJS字節碼是相同噸o Remix字節碼,但與松露字節碼不同。

7)此外,我通過鬆露將Ownable.sol通過鬆露部署到以太坊(TEST_NET)。您可能會看到它通過遵循這個網址:

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

也許有人面臨着這樣的問題。聽到任何版本的聲音,我都會非常感激。也許這是松露框架的一個已知錯誤。在谷歌我發現一些更多的文章描述了類似的問題,但沒有人提出一個解決方案。我非常需要幫助

在此先感謝!

- 亞歷

回答

1

有一個在SOLC /編譯器優化松露編譯在這一刻編制合同時etherscan不支持。

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

發了評論etherscan一下吧!

+2

問題確實存在於編譯器優化中。隨着「運行:200」一切運作良好。我會發郵件給Etherscan。非常感謝你!!! – Alex

+0

@亞歷克斯:也許是一個愚蠢的問題,但仍然有一些東西我不清楚。舉個例子,如果我看一下Remix和solc.js輸出,我有兩條尾巴:「18e44d771a60029」和「17f0b7b8d00029」。你爲什麼認爲這兩個相同? – Antonino