Surfpool
SDKは、テストプロセス内でフルSurfnetランタイムを起動します。ローカルのSolana互換RPCエンドポイント、事前に資金が付与されたペイヤー、そしてsurfpool startを別プロセスとして起動せずに直接状態を操作したい場合に使用します。
Rustクレートのsurfpool-sdkとJSバインディングの@solana/surfpoolは、同一のランタイムをラップしています。JSパッケージは、napi-rsを通じてmacOS(Intel +
Apple Silicon)およびLinux
x86-64向けにビルド済みのネイティブバイナリを提供します。
クイックスタート
SDKをインストールし、Surfnetを起動してRPCエンドポイントにアクセスした後、停止します。ポートは動的に割り当てられるため、並列テストは同一プロセスを安全に共有できます。
use surfpool_sdk::{Signer, Surfnet};#[tokio::test]async fn starts_a_local_surfnet() {let surfnet = Surfnet::start().await.unwrap();let rpc = surfnet.rpc_client();let balance = rpc.get_balance(&surfnet.payer().pubkey()).unwrap();assert!(balance > 0);println!("rpc: {}", surfnet.rpc_url());println!("ws: {}", surfnet.ws_url());}
同梱内容
インストール
Cargoおよびnpmのセットアップ、対応プラットフォーム、ネイティブバイナリ
設定
ビルダーオプション:リモートRPCフォールバック、ブロック生成、スロットタイミング、フィーチャーゲート、カスタムペイヤー
チートコード
SOL/トークンの資金追加、アカウントの変更、アップストリーム状態のリセット、メインネットからのストリーミング
タイムトラベル
絶対スロット、エポック、またはUnixタイムスタンプへのジャンプ
プログラム
Anchorワークスペースの自動検出、明示的な.so + IDLのデプロイ
イベント
アサーションおよびロギング用のランタイムイベントの取り出し
Rustリファレンス
surfpool-sdk クレートの完全なAPI
JSリファレンス
@solana/surfpool TypeScript APIの完全リファレンス
surfpool startとの違い
CLIは外部プロセスから接続する長期稼働のSurfnetを実行します。SDKはSurfnetをテスト内部で実行します。つまり:
- 外部ポート管理が不要 — すべての
Surfnet::start()は空きポートにバインドされるため、--portフラグなしでテストスイートを並列実行できます。 - 同期的なteardown —
stop()は、ランタイムが実際にポートを解放した時点で返ります。 - 型付きメソッドとしてのCheatcode —
surfpool startによってJSON-RPC上に公開されているのと同じインターフェースが、ネイティブRustメソッドおよびnapi-rsバインディングとして利用できます。 - 直接的なイベント観測 — ランタイムイベントは、WebSocketサブスクリプションを使わずに、インプロセスチャネル(Rust)またはdrainメソッド(JS)を通じて公開されます。
SDKを使うべきタイミング
以下の場合にSDKの使用を検討してください:
- Anchor プログラムのインテグレーションテストを記述しており、一連のCheatcode設定後にトークン残高をアサートしたい場合。
- 並列テストワーカーそれぞれに独立したSurfnetを持たせたい場合。
- テスト内で
remoteRpcUrl+streamAccountを使ってメインネットの特定アカウントをフォークしたい場合。 - ベスティング、ロックアップ、または有効期限ロジックを検証する前に、ランタイムを固定の slot またはタイムスタンプに移動させることで決定論的なクロックを実現したい場合。
CLIの方が適しているケース
複数のプロセスをまたいで存続するSurfnetが必要な場合、たとえばCLI、ブラウザウォレット、およびカスタムクライアントスクリプトがすべて同じインスタンスを共有する必要がある場合は、代わりに
surfpool start を使用してください。
Is this page helpful?