- 能够非常方便地编写、测试并部署智能合约到以太坊
- 内置了Hardhat Network,不用部署到真是的以太坊网络也能进行测试
安装配置
1 | npm install -g hardhat |
配置文件hardhat.config.js
1 | { |
目录结构
1 | . |
使用hardhat
常用命令
- 编译目录artifacts中的信息与大多数的合约编译工具的输出是兼容的,例如
Truffle
1 | npx hardhat compile # 编译合约,编译会编译到artifacts目录。默认只会编译更改后的 |
测试
默认是
Jest
测试一个测试用例
./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(singer).getBalance()
,当然,得是getSigners
里面的用户才可以,不然没有私钥基本上也操作不了
1 | const { expect } = require("chai"); // import { expect } from 'chai'; |
部署
- 部署到指定的以太坊网络
- 如果发现部署的时候卡住了,一直没有响应,检查下是不是没有miner在挖矿
- example:
./scripts/deploy.js
1 | async function main() { |
编写完成后执行命令进行部署
1 | npx hardhat run scripts/deploy.js # 默认部署到hardhat本地的测试网络,当然成功后就没了 |
调用合约
- 根据我的使用,
artifacts
目录下的东西是编译后的东西,感觉有必要放到git repo中去,这样就不用存储abi到数据库了,而且代码也方便调用。每次部署相同的合约会得到一个不同地址,但编译后的合约肯定是一样的。放到backend repo里面既可以用代码来部署也可以直接返回最新的给前端 - 最好存储一下abi信息到数据库,这样后面即使不用hardhat也能比较方便地调用合约方法
1 | // import '@nomiclabs/hardhat-waffle'; |
参考文章
- Hardhat新手教程: 里面包含代币的完整测试用例