Web3智能合约开发工具链 web3-hardhat

Hardhat 是一个基于 TypeScript/JavaScript 的以太坊智能合约开发、测试和部署工具链。它提供了一套完整的开发环境,包括合约编译、本地节点、自动化测试、脚本部署、合约验证以及丰富的插件生态系统。适用于 Solidity 开发者进行区块链 DApp 和智能合约的快速开发与迭代。关键词:Hardhat, 智能合约, Solidity, 以太坊开发, 区块链工具, 合约测试, 合约部署, Web3开发。

智能合约 0 次安装 0 次浏览 更新于 2/23/2026

名称: web3-hardhat 描述: 用于 Solidity 开发的 Hardhat 工具链参考。适用于处理 hardhat.config.ts、ethers.js 测试、部署脚本或 Hardhat 插件。涵盖配置、测试、部署和常用插件。

Hardhat 工具链参考

核心命令

npx hardhat compile            # 编译合约
npx hardhat test               # 运行测试
npx hardhat test --grep "mint" # 过滤测试
npx hardhat node               # 本地节点
npx hardhat run scripts/deploy.ts --network sepolia  # 部署
npx hardhat verify --network mainnet ADDR arg1 arg2  # 验证
npx hardhat coverage           # 测试覆盖率
npx hardhat clean              # 清理构建产物

配置

hardhat.config.ts

import { HardhatUserConfig } from "hardhat/config"
import "@nomicfoundation/hardhat-toolbox" // ethers, chai, coverage, gas, typechain, verify
import "hardhat-deploy" // 可选:部署管理

const config: HardhatUserConfig = {
  solidity: {
    version: "0.8.28",
    settings: {
      optimizer: { enabled: true, runs: 200 },
      viaIR: false,
    },
  },
  networks: {
    hardhat: {
      forking: {
        url: process.env.ETH_RPC_URL || "",
        enabled: !!process.env.FORK,
      },
    },
    mainnet: {
      url: process.env.ETH_RPC_URL || "",
      accounts: process.env.DEPLOYER_KEY ? [process.env.DEPLOYER_KEY] : [],
    },
    base: {
      url: process.env.BASE_RPC_URL || "https://mainnet.base.org",
      accounts: process.env.DEPLOYER_KEY ? [process.env.DEPLOYER_KEY] : [],
    },
    sepolia: {
      url: process.env.SEPOLIA_RPC_URL || "",
      accounts: process.env.DEPLOYER_KEY ? [process.env.DEPLOYER_KEY] : [],
    },
  },
  etherscan: {
    apiKey: {
      mainnet: process.env.ETHERSCAN_API_KEY || "",
      base: process.env.BASESCAN_API_KEY || "",
    },
  },
}

export default config

测试 (ethers.js + chai)

基础测试

import { expect } from "chai"
import { ethers } from "hardhat"
import { loadFixture } from "@nomicfoundation/hardhat-toolbox/network-helpers"

describe("MyToken", function () {
  async function deployFixture() {
    const [owner, alice, bob] = await ethers.getSigners()
    const Token = await ethers.getContractFactory("MyToken")
    const token = await Token.deploy("MyToken", "MTK")
    return { token, owner, alice, bob }
  }

  it("应该铸造代币", async function () {
    const { token, alice } = await loadFixture(deployFixture)
    await token.connect(alice).mint(100)
    expect(await token.balanceOf(alice.address)).to.equal(100)
  })
})

测试夹具 (loadFixture)

  • 在测试之间创建快照并恢复 — 比重新部署快得多
  • 对于部署,始终使用 loadFixture 而不是 beforeEach

时间操作

import { time } from "@nomicfoundation/hardhat-toolbox/network-helpers"

await time.increase(3600)          // 前进1小时
await time.increaseTo(timestamp)   // 设置到特定时间
await time.latest()                // 获取当前区块时间戳

事件测试

await expect(token.transfer(alice.address, 100))
  .to.emit(token, "Transfer")
  .withArgs(owner.address, alice.address, 100)

回滚测试

await expect(token.connect(alice).adminMint(100))
  .to.be.revertedWithCustomError(token, "OwnableUnauthorizedAccount")
  .withArgs(alice.address)

部署

使用 Hardhat Ignition (推荐)

// ignition/modules/MyToken.ts
import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"

export default buildModule("MyToken", (m) => {
  const token = m.contract("MyToken", ["MyToken", "MTK"])
  return { token }
})
npx hardhat ignition deploy ignition/modules/MyToken.ts --network sepolia

使用脚本

// scripts/deploy.ts
import { ethers } from "hardhat"

async function main() {
  const Token = await ethers.getContractFactory("MyToken")
  const token = await Token.deploy("MyToken", "MTK")
  await token.waitForDeployment()
  console.log("部署地址:", await token.getAddress())
}

main().catch(console.error)

常用插件

插件 用途
@nomicfoundation/hardhat-toolbox 一体化工具包 (ethers, chai, coverage 等)
@nomicfoundation/hardhat-verify 合约验证
hardhat-deploy 部署管理
hardhat-gas-reporter 函数Gas消耗报告
@typechain/hardhat 合约的 TypeScript 类型
solidity-coverage 测试覆盖率

Hardhat 与 Foundry 对比

特性 Hardhat Foundry
语言 TypeScript Solidity
速度 较慢 快得多
生态系统 插件生态更丰富 正在发展
测试 JS/TS 测试 Solidity 测试
模糊测试 有限 内置
调试 console.log 跟踪 + console.log
最佳适用场景 JS/TS 团队,复杂部署 性能,Solidity原生开发

许多项目两者都用:Foundry 用于测试,Hardhat 用于部署/脚本。