Konfiguracja

Surfnet::start() (Rust) i Surfnet.start() (JS) uruchamiają offline'owy Surfnet w trybie produkcji bloków opartym na transakcjach z płatnikiem zasilanym 10 SOL. Gdy potrzebujesz czegoś więcej — Surfnetu sforkowanego z mainnetu, wolniejszego zegara, deterministycznego finansowania lub konkretnego keypair płatnika — skorzystaj z buildera (Rust) lub startWithConfig (JS).

Wartości domyślne

Jeśli wywołasz start() bez argumentów, otrzymasz:

UstawienieWartość
TrybOffline (brak upstream RPC)
Produkcja blokówTransakcyjna (bloki postępują przy każdej tx)
Czas slotu1 ms
PłatnikLosowy keypair zasilony 10 SOL (10 000 000 000 lamportów)
URL RPChttp://127.0.0.1:<random>
URL WSws://127.0.0.1:<random>
Konfiguracja funkcjiDomyślny zestaw funkcji mainnetu

Niestandardowa konfiguracja

use surfpool_sdk::{BlockProductionMode, Pubkey, Surfnet};
#[tokio::test]
async fn starts_with_custom_configuration() {
let alice = Pubkey::new_unique();
let surfnet = Surfnet::builder()
.remote_rpc_url("https://api.mainnet-beta.solana.com")
.block_production_mode(BlockProductionMode::Transaction)
.slot_time_ms(10)
.airdrop_addresses(vec![alice])
.airdrop_sol(5_000_000_000)
.skip_blockhash_check(true)
.start()
.await
.unwrap();
assert_eq!(
surfnet.rpc_client().get_balance(&alice).unwrap(),
5_000_000_000
);
}

Dokumentacja buildera

Builder Rust i obiekt konfiguracyjny JS udostępniają te same logiczne opcje pod nazwami camelCase / snake_case.

OpcjaSetter RustPole JSTypDomyślnie
Tryb offlineoffline(bool)offline?: booleanbooltrue
Upstream RPCremote_rpc_url(impl Into<String>)remoteRpcUrl?: stringCiąg URLbrak
Produkcja blokówblock_production_mode(BlockProductionMode)blockProductionMode?: stringenum / "manual" | "clock" | "transaction"Transaction
Czas slotuslot_time_ms(u64)slotTimeMs?: numbermilisekundy1
Adresy airdropairdrop_addresses(Vec<Pubkey>)airdropAddresses?: string[]lista pubkeyówpusta
Kwota airdropairdrop_sol(u64)airdropSol?: numberlamporty10_000_000_000
Pomiń blockhashskip_blockhash_check(bool)n/aboolfalse
Niestandardowy płatnikpayer(Keypair)payerSecretKey?: Uint8Array | number[]Keypair / bajtygenerowany
Włącz funkcjęenable_feature(Pubkey)enableFeatures?: string[]ID funkcjibrak
Wyłącz funkcjędisable_feature(Pubkey)disableFeatures?: string[]ID funkcjibrak
Wszystkie funkcjen/aallFeatures?: booleanboolfalse
Konfiguracja funkcjifeature_config(SvmFeatureConfig)n/apełna konfiguracjadomyślny mainnet

Zdalne Zapasowe RPC

Ustawienie remoteRpcUrl (lub remote_rpc_url w Rust) wyłącza tryb offline Surfnet. Konta nieobecne lokalnie są pobierane na żądanie z nadrzędnego RPC — w ten sposób działają testy mainnet-fork.

let surfnet = Surfnet::builder()
.remote_rpc_url("https://api.mainnet-beta.solana.com")
.start()
.await?;

Używaj wysokiej jakości nadrzędnego RPC

Korzystaj z płatnego endpointu (Helius, Triton, QuickNode) w testach korzystających z wielu forked kont. Publiczne mainnet-beta jest mocno ograniczone limitami zapytań i będzie zawodzić przy równoległych obciążeniach testowych.

Tryb Produkcji Bloków

TrybKiedy bloki się przesuwają
Transaction (domyślny)Po każdej transakcji. Najlepszy do testów, które wysyłają żądanie i natychmiast sprawdzają wynik.
ClockW stałym interwale określonym przez slot_time_ms. Najlepszy do testów zależnych od upływu wielu slot bez jawnych transakcji.
ManualTylko po wysłaniu SimnetCommand::AdvanceClock. Najlepszy do testów wrażliwych na czas, gdzie test steruje zegarem.

Niestandardowy Płatnik

Domyślnie płatnikiem jest świeżo wygenerowany keypair. Podaj własny, gdy testy wymagają znanego adresu — na przykład aby z góry zbudować instrukcje odwołujące się do klucza publicznego płatnika.

use surfpool_sdk::{Keypair, Signer, Surfnet};
let payer = Keypair::new();
let surfnet = Surfnet::builder().payer(payer.insecure_clone()).start().await?;
assert_eq!(surfnet.payer().pubkey(), payer.pubkey());

Bramki Funkcji

Włączaj lub wyłączaj poszczególne bramki funkcji SVM według ID lub aktywuj wszystkie znane funkcje za pomocą allFeatures: true (tylko JS — builder Rust przyjmuje feature_config dla pełnego zestawu).

use surfpool_sdk::{Pubkey, Surfnet};
let feature_id: Pubkey = "9bn2vTJUsUcnpiZWbu2woSKtTGW3ErZC9ERv88SDqQjK"
.parse()
.unwrap();
let surfnet = Surfnet::builder()
.enable_feature(feature_id)
.start()
.await?;

Pomijanie Weryfikacji Blockhash

skip_blockhash_check(true) (tylko Rust) wyłącza walidację blockhash dla wszystkich transakcji. Przydatne w testach, które podpisują transakcje z dużym wyprzedzeniem przed wysłaniem lub nie dbają o ich wygaśnięcie.

Błędy

Nieprawidłowo skonfigurowany builder kończy się niepowodzeniem przy start(). Rust SDK zwraca SurfnetError:

WariantKiedy
PortAllocation(String)Nie można było przypisać wolnego portu RPC lub WebSocket.
Startup(String)Inicjalizacja środowiska uruchomieniowego nie powiodła się (błędna konfiguracja, nieprawidłowy zdalny URL itp.).
Runtime(String)Środowisko uruchomieniowe uległo awarii podczas uruchamiania, zanim stało się gotowe.
Aborted(String)Uruchamianie zostało anulowane (np. sygnał zamknięcia podczas rozruchu).
Cheatcode(String)Wywołanie cheatcode wewnątrz buildera nie powiodło się.

JS SDK zgłasza Error, którego komunikat opakowuje ten sam wariant bazowy.

Is this page helpful?

Spis treści

Edytuj stronę