一个基于 Hardhat 构建的去中心化留言板应用。本项目记录了从智能合约编写、本地节点模拟到前端交互的全过程,并详细整理了在 Windows 环境下部署 Web3 应用的避坑指南。
my-dapp/
├── contracts/ # Solidity 智能合约
│ └── MessageBoard.sol
├── scripts/ # 自动化部署脚本
│ └── deploy.js
├── artifacts/ # 编译产物 (已在 .gitignore 中忽略)
├── hardhat.config.js # Hardhat 核心配置文件
├── package.json # 项目依赖与脚本配置
└── index.html # DApp 前端交互页面
确保已安装 Node.js。克隆仓库后执行:
npm install
清理旧缓存并编译 Solidity 源码:
npx hardhat clean
npx hardhat compile
Hardhat 会启动一个运行在 http://127.0.0.1:8545 的本地以太坊节点:
npx hardhat node
注意:启动后请记录下 Account #0 的私钥,用于导入 MetaMask。
在新的终端窗口执行部署:
npx hardhat run scripts/deploy.js --network localhost
记录输出的 Contract Address。
在本地化部署过程中,本项目成功解决了以下关键技术挑战:
- 挑战: 频繁出现
ERESOLVE unable to resolve dependency tree。 - 方案: 严格控制
package.json,仅依赖@nomicfoundation/hardhat-toolbox。通过npm cache clean --force和删除package-lock.json彻底重置环境。
- 挑战: 运行 node 时报错
missing field output。 - 方案: 这是由于在 TS/JS 环境切换时产生的缓存冲突。通过手动删除
artifacts/和cache/文件夹并重新编译解决。
- 挑战: 发送交易提示
execution reverted或Nonce too high。 - 方案:
- 网络切换: 手动添加 RPC
8545,Chain ID 必须设为31337。 - 重置账户: 在 MetaMask 高级设置中点击“清除活动标签数据”,同步本地节点的 Nonce 计数器。
- ABI 同步: 每次修改合约代码并重新部署后,必须更新
index.html中的contractABI和Contract Address。 - Ethers.js v6 适配: 本项目部署脚本采用了 Ethers v6 语法,使用
waitForDeployment()替代旧版的deployed()。 - 配置文件:
hardhat.config.js必须采用 CommonJS 格式,通过require引入插件。
本项目采用 MIT License 许可。