Surfpool SDKは、同一のRustランタイムをラップする2つのアーティファクトとして公開されています:
| 言語 | パッケージ | 実行環境 |
|---|---|---|
| Rust | surfpool-sdk(crates.io) | 任意の #[tokio::test] または非同期ランタイム内 |
| TypeScript / JavaScript | @solana/surfpool(npm) | napi-rsネイティブバインディング経由のNode.js 18以降 |
Rust
SDKは非同期ファーストで設計されており、Tokioランタイムを前提としています。クレートをdev-dependencyとして追加し、テスト用に
full フィーチャーを有効にした tokio を含めてください。
[dev-dependencies]surfpool-sdk = "1"tokio = { version = "1", features = ["full"] }
このクレートは最もよく使用されるSolanaの型を再エクスポートしているため、通常は
use surfpool_sdk::{...} を1つ記述するだけで十分です:
use surfpool_sdk::{Keypair, Pubkey, RpcClient, Signer, // re-exported Solana typesSurfnet, SurfnetBuilder, SurfnetError, // SDK entry pointsBlockProductionMode, SimnetEvent, // re-exported surfpool types};
再エクスポートされていない型が必要な場合は、基盤となるSolanaクレートに直接依存してください。SDKは
solana-program や solana-client の特定バージョンに固定されません。
TypeScript / JavaScript
お好みのパッケージマネージャーを使用して、dev-dependencyとしてインストールしてください:
npm install --save-dev @solana/surfpool# orpnpm add -D @solana/surfpool# oryarn add --dev @solana/surfpool
このパッケージは単一の Surfnet クラスとサポート型をエクスポートします:
import {Surfnet, // entry pointtype SurfnetConfig, // config for startWithConfigtype DeployOptions, // explicit program deploytype SetTokenAccountUpdate,type ResetAccountOptions,type StreamAccountOptions,type SimnetEventValue, // event drained from drainEvents()type KeypairInfo, // shape returned by Surfnet.newKeypair()type EpochInfoValue,type ClockValue} from "@solana/surfpool";
サポートプラットフォーム
JSパッケージは、 optionalDependencies
としてオプション依存関係に自動インストールされるプラットフォーム固有のネイティブモジュールに依存しています:
| プラットフォーム | ターゲットトリプル | npmパッケージ |
|---|---|---|
| macOS Apple Silicon | aarch64-apple-darwin | @solana/surfpool-darwin-arm64 |
| macOS Intel | x86_64-apple-darwin | @solana/surfpool-darwin-x64 |
| Linux x86-64 (glibc) | x86_64-unknown-linux-gnu | @solana/surfpool-linux-x64-gnu |
サポート対象外のプラットフォーム
対応するバイナリが存在しないプラットフォームにパッケージをインストールした場合、インストール自体は完了しますが、実行時に
Surfnet.start()
がエラーをスローします。追加のターゲットが必要な場合は、Issueを作成してください。
要件
- Node.js 18以降。
SDKは
Uint8Array、ネイティブのfetch、およびnode:testのassert/strictを使用します。 - 書き込み可能な一時ディレクトリ。 各Surfnetインスタンスはポートをアロケートし、OSの一時ディレクトリに一時データを書き込む場合があります。
インストールの確認
1行のスモークテストで、ランタイムが起動し、RPCエンドポイントがリクエストを受け付けることを確認できます。
use surfpool_sdk::{Signer, Surfnet};#[tokio::test]async fn surfpool_sdk_smoke() {let surfnet = Surfnet::start().await.expect("start surfnet");let balance = surfnet.rpc_client().get_balance(&surfnet.payer().pubkey()).expect("get balance");assert!(balance > 0);}
トラブルシューティング
`failed to bind to port` on Rust
別のプロセスが0.0.0.0を強引にバインドしています。テストを再実行してください。SDKは呼び出しのたびに新しいポートを選択します。問題が解決しない場合は、孤立したsurfpoolプロセスがないか確認してください。
`Cannot find module '@solana/surfpool-...'`
お使いのプラットフォーム用のoptionalDependenciesエントリがインストールされませんでした。--include=optionalを使用してインストールを再実行するか、お使いのプラットフォームが上記のサポート対象テーブルに含まれているか確認してください。
`stop()` hangs in JS
stop()をstart()ごとに1回呼び出していることを確認してください。Nodeラッパーはstop()が返るまで、RPCおよびWebSocketサーバーをバインドし続けます。
Is this page helpful?