Ethereum 验证使用Truffle部署的智能合约代码

Ethereum 验证使用Truffle部署的智能合约代码,ethereum,solidity,truffle,Ethereum,Solidity,Truffle,我正在使用Truffle在Rinkeby网络上部署智能合约。智能合约包含库的导入(可拥有) 我正在尝试在Etherscan上验证合同,但我无法:( 看来块菌“压扁”了合同代码,但我找不到用于编译的实际输出 我检查了build文件夹,可以找到字节码和deployedBytecode,但找不到“扁平化”契约源代码 我在哪里可以找到这些信息 在Rinkeby部署: michael$ truffle deploy --reset --network rinkeby Using network 'rink

我正在使用Truffle在Rinkeby网络上部署智能合约。智能合约包含库的导入(可拥有)

我正在尝试在Etherscan上验证合同,但我无法:(

看来块菌“压扁”了合同代码,但我找不到用于编译的实际输出

我检查了build文件夹,可以找到字节码和deployedBytecode,但找不到“扁平化”契约源代码

我在哪里可以找到这些信息

在Rinkeby部署:

michael$ truffle deploy --reset --network rinkeby
Using network 'rinkeby'.

Running migration: 1_initial_migration.js
  Replacing Migrations...
  ... 0xe179c58d10d66def5d26a06c89848b88c812458f1c2e92bcff40372e6c476f08
  Migrations: 0xa06c5370a513ad9aa25213db9610d77a9533c4c1
Saving successful migration to network...
  ... 0xaa08dbc87a185613854689ffe408e3dc441344191c52194d835124e37a2a4fd1
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Replacing BlockBetGameRegistry...
  ... 0x9bc7e990dc4ef9dd87f5c69c8a65b0e22cbcda10102abc7067fcfb451ca429bc
  BlockBetGameRegistry: 0x7be5198a14ff47815a85adc47bb5f1da31d352e6
Saving successful migration to network...
  ... 0xb942099bc2201d955bf60ce7ecba9edbe2f664b744f8543d43aa5588ff4d2f2f
Saving artifacts...
合同代码:

pragma solidity 0.4.18;

import 'zeppelin-solidity/contracts/ownership/Ownable.sol';

contract BlockBetGameRegistry is Ownable {
  address[] public games;

  event eventGameAdded(address game);

  function addGame (address _contractAddress) onlyOwner public {
    require(_contractAddress != address(0));
    games.push(_contractAddress);
    eventGameAdded(_contractAddress);
  }

  function numberOfGames () view public returns (uint256) {
    return games.length;
  }
}

不幸的是,Truffle还不支持这个功能。它目前是一个开放的功能请求(请参阅)。这似乎是一个流行的请求,Truffle背后的工程师相信支持它,所以实现它可能只是时间问题


在那之前,你必须使用一个工具来为你扁平化你的代码。评论中提到了两个:和。

正如另一个答案所说,没有本地的块菌功能来帮助这一点。然而,块菌团队确实在今年年初发布了插件功能。因此我创建了
块菌插件验证
,以实现自动Etherscan上的mate Truffle合同验证


  • 使用npm安装插件
  • npm安装块菌插件验证
    
  • 将插件添加到
    truffle.js
    truffle config.js
    文件中
  • module.exports={
    /*…松露的其余部分*/
    插件:[
    “块菌插件验证”
    ]
    }
    
  • 在您的Etherscan帐户上生成API密钥(请参阅)
  • 将Etherscan API密钥添加到块菌配置中
  • module.exports={
    /*…松露的其余部分*/
    api_密钥:{
    以太扫描:“我的API密钥”
    }
    }
    

    将合同迁移到公共网络后,您可以通过运行以下命令在Etherscan上对其进行验证:

    truffle run verify ContractName [--network networkName]
    


    更多信息可以在我的文章中找到。

    刚刚使用了这个。太棒了。希望我在17/18年积极撰写/部署/验证合同时有这个!干得好!