SPL Vault(PDAベースのシンプルなトークン保管コントラクト)
概要
PDA(Program-Derived Account)を用いて SPL トークンを安全に保管するシンプルな Solana プログラムです。主な機能は vault の初期化、トークンの入金(deposit)、および引き出し(withdraw)の3つで、Anchor フレームワークを用いた実装と TypeScript ベースのテストが含まれています。Vault のトークンアカウントはプログラム側の PDA をオーナーとして設定し、コントラクトがトークン移転を制御します。学習用途やプロトタイプ作成に適した最小構成のサンプルで、ローカルの solana-test-validator を使った動作確認手順が README に記載されています。
リポジトリの統計情報
- スター数: 1
- フォーク数: 0
- ウォッチャー数: 1
- コミット数: 2
- ファイル数: 14
- メインの言語: TypeScript
主な特徴
- PDA をオーナーとする vault トークンアカウントを管理して、プログラムがトークン移転を制御
- Initialize / Deposit / Withdraw の基本操作を Anchor で実装
- TypeScript によるテストスクリプトと solana-test-validator を使ったローカル検証
- プログラム ID が明記されており、デプロイ済みの参照が可能(A2qB…gi35k)
技術的なポイント
このプロジェクトの技術的要点は「PDA と SPL Token の組合せによる資産管理」にあります。Solana では通常のアカウントの代わりに PDA を用いることで、プログラム固有の安全な所有権を持たせられます。本リポジトリでは vault 用のトークンアカウントを作成するとき、トークンプログラム(spl-token)への CPI(Cross-Program Invocation)や、Anchor のアカウント制約を利用して PDA をオーナーに設定します。これにより、ユーザーは自分のトークンアカウントから vault へ転送(Deposit)し、逆に Vault の資金をプログラムの許可ロジックに従って引き出す(Withdraw)ことができます。
実装面では Anchor.toml / Cargo.toml による Anchor + Rust のプログラムと、TypeScript テストクライアントが混在している構成です。tests 側は Anchor の mocha ベースのテストセットアップで、solana-test-validator を用いてオンチェーン相当の振る舞いをローカルで確認可能です。注意点として、Solana のトランザクションはステートレスな計算モデルに近いため、中央集権的なロジックや競合状態への備え(例:同一アカウントへの並列トランザクション)は考慮が必要です。また、PDA に設定したトークンアカウントの権限やシードの設計次第でセキュリティが大きく左右されるため、オフチェーン署名やアクセス制御、適切なエラーハンドリングを強化するのが実運用での必須事項です。さらに、本リポジトリは学習用に簡潔化されているため、実運用時は監査・ガス最適化・イベントログの追加など拡張が必要です。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitignore: file
- .prettierignore: file
- Anchor.toml: file
- Cargo.lock: file
- Cargo.toml: file
- README.md: file(プロジェクト概要とクイックスタート)
- programs/: directory(Rust の Anchor プログラム本体)
- programs/src/lib.rs: file(Vault ロジック)
- tests/: directory(TypeScript テスト)
- tests/spl_vault.ts: file(initialize/deposit/withdraw のテスト)
- tsconfig.json: file
- package.json: file
- yarn.lock or pnpm-lock.yaml: file(依存管理ファイル)
…他 9 ファイル
まとめ
学習・プロトタイプ用途に最適な、PDA を使った SPL トークン保管の入門リポジトリです。
リポジトリ情報:
- 名前: Spl-Vault
- 説明: A simple vault smart contract where you can deposit and withdraw tokens.
- スター数: 1
- 言語: TypeScript
- URL: https://github.com/0xVector0/Spl-Vault
- オーナー: 0xVector0
- アバター: https://avatars.githubusercontent.com/u/244161141?v=4
READMEの抜粋:
PDA Vault
A Solana program that uses a Program-Derived Account (PDA) to hold and manage SPL tokens.
What it does
- Initialize: Create a vault token account
- Deposit: Transfer tokens into the vault
- Withdraw: Transfer tokens out of the vault
Quick Start
# Start validator
solana-test-validator
# Run tests
anchor test --skip-local-validator
Program ID
A2qBxbgjy8X9GsGbtdCCkYd1nHXV8q2rx6ygit2gi35k
Instructions
initialize_vault
Creates a …