验证使用 Truffle 部署的智能合约代码
Verify smart contract code deployed with Truffle
我正在使用 Truffle 在 Rinkeby 网络上部署智能合约。智能合约包含库的导入 (Ownable)。
我正在尝试验证 Etherscan 上的合约,但我无法:(
似乎是 Truffle "flatten" 合约代码,但我找不到用于编译的实际输出。
我检查了构建文件夹,我可以找到字节码和 deployedBytecode,但找不到 "flatten" 合同源。
我在哪里可以找到这些信息?
在 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 尚不支持此功能。它目前是一个开放的功能请求(请参阅 feature request)。这似乎是一个流行的问题,Truffle 背后的工程师相信支持,所以他们实施它可能只是时间问题。
在那之前,您必须使用可以为您扁平化代码的实用程序。评论中提到了2个:sol-merger and truffle-flattener.
正如另一个答案所述,没有原生的 Truffle 功能可以帮助解决这个问题。然而,Truffle 团队确实在今年年初发布了插件功能。所以我创建了 truffle-plugin-verify
来在 Etherscan 上自动执行 Truffle 合约验证。
- 使用 npm 安装插件
npm install truffle-plugin-verify
- 将插件添加到您的
truffle.js
或 truffle-config.js
文件
module.exports = {
/* ... rest of truffle-config */
plugins: [
'truffle-plugin-verify'
]
}
- 在您的 Etherscan 帐户上生成一个 API 密钥(参见 Etherscan website)
- 将您的 Etherscan API 密钥添加到您的 truffle 配置中
module.exports = {
/* ... rest of truffle-config */
api_keys: {
etherscan: 'MY_API_KEY'
}
}
将您的合约迁移到 public 网络后,您可以通过 运行:
在 Etherscan 上验证它
truffle run verify ContractName [--network networkName]
可以在 the repository or in my article Automatically verify Truffle smart contracts on Etherscan 上找到更多信息。
我正在使用 Truffle 在 Rinkeby 网络上部署智能合约。智能合约包含库的导入 (Ownable)。
我正在尝试验证 Etherscan 上的合约,但我无法:(
似乎是 Truffle "flatten" 合约代码,但我找不到用于编译的实际输出。
我检查了构建文件夹,我可以找到字节码和 deployedBytecode,但找不到 "flatten" 合同源。
我在哪里可以找到这些信息?
在 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 尚不支持此功能。它目前是一个开放的功能请求(请参阅 feature request)。这似乎是一个流行的问题,Truffle 背后的工程师相信支持,所以他们实施它可能只是时间问题。
在那之前,您必须使用可以为您扁平化代码的实用程序。评论中提到了2个:sol-merger and truffle-flattener.
正如另一个答案所述,没有原生的 Truffle 功能可以帮助解决这个问题。然而,Truffle 团队确实在今年年初发布了插件功能。所以我创建了 truffle-plugin-verify
来在 Etherscan 上自动执行 Truffle 合约验证。
- 使用 npm 安装插件
npm install truffle-plugin-verify
- 将插件添加到您的
truffle.js
或truffle-config.js
文件
module.exports = {
/* ... rest of truffle-config */
plugins: [
'truffle-plugin-verify'
]
}
- 在您的 Etherscan 帐户上生成一个 API 密钥(参见 Etherscan website)
- 将您的 Etherscan API 密钥添加到您的 truffle 配置中
module.exports = {
/* ... rest of truffle-config */
api_keys: {
etherscan: 'MY_API_KEY'
}
}
将您的合约迁移到 public 网络后,您可以通过 运行:
在 Etherscan 上验证它truffle run verify ContractName [--network networkName]
可以在 the repository or in my article Automatically verify Truffle smart contracts on Etherscan 上找到更多信息。