介绍
本文展示如何使用 Hardhat 在 Quai Network 的任何链上部署 Solidity 智能合约。前提条件
要在 Quai 上部署单链智能合约,我们需要一些工具包和依赖项。以下是我们将使用的所有依赖项概述:| NodeJS | Javascript 运行时环境。请使用 LTS 版本。 |
| hardhat-example | 包含 Quai Network 示例合约和部署脚本的 Hardhat 项目。 |
| Quais.js | 用于与 Quai Network 交互的 JavaScript 库。 |
| @quai/hardhat-deploy-metadata | 将合约元数据上传到 IPFS 的 Hardhat 插件,用于在 Quaiscan 上验证合约。 |
| @openzeppelin/contracts | 示例 ERC20 和 ERC721 合约使用的智能合约库。 |
环境设置
安装示例仓库
首先克隆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
示例
.env.dist 默认指向 Orchard 测试网,因此您无需消耗真实 QUAI 即可部署。
要部署到主网,请将 CHAIN_ID 更改为 9,将 RPC_URL 更改为
https://rpc.quai.network。hardhat-example 仓库使用 Quais SDK 仅使用一个 RPC URL 配置网络连接。要了解有关 SDK 如何配置网络提供者的更多信息,请访问 SDK 提供者示例部分。
填写私钥和 RPC URL 后,我们现在可以在 hardhat.config.js 中安全地使用它们了。
Hardhat 配置
Hardhat 使用hardhat.config.js 文件来配置智能合约部署。配置文件允许您定义部署网络、任务、编译器等。
hardhat-example 包含一个预构建的 hardhat.config.js 文件,其中包含用于在 Cyprus-1 上部署和验证智能合约的配置。
示例 hardhat 配置文件
示例 hardhat 配置文件
此示例配置文件作为
hardhat-example 仓库的一部分提供。hardhat.config.js
Cyprus-1 是目前 Quai Network 上唯一活跃的区域,因此示例配置仅定义了一个
cyprus1 网络。完整的区域端点列表请参阅网络。hardhat.config.js 将从 .env 文件中提取您的私钥和 RPC URL。您还可以在 solidity 对象中指定 Solidity 版本和编译器设置。
部署和交互
配置部署脚本
在 在部署合约之前,该脚本使用 然后 CID 作为第四个参数传递给 我们将在下一步中使用这些概念来正确修改代币参数和网络规范以部署我们的合约。
scripts/ 目录中,您会找到 ERC20 和 ERC721 合约的部署脚本:deployERC20.js 和 deployERC721.js。在本教程中,我们将部署一个 ERC20 合约。deployERC20.js 脚本从 hardhat.config.js 中提取您的网络配置,从仓库根目录的 .env 文件中提取您的代币参数,并使用它们来部署您的合约。代币参数通过 tokenArgs 数组使用:@quai/hardhat-deploy-metadata 插件将已编译合约的元数据推送到 IPFS 并返回生成的 CID:ContractFactory,将其嵌入已部署的字节码中。Quaiscan 稍后通过该 CID 获取您的源代码进行验证 — 没有它,合约虽可部署,但无法验证。部署您的合约
部署脚本接受一个 应该输出:第一行打印的
--network 标志来指定您要部署到的网络。示例配置仅定义了 cyprus1,我们将在此使用它。CID 是您在 Quaiscan 上验证合约所需的 IPFS 哈希 — 请保存它。恭喜,您现在已经在 Quai Network 上部署了一个 ERC20 代币!