Hardhat + Typescript 智能合约的部署与测试
这篇文章主要介绍从零开始搭建Hardhat框架下使用typescrip进行合约的部署和测试
哪里有不足的地方请多指教
主要使用的框架和技术:
- hardhat
- yarn(当然也可用npm,只是我喜欢用yarn)
- waffle
- mocha
项目搭建
-
创建一个项目目录,并进行yarn初始化
mkdir hardhat-example cd hardhat-example yarn init
-
安装hardhat
直接运行
yarn add hardhat
就可以了 -
初始化项目为hardhat+typescript项目
-
运行
yarn hardhat init
-
选择
Create an advanced sample project that uses TypeScript
-
下面分别是
选择项目跟目录
是否创建
.gitignore
文件是否安装所需要的一些包
直接敲回车就行
注意:用
yarn
进行安装的时候有可能出现ethereum-waffle
包装不上的问题,这时候这个包可以单独用npm
进行安装到这里这个项目框架基本已经搭建完成了,下面就是对它进行各种配置了
-
项目配置
-
在项目跟目录下新建
.env
文件,用于配置与链和网络相关配置相应的配置也可以直接从
.env.example
文件拷贝过去替换成自己的ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 ROPSTEN_URL=https://ropsten.infura.io/v3/<YOUR ALCHEMY KEY> PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1
-
安装hardhat部署插件
hardhat-deploy
、hardhat-deploy-ethers
,并引入到hardhat.confit.ts
中:yarn add hardhat-deploy hardhat-deploy-ethers
import 'hardhat-deploy'; import 'hardhat-deploy-ethers';
-
对配置
hardhat.config.ts
文件进行配置在文件中有一段task的代码,个人觉得用处不大就直接删除了
task("accounts", "Prints the list of accounts", async (taskArgs, hre) => { const accounts = await hre.ethers.getSigners(); for (const account of accounts) { console.log(account.address); } });
一下配置均在
hardhat.config.ts
文件下config中const config: HardhatUserConfig = { }
配置hardhat多版本solidity编译环境,还需要其他的话直接照着加就行
solidity: { compilers: [{ version: "0.8.0", settings: { optimizer: { enabled: true, runs: 200 } } }, { version: "0.6.0", settings: { optimizer: { enabled: true, runs: 200 } } }] },
配置合约路径
paths: { sources: "contracts" },
配置地址对应的名称(主要用于部署时更方便调用部署地址)
namedAccounts: { deployer: 0 },