Solana x Anchorのブロックチェーン開発 初心者ガイド

Solana関連はドキュメントや勉強用のサンプルコードが少なく、いろいろな方の記事で紹介されているコードもエラーで動かない、ということがあった。
SolanaやAnchorの公式チュートリアルはちゃんと動くが、Solana x Anchor x ReactでFullStackを実装しようとしたり、ちょっとでもいじろうとするとエラーになってしまい、難しかった。
しかし、Solanaはシンプルな構造になっているので、(時間はかかるが)理解しやすい。

以下に参考になった記事の一覧と、理解しやすいようにミニマルなコードをGitHubにアップした。
# 少しでもみなさんのお役に立てたら幸いです。

勉強のアプローチ

「世界観を知る → 仕組みを知る → コードを読む/検証する → 最初に戻る」というのを何度も繰り返して理解を深めていった。普通は一方向で戻ることはないと思うが、Solanaの場合は一度で理解できず、何度もループした。

世界観を知る

以下の記事が把握しやすく、重要でヒントになる内容がたくさんあった。

仕組みを知る

貴重なポンチ絵がある。コードよりも絵を重視して理解した。

仮説版だが自分なりに整理したポンチ絵は以下のとおり。仕事で使いやすいようにPowerPoint版をアップ。まだまだ作成中につき、随時追加中。
Solana Blockchain Outline Figure for Product Manager(Draft Version)

【イメージ例】

コードを読む/検証する

Rustを多少理解していないと読むのが若干難しかった。「コードを読む → 不明点見つかる → Rustを勉強する → 検証する → 最初に戻る」をループした。
また、Rust、Solana、Anchor、誰がどこまでの仕様を担っているのか、全然わからなかったため、最終的にそれぞれ理解を深めていく必要があった。

勉強しやすいように、ミニマルコードにしたものを自分で書いた。あえて条件文などもほとんど削除して、一発目で理解しやすいようにした。バニラ状態、フロントエンド(React)、フルスタック(Solana x Anchor x React)の3種類をそれぞれ用意。

GitHub - 256hax/solana-anchor-react-minimal-example

【アップしたファイル群の対象イメージ(オレンジ箇所)】

API/コミュニティを読む

勉強しても検証しても、どうしても解決できない場合は、仕様やコードを直接読むしかなかった。

  • @project-serum/anchor
  • Rust - Crate anchor_lang
  • Anchor Discord
    ちょっとわかりにくいが、このページの下部の「Note」にDiscordのリンクがある。Captcha.botという認証機能があり、AnchorのDiscordにたどり着くのがちょっと大変だった。ハマった場合は、ここで検索して調べた。

ハマりポイント

仕組みのハマりポイント

  • Solanaはなにをするにも、すべてにおいてアドレスを発行して管理していく仕組みになっていて、理解はできるが、設計や実装になると難しい。まだ勉強中。
  • RaydiumやMetaPlexなど、GitHubからクローンしたらすぐ動くものも多数あるが、中身を理解するにはソースコードをちゃんと読む必要があり、自分にはハードルが高かった。

コード/検証のハマりポイント

  • Solanaをバニラ状態でカスタマイズして組むのが難しく(Instructionsのシリアライズ/デシリアライズ対応など)、Anchorを使わないと実装できなかった。AnchorはSolana実装の難しい部分を担ってくれているため、Anchorなしの開発は自分には厳しかった。
  • フロントエンドのSolana Web3だけでも送金などの基本機能は利用可能。そのため、データやロジックのカスタマイズをしないのであれば(つまりRust側をいじられないのであれば)、無理してAnchorを利用しなくてもよい。
  • 「% anchor test」で成功したコードをReactにそのまま組み込めずにハマった。ロジック周りはAnchorのtestコードをそのまま実装できるが、それ以外のウォレット接続機能とかはReact側(Phantom)で実装しないといけない。
  • とにかく実際に検証するのが重要。localnet(solana-test-validator)でも、Solana Explorerが利用できるため、デバッグは ①Rustのdbg! ②JSのconsole.log ③Solana Explorer の3点セットで確認がおすすめ。localnetでSolana Explorerを使う方法は以下
    Solana Explorerでlocalnetのトランザクションを閲覧する方法
  • バージョンアップが激しいので、しょっちゅうバージョンアップして追いつくようにする必要がある。SolanaもAnchorも全力疾走感が半端なく、開発力の高さが伺える。
  • Solana公式も含めて、GitHubにアップされているが動かない、というものが多数あった。その場合は、「最終更新日(活発に更新されているか)」「IssueとPull Requestが溜まっているか(バグがどの程度あるか)」が目安になった。最終更新日が4ヶ月以上前で、Issue、PRが10件以上、というものはだいたい動かなかった。
  • 開発環境がMacだとスムーズにいって、Windowsだとハマった。そこでDockerを用意した: solana-anchor-react-docker 。なお、Anchor公式のDockerもあるが、バージョンが古かったり、環境が整っていないなどの理由でスムーズに動かなかったため、1からDockerを作らざるを得なかった。