介绍
本文展示如何使用 Hardhat 在 Quai Network 的任何链上部署 Solidity 智能合约。前提条件
要在 Quai 上部署单链智能合约,我们需要一些工具包和依赖项。以下是我们将使用的所有依赖项概述:| NodeJS | Javascript 运行时环境。请使用 LTS 版本。 |
| hardhat-example | 包含 Quai Network 示例合约和部署脚本的 Hardhat 项目。 |
| Quais.js | 用于与 Quai Network 交互的 JavaScript 库。 |
环境设置
安装示例仓库
首先克隆hardhat-example 仓库,导航到本教程将使用的 Solidity 目录,并通过 npm 安装依赖项。
智能合约
Solidity/ 目录包含 2 个示例合约:contracts/ 目录中的 ERC20.sol 和 ERC721.sol。这两个合约都是从 Open Zeppelin 库 派生的实现。
本教程将使用 ERC20.sol 示例合约,但您也可以添加自己的合约或使用其他库的合约。
环境变量
我们在hardhat-example 仓库的根目录中包含了一个示例环境文件 .env.dist,用于安全地管理代币详情、私钥和 RPC URL。
.env.dist 文件是一个模板文件,不应直接使用。您应该将 .env.dist 文件复制到新的 .env 文件。此文件位于 hardhat-example 仓库的根目录,作为 Solidity/ 目录的配置文件。.env.dist 文件复制到仓库根目录的新 .env 文件:
.env 文件并添加您的私钥、RPC URL 和要部署的合约的代币参数。.env 文件应如下所示:
.env
PK 值必须都是唯一地址的私钥,并对应于区域名称,即您的 CYPRUS1_PK 应该是您的 Cyprus1 地址的私钥。hardhat-example 仓库使用 Quais SDK 仅使用一个 RPC URL 配置网络连接。要了解有关 SDK 如何配置网络提供者的更多信息,请访问 SDK 提供者示例部分。
填写私钥和 RPC URL 后,我们现在可以在 hardhat.config.js 中安全地使用它们了。
Hardhat 配置
Hardhat 使用hardhat.config.js 文件来配置智能合约部署。配置文件允许您定义部署网络、任务、编译器等。
hardhat-example 包含一个预构建的 hardhat.config.js 文件,其中包含用于在网络中的任何分片上部署和验证智能合约的配置。
示例 hardhat 配置文件
示例 hardhat 配置文件
此示例配置文件作为 在配置文件中,您可以找到以下部署和验证定义:
hardhat-example 仓库的一部分提供。hardhat.config.js
cyprus1cyprus2cyprus3paxos1paxos2paxos3hydra1hydra2hydra3
hardhat.config.js 将从 .env 文件中提取您的私钥和 RPC URL,并使用它们来部署和验证您的合约。您还可以在 solidity 对象中指定 Solidity 版本和编译器设置。
部署和交互
1
使用 Hardhat 编译
使用 Hardhat 进行智能合约编译很简单,可以在 CLI 中使用 应该输出:
npx 完成。使用以下命令编译 contracts/ 目录中的所有合约:2
配置部署脚本
在 您指定的网络配置和部署账户在 我们将在下一步中使用这些概念来正确修改代币参数和网络规范以部署我们的合约。
scripts/ 目录中,您会找到 ERC20 和 ERC721 合约的部署脚本:deployERC20.js 和 deployERC721.js。在本教程中,我们将部署一个 ERC20 合约。deployERC20.js 脚本从 hardhat.config.js 中提取您的网络配置,从仓库根目录的 .env 文件中提取您的代币参数,并使用它们来部署您的合约。代币参数通过 tokenArgs 数组使用:provider 和 wallet 变量中与编译的合约 ABI 和字节码结合使用,以创建新的合约实例:3
部署您的合约
部署脚本接受一个 应该输出:恭喜,您现在已经在 Quai Network 上部署了一个 ERC20 代币!
--network 标志来指定您要部署到的网络(可用选项可以在这里找到)。在本教程中,我们将部署到 cyprus1。