Le SDK Surfpool est publié sous la forme de deux artefacts qui encapsulent le même runtime Rust :
| Langage | Package | Environnement d'exécution |
|---|---|---|
| Rust | surfpool-sdk sur crates.io | Dans tout runtime #[tokio::test] ou asynchrone |
| TypeScript / JavaScript | @solana/surfpool sur npm | Node.js 18+ via les liaisons natives napi-rs |
Rust
Ajoutez la crate en tant que dépendance de développement. Le SDK est async-first
et nécessite un runtime Tokio ; incluez donc tokio avec la fonctionnalité
full pour les tests.
[dev-dependencies]surfpool-sdk = "1"tokio = { version = "1", features = ["full"] }
La crate réexporte les types Solana dont vous avez le plus souvent besoin, de
sorte qu'un simple use surfpool_sdk::{...} est généralement suffisant :
use surfpool_sdk::{Keypair, Pubkey, RpcClient, Signer, // re-exported Solana typesSurfnet, SurfnetBuilder, SurfnetError, // SDK entry pointsBlockProductionMode, SimnetEvent, // re-exported surfpool types};
Si vous avez besoin d'un type qui n'est pas réexporté, dépendez directement de
la crate Solana sous-jacente — le SDK ne vous contraint à aucune version
spécifique de solana-program ni de solana-client.
TypeScript / JavaScript
Installez en tant que dépendance de développement avec le gestionnaire de packages de votre choix :
npm install --save-dev @solana/surfpool# orpnpm add -D @solana/surfpool# oryarn add --dev @solana/surfpool
Le package exporte une unique classe Surfnet ainsi que les types associés :
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";
Plateformes prises en charge
Le package JS dépend de modules natifs spécifiques à la plateforme, installés
automatiquement en tant que optionalDependencies :
| Plateforme | Triple cible | Package 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 |
Plateforme non prise en charge
Si le package est installé sur une plateforme sans binaire correspondant,
l'installation se termine mais Surfnet.start() lèvera une erreur à
l'exécution. Ouvrez une issue si vous avez besoin d'une cible supplémentaire.
Prérequis
- Node.js 18 ou version ultérieure. Le SDK utilise
Uint8Array,fetchnatif, etassert/strictdenode:test. - Un répertoire temporaire accessible en écriture. Chaque instance Surfnet alloue des ports et peut écrire des données transitoires dans le répertoire temporaire du système d'exploitation.
Vérification de l'installation
Un test rapide en une ligne confirme que le runtime démarre et que le point de terminaison RPC accepte les requêtes.
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);}
Résolution des problèmes
`failed to bind to port` on Rust
Un autre processus lie 0.0.0.0 de manière agressive. Relancez le test — le
SDK choisit un nouveau port à chaque appel. Si l'échec persiste, recherchez
des processus surfpool orphelins.
`Cannot find module '@solana/surfpool-...'`
L'entrée optionalDependencies pour votre plateforme n'a pas été installée.
Relancez l'installation avec --include=optional, ou vérifiez que votre
plateforme figure dans le tableau des plateformes prises en charge ci-dessus.
`stop()` hangs in JS
Confirmez que vous appelez stop() une fois par start(). Le wrapper Node
maintient les serveurs RPC et WebSocket liés jusqu'au retour de stop().
Is this page helpful?