Surfpool SDK публікується як два артефакти, що обгортають однаковий Rust-рантайм:
| Мова | Пакет | Де виконується |
|---|---|---|
| Rust | surfpool-sdk на crates.io | Всередині будь-якого #[tokio::test] або асинхронного рантайму |
| TypeScript / JavaScript | @solana/surfpool на npm | Node.js 18+ через нативні прив'язки napi-rs |
Rust
Додайте крейт як dev-залежність. SDK є async-first і потребує рантайму Tokio,
тому для тестів додайте tokio з функцією full.
[dev-dependencies]surfpool-sdk = "1"tokio = { version = "1", features = ["full"] }
Крейт повторно експортує типи Solana, які потрібні найчастіше, тому зазвичай
достатньо одного use surfpool_sdk::{...}:
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-залежність за допомогою вашого менеджера пакетів:
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таassert/strictзnode:test. - Доступна для запису тимчасова директорія. Кожен екземпляр Surfnet виділяє порти та може записувати тимчасові дані до системної тимчасової директорії.
Перевірка встановлення
Простий однорядковий тест підтверджує, що середовище виконання запускається та 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().
Node-обгортка утримує RPC та WebSocket-сервери активними до повернення
stop().
Is this page helpful?