Skip to content

使用Etherscan插件验证智能合约

Etherscan Plugins Banner

概览

验证智能合约是为部署在Moonbeam上的合约提供透明度和安全性的一种好方法。与Etherscan的合约验证服务集成的插件有很多,其中包括hardhat-etherscan plugintruffle-plugin-verify plugin。这两种插件均能通过本地检测需要验证的合约及其所需的Solidity库(若有)来自动执行验证合约的过程。

Hardhat插件可以无缝集成至您的Hardhat项目,同样地Truffle插件也可以集成至您的Truffle项目。

本教程将向您展示如何使用两者插件验证部署至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 @nomiclabs/hardhat-etherscan

您可以将您的Moonscan API密钥与您的私钥一起添加到secrets.json文件中。在本示例中,您将需要Moonbeam Moonscan API密钥。如果您想要在Moonriver上验证合约,您将需要Moonriver Moonscan API密钥。

从您的Hardhat项目中,打开hardhat.config.js文件,导入hardhat-etherscan插件和您的Moonscan API密钥,并添加Etherscan配置:

require("@nomiclabs/hardhat-etherscan");

const { privateKey, moonbeamMoonscanAPIKey, moonriverMoonscanAPIKey } = require('./secrets.json');

module.exports = {
  networks: {
    moonbeam: { ... },
    moonriver: { ... },
    moonbase: { ... }
  },
  etherscan: {
    apiKey: {
      moonbeam: moonbeamMoonscanAPIKey, // Moonbeam Moonscan API Key
      moonriver: moonriverMoonscanAPIKey, // Moonriver Moonscan API Key
      moonbaseAlpha: moonbeamMoonscanAPIKey, // Moonbeam Moonscan API Key    
    }  
  }
};

要验证合约,您需要运行verify命令并传入已部署合约的地址及其部署的网络:

npx hardhat verify --network moonbase <CONTRACT-ADDRESS>

在您的终端,您将看到您的合约源代码已成功提交验证。如果验证成功,您将在终端看到Successfully verified contract以及Moonbase Alpha上的Moonscan的合约代码链接。

Successful verification using hardhat-etherscan plugin

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

npx hardhat verify --network moonbase <CONTRACT-ADDRESS> "<constructor argument>"

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

使用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的合约代码链接。

Successful verification using truffle-verify-plugin

更多关于插件的详细信息,请参考README.md文档truffle-plugin-verify GitHub代码库。