Hardhat测试网部署详细教程

欧易OKX
欧易OKX
简介: 欧易OKX是全球知名的数字货币交易平台,提供安全、多样化的交易服务和创新金融产品,满足不同用户需求。

在以太坊生态中,Hardhat是最流行的智能合约开发环境之一。它不仅提供了完整的编译、测试和部署合约的工具链,还有助于开发者在真实的网络环境中进行测试。通过部署至测试网,开发者能够验证智能合约的功能而无需消耗主网ETH,从而大大降低了开发成本和风险。本文将详细介绍如何利用Hardhat进行智能合约的开发和测试,包括环境准备、合约编写、部署及合约验证等步骤。

1

环境准备与项目初始化

1. 安装基础依赖

首先,确保您的系统已经安装了Node.js,建议使用v18及以上版本。同时,需要确认npm的版本为8.0.0及以上。通过终端运行以下命令来验证版本:

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

如果未安装,您可以访问Node.js官网下载相应版本,并在安装时勾选“Add to PATH”选项。

2. 安装Hardhat

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

npm install -g hardhat

安装完成后,可以通过执行 hardhat --version 来验证是否安装成功,推荐使用的版本为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

成功编译后,会生成 artifactscache 文件夹,其中包含合约的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水龙头领取)。

部署脚本编写与执行

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_modulespackage-lock.json,并重新执行 npm install,确保 package.json 中的 hardhat-toolbox 版本与Hardhat兼容,推荐使用 @nomicfoundation/hardhat-toolbox^4.0.0

结语

通过本文的步骤,您可以顺利使用Hardhat在以太坊框架下开发、测试和部署智能合约。掌握这些技术将为您在区块链开发的道路上打开新的大门,带来更多的机遇和挑战。

币安
币安
简介: 币安(Binance)是一家全球领先的加密货币交易平台,提供安全、多样化的交易服务,并支持众多数字资产。