SmartContract 概述
智能合约通过将协议条款转换为计算机代码来数字化协议,该代码在满足合同条款时自动执行。
Hardhat 概述
Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境。它可以帮助开发人员管理和自动化构建智能合约和DApps过程中固有的重复性任务,并围绕这一工作流程轻松引入更多功能。这意味着hardhat在最核心的地方是编译、运行和测试智能合约。
Ganache 概述
Ganache是一种以太坊模拟器,它使得开发DApp更快、更容易、更安全。Ganache提供提前预设的10个用户,可以帮助快速测试DApp。
项目实践
-
Hardhat 安装
npm install --save-dev hardhat注:-S, --save 安装包信息将加入到dependencies(生产阶段的依赖,也就是项目运行时的依赖,就是程序上线后仍然需要依赖)-D, --save-dev 安装包信息将加入到devDependencies(开发阶段的依赖,就是我们在开发过程中需要的依赖,只在开发阶段起作业的) -
快速上手
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 0xD724cc7C49b89917Dd5B6D7715b254F41b3f032D4.npx hardhat test .\test\Lock.ts | 测试合约 -
自定义合约之重入攻击
EtherStore.sol
Attack.sol
Re-Entrancy.ts
注:爆红不是语法错误,可能是Vscode的识别问题Test Re-Entrancy
Resolve Re-Entrancy
修改EtherStore合约 防止重入只需要在回调之前改变数据状态便可以防止重入创建的Failed Re-Entrancy 测试脚本