区块链

Hardhat测试网怎么部署?完整操作教程

日期:2025-08-18 10:34:44 来源: IT猫扑网整理

Hardhat是以太坊生态中最流行的智能合约开发环境之一,提供了编译、测试和部署合约的完整工具链。部署测试网是智能合约开发流程中的关键环节,能够在真实网络环境中验证合约功能而无需消耗主网ETH。

环境准备与项目初始化

1.安装基础依赖
首先确保系统已安装Node.js(建议v18+)和npm。可通过终端执行以下命令验证:

node -v  # 需显示v18.0.0以上版本
npm -v   # 需显示8.0.0以上版本

若未安装,访问Node.js官网下载对应系统版本,安装时勾选"Add to PATH"选项。

2.安装Hardhat
打开终端,执行以下命令全局安装Hardhat:

npm install -g hardhat

安装完成后,通过hardhat --version验证安装成功,2025年推荐版本为v2.22.0+。

3.初始化项目
创建项目文件夹并进入:

mkdir hardhat-testnet-deploy && cd hardhat-testnet-deploy

执行初始化命令:

npx hardhat init

此时会出现交互式菜单,选择"Create an empty hardhat.config.js"(空配置文件),后续将手动配置更灵活。初始化完成后,项目目录会生成hardhat.config.js配置文件和package.json。

合约编写与编译

1.创建合约文件
在项目根目录创建contracts文件夹,并新建示例合约:

mkdir contracts && cd contracts && touch MyToken.sol

使用代码编辑器打开MyToken.sol,编写基础ERC20合约(以OpenZeppelin库为例):

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract MyToken is ERC20 {
    constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
        _mint(msg.sender, initialSupply);
    }
}

2.安装依赖库
返回项目根目录,安装OpenZeppelin合约库和Hardhat核心依赖:

npm install @openzeppelin/contracts hardhat @nomicfoundation/hardhat-toolbox

3.编译合约
执行编译命令:

npx hardhat compile

成功编译后,会生成artifacts和cache文件夹,其中包含合约ABI和字节码。若编译失败,检查Solidity版本是否与pragma声明一致,或依赖安装是否完整。

测试网配置与环境准备

1.选择测试网
2025年以太坊主流测试网为Sepolia和Holesky,Goerli已停止维护。推荐使用Sepolia,基础设施支持完善且节点稳定。

2.获取测试网节点API
需通过Alchemy或Infura获取测试网节点API:
访问Alchemy官网注册账号,创建新应用,选择"Sepolia"网络,复制API密钥(格式如https://eth-sepolia.g.alchemyapi.io/v2/your-api-key)。

3.配置Hardhat网络
打开hardhat.config.js,替换为以下内容:

require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

module.exports = {
  solidity: "0.8.20",
  networks: {
    sepolia: {
      url: process.env.SEPOLIA_URL || "",
      accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : []
    }
  },
  etherscan: {
    apiKey: process.env.ETHERSCAN_API_KEY
  }
};

4.创建环境变量文件
在项目根目录创建.env文件,存储敏感信息(切勿提交到版本控制):

SEPOLIA_URL=你的Alchemy Sepolia API URL
PRIVATE_KEY=你的钱包私钥(以0x开头)
ETHERSCAN_API_KEY=你的Etherscan API密钥

获取私钥:在huli钱包中导出钱包私钥,确保该钱包在Sepolia测试网有足够ETH(可通过Sepolia水龙头领取)。

card.png

部署脚本编写与执行

1.创建部署脚本
在项目根目录创建scripts文件夹,新建deploy.js:

mkdir scripts && cd scripts && touch deploy.js

编写部署脚本:

const hre = require("hardhat");

async function main() {
  const MyToken = await hre.ethers.getcontractFactory("MyToken");
  const myToken = await MyToken.deploy(ethers.parseEther("1000000"));

  await myToken.waitForDeployment();

  console.log(`MyToken deployed to: ${await myToken.getAddress()}`);
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

2.获取测试网ETH
访问Sepolia水龙头(如Alchemy Faucet或Paradigm Faucet),输入钱包地址领取测试ETH,通常需要社交媒体验证或等待排队。

3.执行部署命令
返回项目根目录,执行部署命令:

npx hardhat run scripts/deploy.js --network sepolia

部署成功后,终端会显示合约地址,类似:MyToken deployed to: 0x...。若失败,检查网络连接、私钥是否正确、测试网ETH是否充足。

合约验证与交互

1.验证合约
执行验证命令(需Etherscan API密钥):

npx hardhat verify --network sepolia 合约地址 初始supply参数

例如:

npx hardhat verify --network sepolia 0x123... 1000000000000000000000000

验证成功后,可在Etherscan Sepolia测试网页面查看合约源码和交互界面。

2.基本交互测试
通过Hardhat控制台与合约交互:

npx hardhat console --network sepolia

在控制台执行:

const myToken = await ethers.getContractAt("MyToken", "合约地址");
await myToken.name(); // 应返回"MyToken"
await myToken.balanceOf("你的钱包地址"); // 应返回初始 supply

常见问题与解决方案

1.部署超时或网络错误
检查Alchemy API URL是否正确,可尝试更换节点提供商(如Infura);确保网络连接稳定,或使用VPN连接国际网络。

2.私钥错误或账户锁定
核实私钥格式是否正确(以0x开头),确保钱包未被锁定;建议使用全新钱包专门用于测试网部署,避免主网资产风险。

3.合约验证失败
检查构造函数参数是否与部署时一致;确认Hardhat配置中的Etherscan API密钥正确;若仍失败,可在Etherscan手动上传源码验证。

4.依赖版本冲突
删除node_modules和package-lock.json,重新执行npm install;确保package.json中hardhat-toolbox版本与Hardhat兼容,推荐使用@nomicfoundation/hardhat-toolbox^4.0.0。

相关文章

相关下载

网友评论

我要评论...
    没有更早的评论了
    取消