Установка

Surfpool SDK публикуется в виде двух артефактов, оборачивающих одну и ту же среду выполнения Rust:

ЯзыкПакетГде выполняется
Rustsurfpool-sdk на crates.ioВнутри любой среды выполнения #[tokio::test] или async
TypeScript / JavaScript@solana/surfpool на npmNode.js 18+ через нативные привязки napi-rs

Rust

Добавьте крейт как dev-зависимость. SDK ориентирован на async и требует среды выполнения Tokio, поэтому включите tokio с функцией full для тестов.

Cargo.toml
[dev-dependencies]
surfpool-sdk = "1"
tokio = { version = "1", features = ["full"] }

Крейт реэкспортирует наиболее часто используемые типы Solana, поэтому обычно достаточно одного use surfpool_sdk::{...}:

use surfpool_sdk::{
Keypair, Pubkey, RpcClient, Signer, // re-exported Solana types
Surfnet, SurfnetBuilder, SurfnetError, // SDK entry points
BlockProductionMode, SimnetEvent, // re-exported surfpool types
};

Если вам нужен тип, который не реэкспортируется, подключите соответствующий крейт Solana напрямую — SDK не привязывает вас к какой-либо конкретной версии solana-program или solana-client.

TypeScript / JavaScript

Установите как dev-зависимость с помощью предпочитаемого менеджера пакетов:

npm install --save-dev @solana/surfpool
# or
pnpm add -D @solana/surfpool
# or
yarn add --dev @solana/surfpool

Пакет экспортирует один класс Surfnet и вспомогательные типы:

import {
Surfnet, // entry point
type SurfnetConfig, // config for startWithConfig
type DeployOptions, // explicit program deploy
type 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 Siliconaarch64-apple-darwin@solana/surfpool-darwin-arm64
macOS Intelx86_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?

Содержание

Редактировать страницу