【完全保存版】SolanaのAnchorを使ってプログラムをデプロイしよう!
今回は、Solana Playgroundの「Hello Anchor」チュートリアルを実行していきます。
環境構築が不要なので、ご興味のある方はぜひやってみてください
1 Hello Anchorを始める
まずは、solana プレイグラウンドから、「Hello Anchor」を選択します。
あとは、こちらのチュートリアルに沿って進めるだけです。
2 anchor_langのインポート
まずは、インポートを行うため、下のように貼り付けます。
「anchor_lang」の中の「prelude」モジュールの全てをインポートしています。
「prelude」には、よく使われる型や関数などが入っています。
3 プログラムIDの宣言
プログラムのセキュリティを高めるために、プログラムIDを指定します。
イーサリアムで言うところのコントラクトアドレスです。
現在、中身が空欄ですが、ビルド時に、自動で入力されます。
4 プログラムの作成
では、実際にプログラム(イーサリアムで言うところのコントラクト)を作っていきましょう。
1 #[program]マクロについて
プログラムは、#[program]マクロ直下に書き始めます。
2 modについて
スコープを区切るために、「mod」を指定します。
これにより、その外のスコープにアクセスできないようにしています。
3 use super::*について
mod でスコープを区切りましたが、「use super::*」により、外のスコープの全てにアクセスできるようになります。
具体的には、「anchor_lang::prelude::*」にアクセスできるようになります。
4 Ok(())について
プログラム呼び出しが成功したことを示すため、「Ok(())」を入れます。
5 msg!マクロについて
ログにメッセージを残すため、「msg!」マクロを用いています。
Solanaでは「println!」マクロではなく「msg!」を使うようです。
6 Contextについて
Anchorのインストラクション(関数)は全て「Context」を取ります。
インストラクションに渡されたアカウントは、「ctx」パラメータを通じてアクセスすることができます。
では、Contextで指定されている「Hello」という型を定義しましょう。
#derive[(Accounts)]の直下で、構造体で定義します。
このインストラクションではアカウントを必要としていないため、構造体の中が空になっています。
5 ビルド&デプロイ
1 ビルドについて
コードが確認できたので、ビルドを行いましょう。
「Build」ボタンを押すか、「build」コマンドで実行できます。
「unused_variable」と言う警告が出ているのは、「ctx」という引数を、インストラクション内で使用していないためです。
2 ウォレット接続について
デプロイ前にウォレット接続を行います。
左下を選択し、下のように、ウォレット接続状態にしましょう。
トークンが「0 SOL」の場合は、事前に取得しましょう。
solana airdrop <トークン量>
で取得ができます。
3 デプロイについて
「Deploy」ボタンか「deploy」コマンドで、下のようにデプロイができます。
6 プログラムとのやり取りについて
1 @coral-xyz/anchorライブラリについて
プラログラムとのやりとりは、@coral-xyz/ahchorライブラリを用います。
こちらになります。
2 pgネームスペースについて
プログラムとのやり取りは、pg(PlayGround)ネームスペースなどが使われます。
例えば、pg.PROGRAM_ID. toString()で、プログラムIDが取得できます。
3 Runの実行
「client.ts」に下のようにコードを貼り付けて「Run」コマンドで、下のように実行されます。
pg.program.methods.hello().rpc()の部分で、今回作成したプログラムの「hello」インストラクションを実行しています。
solscanで確認すると、このように実行できたことが確認できました。
このように、「Hello, World!」も確認できました。
4 コマンドによる実行確認
solana confirm -v によるコマンドでも結果を確認することができます。
下のように、結果が確認できました。
7 テストの実行について
テストUIを実施していきましょう。
イーサリアムなどでは、テストコードを作るのですが、説明欄には、自動で作られると書かれています。
(テストコードがどこにあるのかわからず、自分の理解が不足している可能性があるので、修正等ありましたら追記します。)
左の「Test」ボタンを押すことで、テストを実行できました。
今回は以上です。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