【完全保存版】Solana Bootcampをやってみよう!
本日は、Solana Bootcampを利用して、Solanaのトランザクションを実行してみます。
内容は、アカウントを作成するトランザクションの実行です。
1 Solana Bootcampについて
では、こちらのページからBootcampのページに進みましょう。
こちらに開発者用のリソースが集約しています。
こちらを選択します。
(選択すると、YouTubeに飛ぶので、ご注意ください。)
ここから、解説のYouTubeを見ることができます。
ちなみに、Githubはこちらです。
2 実行してみよう
では、最初のbootcampを実行してみましょう。
1 git clone を行う
では、git clone を行っていきましょう。
こちらをコピーします。
git clone を行うと、このようになりました。
ちなみに、私は最近、「cursor」を使用しています。
git clone https://github.com/solana-developers/pirate-bootcamp.git
2 依存関係のインストール
では、依存関係をインストールしてみましょう。
cd pirate-bootcamp/quest-1
yarn install
このように、うまくいったようです。
3 .envの設定
まず、事前にこちらのコマンドで、キーペアがどこにあるのかを確認しましょう。(できなくても先に進めます)
このコマンドができない時は、事前にこちらの記事を行ってください。
なお、今回は、できなくても先に進むことができます。
次に、「example.env」をコピーして、「.env」 ファイルを作りましょう。
「RPC_URL」には「https://api.devnet.solana.com」が入ります、
上で、キーペアがなかった場合は、5行目はコメントアウトのまま進みます。(その場合、新しく作る処理が後に走ります。)
4 デモの実施
これで準備ができたので、こちらのコードを実行してみましょう。
yarn demo ./scripts/1.simpleTransaction.ts
このように動きました。
うまくいったようです。
3 コードを見てみよう
では、コードを一つずつ確認してみましょう。
1 インポートについて
まずは、こちらの「lib」からインポートを行っています。
そして、「@solana/web3.js」から主要な機能をインポートしています。
2 ガス代支払い者(payer)について
では、下を見てみましょう。
どうやら、payerの公開鍵を表示しているようです。
では、「vars.ts」で「payer」を見てみましょう。
このようになっています。
「.env」 で設定した、キーペアのパスを確認し、読み込んでいます。
なお、「.env」内で設定がなかった場合は、「helpers.ts」内の「loadOrGenerateKeyPair」を実行して、キーペアを作成しています。
3 残高の確認
続いて、payer(支払い者)に残高があるかを確認しています。
下のように、「getBalance」関数が使われています。
4 トークンの取得(エアドロップ)
残高が、1SOL以下であれば、下の部分でエアドロップを行っています
なお、「lamport」はSolanaの最小単位でEthereumで言うところの「wei」に相当します。
「LAMPORTS_PER_SOL」は1 SOLに相当する分の「lamport」を表しています。
なお、エアドロップを要求する「requestAirdrop」関数については、こちらになります。
5 作成アカウントのキーペアの作成
今回はアカウントを作成するので、そのキーペアを取得します。
下のようになりました。
6 作成アカウントの必要項目の作成
では、他に必要な項目を作成しましょう。
まず、アカウントに割り当てる「space」を指定しています。
次に、このアカウントの「レント免除」のために必要な「lamport」を取得しています。
「getMinimumBalanceForRentExemption」関数はこちらです。
「レント免除」についてはここで詳しく扱いませんが、Solanaではアカウントを使用するには本来「レント」という賃料を払う必要がありました。
ただ、「レント免除」という2年分のレントの残高をアカウントが持っていれば、レントを払わなくても良いというものです。
7 アカウント作成のインストラクションの作成
では、今回行うアカウントを作成するための「インストラクション(指示)」を作成していきます。
「createAccount」メソッドを使用して、インストラクションを作成し、それを後ほどトランザクションに含めていきます。
まず下の部分で、実行する公開鍵と、作成するアカウントに対応するキーペアの公開鍵を設定しています。
次に、レント免除に必要な「lamports」、割り当てる「space」を設定します。
「ProgramId」ではアカウントを所有するProgramのIDを指定します。
これにはアカウントの管理を行う、「SystemProgram」のIDを指定します。
8 トランザクションの作成
次にトランザクションを作成します。
Solanaでは、トランザクションに、直近のブロックハッシュを含める必要があります。
下のように、「getLatestBlockhash」関数を使って取得しています。
また、トランザクションには、先ほど作成したインストラクションも入れています。
9 トランザクションのコンパイル
作成したトランザクションを「compileToV0Message」でコンパイルを行っています。
これにより、バージョン0のフォーマットでコンパイルを行っています。
詳細はこちらになります。
10 バージョン付きトランザクションの作成
次に、「versionedTransaction」を用いて、バージョン付きのトランザクションを作成しています。
これにより、プロトコルが今後進化しても、異なるバージョンのトランザクションを効率的に処理することができます。
なお、現時点で、トランザクションのバージョンは「legacy」と「0」の2つがあります。
新しい、バージョンの「0」では「Address Lookup Tables」のサポートが追加になっています。
11 署名の実施
トランザクションを実行するためには、署名が必要です。
今回は、payerとkeypairの二つのキーペアを署名者として使用しています。
payerは支払い者として、keypairはこのトランザクションで新しく作成されるアカウントに関連するキーペアとして署名を行っています。
下のようになります。
11 トランザクションの送付
最後に、「sendTransaction」関数でブロックチェーンにトランザクションを送っています。
あとは、「リーダー」がトランザクションを実行することになります。
ちなみに、「printConsoleSeparator」関数も簡単に見てみましょう。
このように、「helpers.ts」に定義されています。
セパレータと場合によってはメッセージを出力するだけのようですね。
12 エクスプローラのURLの確認
最後に、「sendTransaction」の際に返ってきたトランザクションの署名をもとに、エクスプローラのURLを取得しています。
ちなみに、「explorerURL」関数はこちらのようになっています。
実際に見てみると、このようにうまくいっていることがわかりました。
今回は以上になります。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