mcpField
S
solana-development

solana-development

github.com/tenequm開発40100 回インストール5 日前に更新
リポジトリ

solana-development について

Solana プログラム開発、セキュリティレビュー、ZK Compression に取り組む開発者向けのスキルです。Anchor とネイティブ Rust の手順に加え、監査ガイドや圧縮トークン、PDA の情報を扱います。

主な機能

  1. 01Anchor とネイティブ Rust の開発ガイド
  2. 02プログラムのテストとデプロイの資料
  3. 03セキュリティレビューと脆弱性チェックリスト
  4. 04トークンと PDA 向け ZK Compression
  5. 05圧縮状態の RPC とインフラ概要

活用シーン

  1. 01Solana プログラムの開発方式の選択
  2. 02命令のアカウント検証のレビュー
  3. 03セキュリティ監査レポートの作成
  4. 04圧縮トークンや PDA の構築

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tenequm/skills --skill solana-development

インストール後、Claude Code で/solana-developmentを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE.txt
references/
accounts.md
anchor-security.md
anchor.md
builtin-programs.md
caveats.md
client-development.md
client-integration.md
compressed-accounts.md
compressed-pdas.md
compressed-tokens.md
compute-optimization.md
cpi.md
deployment.md
durable-nonces.md
error-handling.md
native-rust.md
native-security.md
pda.md
production-deployment.md
resources.md
security-checklists.md
security-fundamentals.md
security.md
serialization.md
surfpool.md
sysvars.md
testing-frameworks.md
testing-overview.md
testing-practices.md

詳細

Solana

Solana 上での開発に必要なすべてを網羅しています。プログラム(Anchor またはネイティブ Rust)の開発、セキュリティ監査、ZK Compression を活用した開発に対応します。3 つすべてがアカウント、PDA、CPI、トークンという共通の基本モデルを使用しており、異なるのは抽象化レベルと目的だけです。

このスキルの対象

分野使用する場面移動先
開発プログラム、トークン、テスト、デプロイの作成開発
セキュリティと監査脆弱性のレビュー、エクスプロイトの作成、監査レポートの作成セキュリティと監査
ZK CompressionLight Protocol を利用した、大規模なレンタ不要のトークン/PDAZK Compression

開発

Anchor(推奨)またはネイティブ Rust で Solana プログラムを構築します。どちらもアカウント、PDA、CPI、トークンを使用し、構文と抽象化レベルが異なります。

クイックスタート

推奨:Anchor フレームワーク

定型コードを減らし、TypeScript クライアントを生成するマクロとツールです。

use anchor_lang::prelude::*;

declare_id!("YourProgramID");

#[program]
pub mod my_program {
    use super::*;

    pub fn initialize(ctx: Context<Initialize>, data: u64) -> Result<()> {
        ctx.accounts.account.data = data;
        Ok(())
    }
}

#[derive(Accounts)]
pub struct Initialize<'info> {
    #[account(init, payer = user, space = 8 + 8)]
    pub account: Account<'info, MyAccount>,
    #[account(mut)]
    pub user: Signer<'info>,
    pub system_program: Program<'info, System>,
}

#[account]
pub struct MyAccount {
    pub data: u64,
}
cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
avm install latest && avm use latest
anchor init my_project && cd my_project && anchor build && anchor test

→ Anchor の完全なガイドについては、references/anchor.md を参照してください

上級者向け:ネイティブ Rust

最大限の制御、最適化の可能性、ランタイムへの深い理解を得られます。

use solana_program::{
    account_info::AccountInfo, entrypoint, entrypoint::ProgramResult,
    pubkey::Pubkey, msg,
};

entrypoint!(process_instruction);

pub fn process_instruction(
    program_id: &Pubkey,
    accounts: &[AccountInfo],
    instruction_data: &[u8],
) -> ProgramResult {
    msg!("Processing instruction");
    // Manual account parsing, validation, and instruction routing
    Ok(())
}
cargo new my_program --lib
cd my_program   # configure Cargo.toml (see native-rust.md)
cargo build-sbf

→ ネイティブ Rust の完全なガイドについては、references/native-rust.md を参照してください

どちらを使うか

