HardHat tests for smart contracts

231 阅读2分钟

SmartContract 概述

智能合约通过将协议条款转换为计算机代码来数字化协议,该代码在满足合同条款时自动执行。

Hardhat 概述

Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境。它可以帮助开发人员管理和自动化构建智能合约和DApps过程中固有的重复性任务,并围绕这一工作流程轻松引入更多功能。这意味着hardhat在最核心的地方是编译、运行和测试智能合约。

Ganache 概述

Ganache是一种以太坊模拟器,它使得开发DApp更快、更容易、更安全。Ganache提供提前预设的10个用户,可以帮助快速测试DApp。

项目实践

  1. Hardhat 安装

    npm install --save-dev hardhat

    :-S, --save 安装包信息将加入到dependencies(生产阶段的依赖,也就是项目运行时的依赖,就是程序上线后仍然需要依赖)

    -D, --save-dev 安装包信息将加入到devDependencies(开发阶段的依赖,就是我们在开发过程中需要的依赖,只在开发阶段起作业的)

  2. 快速上手

    1.mkdir HardhatProject | 新建Hardhat项目

    2.cd HardhatProject | 进入项目根目录

    3.npx hardhat | 初始化hardhat项目

    注: 如Vite框架进行选项配置 一般开发选用强类型的 TyteScript 版本

    4.Open Ganache to Create a New NetWork | 打开 Ganache新建一个网络链

    5.Ganache deploy smartContract | 在Ganache上部署合约

    import { HardhatUserConfig } from "hardhat/config";
    import "@nomicfoundation/hardhat-toolbox";
    
    const PRIVATE_KEY = "0xd504db1cf910945a1fbf0e27e6da07fd301caa17405e29377a5abd4af297dd05";
    
    const config: HardhatUserConfig = {
      solidity: "0.8.10",
      networks:{
        ganache:{
          url:`HTTP://127.0.0.1:7545`,
          accounts:[PRIVATE_KEY]
        }
      }
    };
    
    export default config;
    

    Success | 部署成功

     Lock with 0.01ETH and unlock timestamp 1691686921 deployed to 0xD724cc7C49b89917Dd5B6D7715b254F41b3f032D
    

    image.png 4.npx hardhat test .\test\Lock.ts | 测试合约

    image.png

  3. 自定义合约之重入攻击

    EtherStore.sol

    image.png

    Attack.sol

    image.png Re-Entrancy.ts

    注:爆红不是语法错误,可能是Vscode的识别问题

    image.png

    Test Re-Entrancy

    image.png

    Resolve Re-Entrancy

    修改EtherStore合约 防止重入只需要在回调之前改变数据状态便可以防止重入

    image.png

    创建的Failed Re-Entrancy 测试脚本

    image.png