見出し画像

【完全保存版】Solanaで簡単なDappsを作ってみよう!

1 プログラムの作成

まずは、Solana Playgroundの「Counter PDA Tutorial」をもとにプログラムを作りましょう。

下のように選択します。

「START」から始めていきます。

3ページ目のこの部分を貼り付けます。

5ページ目もこのように貼り付けます。

あとは、43行目の「init」を「init_if_needed」に変更します。

(変更しなくても大丈夫ではあります。)

これでできましたので、デプロイしていきましょう。

なお、この記事ではプログラムの中身の説明は省きます。

「Build」を選択

次に、「Deploy」を押します。

しばらくしてこのようになれば、完了です。

2 IDLのエクスポート

次に、IDLのエクスポートを行います。

IDLとはInterface Description Language)の略で、プログラムの構成を説明しています。

下の「Export」 から抽出します。

3 ローカルで作ってみる

1 Git clone

では、準備ができたので、作っていきましょう。

まずはGit cloneを行っていきます。

git clone https://github.com/ytakahashi2020/solana_counter.git

2 依存関係のインストール

次に、依存関係をインストールしていきます。

nodeのバージョンは下のように、20を使っています。

cd solana_counter
yarn install

3 IDLとプログラムIDの設定

次に、先ほどエクスポートしたIDLを下のように設定します。
(すでに「idl.json」があるので、上書きしてください。)

なお、追加で「address」も設定してください。

なお、アドレスには、先ほど作ったプログラムのこちらのIDを設定します。

また、「anchorClient.ts」でもこのように設定します。

4 立ち上げてみる

では、「yarn dev」で立ち上げて、実際に見てみましょう。

このようになりました。

「Select Wallet」でウォレット接続を行い、色々と触ってみましょう。

5 カウンターの作成

では、カウンターというアカウントを作成してみましょう。

「プログラムを実行」を選択し、「確認」を選択します。

ちなみに今回は、数字が1ずつ増えていく、カウンターというアカウントを作成しています。

実行結果が出たので、見てみましょう。

10秒程度待つと、このように実行されていることがわかります。

(すぐ行くと、見つからないエラーになると思います。)

6 カウンターの取得

では、現在のカンターがいくつかも見てみましょう。

下のように押すと、カウンターが0であることがわかります。

7 カウンターの更新

次に、「カウンターの更新」を押してみましょう。

「確認」で進めていきます。

すると、下のように、1増えたことを確認することができました。

ちなみに、この時点で、Solana Playgroundのこちらから確認すると、確かに1となっていることが確認できます。

4 コードを見てみよう

では、ここで簡単にコードを見てみましょう。

1 ウォレット接続について

まずは、「AppWalletProvider.tsx」を確認します。

3つのプロバイダーで構成されていることがわかります。

また、大事な点として、「WalletAdapterNetwork」「Devnet」が設定されています。

2 よく使うフック

次に、「page.tsx」でフックを見てみましょう。

「useWallet」ウォレットの状態を保持し、「useConnection」接続先のクラスターとやり取りを行えます。

この2つが非常に重要です。

なお、「useAnchorWallet」は内部構造的には「useWallet」から作られています。

プログラムを実行する時などに使うと便利です。

3 プロバイダーの設定

では、トランザクションの実行部分を見てみましょう。

まずは、「createProvider」でプロバイダーをつくっています。

これで、どのクラスター(mainnet-betaなのか、Devnetかなど)にどのウォレットでやり取りするのかを設定することができます。

具体的には、この部分になります。

AnchorProviderを使っています。

こちらは参考です。

https://coral-xyz.github.io/anchor/ts/classes/AnchorProvider.html

4 プログラムの指定

次にやりとりを行うプログラムを設定します。

プログラムの構成(IDL)プログラムの公開鍵(のオブジェクト)、そしてプロバイダーを渡しています。

プロバイダーでどのクラスター(mainnet-betaなのか、Devnetかなど)かも設定していましたね。

ちなみに、IDL公開鍵のオブジェクトはこの辺りで設定しています。

5 PDAの取得(参考)

今回の記事とは直接関係ないですが、下の部分でPDAを取得しています。

その後に、アドレスとして渡す必要があるためです。

6 関数の実行

そして、最後に関数の実行を行っています。

メソッド名を指定し、必要なアカウントを設定して、「.rpc」でブロックチェーンに投げています。

以上が簡単なコードの説明でした。

やってみると、なるほどと思う部分も出てくると思いますので、ぜひやってみてください!





サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