欢迎光临
我们一直在努力

Hardhat 部署合约到链上、并测试合约方法

文章目录

  • 前言
    • 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

在这里插入图片描述 查看本地区块链网络的日志: 在这里插入图片描述 测试成功。

赞(0)
未经允许不得转载:171主机测评 » Hardhat 部署合约到链上、并测试合约方法
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址