title: Truffle deployed contracts can't be verified through Etherscan
body: <p>I am faced with the problem the truffle generates a different bytecode than solcjs (local compiler) and also than Remix (online compiler). And therefor I can't verify my contracts throght Etherscan (see <a href="https://etherscan.io/verifyContract" rel="nofollow noreferrer">https://etherscan.io/verifyContract</a>)</p>
  
  <p>My enviromnment:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>What I tried to do:</p>
  
  <p>1) I created a simple smart contract Ownable:</p>
  
  <pre><code>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;
          }
      }
  }
  </code></pre>
  
  <p>2) Init a new truffle project and copy Ownable.sol into "contract" folder.</p>
  
  <p>So the structure of project must be the following:</p>
  
  <pre><code>test-comtract
  -- contracts
     -- Ownable.sol
  -- migrations
     -- 1_initial_migration.js
     -- 2_deploy_contracts.js
  -- test
  truffle.js
  </code></pre>
  
  <p>3) Compile the truffle project:</p>
  
  <pre><code>$ cd test-comtract 
  $ truffle compile
  </code></pre>
  
  <p>After compilation "build" folder will be created.</p>
  
  <p>4) Go to the "build" folder and search Ownable.json file there. In this file search the generated bytecode in "unlinked_binary" attribute. The value is shown below:</p>
  
  <p>0x6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b60f3806100386000396000f300606060405263ffffffff60e060020a6000350416638da5cb5b8114602a578063f2fde38b146053575bfe5b3415603157fe5b6037606e565b60408051600160a060020a039092168252519081900360200190f35b3415605a57fe5b606c600160a060020a0360043516607d565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460985760006000fd5b600160a060020a0381161560c25760008054600160a060020a031916600160a060020a0383161790555b5b5b505600a165627a7a72305820607fc60d96cffbd50e58fbc028c1e4b6f3dfdf356bd439390481a479ef8d25500029</p>
  
  <p>5) Tried to compile through Remix online compiler. https//ethereum.github.io/browser-solidity/#version=soljson-v0.4.11+commit.68ef5810.js&amp;optimize=true</p>
  
  <p>The result of the compilation is shown below:</p>
  
  <p>6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b610119806100396000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b81146043578063f2fde38b14606c575bfe5b3415604a57fe5b60506087565b60408051600160a060020a039092168252519081900360200190f35b3415607357fe5b6085600160a060020a03600435166096565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460b15760006000fd5b600160a060020a0381161560e8576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b505600a165627a7a723058201eb1de901e30ec9818544272a4c70946cd9cb7cd848237ba3dca118e44d771a60029</p>
  
  <p>6) Tried to compile by helps with solcjs:</p>
  
  <pre><code>$ cd test-comtract/contracts 
  $ solcjs --optimize --bin Ownable.sol
  </code></pre>
  
  <p>In "test-comtract/contracts" folder will be created the file "Ownable.sol:Ownable.bin"</p>
  
  <p>6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b610119806100396000396000f300606060405263ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638da5cb5b81146043578063f2fde38b14606c575bfe5b3415604a57fe5b60506087565b60408051600160a060020a039092168252519081900360200190f35b3415607357fe5b6085600160a060020a03600435166096565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460b15760006000fd5b600160a060020a0381161560e8576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b505600a165627a7a7230582083a10cb56ea55b0a181cbc132bdf1bd4e0e8a02d5664db73bbc62217f0b7b8d00029</p>
  
  <p><strong>RESULT: The SolJS bytecode is identical to the Remix bytecode but different from the truffle bytecode.</strong></p>
  
  <p>7) Also I deployed the Ownable.sol through truffle to the Ethereum (TEST_NET). You may see it by follow this URL: </p>
  
  <p><a href="https://ropsten.etherscan.io/address/0x6c8e1b321ce94b12069222b543558d4159527ecd" rel="nofollow noreferrer">https://ropsten.etherscan.io/address/0x6c8e1b321ce94b12069222b543558d4159527ecd</a></p>
  
  <p>Maybe somebody is faced with the such problem. I'll be very appreciate to hear any versions why it is happing. Maybe this is a known bug of the Truffle framework. In google I found some more articles describes the similar problems, but nobody suggest a solution. I very need help  </p>
  
  <p>Thanks in advance!</p>
  
  <p>--
  Alex</p>