lesson-2_SolanaプログラムとWebアプリケーションを接続しよう!
✅ Devnet でテストを実行する
Anchorの設定がDevnetになっているため、Devnet上で直接テストを実行できます。
実際に、関数がDevnet上で正しく機能していることを確認することもできます。
まずは、以下のコマンドを実行しましょう。
anchor test
問題なく実行されると、以下のように表示されます。
※ 資金不足のエラーが表示された場合はsolana airdrop 2
コマンドを実行してDevnetのSOLを取得します。
Deploy success
🚀 Starting test...
📝 Your transaction signature 5GL5bjhMDbUqmnVeA4pV7CoNfQWKG9FCLcYjeN7wTUu6DHhrERVi1CSMUUu16aGUs8YjCfj1MbP6H9p1EsTvGgRp
👀 GIF Count 0
👀 GIF Count 1
👀 GIF List [
{
gifLink: 'insert_a_gif_link_here',
userAddress: PublicKey {
_bn: <BN: f7b50263adfa281e3460f455e8c5fa3527b84a3b9d2bcc0fedaf69cc7786cbc>
}
}
]
Solana Explorerにアクセスしてトランザクション履歴を確認してみましょう。
上記で実行したテストのトランザクションが確認できるはずです。
ここで、とても大切なことをお伝えします。
anchor test
コマンドを実行すると、プログラムが再デプロイされ、スクリプト上の全ての関数が実行されます。
実は、Solanaプログラムはアップグレード可能です。
つまり、再デプロイすると、同じプログラムIDを更新して、デプロイしたプログラムの最新版を指すようになるということです。
また、プログラムがやりとりするアカウントは変わらずに残り、プログラムに関連するデータを保持してくれます。
簡単にまとめると、保存されたデータを分離した状態でプログラムをアップグレードすることができます。
これは、一度デプロイされたスマートコントラクトの変更ができないEthereumとはまったく異なるものです。
🤟 IDL ファイルを Web アプリケーションに接続する
SolanaプログラムはDevnetにデプロイされました。
それでは続いて、Solana プログラムとWebアプリケーションを接続してみましょう。
まず必要なのが、anchor build
コマンドで生成されたidl
ファイルです。
target/idl/myepicproject.json
がそのファイルとなっています。
idl
ファイルは単なるJSONファイルで、関数の名前や受け取るパラメータなど、Solanaプログラムに関する情報を持っています。
このファイルは、デプロイされたプログラムと、Webアプリケーションがやり取りするのに役立ちます。
また、target/idl/myepicproject.json
を確認すると、一番下にプログラムIDが指定されているのが分かると思います。
これは、Webアプリケーションが接続するプログラムを指定するものです。
target/idl/myepicproject.json
の中身をすべてコピーし、Webアプリケーションを構築したディレクトリの下にあるsrc
の直下にidl.json
ファイルを作成してください( App.js
と同じディレクトリです)。
そこにtarget/idl/myepicproject.json
の中身をすべて張り付けてください。
そして、App.js
で読み込めるように、以下のとおりimport
文を追加してください。
追加する場所はimport './App.css';
のすぐ下でOKです。
import idl from "./idl.json";
👻 Phantom Wallet に資金を供給する
Solanaでは、アカウントのデータ読み込みは無料でできますが、アカウントを作成したりデータを追加したりするにはSOLが必要になります。
そのため、今回作成したWebアプリケーションで使用できるDevnet上のSOLをPhantom Walletに供給する必要があります。
このとき、Phantom Walletのアドレスが必要になるので、以下の画像を参考にウォレットアドレスをコピーしましょう。
次に、ターミナルから以下のコマンドを実行します。
※ INSERT_YOUR_PHANTOM_PUBLIC_ADDRESS_HERE
に先ほどコピーしたPhantom Walletのアドレスを入れて実行してください。
solana airdrop 2 INSERT_YOUR_PHANTOM_PUBLIC_ADDRESS_HERE --url devnet
Phantom Walletを確認し、Devnetで2 SOLが入っていることを確認できれば完了です。