はじめに
この記事では、HardhatとSolidityを使用してQuai Networkのチェーンにスマートコントラクトをデプロイする方法を説明します。前提条件
Quaiでシングルチェーンスマートコントラクトをデプロイするには、いくつかのツールキットと依存関係が必要です。使用する依存関係の概要は以下の通りです:環境設定
サンプルリポジトリのインストール
まず、hardhat-exampleリポジトリをクローンし、このチュートリアルで使用するSolidityディレクトリに移動して、npm経由で依存関係をインストールします。
スマートコントラクト
Solidity/ディレクトリには、contracts/ディレクトリ内に2つのサンプルコントラクトが含まれています:ERC20.solとERC721.sol。両方のコントラクトはOpen Zeppelinライブラリから派生した実装です。
このチュートリアルではERC20.solサンプルコントラクトを使用しますが、独自のコントラクトを追加したり、他のライブラリのコントラクトを使用することもできます。
環境変数
hardhat-exampleリポジトリのルートには、トークンの詳細、秘密鍵、RPC URLを安全に管理するためのサンプル環境ファイル.env.distが含まれています。
.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リポジトリは、単一のRPC URLのみを使用してネットワーク接続を設定するためにQuais SDKを使用します。SDKがネットワークプロバイダーを設定する方法の詳細については、SDKプロバイダーの例セクションをご覧ください。
秘密鍵とRPC URLを入力したら、hardhat.config.js内で安全に使用する準備が整いました。
Hardhat設定
Hardhatはhardhat.config.jsファイルを使用してスマートコントラクトのデプロイを設定します。設定ファイルでは、デプロイネットワーク、タスク、コンパイラーなどを定義できます。
hardhat-exampleには、Cyprus-1でスマートコントラクトをデプロイおよび検証するための設定が含まれた事前構築済みのhardhat.config.jsファイルがあります。
Hardhat設定ファイルのサンプル
Hardhat設定ファイルのサンプル
この設定ファイルのサンプルは
hardhat-exampleリポジトリの一部として提供されています。hardhat.config.js
Cyprus-1は現在Quai Networkで唯一アクティブなゾーンであるため、サンプル設定では単一の
cyprus1ネットワークのみを定義しています。ゾーンエンドポイントの完全なリストについては、
ネットワークを参照してください。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配列で使用されます:@quai/hardhat-deploy-metadataプラグインを使用してコンパイル済みコントラクトのメタデータをIPFSにプッシュし、生成されたCIDを返します:ContractFactoryの4番目の引数として渡され、デプロイされたバイトコードに埋め込まれます。Quaiscanは後でそのCIDを読み取り、検証のためにソースコードを取得します — これがないと、コントラクトはデプロイできても検証はできません。3
コントラクトのデプロイ
デプロイスクリプトは、デプロイしたいネットワークを指定するための次のような出力が表示されます:最初の行に出力される
--networkフラグを取ります。サンプル設定ではcyprus1のみが定義されており、ここではそれを使用します。CIDは、Quaiscanでコントラクトを検証するために必要なIPFSハッシュです — 保存してください。おめでとうございます!Quai NetworkにERC20トークンをデプロイしました!