ニーズアプローチ理由
標準的な DeFi/NFT プログラムAnchor開発が速く、実績のあるパターンを利用できます
TypeScript クライアントが必要AnchorIDL と型を自動生成します
Solana を初めて使うAnchor学習しやすいです
計算処理の最適化が重要ネイティブ Rustオーバーヘッドなしで直接制御できます
プログラムのサイズを最小化ネイティブ Rust抽象化レイヤーがありません
基本を学ぶネイティブ Rustプラットフォームを深く理解できます

開発速度を優先して Anchor から始め、後からホットパスをネイティブなパターンで最適化することもできます。同じワークスペース内で両方を併用できます。

リファレンスマップ

基礎

  • accounts.md - アカウントモデル、所有権、Rent、検証
  • pda.md - Program Derived Address:導出、正規バンプ、署名
  • cpi.md - プログラム間呼び出しを安全に行う方法

トークン

テスト

デプロイ

クライアント

  • client-development.md - dApp クライアント:ウォレット接続、React フック、SOL/SPL の転送、トランザクション管理(framework-kit と @solana/kit 6.x)

実装の詳細

  • serialization.md - データレイアウト、Borsh、ゼロコピー
  • error-handling.md - カスタムエラー、伝播、クライアント側の処理
  • security.md - 開発時の防御的プログラミングパターン

応用

低レベル

よくあるタスク

タスク参照先
新しいプログラムAnchor:anchor init / ネイティブ:cargo new --lib → anchor.md、native-rust.md
PDA を初期化するpda.md
SPL トークンを転送するtokens-operations.md
高速な単体テストMollusk → testing-frameworks.md
ローカルの mainnet フォークsurfpool start → surfpool.md
devnet にデプロイするdeployment.md
本番用の検証済みビルドsolana-verify build → production-deployment.md
コンピュートを最適化するcompute-optimization.md
40 個以上のアカウントを扱うAddress Lookup Tables → versioned-transactions.md
オフライン署名durable nonce → durable-nonces.md

セキュリティと監査

Solana プログラム(Anchor またはネイティブ Rust)の体系的なセキュリティレビューです。基本原則は、攻撃者は任意の命令に任意のアカウントを渡せるということです。そのため、暗黙の保証はありません。すべてを検証し、何も信頼しないでください。

レビュープロセス

  1. 初期評価 - フレームワーク(Anchor またはネイティブ)、Anchor のバージョン、依存関係(オラクル、外部プログラム)、命令の数、アカウントの種類、プログラムの目的。
  2. 体系的なレビュー - 各命令について、次の順に確認します:アカウントの検証(署名者/所有者/書き込み可能/初期化)、算術の安全性(checked_*)、PDA のセキュリティ(正規バンプ、シードの一意性)、CPI のセキュリティ(検証済みのターゲット)、オラクル/外部データ(鮮度、ステータス)。→ security-checklists.md
  3. 脆弱性パターンの検出 - 型の偽装、アカウントの再読み込み、不適切なクローズ、lamports/所有権チェックの欠如、PDA の置き換え、任意の CPI、オーバーフロー/アンダーフロー。→ vulnerability-patterns.md
  4. アーキテクチャとテストのレビュー - PDA の設計、容量/レンタル料、エラー処理、イベントの発行、計算予算、テストカバレッジ(単体/統合/ファズ)、アップグレードと権限の管理。
  5. レポートの生成 - 重大度別の指摘事項、重大なものを最初に記載、すぐに実施できる改善策、テストの推奨事項。

必須チェック項目(すべての命令)

Anchor:

#[derive(Accounts)]
pub struct SecureInstruction<'info> {
    #[account(
        mut,
        has_one = authority,                          // relationship check
        seeds = [b"vault", user.key().as_ref()], bump // canonical bump
    )]
    pub vault: Account<'info, Vault>,
    pub authority: Signer<'info>,                     // signer required
    pub token_program: Program<'info, Token>,         // program validation
}

let total = balance.checked_add(amount).ok_or(ErrorCode::Overflow)?;

ネイティブ Rust:

if !authority.is_signer { return Err(ProgramError::MissingRequiredSignature); }
if vault.owner != program_id { return Err(ProgramError::IllegalOwner); }
let total = balance.checked_add(amount).ok_or(ProgramError::ArithmeticOverflow)?;

