使用 Hardhat 部署 HelloWorld 合约

circle-info

请在GitHub参阅完整的hardhat-viem-helloworldarrow-up-right代码库。

本节将展示如何使用Hardhatarrow-up-right创建新的Solidity合约,配置Berachain网络详细信息,将合约部署到Berachain,以及验证合约。

先决条件

开始之前,请确保你的本地设备上满足以下条件:

创建HelloWorld代码设置

首先,为HelloWorld创建一个新的文件夹:

mkdir create-helloworld-contract-using-hardhat;
cd create-helloworld-contract-using-hardhat;

然后,启动Hardhat,并创建viem模板:

# FROM ./create-helloworld-contract-using-hardhat;

npx hardhat init;

# [Expected Prompts]:
# 888    888                      888 888               888
# 888    888                      888 888               888
# 888    888                      888 888               888
# 8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
# 888    888     "88b 888P"  d88" 888 888 "88b     "88b 888
# 888    888 .d888888 888    888  888 888  888 .d888888 888
# 888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
# 888    888 "Y888888 888     "Y88888 888  888 "Y888888  "Y888
#
# 👷 Welcome to Hardhat v2.18.3 👷‍
#
# ✔ What do you want to do? · Create a TypeScript project (with Viem)
# ✔ Hardhat project root: · /path/to/create-helloworld-contract-using-hardhat
# ✔ 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

安装dotenv依赖项,以便使用环境变量。

创建HelloWorld合约

上述操作,Hardhat创建了需要的文件。现在,已经准备好一切,可以创建一个新的Solidity合约了。

首先,将Hardhat创建的文件重命名为HelloWorld.sol

然后,替换重命名的HelloWorld.sol文件中的现有代码。

文件位置./contract/HelloWorld.sol,运行以下代码:

我们已经创建了一个新的Solidity合约,接下来测试合约能否成功编译:

你还可以通过对package.json文件进行一些修改,简化编译步骤。

文件位置./package.json,运行以下代码:

现在,可以使用下方代码编译合约:

测试HelloWorld合约

合约成功创建后,需要通过编写一些测试程序来确保合约能正常运行。

首先,重命名Hardhat在/test目录中创建的测试文件:

然后,替换重命名的HelloWorld.test.ts文件中的现有代码。

文件位置./test/HelloWorld.test.ts,运行以下代码:

接下来,运行下方代码以运行测试程序:

你还可以通过对package.json文件进行一些修改,以便更轻松地运行pnpm test测试程序。

文件位置./package.json,运行以下代码:

为Berachain合约部署配置Hardhat

circle-info

通过Hardhat创建viem模板的方式部署的合约,目前尚未完全支持开箱即用的自定义链,但在 Berachain主网启动后将会支持。

首先,为了正确设置hardhat.config.ts,需要使用dotenv安装包创建一个.env文件,用于声明环境变量,供配置读取。

然后,在新建的.env文件中,运行以下代码,文件位置./.env

circle-info

代币合约参数支持自定义,总体配置步骤是相同的。

设置好环境变量后,需要将它们加载到hardhat.config.ts文件。

文件位置./hardhat.config.ts,运行以下代码:

在Berachain部署HelloWorld合约

我们已经完成了所有配置设置,现在尝试运行一个本地节点,并将其部署到本地环境。

首先,通过对package.json文件进行一些修改,让部署运行更轻松。

文件位置./package.json,运行以下代码:

接下来,配置./scripts/deploy.ts脚本,以确保合约正确部署。

文件位置./scripts/deploy.ts,运行以下代码:

部署脚本配置好后,我们可以在一个终端运行本地节点,并在另一个终端部署合约。

终端 1:部署合约

使用上方代码中提供的私钥Private Key,替换.env 文件中的WALLET_PRIVATE_KEY

文件位置./.env,运行以下代码:

终端 2:运行本地节点

现在,合约已成功部署到本地节点,接下来配置部署脚本,以便合约直接部署到Berachain网络。

circle-info

要使viem支持自定义链,需要进行额外配置,下方代码展示了如何为Berachain设置额外配置。当Berachain主网上线时,这些额外配置可能不再需要。

文件位置./scripts/deploy.ts,运行以下代码:

接下来,将WALLET_PRIVATE_KEY替换为一个拥有$BERA代币的钱包,可以从Berachain测试网水龙头获取测试网$BERA代币。

文件位置./.env,运行以下代码:

现在,可以直接将合约部署到Berachain了。

你可以运行下方代码,在Berachain Beratrail区块浏览器中查看部署的合约:

你会看到合约已经成功部署,但未被验证,因为它仍显示合约字节码,接下来需要验证合约。

验证HelloWorld合约

为了验证合约,需要在hardhat.config.ts文件中添加一个额外配置。

文件位置./hardhat.config.ts,运行以下代码:

完成额外配置后,通过向package.json添加 run 命令来查看更改。

文件位置./package.json,运行以下代码:

最后,使用合约部署地址和初始参数Hello From Deployed Contract,运行下方代码验证合约。

在Beratail可以看到,合约已成功验证,并且可以查看到合约Solidity代码。

完整代码库

本节完整代码库,可在Github - Berachain Guidesarrow-up-right - hardhat-viem-helloworldarrow-up-right中查看。

最后更新于