見出し画像

【完全保存版】solanaでコントラクトのデプロイからトランザクションの実行まで

本日はsolanaのプレイグラウンドを用いて、コントラクトのデプロイからトランザクションの実行までを行います。

公式のこちらの記事に沿って進めています。

では、やっていきましょう。

1 プレイグラウンドを立ち上げる

まずは、こちらからプレイグラウンドを開きます。

https://solana.com/ja/developers/guides/getstarted/hello-world-in-your-browser#interact-with-your-on-chain-program

2 サンプルコードのインポート

プレイグラウンドが立ち上がったので、「Import」を行います。

「Hello World」と入力し、「Import」

3 リネームの実施

ここはやらなくても大丈夫ですが、名前を変えてみます。

下のボタンを選択

任意の名前をつけて、「Rename」

4 ウォレット接続

プレイグラウンド用のウォレットに接続します。

下の部分を選択します。

下のようになれば成功です。

なお、最初は「0 SOL」だと思います。

下のボタンを選択してみましょう。

下のように、ウォレットの情報を確認することができました。

(こちらのスクショは後から撮ったので、残高は異なっています。)

5 コードの確認

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

ただ、初めてやる際は、この章は飛ばしてとりあえずやってみるでも良いと思います。

1 useキーワードについて

下の部分では「useキーワード」を使って、「solana_program」クレートから5つの要素をインポートしています。

2 solana_programクレートについて

こちらにあるように、「solana_program」クレートは標準ライブラリとして機能するようです。

3 entrypoint!マクロについて

entrypoint!マクロでは、エントリポイントの宣言エクスポートを行なっています。

ここでは「process_intstruction」関数を最初に実行することを宣言しています。


4 関数の引数について

では、実際に実行される関数を見てみましょう。

まずは、こちらの3つの引数を取るようです。

5 返す型について

返す型としては、「ProgramResult」型を指定しています。

6 msg!マクロについて

関数の本体としては、msg!マクロを使っています。

これにより、ログにメッセージを残しています。

7 Ok(())について

最後に、OKを返すことで、プログラムが終了したことを示しています。

6 テストトークンの取得

では、実行前に、ガス代用のテストトークンを取得しましょう。

ちなみに、このプロセスを経なくても、自動で取得をしてくれます。

solana airdrop 2

下のように取得することができました。

7 Solscanで確認してみよう

では、エクスプローラのSolscanから実際にできたかを確認してみましょう。

下のように「9B5…s6G」から2SOLが送られたことが確認できました。

https://solscan.io/tx/jrHwbr1GUZR8ac5y46AEd4Foo3pavNCZfbmqJodZjXLte6roV2TE8GSXEkRGQ8LmBhUgLzUk67tx4TcSrDkLn4W?cluster=devnet

8 コントラクトのデプロイをしよう

では、デプロイをしてみましょう。

その前に、まずはこちらからビルドを行います。

このように、使っていない変数がある(unused_variable)と警告が出ていますが、今回は無視で大丈夫です。

「Deploy」を選択します。

このようにうまくいったようです。

ちなみに左の赤の四角で囲った部分が「プログラムID」です。

9 実行用のスクリプトを作ろう

では、このコントラクトを実行するためのスクリプトを作りましょう。

下のように、「run」と入れて実行すると、「client.ts」が作られ、実行されます。

10 コードの確認

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

ただ、初めてやる際は、この章は飛ばしてとりあえずやってみるでも良いと思います。

1 公開鍵の確認について

「pg.wallet.publicKey」で、このプレイグラウンド(PlayGround)のウォレットの公開鍵を取得しています。

略称が分かればイメージがつきますね。

その結果がこちらの部分です。

2 残高の取得について

残高の取得は、「pg.connection.getBalance関数」で行なっています。

3 SOL通貨単位への変換について

取得した残高を下の部分でSOL単位に変換しています。

割っている、「LAMPORTS_PER_SOL」はこちらです。

ラムポート(Lamports)は、Solanaブロックチェーンにおける通貨単位の最小分割単位です。

Etherにおける、「wei」のようなものですね。

結果はこのようになりました。

ちなみに、下のように、「LAMPORTS_PER_SOL」を除くと、下のようになりました。

11 コードの貼り付けについて

次に、コントラクトのトランザクションを行う関数を、下のように貼り付けます。

公式のこの部分をそのまま持ってきました。

https://solana.com/ja/developers/guides/getstarted/hello-world-in-your-browser#interact-with-your-on-chain-program

12 コードの確認

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

ただ、初めてやる際は、この章は飛ばしてとりあえずやってみるでも良いと思います。

1 トランザクションの作成

まずは、下のようにして、トランザクションを作成しています。

https://solana-labs.github.io/solana-web3.js/classes/Transaction.html#constructor.new_Transaction

2 addメソッドについて

次に、トランザクションに指示を追加していきます。

それがこちらの「add」メソッドです。

公式はこちらです。

https://solana-labs.github.io/solana-web3.js/classes/Transaction.html#add

3 TransactionInstructionクラスについて

下の部分で、指示に必要なクラスを作っています。

今回は、ログにメッセージを残すだけなので、keysを必要としていません

公式としてはこの辺りです。

https://solana-labs.github.io/solana-web3.js/classes/TransactionInstruction.html#constructor

4 トランザクションの送付と確認

作成したトランザクションを送付し、確認します。

戻り値として、トランザクションのハッシュが返ってきます。

公式としては、この辺りです。

https://solana-labs.github.io/solana-web3.js/functions/sendAndConfirmTransaction.html

13 実行する

では、「run」コマンドで実行してみましょう。

次のようになりました。

14 Solscanで確認してみよう

では、エクスプローラのSolscanから実際にできたかを確認してみましょう。

下のように、成功していることが確認できました。

https://solscan.io/tx/3uB6rLNQAAsGdn1hvoamDM6KjQaeHfQe8jwVJWGUXru7o1jQBNEZDuaUikx1tEzZYHwwLtTynEDfVknBUtv9fpf6?cluster=devnet

こちらのタブを見てみると、どの程度のガス代が使われたのかが確認できます。

また、こちらを開いてみましょう。

このように、「Hello world!!」が表示されていることも確認できました。

15 ターミナルからも確認してみよう

最後に、ターミナルからも確認してみましょう。

こちらのコマンドを実行します。

solana confirm -v <TRANSACTION_HASH>

このように、トランザクションの状況を確認することができました。

以上で、solananのプレイグラウンドを使った、開発体験が完了しました。

最後までありがとうございました。

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