文章目录
- 前言
-
- Hardhat 部署合约到链上、并测试合约方法
-
- 1. 通过HardHat 框架 启动本地网络
- 2. 部署合约脚本
- 3. 测试链上合约的方法
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
Hardhat 部署合约到链上、并测试合约方法
1. 通过HardHat 框架 启动本地网络
npx hardhat node
执行完可以看到它在本地启动了一个区块链的网络,同时可以看到一些几个关键处: 1、该区块链网络的RPC地址: 
2、账号 默认会提供一些账户和私钥,同时每个默认提供 10000 ETH 给我们测试。 注意的是这个账户不是随机的,每次启动这个网络分配的账户都是这几个。
2. 部署合约脚本
// Hardhat 和 ethers.js 的「桥梁」,负责注册插件,让两者能协同工作;
import "@nomicfoundation/hardhat-ethers";
import { ethers } from "hardhat";
async function main() {
console.log("开始部署 HelloWorld 合约…");
// 获取合约工厂(和老师写法一致,直接用ethers)
const HelloWorld = await ethers.getContractFactory("HelloWorld");
// 部署合约
const helloWorld = await HelloWorld.deploy();
// 老师用的v6新版方法,替换旧的deployed()
await helloWorld.waitForDeployment();
// v6新版获取地址方式,和老师写法一致
const contractAddress = await helloWorld.getAddress();
console.log(`HelloWorld 部署完成!`);
console.log(`合约地址: ${contractAddress}`);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error("部署失败:", error);
process.exit(1);
});
下面是Hardhat 配置:
import "@nomicfoundation/hardhat-toolbox";
import "@nomicfoundation/hardhat-ethers";
type Config =import('hardhat/config').HardhatUserConfig
const config: Config = {
solidity: "0.8.28",
networks: {
hardhat: {
chainId: 31337 // Hardhat 内置本地测试网
}
},
gasReporter: {
enabled: true // // 燃气费统计工具(部署/运行合约时自动显示燃气消耗)
}
};
export default config;
第一步是启动本地网络,这个刚刚已经启动成功了,下一步是将这个合约部署到我们的本地区块链网络。
npx hardhat run ./scripts/deploy-helloWorld.ts –network localhost
通过脚本的输出可以确认部署成功了,然后我们切换到我们刚刚启动的本地区块链网络。
图片中可以看到, 我们的合约已经部署到该网络上了。
3. 测试链上合约的方法
部署到链上合约的内容:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.28;
contract HelloWorld {
function hello() public pure returns (string memory) {
return "Hello World";
}
}
测试链上合约方法脚本。
import "@nomicfoundation/hardhat-ethers";
import { ethers } from "hardhat";
// 配置:直接写死你本地部署的合约地址(避免每次修改)
const HELLO_WORLD_CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS;
async function main() {
// 非空判断
if (!HELLO_WORLD_CONTRACT_ADDRESS) {
throw new Error("环境变量 CONTRACT_ADDRESS 未定义,请检查 .env 文件");
}
console.log("===== 开始调用本地HelloWorld合约方法 =====");
console.log("目标合约地址:", HELLO_WORLD_CONTRACT_ADDRESS);
console.log("调用账户(本地节点默认测试账户):", (await ethers.getSigners())[0].address); // 就是你的0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
// 1. 获取合约工厂 + 挂载已部署地址,生成可调用实例(通用步骤)
const HelloWorld = await ethers.getContractFactory("HelloWorld");
const helloWorld = HelloWorld.attach(HELLO_WORLD_CONTRACT_ADDRESS); // 挂载地址,无需重新部署
console.log("合约实例创建成功,开始调用方法…\\n");
// 2. 测试【只读方法】(view/pure,无gas,无需上链确认)
console.log("—– 测试只读方法 —–");
try {
// 替换为你HelloWorld.sol中的实际只读方法名(示例:greet())
const helloResult = await helloWorld.hello();
console.log(`hello() 调用结果: ${helloResult}`);
} catch (error) {
console.error("只读方法调用失败:", error);
}
console.log("\\n===== HelloWorld合约方法调用测试完成 =====");
}
// 执行脚本(和部署脚本一致的执行方式)
// npx hardhat run ./scripts/test/call-helloWorld.ts –network localhost
main()
.then(() => process.exit(0))
.catch((error) => {
console.error("合约调用测试异常:", error);
process.exit(1);
});
配置账号: 注意的是这个账号是合约地址的账号。
执行:
npx hardhat run ./scripts/test/call-helloWorld.ts –network localhost
查看本地区块链网络的日志:
测试成功。