- 能够非常方便地编写、测试并部署智能合约到以太坊
- 内置了Hardhat Network,不用部署到真是的以太坊网络也能进行测试
安装配置
1 | npm install -g hardhat |
配置文件hardhat.config.js
1 | { |
目录结构
1 | . |
使用hardhat
常用命令
- 编译目录artifacts中的信息与大多数的合约编译工具的输出是兼容的,例如
Truffle
1 | npx hardhat compile # 编译合约,编译会编译到artifacts目录。默认只会编译更改后的 |
测试
- 一个测试用例
./test/token.js
- 智能合约的工具都互相兼容,如果是
truffle
语法写的测试用例,仍然可以用npx hardhat test
来测试,需要先安装插件npm install --save-dev @nomiclabs/hardhat-truffle5 @nomiclabs/hardhat-web3 web3
,并在hardhat.config.js
中引入require("@nomiclabs/hardhat-truffle5");
- 测试的各种操作默认都是
owner
,如果要切换为其他的用户,可以使用connect方法contract.connect(address).getBalance()
,当然,得是getSigners
里面的用户才可以,不然没有私钥基本上也操作不了
1 | const { expect } = require("chai"); |
部署
- 部署到指定的以太坊网络
- example:
./scripts/deploy.js
1 | async function main() { |
编写完成后执行命令进行部署
1 | npx hardhat run scripts/deploy.js # 默认部署到hardhat本地的测试网络,当然成功后就没了 |
调用合约
- 根据我的使用,
artifacts
目录下的东西是编译后的东西,感觉有必要放到git repo中去,这样就不用存储abi到数据库了,而且代码也方便调用。每次部署相同的合约会得到一个不同地址,但编译后的合约肯定是一样的 - 最好存储一下abi信息到数据库,这样后面即使不用hardhat也能比较方便地调用合约方法
1 | const hre = require("hardhat"); // 以代码来执行deploy或者使用都是这个前缀 |
参考文章
- Hardhat新手教程: 里面包含代币的完整测试用例