主页 > imtoken 下载 > 使用hardhat开发以太坊智能合约——验证合约

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

imtoken 下载 2023-04-19 05:55:52

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

一、概述

将真实合约部署到官方区块链网络后,在区块链浏览器中查看我们的合约,应该是这样显示的

在合约标签中,它显示了一堆人类无法理解的“乱码”。 这对我们来说没有问题,不会影响合约的正常运行。

但是对于我们普通用户来说,他们希望的是看到你合约的具体执行情况,从而判断你的合约是否存在漏洞或者“深坑”。

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

二、准备工作 1、申请区块链浏览器账号

我们使用区块链浏览器提供的api接口进行合约验证,所以需要先申请一个账号。 这里我们以matic区块链网络为例。 首先以太坊测试网goerli合并,我们访问PolygonScan注册页面[6]注册一个账号(已有账号可跳过),然后用该账号登录

2.创建API-KEY

进入左侧菜单,如下图,输入appName,点击继续按钮完成创建

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

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
    }
  }
};

复制

3. 验证合约 1. 发布测试合约

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

npx hardhat deploy --network matic

复制

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

我们复制这个合约地址,访问matic的测试区块链浏览器查看其详细信息

可以看到,已经创建成功了,我们点击Contract标签查看一下

可以看到合约发布成功,但是看不到源码。 接下来我们使用hardhat来验证合约

2.合同验证

我们先来看看官网的合约验证是如何进行的,贴出官网的示例代码

npx hardhat verify --network goerli 

复制

然后我会解释

固定命令写法

npx hardhat verify --network

复制

代表你要执行的网络,对应我们在hardhat.config.js中配置的网络

goerli

复制

合约地址,也就是我们上一步发布合约后返回的地址,需要

复制

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


复制

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

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

复制

本教程的合约验证码:

npx hardhat verify --network matic 0x123d89f92Bc76c918AECFA5825E13fe877e7D0C1 1696734227

复制

等待命令执行完毕,然后我们刷新刚才的区块链浏览器页面,发现合约已经验证通过

通过本课程的学习,我们完成了合约的验证过程。 至此,安全帽教程结束。 后续我会推出更多智能合约相关的课程。 感兴趣的同学关注一下

参考

[1]

整干攻城尸:

[2]

使用hardhat开发以太坊智能合约——搭建环境:

[3]

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

[4]

使用hardhat开发以太坊智能合约——发布合约:

[5]

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

[6]

PolygonScan 注册页面:

[7]

[发布合同: