Surfpool SDK публикуется в виде двух артефактов, оборачивающих одну и ту же среду выполнения Rust:
| Язык | Пакет | Где выполняется |
|---|---|---|
| Rust | surfpool-sdk на crates.io | Внутри любой среды выполнения #[tokio::test] или async |
| TypeScript / JavaScript | @solana/surfpool на npm | Node.js 18+ через нативные привязки napi-rs |
Rust
Добавьте крейт как dev-зависимость. SDK ориентирован на async и требует среды
выполнения 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?