Solana 文档SDK
Surfpool
SDK 在您的测试进程内启动完整的 Surfnet 运行时。当您需要本地 Solana 兼容 RPC 端点、预充值付款方以及直接状态操作,而无需将
surfpool start 作为独立进程启动时,请使用它。
Rust
crate(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 回退、区块生产、slot 时序、功能开关、自定义付款方
作弊码
充值 SOL/代币、修改账户、重置上游状态、从主网流式同步
时间旅行
跳转到指定的绝对 slot、epoch 或 Unix 时间戳
程序
Anchor 工作区自动发现、显式 .so + IDL 部署
事件
提取运行时事件以用于断言和日志记录
Rust 参考文档
完整的 surfpool-sdk crate API
JS 参考文档
完整的 @solana/surfpool TypeScript API
与 surfpool start 的区别
CLI 运行一个长期存在的 Surfnet,供外部进程连接。而 SDK 则在您的测试内部运行 Surfnet,这意味着:
- 无需外部端口管理 — 每个
Surfnet::start()都会绑定到一个空闲端口,因此测试套件可以并行运行,无需使用--port标志。 - 同步销毁 —
stop()在运行时实际释放其端口后才会返回。 - 作为类型化方法的作弊码 —
surfpool start通过 JSON-RPC 暴露的相同接口,以原生 Rust 方法和 napi-rs 绑定的形式提供。 - 直接事件观察 — 运行时事件通过进程内通道(Rust)或 drain 方法(JS)暴露,无需 WebSocket 订阅。
何时使用 SDK
在以下情况下使用 SDK:
- 您正在为 Anchor 程序编写集成测试,并希望在一系列作弊码设置后断言代币余额。
- 您需要并行测试工作线程,每个都拥有独立的 Surfnet。
- 您希望在测试中主网分叉特定账户(
remoteRpcUrl+streamAccount)。 - 您需要确定性时钟,通过在执行归属、锁定或到期逻辑之前,将运行时跳转到固定 slot 或时间戳。
何时 CLI 更适合
当您希望 Surfnet 在多个进程之间保持运行时,请改用 surfpool start — 例如,当
CLI、浏览器钱包和自定义客户端脚本都需要共享同一实例时。
Is this page helpful?