SPL Vault(PDAベースのシンプルなトークン保管コントラクト)

Other

概要

PDA(Program-Derived Account)を用いて SPL トークンを安全に保管するシンプルな Solana プログラムです。主な機能は vault の初期化、トークンの入金(deposit)、および引き出し(withdraw)の3つで、Anchor フレームワークを用いた実装と TypeScript ベースのテストが含まれています。Vault のトークンアカウントはプログラム側の PDA をオーナーとして設定し、コントラクトがトークン移転を制御します。学習用途やプロトタイプ作成に適した最小構成のサンプルで、ローカルの solana-test-validator を使った動作確認手順が README に記載されています。

GitHub

リポジトリの統計情報

  • スター数: 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 トークン保管の入門リポジトリです。

リポジトリ情報:

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 …