Crypto OS
キャリアトラック

T2 · Solana / SVM Engineer

コードとデータを完全に分けるチェーンで、他者が接続できるプログラムを書く。

Rust と高性能チェーンの分野向けです。

このページの T2 は Track です。講座の章は「第 T10 章」のようにリンク付きで記します。講座の T2 は暗号学の基礎を扱い、別の内容です。

この Track に向いている人

EVM の考え方を、そのまま Solana に当てはめている。 コントラクトのストレージを探して困惑し、PDA は知っていても、普通のアカウントとのバイト単位の違いを説明できません。

Rust は書けても、安全なアカウント検証ができない。 借用検査やマクロは理解していても、属性マクロが何を検査するか、自分の require に何が抜けたかが分かりません。

Devnet では動くのに、メインネットで問題が起きる。 断続的な失敗、作成時のレント不足、重複実行、領域不足と拡張など、ローカルでは経験しなかった事態に困っています。

プログラムは書けても、他者が使える成果物を作れない。 テストスクリプトだけがあり、接続する人は Rust のソースを読んでアカウント順を推測します。クライアント SDK を書いたことがありません。

境界は、ソースを読まなくても、他者が正しく呼べるプログラムを提供することです。

前提

Part B 全 36 章を読むのが理想です。今始めるなら、知識グラフ上の最短経路は次です。

  1. 第 T1–T3 章
  2. 第 T4 章
  3. 第 T5 章
  4. 第 T6 章
  5. 第 T10 章
  6. 第 T11 章
依存関係は graph.ts に基づきます。Indexer の分岐は、表の最終行で別に示します
先に読む章グラフ上の理由
第 T1 章から第 T3 章状態、署名、取引ライフサイクル。チェーン共通の土台
第 T4 章 · RPC とは何か第 T5 章の直接の前提。高スループットが RPC の制限と完全性の問題を大きくする
第 T5 章 · EVM Account Model第 T6 章の直接の前提。誤記ではありません。状態の索引としてのアカウントを先に理解し、Solana が何を分けたかを見る
第 T6 章 · Solana Account Model実際の出発点。プログラムはデータを保持せず、取引は触れるアカウントを事前に宣言する
第 T10 章 · Solana Program第 T6 章に依存。PDA と CPI を自分で書く
第 T11 章 · Token Program第 T10 章に依存。共有プログラムと個別アカウントが合成可能性を作る
第 T13 章 → 第 T17 章Indexer を学ぶ場合のみ必要。第 T17 章の依存は第 T9 章まで戻り、省けない

学ぶ内容

  1. Rust
  2. Anchor
  3. PDA
  4. CPI
  5. Token-2022
  6. Indexer
  7. DeFi

七つのテーマを四群に分けます。

1.Rust とフレームワーク:難所はアカウント検証

中心は所有権より、属性マクロがどの検査へ展開されるかを読めることです。署名者、書込可能性、想定した owner、PDA のシードからの導出、領域サイズなどを確認します。

生成されない検査は自分で補います。各命令で、検査の総数、各検査が防ぐもの、省いた場合の悪用を説明できる必要があります。

フレームワークなしで命令入口を一度書くことが、費用対効果の高い練習です。属性マクロをブラックボックスと見なくなります。

2.PDA と CPI:アドレス空間と外部呼び出し

PDA では、シードの決定者と先取り可能性、正規 bump、どのプログラムが署名するかを理解します。重大な問題の多くは、このアカウントへは自分のプログラムだけが書けるという思い込みに戻れます。

CPI では、呼び出す相手が本物か、呼ばれるときに権限が意図せず渡らないかを確認します。深さの制限とアカウントの受け渡し規則は、動かなくなってからではなく設計時に考えます。

3.Token-2022 と接続:誰と共存するか

拡張は機能だけでなく仮定の失効を生みます。送金のフック、手数料、凍結、mint 内のメタデータなどです。送金を単なる残高の増減と考えると、拡張付きトークンで計算を誤ります。

トークンに対する暗黙の仮定を列挙し、どの拡張がそれを崩すかを一つずつ問います。

4.Indexer と DeFi:出来事を検索可能にする

EVM とデータの形が異なり、命令、内部命令、アカウント変化から意味を再構成します。第 T17 章の再編、再開、冪等性はすべて必要で、媒体が変わるだけです。

DeFi は独自プロトコルの制作(Track T4)より、正しい接続が目標です。主要プログラムの配置を読み、交換の予想受取量を計算し、チェーン上の失敗を処理します。

卒業成果物

クライアント SDK 付きで、メインネットに配備した Anchor プログラム。

卒業プロジェクトは横断的なシステム、この Track は一つのプログラムを求め、他者が正しく使えることを重視します。SDK が、自分が書き終えた状態を他者が使える状態へ変えます。

他者が動かせるか。 clone 後、一コマンドで依存を導入し、一コマンドでローカルの検証ノード上の全テストを実行します。バージョンへの依存が強いため、README にツールの版を明記します。

SDK の主な呼び出しを示す、20 行以内の例も付けます。

呼び出す人にアカウント順を要求しない SDK か。 業務パラメーターだけを受け、PDA、アカウント一覧、関連アカウントの有無、必要レントを SDK が処理します。

Rust を読んでいない人が型定義だけで呼び出しを成功させることで確認します。第三アカウントを何にするか聞く必要があれば、未達です。

検証一覧があり、各検査に失敗するテストがあるか。 間違ったアカウントを意図的に渡し、取引が必ず失敗する用例を各項目に付けます。

成功経路だけのテストでは、安全性を証明できません。

失敗と再試行を設計しているか。 既存アカウント、レント不足、領域不足、重複送信、期限切れによる再送を最低限扱います。

SDK が再試行、エラー、冪等な成功のどれを返すかを明記します。

メインネットは少額で、更新と停止の説明があるか。 自分の資金を使い、失っても困らない額にします。更新権限者、放棄・破棄の予定、事故時の停止方法を書きます。

Devnet の配備だけに、まだメインネットへ進むべきでない理由を添えても、評価は成立します。

達成したかを判断するには

よくある誤解

Devnet で動けばメインネットへ進める

混雑、RPC、レントは異なります。期限切れ、優先手数料不足、想定と異なる確認状態が起こります。

永遠に確認されない可能性を既定にし、送信後の確認と再送を明確に設計します。送信だけで成功とはしません。

フレームワークなら検証不要

生成するのは宣言した検査であり、必要な検査ではありません。属性を省いてもコンパイラーは教えてくれません。

一覧を独立した文書にし、コードと照合します。各項目に誤ったアカウントで失敗する用例を付け、実行可能な一覧にします。

PDA のシードは適当でよい

シード設計は権限設計です。次元が欠けると隔離すべき対象が共有され、制約のない利用者入力を含めると先取りされます。

何を表し、誰が作成できるかを先に書き、そこからシードを導きます。所属関係も含め、間違った組合せを導出段階で防ぎます。

Solana には再入がないので順序は不要

EVM 型の再入がなくても、順序の問題はあります。CPI やフックが実行を外へ渡すと、アカウントは途中の状態かもしれません。

第 T28 章と同じく、先に自分の記帳を終え、最後に外部とやり取りします。 チェーンが変わっても規則は変わりません。

次に進むには

このページの内容