安装并启用truffle-plugin-verify
使用npm或yarn安装truffle插件:
npm install -D truffle-plugin-verify
yarn add -D truffle-plugin-verify
安装后,将以下内容添加到truffle-config.js
文件中,以启用带有Truffle的插件:
module.exports = {
/* ... rest of truffle-config */
plugins: [
'truffle-plugin-verify'
]
}
创建Etherscan API密钥并将其添加到truffle中
要创建Etherscan API密钥,首先需要在Etherscan网站上创建一个帐户。
创建帐户后,可以在个人资料页面上添加新的API密钥。
创建新密钥后,将其添加到truffle-config.js文件里的api_keys中:
module.exports = {
/* ... rest of truffle-config */
api_keys: {
etherscan: 'MY_API_KEY'
}
}
当然,不应该将此API密钥提交到Git存储库,建议使用dotenv将API密钥存储在.env文件中并从那里读取。
完整配置文件如下:
const HDWalletProvider = require('@truffle/hdwallet-provider');
require('dotenv').config();
module.exports = {
networks: {
rinkeby: {
provider: function() {
return new HDWalletProvider(
`${process.env.MNEMONIC}`,
`https://rinkeby.infura.io/v3/${process.env.INFURA_ID}`
)
},
network_id: 4
}
},
plugins: [
'truffle-plugin-verify'
],
api_keys: {
etherscan: process.env.ETHERSCAN_API_KEY
}
};
部署并验证合约
执行下面命令部署合约:
truffle migrate --network rinkeby
部署合约后,我们可以使用truffle-plugin-verify来运行Etherscan验证我们的合约:
truffle run verify contractName --network rinkeby
成功后返回:
Pass - Verified: https://rinkeby.etherscan.io/address/0x2CEA970AE626C8114Ca12942e96c7c2E189C16b2#contracts
如果验证超时,可以修改truffle-config.js里的timeoutBlocks。
rinkeby: {
provider: () => new HDWalletProvider(
`${process.env.MNEMONIC}`,
`https://rinkeby.infura.io/v3/${process.env.INFURA_ID}`),
network_id: 4, // Ropsten's id
timeoutBlocks: 200 // # of blocks before a deployment times out (minimum/default: 50)
},