Hardhat教程
视频介绍
Solidity 基础课第三节:使用Hardhat-测试与任务
Hardhat简介
- 一个灵活、快速、可扩展的以太坊智能合约开发环境。
- 当前最流行的开发框架
- 最丰富的社区支持和插件生态
Hardhat组成部分
- Hardhat Runner:Hardhati运行环境,核心为task和plugin
- Hardhat Network:开发使用的本地网络
- Hardhat VSCode:为VSCode中开发Solidityi设计的插件
为什么使用Hardhat
- 无需配置网络环境,在本地开发智能合约并利用Hardhat Network 模拟部署和测试
-
丰富的Debug.工具,包括合约中使用console.log,以及返回详细的错误信息和堆栈追踪信息
- 灵活性:自由地配置项目并构建自己的Qsk
-
兼容性:可以和其他开发工具一起使用(Truffle,Foundry,DappTools))
- 扩展性:可以添加各种插件来扩展功能
- 插件:拥有丰富的插件生态,活跃的社区支持
准备工作
- 安装NodeJS
- Hardhat是基于NodeJS的框架
- 选择你的代码编辑器
- 推荐SCode
- 插件安装:Solidity
- 准备必要的Key和资产
- 注册BSCScanf的APIKey)用于验证合约代码
- 领取BNB Testnet的测试token
- 注册Coinmarketcapl的APIKey用于测试中显示gasFee(可选)
Hardhat安装与设置
新建一个nardhat项目
npx hardhat
Hardhat目录结构
Hardhat配置
使用Hardhat完成ERC2O合约
ERC20合约功能设计
- Ownert机制
- 合约的部署者成为owner
- Mint机制
- 每个地址只能mint一次,mint数量为一个确定的常量
- 如果某个地址的币被销毁,那么可以重新获得一次mint机会
- 合约的owner在部署时获得一定量的初始代币
- 转移机制
- 不能转移
- Burn机制
- 只有合约的owner可以burn掉任意地址的代币
完成ERC20合约
准备-安装@openzeppelin/,contracts
npm install @openzeppelin/contracts
引入并继承ERC20合约
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20
可以直接使用ERC20的基础功能,不必重复实现
测试
设计测试内容
- Deployment
- Correct owner正确的ownert地址
- Initial values正确的代币name和symbol
- Initial mint初始化mint了代币给owneri地址
- Mint & Burn
- Mint token可以正常mint一次,不可以再次重复mint
- Burn token只能被owneri调用一次burn,不可以被其他地址调用,不可以多次重复调用
- Transfer
- Not allowed to transfer不可以转移
书写测试
Hardhat脚本与任务
脚本与任务
启动本地网络localhost
npx hardhat node
用Script部署合约到localhost
npx hardhat run scripts/deploy.ts--network localhost
npx hardhat deploy--network localhost
用任务与合约交互
用Task来完成mint
npx hardhat mint--network localhost
用Task来查看余额
npx hardhat balance--network localhost--address {address}
部署到BNB Testnet
部署
npx hardhat deploy--network bnbtest
验证合约
npx hardhat verify --network bnbtest--address Oxabc123