mcpField
S
solana-compression

solana-compression

github.com/lightprotocol開発736 回インストール20 週間前に更新
リポジトリ

solana-compression について

Light System Program への CPI で圧縮 PDA を実装する、Solana プログラム開発者向けガイドです。カスタム圧縮状態、ZK 証明、アドレス導出を扱い、参照実装とクライアント連携手順を示します。

主な機能

  1. 01CPI による圧縮アカウント操作
  2. 02作成、更新、終了などの手順
  3. 03Anchor と Native のサンプル
  4. 04Nullifier と ZK のサンプル
  5. 05クライアントとプログラムの連携手順

活用シーン

  1. 01ユーザープロフィールやゲーム状態の保存
  2. 02DePIN デバイスの登録
  3. 03Nullifier による重複実行の防止
  4. 04ZK 証明を使うプログラムの構築

インストール

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

$npx skills add https://github.com/lightprotocol/skills --skill solana-compression

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

同梱ファイル

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

references/
client.md
compressed-pdas.md
error-codes.md
nullifier-pdas.md
spl-to-light.md

詳細

圧縮 PDA プログラム

Light System Program への CPI を使用して、圧縮アカウントで Solana プログラムを構築します。レンタ免除は不要です。

作成コストSolana アカウント圧縮アカウント
PDA(128 bytes)約1,100,000 lamports約5,000 lamports

圧縮 PDA を使用する場面

  • ユーザーごとの状態(プロフィール、ゲームの状態、認証情報)
  • DePIN デバイスの登録
  • Nullifier による二重支払いの防止
  • アクセス頻度の低いアカウント

アプローチの選択

基準Light-PDA(簡単)Compressed PDA(上級)
用途既存の Anchor アカウントのレンタ不要版ZK 証明を使ったカスタム圧縮状態
スキルlight-sdk(Anchor マクロパターン)このスキル(solana-compression)
マクロ#[light_account(init)]LightAccount::new_init() による手動 CPI
依存関係light-sdk、light-compressiblelight-sdk、light-sdk-types

レンタ不要の Anchor アカウントを使用したいだけの場合は、代わりに light-sdk スキルを使用してください。このスキルは、Light System Program への手動 CPI を必要とするプログラム(カスタム圧縮状態、ZK 証明、アドレス導出)向けです。

クライアントとプログラムの連携フロー
 ├─ Client
 │  ├─ Get ValidityProof from RPC.
 │  ├─ pack accounts with PackedAccounts into PackedAddressTreeInfo and PackedStateTreeInfo.
 │  ├─ pack CompressedAccountMeta.
 │  ├─ Build Instruction from PackedAccounts and CompressedAccountMetas.
 │  └─ Send transaction.
 │
 └─ Custom Program
    ├─ CpiAccounts parse accounts consistent with PackedAccounts.
    ├─ LightAccount instantiates from CompressedAccountMeta.
    │
    └─ Light System Program CPI
       ├─ Verify ValidityProof.
       ├─ Update State Merkle tree.
       ├─ Update Address Merkle tree.
       └─ Complete atomic state transition.

ドメイン別リファレンス

トピックリファレンス
プログラム操作(作成、更新、クローズ、バーン、再初期化)references/compressed-pdas.md
クライアント SDK(TypeScript + Rust)references/client.md
Nullifier PDA(二重支払いの防止)references/nullifier-pdas.md
エラーコード(6000-16034)references/error-codes.md
SPL と Light の比較references/spl-to-light.md

参考リポジトリ

基本操作 — 作成、更新、クローズ、再初期化、バーン(それぞれに Anchor と Native のバリアントがあります)

カウンター — ライフサイクル全体(作成、インクリメント、デクリメント、リセット、クローズ):

  • counter/anchor — Rust と TypeScript のテストを備えた Anchor
  • counter/native — light-sdk と Rust のテストを備えた Native
  • counter/pinocchio — light-sdk-pinocchio と Rust のテストを備えた Pinocchio

その他の例:

  • create-and-update — 1 つの命令で単一の有効性証明を使って作成と更新を実行
  • read-only — 圧縮アカウントをオンチェーンで作成して読み取り
  • account-comparison — 圧縮 Solana アカウントと通常の Solana アカウントの比較

