Skip to content

使用Etherscan插件验证智能合约

概览

验证智能合约是为部署在Moonbeam上的合约提供透明度和安全性的一种好方法。Hardhat和Foundry与Etherscan的合约验证服务集成,通过本地检测要验证的合约以及需要哪些Solidity库如果有来自动化合约验证过程。

Hardhat插件可以无缝集成至您的Hardhat项目。Foundry也具有Etherscan功能,但它们内置于其Forge工具中,而非包含在单独的插件中。

本教程将向您展示如何使用两者插件验证部署至Moonbase Alpha的智能合约。本教程也同样适用于Moonbeam和Moonriver。

查看先决条件

在开始本教程之前,您将需要准备以下内容:

生成Moonscan API密钥

要生成Moonscan API密钥,您需要先注册一个账号。这取决于您想要在哪个网络上验证合约,请确保您在Moonscan上选择正确的网络创建API密钥。如果您选择在Moonbeam和Moonbase Alpha上验证合约,您可以前往Moonbeam Moonscan;如果您选择在Moonriver上验证合约,您可以前往Moonriver Moonscan。要注册一个账号,请遵循以下步骤:

  1. 点击Sign In
  2. 选择Click to sign up后注册您的新账号

Sign up for Moonscan

完成注册并登录新账号后,您将能够创建API密钥。

  1. 在左侧菜单中选择API-KEYs
  2. 点击+ Add按钮增加新的密钥

Add an API key

系统将提示您为您的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的合约代码链接。

Successful verification using hardhat-verify plugin

如果您正在验证具有constructor函数的合约,您将需要运行上述命令并在命令末尾添加用于部署合约的constructor函数。例如:

npx hardhat verify --network moonbase INSERT_CONTRACT_ADDRESS INSERT_CONSTRUCTOR_ARGS

参考Hardhat Verify文档网站获取其他如下所示用例:

使用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 \
--etherscan-api-key INSERT_YOUR_MOONSCAN_API_KEY
forge verify-contract --chain-id 1285 \
YOUR_CONTRACT_ADDRESS \
--constructor-args 0x0000000000000000000000000000000000000000000000000000000000000064 \
src/MyToken.sol:MyToken \
--etherscan-api-key INSERT_YOUR_MOONSCAN_API_KEY
forge verify-contract --chain-id 1287 \
YOUR_CONTRACT_ADDRESS \
--constructor-args 0x0000000000000000000000000000000000000000000000000000000000000064 \
src/MyToken.sol:MyToken \
--etherscan-api-key INSERT_YOUR_MOONSCAN_API_KEY

Foundry Verify

如果您想要部署示例合约的同时进行验证,您可以使用以下命令:

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

Foundry Contract Deploy and Verify

本网站的所有信息由第三方提供,仅供参考之用。Moonbeam文档网站(https://docs.moonbeam.network/)上列出和描述的任何项目与Moonbeam立场无关。Moonbeam Foundation不保证网站信息的准确性、完整性或真实性。如使用或依赖本网站信息,需自行承担相关风险,Moonbeam Foundation不承担任何责任和义务。这些材料的所有陈述和/或意见由提供方个人或实体负责,与Moonbeam Foundation立场无关,概不构成任何投资建议。对于任何特定事项或情况,应寻求专业权威人士的建议。此处的信息可能会包含或链接至第三方提供的信息与/或第三方服务(包括任何第三方网站等)。这类链接网站不受Moonbeam Foundation控制。Moonbeam Foundation对此类链接网站的内容(包括此类链接网站上包含的任何信息或资料)概不负责也不认可。这些链接内容仅为方便访客而提供,Moonbeam Foundation对因您使用此信息或任何第三方网站或服务提供的信息而产生的所有责任概不负责。
Last update: January 25, 2024
| Created: February 28, 2022