重大なアンチパターン

❌ 絶対に避けること: saturating_* 算術(エラーを隠します)、本番環境での unwrap()/expect()、追加チェックなしの init_if_needed、署名者の検証の省略、未検証の算術、任意の CPI ターゲット、変更後のアカウントの再読み込み忘れ。

✅ 必ず行うこと: checked_* 算術、Option に対する ok_or(error)?、検証を伴う明示的な init、Signer/is_signer チェック、CPI ターゲットへの Program<'info, T> の使用、外部変更後の再読み込み、所有権+ディスクリミネーター+関連性の検証。

重大度と指摘事項の形式

  • 🔴 重大 - 資金の盗難/喪失、プロトコルの破綻
  • 🟠 高 - 混乱、部分的な資金喪失の可能性
  • 🟡 中 - エッジケース、グリーフィング、最適でない動作
  • 🔵 低 - コード品質、ガス、ベストプラクティス
  • 💡 参考情報 - 推奨事項、ドキュメント
## 🔴 [CRITICAL] Title
**Location:** `programs/vault/src/lib.rs:45-52`
**Issue:** Brief description.
**Vulnerable Code:** ```rust ... ```
**Exploit Scenario:** How it's exploited, step by step.
**Recommendation:** ```rust ... ```
**References:** Links to docs or similar exploits.

リファレンスマップ

  • security-fundamentals.md - セキュリティの考え方、脅威モデリング、基本的な検証、入力/状態/算術の安全性、再入
  • vulnerability-patterns.md - 脆弱性ごとの脆弱なコード、攻撃シナリオ、安全な修正、参考資料
  • security-checklists.md - アカウント、算術、PDA、CPI、オラクル、トークンのチェックリスト
  • anchor-security.md - Anchor の制約、CpiContext、イベント、カスタムエラー
  • native-security.md - 手動検証、安全な PDA 署名、ディスクリミネーター、レンタル免除
  • caveats.md - Solana の特性、Anchor の制限、テストの盲点、バージョンの問題

すべての監査で確認する重要な質問

  1. 攻撃者はアカウントをすり替えられますか?(PDA の検証、プログラム ID、has_one)
  2. 算術のオーバーフロー/アンダーフローが発生する可能性はありますか?(checked 演算、ゼロ除算)
  3. すべてのアカウントが検証されていますか?(所有者、署名者、書き込み可能、初期化済み)
  4. プログラムから資金を流出させることはできますか?(認可、再入、アカウントの混同)
  5. エッジケースでは何が起きますか?(ゼロの金額、最大値、クローズ済みアカウント、期限切れデータ)
  6. 外部依存関係は安全ですか?(オラクルの鮮度/ステータス、CPI ターゲット、トークンプログラム)

最新のプラクティス(2025年)

Anchor 0.30+ • 適切な拡張機能処理を伴う Token-2022 • InitSpace derive • 重要な状態変更時のイベント発行 • Trident によるファズテスト • 不変条件の文書化 • ロードマップ:開発 → 監査 → テストネット → 監査 → メインネット。


ZK Compression

ZK Compression は、状態をアカウントではなく台帳に保存し、ゼロ知識証明で状態遷移を検証することで、レンタル料不要のトークンと PDA を実現します。Light Protocol によって構築され、Helius Photon によってインデックス化されています。

使用するタイミング

次の場合に使用します: 数百万のトークンアカウントの作成(約5000倍低コスト)、多数の受取人へのエアドロップ/ロイヤルティ/ゲーム用ミント、更新頻度の低い多数のユーザーアカウント、更新頻度の低い PDA。

通常のアカウントを使用する場合: 頻繁に更新される場合(生涯の書き込み回数が1000回超)、オンチェーンで大きなデータにアクセスする場合、またはコンピュート予算が重要な場合(圧縮により約100k CUが追加されます)。

クイックスタート

