使用hardhat 开发以太坊智能合约-验证合约
Web3工具网站【点我访问】 现已上线,欢迎使用,如有好的意见和建议也欢迎反馈。
本系列课程:
一、概述
在我们将真正的合约部署到正式区块链网络上之后, 在区块链浏览器里查看我们的合约,它应该是这样显示的
在Contract选项卡里,它显示的是一堆无法被人类看懂的“乱码”,这对于我们来讲是没有什么问题的,并不会影响合约的正常运行。
但是对于我们的普通用户来讲,他们希望的是能看到你的合约的具体实现,从而判断你的合约是否有漏洞或者“深坑”。
为了增强用户对于项目的信任,我们需要将我们合约的源代码进行公布,接下来,我们就讲解,如何使用hardhat进行合约的验证
二、准备工作
1、申请区块链浏览器账号
我们使用区块链浏览器提供的api接口进行合约验证,所以我们需要先申请一个账号,这里我们拿matic区块链网络来举例说明,首先我们访问PolygonScan Registration Page 注册账号(已经有账号的可以略过),然后用账号进行登录
2、创建API-KEY
访问左侧菜单,如下图所示,输入appName,然后点击continue按钮完成创建
完成创建后,你会得到一个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
}
}
};
三、验证合约
1、发布测试合约
准备工作已经完成,接下来,让我们进入真正的验证合约流程,首先,我们先在matic测试网创建一个合约,还是使用Lock.sol这个合约来创建(如何部署合约,可以看上一篇教程[发布合约]),执行命令:
npx hardhat deploy --network matic
部署成功会返回合约地址:
我们复制这个合约地址,访问matic的测试区块链浏览器看一看它的详情
可以看到,已经创建成功了,我们点开Contract 选项卡看一下
可以看出来,合约发布成功了,但是源代码看不到,接下来让我们来使用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
等待命令执行完成,然后我们刷新刚刚区块链浏览器页面,发现合约已经被验证了
通过本节课程的学习,我们完成了合约的验证流程,到此,hardhat的教程就结束了,后面我会推出更多智能合约相关的课程,感兴趣的同学关注一下吧