はじめに
この記事では、HardhatとSolidityを使用してQuai Networkのチェーンにスマートコントラクトをデプロイする方法を説明します。前提条件
Quaiでシングルチェーンスマートコントラクトをデプロイするには、いくつかのツールキットと依存関係が必要です。使用する依存関係の概要は以下の通りです:| NodeJS | Javascript実行環境。LTSバージョンを使用してください。 |
| hardhat-example | Quai Network用のサンプルコントラクトとデプロイスクリプトを含むHardhatプロジェクト |
| Quais.js | Quai Networkと対話するためのJavaScriptライブラリ |
環境設定
サンプルリポジトリのインストール
まず、hardhat-exampleリポジトリをクローンし、このチュートリアルで使用するSolidityディレクトリに移動して、npm経由で依存関係をインストールします。
スマートコントラクト
Solidity/ディレクトリには、contracts/ディレクトリ内に2つのサンプルコントラクトが含まれています:ERC20.solとERC721.sol。両方のコントラクトはOpen Zeppelinライブラリから派生した実装です。
このチュートリアルではERC20.solサンプルコントラクトを使用しますが、独自のコントラクトを追加したり、他のライブラリのコントラクトを使用することもできます。
Quai Network EVMはSolidityバージョン0.8.20までをサポートしています。
より新しいバージョンのSolidityを使用すると、スマートコントラクトのデプロイ時にエラーが発生する可能性があります。
環境変数
hardhat-exampleリポジトリのルートには、トークンの詳細、秘密鍵、RPC URLを安全に管理するためのサンプル環境ファイル.env.distが含まれています。
.env.distファイルはテンプレートファイルであり、そのまま使用すべきではありません。.env.distファイルを新しい.envファイルにコピーする必要があります。このファイルはhardhat-exampleリポジトリのルートにあり、Solidity/ディレクトリの設定ファイルとして機能します。.env.distファイルをリポジトリルートの新しい.envファイルにコピーします:
.envファイルを開き、デプロイしたいコントラクトの秘密鍵、RPC URL、トークン引数を追加します。.envファイルは次のようになります:
.env
PK値はすべて一意のアドレスに対応し、ゾーン名に対応する必要があります。
つまり、CYPRUS1_PKはCyprus1アドレスの秘密鍵である必要があります。hardhat-exampleリポジトリは、単一のRPC URLのみを使用してネットワーク接続を設定するためにQuais SDKを使用します。SDKがネットワークプロバイダーを設定する方法の詳細については、SDKプロバイダーの例セクションをご覧ください。
秘密鍵とRPC URLを入力したら、hardhat.config.js内で安全に使用する準備が整いました。
Hardhat設定
Hardhatはhardhat.config.jsファイルを使用してスマートコントラクトのデプロイを設定します。設定ファイルでは、デプロイネットワーク、タスク、コンパイラーなどを定義できます。
hardhat-exampleには、ネットワーク内の任意のシャードでスマートコントラクトをデプロイおよび検証するための設定が含まれた事前構築済みのhardhat.config.jsファイルがあります。
Hardhat設定ファイルのサンプル
Hardhat設定ファイルのサンプル
この設定ファイルのサンプルは設定ファイル内には、以下のデプロイと検証の定義が含まれています:
hardhat-exampleリポジトリの一部として提供されています。hardhat.config.js
Golden Age devnetは現在Cyprus 1と2をサポートしています。他のすべてのシャードは現在のネットワーク構成では実行されていません。
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変数内で使用され、新しいコントラクトインスタンスを作成します:deployERC721.jsスクリプトも同様に機能しますが、異なるコントラクト引数と異なるコントラクトABIおよび
バイトコードを使用します。デプロイしたい任意のコントラクトに対してこの設定を複製できます。3
コントラクトのデプロイ
デプロイスクリプトは、デプロイしたいネットワークを指定するための次のような出力が表示されます:おめでとうございます!Quai NetworkにERC20トークンをデプロイしました!
--networkフラグを取ります(利用可能なオプションはこちらで確認できます)。このチュートリアルでは、cyprus1にデプロイします。ERC20.solとERC721.solのサンプルコントラクトは、例示目的のための各トークンの基本的な実装です。
本番環境で使用する前に、特定のユースケースに合わせてこれらのコントラクトを変更することを強く推奨します。