WEBアプリからNFTキャラクターを呼び出そう
👋 Web アプリケーションからスマートコントラクトを呼び出す
これまでのレッスンでは、スマートコントラクトのロジックの設定を行いました。
これからは、スマートコントラクトをWebアプリケーションから呼び出す機能を実装していきます。
下記のステップに沿って、Sepolia Test Networkにデプロイされたスマートコントラクトに、Webアプリケーションを接続させていきます。
1. デプロイされた最新のコントラクトアドレスをコピーし、Webアプリケーションに貼り付けます。
2. 最新のABIファイルをコピーして、Webアプリケーションのディレクトリに貼り付けます。ABIとは何かについては、のちほど詳しく説明します。
3. クライアント(=フロントエンド)からスマートコントラクト(=バックエンド)にアクセスするために、ethers.js
をインポートします。
🏠 最新のスマートコントラクトアドレスを取得する
あなたのスマートコントラクトのデプロイ先のアドレス(=スマートコントラクトアドレス)をApp.js
でも使用します。
deploy.js
スクリプトを実行するたびに、ターミナルに出力されていたアドレス(Contract deployed to: 0x..
)を覚えていますか?
0x..
が、あなたがデプロイしたスマートコントラクトアドレスになります。
ブロックチェーン上には、何百万ものコントラクトが存在しています。
クライアント(= Webアプリケーションのフロントエンド)に対して、どのコントラクトに接続するかを伝えるために、スマートコントラクトアドレスが必要です。
このアドレスは、さまざまなタイミングで使用する予定ですので、簡単にアクセスできるようにしましょう。
client/src
の中にconstants.js
ファイルを作成し、以下のコードを追加してください。
const CONTRACT_ADDRESS = "YOUR_CONTRACT_ADDRESS_GOES_HERE";
export { CONTRACT_ADDRESS };
YOUR_CONTRACT_ADDRESS_GOES_HERE
の部分にあなたのスマートコントラクトアドレスを貼り付けてください。
次に、App.js
ファイルに戻り、ファイルの先頭に下記をインポートして、constants.js
にアクセスできるようにしましょう。
import { CONTRACT_ADDRESS } from "./constants";
📁 最新の ABI ファイルを取得します。
ABI(Application Binary Interface)はコントラクトの取り扱い説明書のようなものです。
Webアプリケーションがコントラクトと通信するために必要な情報が、ABIファイルに含まれています。
コントラクト1つ1つにユニークなABIファイルが紐づいており、その中には下記の情報が含まれています。
1. そのコントラクトに使用されている関数の名前
2. それぞれの関数にアクセスするために必要なパラメータとその型
3. 関数の実行結果に対して返るデータ型の種類
ABIファイルは、コントラクトがコンパイルされた時に生成され、contract/artifacts
ディレクトリに自動的に格納されます。
ターミナルでcontract
ディレクトリに移動し、ls
を実行しましょう。
artifacts
ディレクトリの存在を確認してください。
ABIファイルの中身は、MyEpicGame.json
というファイルに格納されいます。
下記を実行して、ABIファイルをコピーしましょう。
1. ターミナル上でcontract
にいることを確認する(もしくは移動する)。
2. ターミナル上で下記を実行する。
code artifacts/contracts/MyEpicGame.sol/MyEpicGame.json
3. VS CodeでMyEpicGame.json
ファイルが開かれるので、中身をすべてコピーしましょう。
※ VS Codeのファインダーを使って、直接 MyEpicGame.json
を開くことも可能です。
次に、下記を実行して、ABIファイルをWebアプリケーションから呼び出せるようにしましょう。
1. ターミナル上でclient
にいることを確認する(もしくは移動する)。
2. 下記を実行して、client/src/
の中にutils
ディレクトリを作成する。
mkdir src/utils
3. 下記を実行して、utils
ディレクトリにMyEpicGame.json
ファイルを作成する。
touch src/utils/MyEpicGame.json
4. 下記を実行して、MyEpicGame.json
ファイルをVS Codeで開く。
code client/src/utils/MyEpicGame.json
5. 先ほどコピーしたcontract/artifacts/contracts/MyEpicGame.sol/MyEpicGame.json
の中身を新しく作成したclient/src/utils/MyEpicGame.json
の中に貼り付けてください。
ABIファイルの準備ができたので、App.js
にインポートしましょう。
下記をApp.js
の1行目に追加しましょう。
import myEpicGame from "./utils/MyEpicGame.json";
ここでは、先ほど取得した、ABIファイルを含むMyEpicGame.json
ファイルをインポートしています。