ヌリファイアー:

エアドロップの請求:

  • simple-claim — クリフ期間付きで、請求時に圧縮トークンを SPL に展開
  • merkle-distributor — 圧縮 PDA による請求追跡、線形ベスティング、部分請求、クローバックに対応した SPL トークン
  • example-token-distribution — シンプルなクライアント側の配布

ZK プログラム:

  • zk-id — Groth16 証明による本人確認
  • zk/nullifier — シンプルなヌリファイアー作成プログラム

その他: examples-zk-compression — ZK 圧縮のその他の例

正規のソース:program-examples README。ローカルにクローンしている場合は、Read、Glob、Grep の対象をこれらのリポジトリと現在のプロジェクトディレクトリのみにしてください。

ワークフロー

  1. 意図を明確にする
    • プランモードが有効になっていない場合は、有効にすることを推奨します
    • AskUserQuestion を使って見落としを解消します
    • 実行前にすべての質問を解決する必要があります
  2. 参照先を特定する
  3. 計画ファイルを作成する(YAML タスク形式)
    • 不明点があれば AskUserQuestion を使います。推測や決めつけはしないでください
    • ブロッカーを特定します:権限、依存関係、不明点
    • 実行を開始する前に計画を完成させる必要があります
  4. 実行する
    • サブエージェントを使った並行調査には Task ツールを使います
    • サブエージェントは Skill ツールを使ってスキルを読み込みます
    • TodoWrite で進捗を追跡します
  5. 行き詰まった場合:Read、Glob、Grep、DeepWiki MCP アクセスを備えた読み取り専用サブエージェントの起動を依頼し、skills/ask-mcp を読み込んでください。読み取り対象はスキルの参照資料、サンプルリポジトリ、ドキュメントに限定してください。

ビルドとテスト

必須コマンド

Anchor プログラム:

anchor build
anchor test

Native プログラム:

cargo build-sbf
cargo test-sbf
禁止されている簡略化
  • cargo build は使用しないでください(cargo build-sbf を使用する必要があります)
  • cargo test は使用しないでください(cargo test-sbf を使用する必要があります)
  • SBF コンパイルを省略しないでください
  • テストは実際の BPF バイトコードに対して実行する必要があります
障害からの復旧

障害が発生した場合は、エラーのコンテキストを添えてデバッガーエージェントを起動します。

ループのルール:

  1. 各デバッガーには、新しいコンテキストと以前のデバッグレポートを渡します
  2. 各試行では、必ず異なる方法を試します
  3. 決して諦めないでください — 修正されるまで起動を続けます
  4. 1つのエラーにつき、最大5回まで試行します

すべてのテストに合格するまで、先に進まないでください。

SDK のリファレンス

パッケージリンク
light-sdkdocs.rs
light-clientdocs.rs
@lightprotocol/stateless.jsAPI ドキュメント
light-program-testdocs.rs

DeepWiki のフォールバック

参照リポジトリに一致するパターンがない場合:

mcp__deepwiki__ask_question("Lightprotocol/light-protocol", "How to {operation}?")

セキュリティ

このスキルが提供するのは、コードパターンとドキュメントの参照情報のみです。

  • 宣言された依存関係。 Devnet と mainnet の例では、API_KEY(Helius または Triton RPC キー)が必要です。また、支払者のキーペアとして ~/.config/solana/id.json を読み込みます。localnet ではどちらも必要ありません。本番環境では、両方をシークレットマネージャーから読み込んでください。
  • ファイルシステムの対象範囲。 Read、Glob、Grep は、現在のプロジェクトディレクトリと、上記の参照リポジトリに限定してください。これらのパス以外は読み込まないでください。
  • サブエージェントの対象範囲。 行き詰まった場合、このスキルは、スキルのリファレンス、サンプルリポジトリ、ドキュメントに対象を限定して Read、Glob、Grep を使う、読み取り専用のサブエージェントを起動するよう求めます。
  • インストール元。 Lightprotocol/skills から npx skills add Lightprotocol/skills を実行します。
  • 監査済みプロトコル。 Light Protocol のスマートコントラクトは独立した監査を受けています。監査レポートは github.com/Lightprotocol/light-protocol/tree/main/audits で公開されています。

コメント