HardHat框架
开始
安装并初始化
1 | cd ... |
使用 OpenZepplin 等第三方库:
1 | npm install @openzeppelin/contracts --save-dev |
在合约里的体现:
1 | import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; |
编译合约
1 | npx hardhat compile |
成功编译后,会在 artifacts/contracts/ 目录下生成Name.json ,包含了智能合约的 ABI 、字节码(Bytecode)等。
运行测试
1 | npx hardhat test |
其实我们在测试时, 合约已经部署到了 Hardhat 内置的网络上。
部署合约
在scripts文件夹,新建一个deploy.js 用来写部署脚本。
1 | # 部署到Hardhat的「默认内置网络」 |
现在ignition/modules/Lock.js替代了传统的 scripts/deploy.js 脚本,用更结构化的方式告诉 Hardhat 如何部署Lock合约,比如要传什么参数、部署顺序等。
1 | # 部署到Hardhat的「默认内置网络」 |
--network sepolia本质:告诉 Hardhat,去连接我在配置文件hardhat.config.js里定义的名为sepolia的网络。
hardhat.config.js里添加网络配置:
1 | module.exports = { |
Hardhat 的默认内置网络:一个临时本地节点,运行完命令后节点会自动关闭。该网络的合约数据是临时的,命令结束后数据会清空,无法后续交互。适用于快速测试部署脚本是否能正常运行,验证合约构造函数参数是否正确。
scripts/deploy.js参考
1 | const { ethers } = require("hardhat"); |
可以在 Solidity 代码中调用console.log()打印日志信息和合约变量,可以方便我们调试代码。
ignition/modules/Lock.js参考
1 | // This setup uses Hardhat Ignition to manage smart contract deployments. |
如何检查网络连接是否正常?
直接在浏览器中访问你的 RPC 地址(替换 ${INFURA_API_KEY} 为实际值):https://sepolia.infura.io/v3/你的InfuraAPIKey
如果浏览器显示:{ "jsonrpc": "2.0", "error": { "code": -32700, "message": "Invalid JSON" } },恭喜你,RPC 节点地址是有效的,网络连接也没问题!
验证合约
1 | npx hardhat verify --network sepolia <合约地址> |
生成可视化的合约交互界面(“Read Contract” 读取状态、“Write Contract” 调用方法),你可以直接在浏览器中连接钱包,调用合约的函数(比如 Lock 合约的 unlock() 方法),无需再写脚本测试。
敏感数据的处理
安装dotenv依赖
在项目根目录运行命令,安装用于管理环境变量的工具:
1 | npm install dotenv --save-dev |
创建.env文件
在项目根目录(与 hardhat.config.js 同级)新建一个 .env 文件。
PRIVATE_KEY = 0x…(钱包私钥以 0x 开头)
在配置文件里加载.env
hardhat.config.js里配置:
1 | require("dotenv").config(); // 加载环境变量 |



