使用 Hardhat 部署合约

Hardhat 是一个综合开发环境,由不同组件组成,用于编写、编译、调试和部署智能合约和 dApps。

先决条件

开始之前,需要安装以下依赖项:

创建 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 配置

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 合约

最后更新于