# TypeScript client
npm install @lightprotocol/stateless.js @lightprotocol/compressed-token
# Rust SDK for programs
cargo add light-sdk
# CLI + local validator
npm install -g @lightprotocol/zk-compression-cli
light test-validator      # local validator with compression
light init my-program     # new Anchor project with compression
圧縮トークンのミント(TypeScript)
import { createRpc } from '@lightprotocol/stateless.js';
import { createMint, mintTo, transfer } from '@lightprotocol/compressed-token';

const rpc = createRpc(); // or createRpc('https://mainnet.helius-rpc.com?api-key=YOUR_KEY')

const { mint } = await createMint(rpc, payer, payer.publicKey, 9);
await mintTo(rpc, payer, mint, recipient, payer, 1_000_000_000);
await transfer(rpc, payer, mint, 500_000_000, owner, recipient);
const accounts = await rpc.getCompressedTokenAccountsByOwner(owner, { mint });

→ 圧縮 PDA(LightAccount、妥当性証明、CPI)を使用した Anchor プログラムの全体については、references/compressed-pdas.md を参照してください。

主な概念

圧縮アカウントモデル - 通常のアカウントと似ていますが、AccountsDB ではなく台帳に保存されます。レンタル料はかかりません。コンテンツハッシュ(書き込みごとに変化)または任意の永続アドレス(PDA のようなもの)で識別します。状態は ZK 証明によって検証されます。

状態ツリー - コンカレントな Merkle ツリー(Poseidon ハッシュ)。オンチェーンに保存されるのはルートのみです。V2 バッチツリー(メインネット、2026年1月):状態ルートの更新コストを約250分の1にし、V1 と比べて CU を約70%削減します。新規デプロイでは V2 が自動的に使用されます。V1 も引き続きサポートされています。

妥当性証明 - Groth16 ZK 証明。アカウント数にかかわらず常に128バイトで、検証に約100k CUかかります。

LightAccount の操作:

LightAccount::<T>::new_init(&program_id, Some(address), tree_index);     // create
LightAccount::<T>::new_mut(&program_id, &account_meta, current_state)?;  // modify
LightAccount::<T>::new_close(&program_id, &account_meta, current_state)?; // close

RPC とインフラストラクチャ

Helius RPC またはセルフホスト可能な Photon を介して圧縮状態を照会します。主なメソッド:getCompressedAccount、getCompressedAccountsByOwner、getCompressedTokenAccountsByOwner、getCompressedTokenBalancesByOwner、getValidityProof、getMultipleCompressedAccounts、getCompressionSignaturesForAccount。

ノードの種類:Photon RPC(状態をインデックス化してクエリを提供。Helius またはセルフホスト)、Prover(証明を生成)、Forester(ツリーを維持し、nullifier キューを空にする)。

cargo install photon-indexer
photon --rpc-url=https://api.devnet.solana.com

トレードオフ

トランザクションが大きくなります(証明に128バイト+アカウントデータ) • CU が増加します(証明に約100k+アカウントごとに約6k) • 書き込みのたびに古い状態が無効化され、新しい状態が追加されます • クエリには Photon インデクサーが必要です。V2 バッチツリーでは、損益分岐点が V1 の約1000回の書き込みというしきい値を大幅に上回ります。

リファレンスマップ

外部リンク:ZK Compression Docs • Light Protocol • Helius SDK • Photon Indexer • Program Examples


リソース

公式ドキュメント、ツール、学習パス、セキュリティガイド、監査レポート、セキュリティ企業、コミュニティへのリンク:

→ references/resources.md を参照してください

一般的なベストプラクティス

✅ すべてのアカウントを検証する(所有権、署名者、変更可能性) • checked_* 算術を使用する • 十分にテストする(ユニット、統合、エッジケース) • プログラム所有アカウントには PDA を使用する • コンピュートを最小限に抑えてプロファイルする • 研究者が連絡できるように security.txt を追加する。

Anchor 固有: スペースには InitSpace derive を使用する • has_one 制約 • CPI 検証には Program<'info, T> を使用する • emit! イベント • 関連する制約をまとめる。

ネイティブ固有: 安全な反復には next_account_info を使用する • PDA bump をキャッシュする • 大きな構造体にはゼロコピーを使用する(CU を50%以上削減) • ログを最小限に抑える(pubkey のフォーマットにはコストがかかります) • 本番環境では solana-verify build を使用する。

サポートを受ける

コメント