使用hardhat 开发以太坊智能合约-验证合约

2022-11-07 12:46:13 浏览数 (1)

本文作者:全干攻城尸[1]

本系列课程: 第一节:使用 hardhat 开发以太坊智能合约-搭建环境[2] 第二节:使用 hardhat 开发以太坊智能合约-测试合约[3] 第三节:使用 hardhat 开发以太坊智能合约-发布合约[4] 第四节:使用 hardhat 开发以太坊智能合约-验证合约[5]

一、概述

在我们将真正的合约部署到正式区块链网络上之后, 在区块链浏览器里查看我们的合约,它应该是这样显示的

在 Contract 选项卡里,它显示的是一堆无法被人类看懂的“乱码”,这对于我们来讲是没有什么问题的,并不会影响合约的正常运行。

但是对于我们的普通用户来讲,他们希望的是能看到你的合约的具体实现,从而判断你的合约是否有漏洞或者“深坑”。

为了增强用户对于项目的信任,我们需要将我们合约的源代码进行公布,接下来,我们就讲解,如何使用 hardhat 进行合约的验证

二、准备工作

1、申请区块链浏览器账号

我们使用区块链浏览器提供的 api 接口进行合约验证,所以我们需要先申请一个账号,这里我们拿 matic 区块链网络来举例说明,首先我们访问PolygonScan Registration Page[6] 注册账号(已经有账号的可以略过),然后用账号进行登录

2、创建 API-KEY

访问左侧菜单,如下图所示,输入 appName,然后点击 continue 按钮完成创建

完成创建后,你会得到一个 API-KEY,我们复制一下

3、修改配置文件

我们用 vscode 打开我们的 hardhat 工程,

3.1 修改.env 配置

找到根目录.env 配置文件,然后 追加一条配置

代码语言:javascript复制
POLYGONSCAN_API_KEY = 你刚申请的API-KEY
3.2 修改 hardhat.config.js 配置

找到根目录的 hardhat.config.js 这个文件,添加如下配置:

代码语言:javascript复制
etherscan: {
    apiKey: {
      polygonMumbai: process.env.POLYGONSCAN_API_KEY
    }
  }

完整代码应该如下图所示:

代码语言:javascript复制
require("@nomicfoundation/hardhat-toolbox");
require('dotenv').config();


/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
  solidity: "0.8.17",
  networks: {
    goerli: {
      url: `https://eth-goerli.g.alchemy.com/v2/${process.env.ALCHEMY_API_KEY}`,
      accounts: [process.env.GOERLI_PRIVATE_KEY],
    },
    matic: {
      url: "https://rpc-mumbai.maticvigil.com",
      accounts: [process.env.MATIC_PRIVATE_KEY]
    }
  },
  etherscan: {
    apiKey: {
      polygonMumbai: process.env.POLYGONSCAN_API_KEY
    }
  }
};

三、验证合约

1、发布测试合约

准备工作已经完成,接下来,让我们进入真正的验证合约流程,首先,我们先在 matic 测试网创建一个合约,还是使用 Lock.sol 这个合约来创建(如何部署合约,可以看上一篇教程[发布合约[7]]),执行命令:

代码语言:javascript复制
npx hardhat deploy --network matic

部署成功会返回合约地址:

我们复制这个合约地址,访问 matic 的测试区块链浏览器看一看它的详情

可以看到,已经创建成功了,我们点开 Contract 选项卡看一下

可以看出来,合约发布成功了,但是源代码看不到,接下来让我们来使用 hardhat 进行合约验证

2、合约验证

我们先来看一下官网关于合约验证这块是如何操作的,贴一下官网的示例代码

代码语言:javascript复制
npx hardhat verify --network goerli <address> <unlock time>

然后我来解释一下

固定命令写法

代码语言:javascript复制
npx hardhat verify --network

代表你要执行的网络,这个跟我们在 hardhat.config.js 配置的网络是一一对应的

代码语言:javascript复制
goerli

合约地址,就是我们上一步发布合约后返回的那个地址,必填

代码语言:javascript复制
<address>

部署合约的初始化参数,可以为多个,使用空格分隔,字符串使用""包裹

代码语言:javascript复制
<unlock time>

那么一个完整的验证合约命令应该是这样的:

代码语言:javascript复制
npx hardhat verify --network 网络名 合约地址 参数1 参数2 参数3 …… (没有参数就不写)

本教程的合约验证代码:

代码语言:javascript复制
npx hardhat verify --network matic 0x123d89f92Bc76c918AECFA5825E13fe877e7D0C1 1696734227

等待命令执行完成,然后我们刷新刚刚区块链浏览器页面,发现合约已经被验证了

通过本节课程的学习,我们完成了合约的验证流程,到此,hardhat 的教程就结束了,后面我会推出更多智能合约相关的课程,感兴趣的同学关注一下吧

参考资料

[1]

全干攻城尸: https://learnblockchain.cn/people/5344

[2]

使用hardhat开发以太坊智能合约-搭建环境: https://learnblockchain.cn/article/4885

[3]

使用hardhat开发以太坊智能合约-测试合约: https://learnblockchain.cn/article/4930

[4]

使用hardhat开发以太坊智能合约-发布合约: https://learnblockchain.cn/article/4929

[5]

使用hardhat开发以太坊智能合约-验证合约: https://learnblockchain.cn/article/4931

[6]

PolygonScan Registration Page: https://polygonscan.com/register

[7]

[发布合约: https://learnblockchain.cn/article/4930

0 人点赞