使用Etherscan插件验证智能合约¶
概览¶
验证智能合约是为部署在Moonbeam上的合约提供透明度和安全性的一种好方法。与Etherscan的合约验证服务集成的插件有很多,其中包括hardhat-verify
插件和truffle-plugin-verify
插件。这两种插件均能通过本地检测需要验证的合约及其所需的Solidity库(若有)来自动执行验证合约的过程。
Hardhat插件可以无缝集成至您的Hardhat项目,同样地Truffle插件也可以集成至您的Truffle项目。Foundry也具有Etherscan功能,但它们内置于其Forge工具中,而非包含在单独的插件中。
本教程将向您展示如何使用两者插件验证部署至Moonbase Alpha的智能合约。本教程也同样适用于Moonbeam和Moonriver。
查看先决条件¶
在开始本教程之前,您将需要准备以下内容:
- 安装MetaMask并将其连接至Moonbase Alpha测试网
- 一个拥有
DEV
Token的账户 您可以每24小时一次从Moonbase Alpha水龙头上获取DEV代币以在Moonbase Alpha上进行测试 - 一个您将尝试验证合约网络的Moonscan API密钥。如果您选择在Moonbeam和Moonbase Alpha上验证合约,您将需要一个Moonbeam Moonscan API密钥;如果您选择在Moonriver上验证合约,您将需要一个Moonriver Moonscan API密钥
- 安装和配置Git
生成Moonscan API密钥¶
要生成Moonscan API密钥,您需要先注册一个账号。这取决于您想要在哪个网络上验证合约,请确保您在Moonscan上选择正确的网络创建API密钥。如果您选择在Moonbeam和Moonbase Alpha上验证合约,您可以前往Moonbeam Moonscan;如果您选择在Moonriver上验证合约,您可以前往Moonriver Moonscan。要注册一个账号,请遵循以下步骤:
- 点击Sign In
- 选择Click to sign up后注册您的新账号
完成注册并登录新账号后,您将能够创建API密钥。
- 在左侧菜单中选择API-KEYs
- 点击+ Add按钮增加新的密钥
系统将提示您为您的API密钥输入AppName。随后,点击Continue,该密钥将会显示在您的API密钥列表中。
使用Hardhat Etherscan插件¶
本教程此部分将以使用Hardhat部署至Moonbeam所创建的Box.sol
合约为例。
开始使用Hardhat Etherscan插件之前,您需要先运行以下代码安装插件库:
npm install --save-dev @nomicfoundation/hardhat-verify
注意事项
@nomicfoundation/hardhat-verify
的3.0.1版本中已添加对基于Moonbeam网络的支持。您可以通过查看devDependencies
部分的package.json
来确认所使用的版本并更新至3.0.1或以上的版本(若需要)。
您可以将您的Moonscan API密钥与您的私钥一起添加到hardhat.config.js
文件中。在本示例中,您将需要Moonbeam Moonscan API密钥。如果您想要在Moonriver上验证合约,您将需要Moonriver Moonscan API密钥。
从您的Hardhat项目中,打开hardhat.config.js
文件,导入hardhat-verify
插件和您的Moonscan API密钥,并添加Etherscan配置:
require('@nomicfoundation/hardhat-verify');
module.exports = {
networks: {
moonbeam: { ... },
moonriver: { ... },
moonbase: { ... }
},
etherscan: {
apiKey: {
moonbeam: 'INSERT_MOONSCAN_API_KEY', // Moonbeam Moonscan API Key
moonriver: 'INSERT_MOONSCAN_API_KEY', // Moonriver Moonscan API Key
moonbaseAlpha: 'INSERT_MOONSCAN_API_KEY', // Moonbeam Moonscan API Key
}
}
};
要验证合约,您需要运行verify
命令并传入已部署合约的地址及其部署的网络:
npx hardhat verify --network moonbase INSERT_CONTRACT_ADDRESS
在您的终端,您将看到您的合约源代码已成功提交验证。如果验证成功,您将在终端看到Successfully verified contract以及Moonbase Alpha上的Moonscan的合约代码链接。
如果您正在验证具有constructor函数的合约,您将需要运行上述命令并在命令末尾添加用于部署合约的constructor函数。例如:
npx hardhat verify --network moonbase INSERT_CONTRACT_ADDRESS INSERT_CONSTRUCTOR_ARGS
参考Hardhat Verify文档网站获取其他如下所示用例:
使用Truffle验证插件¶
本教程此部分将以使用Truffle部署合约至Moonbeam所创建的MyToken.sol
合约为例。
开始使用truffle-plugin-verify
之前,您需要先打开您的Truffle项目并运行以下代码安装插件:
npm install --save-dev truffle-plugin-verify
接下来,您需要将插件添加至您的truffle-config.js
文件,并添加Etherscan配置。在本示例中,您将需要Moonbeam Moonscan API密钥。如果您想要在Moonriver上验证合约,您将需要Moonriver Moonscan API密钥。Truffle配置内容应如下所示:
module.exports = {
networks: { ... },
compilers: { ... },
plugins: ['moonbeam-truffle-plugin', 'truffle-plugin-verify'],
api_keys: {
moonscan: 'INSERT_YOUR_MOONSCAN_API_KEY'
}
}
要验证合约,您需要运行run verify
命令并传入已部署合约的名称及其部署的网络:
truffle run verify MyToken --network moonbase
如果验证成功,您将在终端看到Pass - Verified以及Moonbase Alpha上的Moonscan的合约代码链接。
更多关于插件的详细信息,请参考README.md文档的truffle-plugin-verify
GitHub repo。
使用Foundry验证¶
本教程此部分将以使用Foundry部署合约至Moonbeam所创建的MyToken.sol
合约为例。
除了Foundry项目,您将需要Moonbeam Moonscan API密钥。此API密钥可用于Moonbeam和Moonbase Alpha网络。如果您想要在Moonriver上验证合约,您将需要Moonriver Moonscan API密钥。
如果您已部署示例合约,您可以使用verify-contract
命令行来验证。在验证合约之前,您将需要ABI编码constructor函数。为此,您可以运行以下命令:
cast abi-encode "constructor(uint256)" 100
结果将显示为0x0000000000000000000000000000000000000000000000000000000000000064
。随后您可以使用以下命令来验证合约:
forge verify-contract --chain-id 1284 \
YOUR_CONTRACT_ADDRESS \
--constructor-args 0x0000000000000000000000000000000000000000000000000000000000000064 \
src/MyToken.sol:MyToken \
INSERT_YOUR_MOONSCAN_API_KEY
forge verify-contract --chain-id 1285 \
YOUR_CONTRACT_ADDRESS \
--constructor-args 0x0000000000000000000000000000000000000000000000000000000000000064 \
src/MyToken.sol:MyToken \
INSERT_YOUR_MOONSCAN_API_KEY
forge verify-contract --chain-id 1287 \
YOUR_CONTRACT_ADDRESS \
--constructor-args 0x0000000000000000000000000000000000000000000000000000000000000064 \
src/MyToken.sol:MyToken \
INSERT_YOUR_MOONSCAN_API_KEY
如果您想要部署示例合约的同时进行验证,您可以使用以下命令:
forge create --rpc-url INSERT_RPC_API_ENDPOINT \
--constructor-args 100 \
--etherscan-api-key INSERT_YOUR_MOONSCAN_API_KEY \
--verify --private-key YOUR_PRIVATE_KEY \
src/MyToken.sol:MyToken
forge create --rpc-url INSERT_RPC_API_ENDPOINT \
--constructor-args 100 \
--etherscan-api-key INSERT_YOUR_MOONSCAN_API_KEY \
--verify --private-key YOUR_PRIVATE_KEY \
src/MyToken.sol:MyToken
forge create --rpc-url https://rpc.api.moonbase.moonbeam.network \
--constructor-args 100 \
--etherscan-api-key INSERT_YOUR_MOONSCAN_API_KEY \
--verify --private-key YOUR_PRIVATE_KEY \
src/MyToken.sol:MyToken
| Created: February 28, 2022