原文作者:PaperMoon团队
前言
在智能合约开发实践中,浏览器工具(如 Remix)虽然简单易用,但并不适合团队协作、自动化测试和长期维护。
因此,在真实项目中,开发者通常会使用 Hardhat 作为完整开发框架,来完成:
• 合约编译
• 单元测试
• 调试分析
• 自动化部署
• 多网络管理
本文将演示如何使用 Hardhat,将一个基础 Solidity 合约部署到 Polkadot Hub TestNet,适合希望构建规范化开发流程的开发者阅读。
准备条件(Prerequisites)
在开始之前,请确保已具备以下环境和条件:
1. 基础 Solidity 知识
需要理解:
• 合约结构
• 状态变量
• 函数定义
• 访问修饰符
2. 安装 Node.js(22.13.1 或更高版本)
Hardhat 依赖 Node.js 运行环境,版本要求:
bash
v22.13.1 或以上
可通过以下命令查看版本:
bash
node -v
3. 测试币(Gas 费用)
需要从 Polkadot 官方 Faucet 获取测试代币,用于支付部署交易的 Gas 费用。
4. 准备私钥钱包
需要一个可用于签名交易的钱包私钥,用于部署合约。
科普说明:
Hardhat 是在本地发起交易的工具,因此需要直接使用私钥进行签名,而不是通过浏览器插件。
创建 Hardhat 项目(Set Up Your Project)
首先,通过终端创建项目目录并初始化 Hardhat 工程。
执行以下命令:
bash
mkdir hardhat-deployment
cd hardhat-deployment
npx hardhat@^2.27.0 init
说明:
| 命令 | 作用 |
|---|---|
| mkdir | 创建项目文件夹 |
| cd | 进入目录 |
| npx hardhat init | 初始化 Hardhat 项目 |
初始化完成后,Hardhat 会生成基础项目结构。
配置 Hardhat(Configure Hardhat)
接下来需要配置网络信息,使 Hardhat 能连接到 Polkadot Hub 测试网。
1. 打开配置文件
编辑项目根目录中的:
bash
hardhat.config.ts
2. 修改配置内容
将文件更新为以下示例内容:
bash
import type { HardhatUserConfig } from 'hardhat/config';
import hardhatToolboxViemPlugin from '@nomicfoundation/hardhat-toolbox-viem';
import { vars } from 'hardhat/config';
const config: HardhatUserConfig = {
plugins: [hardhatToolboxViemPlugin],
solidity: {
version: '0.8.28',
settings: {
optimizer: {
enabled: true,
runs: 200,
},
},
},
networks: {
polkadotTestnet: {
url: 'https://services.polkadothub-rpc.com/testnet',
chainId: 420420417,
accounts: [vars.get('PRIVATE_KEY')],
},
},
};
export default config;
3. 配置说明
重点配置项解释如下:
(1)Solidity 编译器版本
bash
version: '0.8.28'
(2)优化器设置
bash
optimizer: {
enabled: true,
runs: 200,
}
用于降低 Gas 消耗,提高合约执行效率。
(3)网络配置
bash
polkadotTestnet: {
url: 'https://services.polkadothub-rpc.com/testnet',
chainId: 420420417,
accounts: [vars.get('PRIVATE_KEY')],
}
作用:
• url:RPC 接口地址
• chainId:网络唯一标识
• accounts:用于签名的私钥
4. 私钥管理提示
建议通过 Hardhat 的变量系统管理私钥,避免明文写入配置文件。
创建智能合约(Create the Contract)
1. 删除默认合约
进入:
bash
contracts/
删除目录中的默认示例文件。
2. 新建 Storage.sol
创建新文件:
bash
contracts/Storage.sol
并写入以下代码:
bash
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
contract Storage {
uint256 private storedNumber;
function store(uint256 num) public {
storedNumber = num;
}
function retrieve() public view returns (uint256) {
return storedNumber;
}
}
3. 合约功能说明
该合约提供最基础的存储功能:
| 函数 | 功能 |
|---|---|
| store | 保存数值 |
| retrieve | 读取数值 |
用于演示链上状态读写。
编译合约(Compile the Contract)
使用以下命令进行编译:
bash
npx hardhat compile
成功后,终端将显示类似信息:
bash
Downloading solc 0.8.28
Compiled 1 Solidity file with solc 0.8.28
说明:
• 自动下载指定版本编译器
• 生成字节码和 ABI 文件
编写部署模块(Deploy Module)
Hardhat 使用 Ignition 模块系统 管理部署流程。
- 删除默认模块文件
进入:
bash
ignition/modules/
删除默认文件。
- 创建 Storage.ts
新建文件:
bash
ignition/modules/Storage.ts
写入以下内容:
bash
import { buildModule } from '@nomicfoundation/hardhat-ignition/modules';
export default buildModule('StorageModule', (m) => {
const storage = m.contract('Storage');
return { storage };
});
- 模块说明
该模块定义了:
• 部署名为 Storage 的合约
• 并将部署结果返回给 Hardhat
部署合约到测试网(Deploy the Contract)
使用以下命令开始部署:
bash
npx hardhat ignition deploy ignition/modules/Storage.ts --network polkadotTestnet
- 确认网络信息
终端会提示确认网络:
bash
✔ Confirm deploy to network polkadotTestnet (420420417)? ... yes
输入:
bash
yes
继续执行。
- 部署成功提示
成功后终端会显示:
bash
Deploying [ StorageModule ]
[ StorageModule ] successfully deployed 🚀
Deployed Addresses
Storage - 0x12345.....
其中:
• 0x12345... 为合约部署地址
• 可用于后续交互与验证
部署流程回顾
完整流程总结如下:
1️⃣ 初始化 Hardhat 项目
2️⃣ 配置 Polkadot 测试网
3️⃣ 编写 Storage 合约
4️⃣ 编译源码
5️⃣ 编写 Ignition 模块
6️⃣ 发起部署交易
7️⃣ 获得合约地址
至此,已完成完整标准化部署流程。
Hardhat 部署模式的实践价值
与 Remix 相比,Hardhat 更适合真实项目开发。
主要优势包括:
- 支持自动化流程
• CI/CD 集成
• 批量部署
• 多环境管理
- 更安全的密钥管理
• 环境变量
• 密钥隔离
• 权限控制
- 适合团队协作
• 代码规范统一
• 部署可复现
• 版本可追踪
- 易于扩展,可集成:
• 测试框架
• 审计工具
• 分析插件
原文链接:https://docs.polkadot.com/smart-contracts/cookbook/smart-contracts/deploy-basic/basic-hardhat/