O SDK Surfpool é publicado como dois artefatos que encapsulam o mesmo runtime Rust:
| Linguagem | Pacote | Onde é executado |
|---|---|---|
| Rust | surfpool-sdk no crates.io | Dentro de qualquer #[tokio::test] ou runtime assíncrono |
| TypeScript / JavaScript | @solana/surfpool no npm | Node.js 18+ via bindings nativos napi-rs |
Rust
Adicione o crate como dev-dependency. O SDK é assíncrono por padrão e requer um
runtime Tokio, portanto inclua tokio com a feature full para testes.
[dev-dependencies]surfpool-sdk = "1"tokio = { version = "1", features = ["full"] }
O crate reexporta os tipos Solana mais utilizados, portanto um único
use surfpool_sdk::{...} geralmente é suficiente:
use surfpool_sdk::{Keypair, Pubkey, RpcClient, Signer, // re-exported Solana typesSurfnet, SurfnetBuilder, SurfnetError, // SDK entry pointsBlockProductionMode, SimnetEvent, // re-exported surfpool types};
Se precisar de um tipo que não é reexportado, dependa diretamente do crate
Solana subjacente — o SDK não o vincula a nenhuma versão específica de
solana-program ou solana-client.
TypeScript / JavaScript
Instale como dev-dependency com o gerenciador de pacotes de sua preferência:
npm install --save-dev @solana/surfpool# orpnpm add -D @solana/surfpool# oryarn add --dev @solana/surfpool
O pacote exporta uma única classe Surfnet mais tipos de suporte:
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";
Plataformas Suportadas
O pacote JS depende de módulos nativos específicos de plataforma que são
instalados automaticamente como optionalDependencies:
| Plataforma | Target triple | Pacote 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 |
Plataforma não suportada
Se o pacote for instalado em uma plataforma sem um binário compatível, a
instalação é concluída, mas Surfnet.start() lançará um erro em tempo de
execução. Abra uma issue se precisar de um target adicional.
Requisitos
- Node.js 18 ou mais recente. O SDK utiliza
Uint8Array,fetchnativo eassert/strictdonode:test. - Um diretório temporário com permissão de escrita. Cada instância do Surfnet aloca portas e pode gravar dados transitórios no diretório temporário do sistema operacional.
Verificando a Instalação
Um teste rápido de uma linha confirma que o runtime inicia e que o endpoint RPC aceita requisições.
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);}
Solução de Problemas
`failed to bind to port` on Rust
Outro processo está vinculando 0.0.0.0 de forma agressiva. Execute o teste
novamente — o SDK seleciona uma nova porta a cada chamada. Se a falha
persistir, verifique se há processos surfpool órfãos.
`Cannot find module '@solana/surfpool-...'`
A entrada optionalDependencies para sua plataforma não foi instalada.
Execute novamente a instalação com --include=optional, ou verifique se sua
plataforma consta na tabela de plataformas suportadas acima.
`stop()` hangs in JS
Confirme que você está chamando stop() uma vez por start(). O wrapper Node
mantém os servidores RPC e WebSocket vinculados até que stop() retorne.
Is this page helpful?