前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用hardhat 开发以太坊智能合约-验证合约

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

作者头像
Tiny熊
发布2022-11-07 12:46:13
9540
发布2022-11-07 12:46:13
举报

本文作者:全干攻城尸[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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深入浅出区块链技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、准备工作
    • 1、申请区块链浏览器账号
      • 2、创建 API-KEY
        • 3、修改配置文件
          • 3.1 修改.env 配置
          • 3.2 修改 hardhat.config.js 配置
      • 三、验证合约
        • 1、发布测试合约
          • 2、合约验证
            • 参考资料
            相关产品与服务
            区块链
            云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档