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