当前位置: 首页 > news >正文

从零开始掌握Hardhat开发

以下是一份简明实用的 Hardhat 开发教程,涵盖环境搭建、项目初始化、合约编写、测试部署等核心流程,结合最新官方实践整理而成:


一、环境准备与项目初始化

  1. 安装依赖

    • Node.js ≥ v18 + npm/yarn
    mkdir hardhat-project && cd hardhat-project
    npm init -y
    npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
    
  2. 初始化项目

    npx hardhat init
    
    • 选择 Create a JavaScript project(或 TypeScript 按需选择)
    • 生成目录结构:
      contracts/    # 合约源码
      test/         # 测试脚本
      scripts/      # 部署脚本
      hardhat.config.js # 配置文件
      

二、核心开发工作流

1. 编写合约(示例:contracts/Lock.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Lock {uint public unlockTime;address payable public owner;constructor(uint _unlockTime) payable {owner = payable(msg.sender);unlockTime = _unlockTime;}function withdraw() public {require(block.timestamp >= unlockTime, "Not unlocked");owner.transfer(address(this).balance);}
}
2. 编译合约
npx hardhat compile
  • 编译结果输出至 artifacts/ 目录
  • 缓存机制:仅重新编译修改过的文件(强制编译加 --force
3. 测试合约(示例:test/Lock.test.js
const { expect } = require("chai");
describe("Lock", function () {it("Should reject early withdrawal", async function () {const Lock = await ethers.getContractFactory("Lock");const unlockTime = Math.floor(Date.now() / 1000) + 3600; // 1小时后解锁const lock = await Lock.deploy(unlockTime, { value: 1e18 });await expect(lock.withdraw()).to.be.revertedWith("Not unlocked");});
});

运行测试:npx hardhat test

4. 部署合约
  • 使用脚本部署scripts/deploy.js):
    const hre = require("hardhat");
    async function main() {const lock = await hre.ethers.deployContract("Lock", [unlockTime], { value: 1e18 });console.log("Deployed to:", await lock.getAddress());
    }
    main();
    
  • 执行部署
    npx hardhat run scripts/deploy.js --network localhost
    

三、网络配置与管理

  1. 启动本地节点

    npx hardhat node
    
    • 提供 JSON-RPC 端点:http://localhost:8545
    • 内置 20 个测试账户(含 10000 ETH)
  2. 多网络配置(修改 hardhat.config.js

module.exports = {networks: {sepolia: {url: "https://sepolia.infura.io/v3/YOUR_KEY",accounts: [privateKey]}}
};
  • 切换网络:--network sepolia

四、进阶功能

  1. 调试合约
    使用 console.log 输出日志(需导入 import "hardhat/console.sol";):

    function withdraw() public {console.log("Current time:", block.timestamp);require(block.timestamp >= unlockTime, "Not unlocked");
    }
    
  2. 自定义任务
    在配置文件中添加任务:

    task("accounts", "Prints all accounts", async () => {const accounts = await ethers.getSigners();accounts.forEach((acc) => console.log(acc.address));
    });
    

    运行:npx hardhat accounts

  3. 插件扩展
    常用插件:

    • @nomicfoundation/hardhat-verify:合约开源验证
    • hardhat-gas-reporter:Gas 消耗分析
      安装后需在配置中引入。

五、资源推荐

  • 官方文档:Hardhat 官网
  • 中文社区:Hardhat 中文网
  • 实战项目:参考 Hardhat Toolbox 示例

提示:遇到网络问题时,清除缓存 npx hardhat clean;调试交易使用 npx hardhat console 交互环境。

http://www.lryc.cn/news/613249.html

相关文章:

  • 【tips】css模仿矢量图透明背景
  • 小红书开源多模态视觉语言模型DOTS-VLM1
  • Ubuntu 22 下脚本登录MFA堡垒机
  • 嵌入式学习---在 Linux 下的 C 语言学习 Day10
  • 指针——练习
  • OLMo 2 架构深度解析:开放语言模型的技术革命
  • A Logical Calculus of the Ideas Immanent in Nervous Activity(神经网络早期的M-P模型)
  • 【数字图像处理系列笔记】Ch05:傅里叶变换与频率域滤波
  • 【实时Linux实战系列】实时分布式计算架构的实现
  • Mongodb常用命令简介
  • MongoDB学习专题(六)复制集和分片集群
  • 02电气设计-安全继电器电路设计(让电路等级达到P4的安全等级)
  • 内存泄漏系列专题分析之三十二:高通相机CamX ION/dmabuf内存管理机制CmdBuffer
  • VC6800智能相机:赋能智能制造,开启AI视觉新纪元
  • vue2+elementui select框可以选择可以回车添加新的option
  • Godot ------ 中级人物血条制作01
  • ElementUI之表格
  • Oracle 19C In-Memory 列存储技术测试
  • Renesas Electronics RA8M1语音套件(VK-RA8M1)
  • 深入解析Go设计模式:责任链模式实战
  • Electron 中 license-keys 的完整集成方案
  • 网络虚拟化是啥啊?
  • 自然语言处理×第四卷:文本特征与数据——她开始准备:每一次输入,都是为了更像你地说话
  • 拥抱云原生:从传统架构到云原生架构的演进与实践
  • python题目练习 无重叠区间
  • 京东关键字搜索商品列表接口开发实战:从参数优化到分布式调用
  • yolo目标检测技术:基础概念(一)
  • 【洛谷题单】--分支结构(一)
  • 脱机部署k3s
  • Python 常用内置高阶函数