使用 Hardhat 部署合约
Hardhat 是一个综合开发环境,由不同组件组成,用于编写、编译、调试和部署智能合约和 dApps。
先决条件
开始之前,需要安装以下依赖项:
Node.js v18.0.0 或更高版本
创建 Hardhat 示例项目
首先,创建一个新的文件夹目录,并导航到该目录:
mkdir my-hardhat-project && cd my-hardhat-project
在该目录中初始化一个新的 Hardhat 项目:
npx hardhat init
在出现 CLI 选择提示时,输入 “y/n“,选择你的首选项,或使用下方推荐的首选项。
✔ What do you want to do? · Create a TypeScript project (with Viem)
✔ Hardhat project root: · /path/to/my-hardhat-project
✔ Do you want to add a .gitignore? (Y/n) · y
✔ Do you want to install this sample project's dependencies with npm (hardhat @nomicfoundation/hardhat-toolbox-viem)? (Y/n) · y
设置配置变量
Hardhat 项目可以将配置变量用于用户特定值,或用于不应包含在代码存储库中的数据。
运行以下命令,设置配置变量:
npx hardhat vars set <variable_name>
例如,运行以下命令,设置 MONAD_RPC_URL
变量:
npx hardhat vars set MONAD_EXPLORER_URL
然后在提示符中,为此变量输入自定义值:
Enter value: ********************************
同样,你还可以设置 MONAD_CHAIN_ID
变量。
警告:配置变量以纯文本形式存储在磁盘上。对于需要加密保存的敏感或重要数据,请避免使用此功能。你可以运行 npx hardhat vars path
查找存储的文件位置。
更新 hardhat.config.ts
文件以生效 monadDevnet
配置
hardhat.config.ts
文件以生效 monadDevnet
配置import type { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox-viem";
import { vars } from "hardhat/config";
const config: HardhatUserConfig = {
solidity: "0.8.27",
...
etherscan: {
apiKey: `DUMMY_VALUE_FOR_BLOCKSCOUT`,
customChains: [
{
network: "monadDevnet",
chainId: Number(vars.get("MONAD_CHAIN_ID")),
urls: {
browserURL: vars.get("MONAD_EXPLORER_URL"),
apiURL: `${vars.get("MONAD_EXPLORER_URL")}/api`,
},
},
...
],
},
};
export default config;
编写智能合约
你可以在 contracts
目录中创建新的合约,下方示例中,将创建名为GMonad.sol
的智能合约:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract GMonad {
function sayGmonad() public pure returns (string memory) {
return "gmonad";
}
}
编译智能合约
npx hardhat compile
结果输出如下示例,表示合约成功编译:
Compiled 2 Solidity file successfully (evm target: paris).
部署智能合约
你可以使用声明式部署系统 Hardhat Ignition 来部署合约。
你可以使用示例项目中附带的 Ignition 模块部署 GMonad
合约。
创建 Hardhat Ignition 模块
运行以下命令,在 ignition/modules
目录中创建一个名为 GMonad.ts
的文件:
import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
const GMonadModule = buildModule("GMonadModule", (m) => {
const gmonad = m.contract("GMonad");
return { gmonad };
});
module.exports = GMonadModule;
现在,你可以进行合约部署了。
部署智能合约
npx hardhat ignition deploy ./ignition/modules/GMonad.ts --network monadDevnet
当出现 Confirm
提示时,选择 yes
:
✔ Confirm deploy to network monadDevnet (<chain_id>)? … yes
结果输出如下示例,表示合约成功部署:
✔ Confirm deploy to network monadDevnet (<chain_id>)? … yes
Hardhat Ignition 🚀
Deploying [ GMonadModule ]
Batch #1
Executed GMonadModule#GMonad
[ GMonadModule ] successfully deployed 🚀
Deployed Addresses
GMonadModule#GMonad - <contract_address>
后续步骤
了解如何在 Monad Explorer 上验证合约,请参阅 验证 Hardhat 合约。
最后更新于