Surfpool SDK запускает полноценную среду выполнения Surfnet внутри вашего
тестового процесса. Используйте его, когда вам нужен локальный RPC-эндпоинт,
совместимый с Solana, предварительно пополненный плательщик и прямое управление
состоянием без запуска 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/токенов, изменение аккаунтов, сброс состояния upstream, стриминг из мейннета
Путешествие во времени
Переход к абсолютному слоту, эпохе или Unix-временной метке
Программы
Автоматическое обнаружение рабочего пространства Anchor, явное развёртывание .so + IDL
События
Извлечение событий среды выполнения для утверждений и логирования
Справочник Rust
Полный API крейта surfpool-sdk
Справочник JS
Полный TypeScript API @solana/surfpool
Отличия от surfpool start
CLI запускает долгоживущий Surfnet, к которому вы подключаетесь из внешних процессов. SDK запускает Surfnet внутри вашего теста, что означает:
- Без управления внешними портами — каждый
Surfnet::start()привязывается к свободному порту, поэтому наборы тестов могут выполняться параллельно без флагов--port. - Синхронное завершение работы —
stop()возвращает управление только после того, как среда выполнения фактически освободила свои порты. - Читкоды как типизированные методы — тот же интерфейс, предоставляемый
через JSON-RPC посредством
surfpool start, доступен в виде нативных методов Rust и привязок napi-rs. - Прямое наблюдение за событиями — события среды выполнения передаются через внутрипроцессный канал (Rust) или метод drain (JS) без подписки на WebSocket.
Когда использовать SDK
Используйте SDK в следующих случаях:
- Вы пишете интеграционные тесты для программы Anchor и хотите проверять балансы токенов после серии настроек с использованием читкодов.
- Вам нужно, чтобы параллельные тестовые воркеры имели каждый собственную изолированную Surfnet.
- Вы хотите форкнуть конкретные аккаунты из mainnet (
remoteRpcUrl+streamAccount) внутри теста. - Вам нужны детерминированные часы — для этого переводите среду выполнения на фиксированный slot или временную метку перед проверкой логики вестинга, локапа или истечения срока.
Когда CLI подходит лучше
Используйте surfpool start, если вам нужна Surfnet, которая сохраняется
между несколькими процессами — например, когда CLI, браузерный кошелёк и
пользовательские клиентские скрипты должны совместно использовать один и тот
же экземпляр.
Is this page helpful?