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

本章我们一起来使用hardhat把我们部署的合约验证一下

本系列课程:

第一节:使用hardhat开发以太坊智能合约-搭建环境

第二节:使用hardhat开发以太坊智能合约-测试合约

第三节:使用hardhat开发以太坊智能合约-发布合约

第四节:使用hardhat开发以太坊智能合约-验证合约

一、概述

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

image.png

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

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

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

二、准备工作

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

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

2、创建API-KEY

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

image.png

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

image.png

3、修改配置文件

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

3.1 修改.env配置

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

POLYGONSCAN_API_KEY = 你刚申请的API-KEY

3.2 修改hardhat.config.js 配置

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

etherscan: {
    apiKey: {
      polygonMumbai: process.env.POLYGONSCAN_API_KEY
    }
  }

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

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这个合约来创建(如何部署合约,可以看上一篇教程[发布合约]),执行命令:

npx hardhat deploy --network matic

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

image.png

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

image.png

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

image.png

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

2、合约验证

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

npx hardhat verify --network goerli <address> <unlock time>

然后我来解释一下

固定命令写法

npx hardhat verify --network

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

goerli 

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

<address>

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

<unlock time>

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

npx hardhat verify --network 网络名 合约地址 参数1 参数2 参数3 …… (没有参数就不写)

本教程的合约验证代码:

npx hardhat verify --network matic 0x123d89f92Bc76c918AECFA5825E13fe877e7D0C1 1696734227

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

image.png

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

点赞 1
收藏 2
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
外柏叁布道者
外柏叁布道者
0x6ea1...9dbe
全网同名 资深区块链专家 更多web3、区块链技术与前沿信息 请关注公众号:外柏叁布道者(web3_preacher) Web3工具网站现已上线: https://utools.me 不定时更新各种实用工具,敬请关注 接各种Dapp、合约、web3相关工具开发