Configuratie

Surfnet::start() (Rust) en Surfnet.start() (JS) starten een offline Surfnet op met blokverwerkingsmodus op basis van transacties en een betaler die vooraf is gevuld met 10 SOL. Als je iets anders nodig hebt — een mainnet-geforkte Surfnet, een langzamere klok, deterministische financiering, een specifiek keypair voor de betaler — gebruik dan de builder (Rust) of startWithConfig (JS).

Standaardwaarden

Als je start() aanroept zonder argumenten, krijg je:

InstellingWaarde
ModusOffline (geen upstream RPC)
BlokverwerkingTransactie (blokken vorderen bij elke tx)
slot-tijd1 ms
BetalerWillekeurig keypair gevuld met 10 SOL (10.000.000.000 lamports)
RPC URLhttp://127.0.0.1:<random>
WS URLws://127.0.0.1:<random>
Feature-configStandaard mainnet-functieset

Aangepaste configuratie

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
);
}

Builder-referentie

De Rust-builder en het JS-configuratieobject bieden dezelfde logische opties onder camelCase- / snake_case-naamgeving.

OptieRust-setterJS-veldTypeStandaard
Offline-modusoffline(bool)offline?: booleanbooltrue
Upstream RPCremote_rpc_url(impl Into<String>)remoteRpcUrl?: stringURL-stringgeen
Blokverwerkingblock_production_mode(BlockProductionMode)blockProductionMode?: stringenum / "manual" | "clock" | "transaction"Transaction
slot-tijdslot_time_ms(u64)slotTimeMs?: numbermilliseconden1
Airdrop-adressenairdrop_addresses(Vec<Pubkey>)airdropAddresses?: string[]lijst van pubkeysleeg
Airdrop-bedragairdrop_sol(u64)airdropSol?: numberlamports10_000_000_000
Blokhash overslaanskip_blockhash_check(bool)n/aboolfalse
Aangepaste betalerpayer(Keypair)payerSecretKey?: Uint8Array | number[]Keypair / bytesgegenereerd
Feature inschakelenenable_feature(Pubkey)enableFeatures?: string[]feature-ID('s)geen
Feature uitschakelendisable_feature(Pubkey)disableFeatures?: string[]feature-ID('s)geen
Alle featuresn/aallFeatures?: booleanboolfalse
Feature-configfeature_config(SvmFeatureConfig)n/avolledige configuratiestandaard mainnet

Remote RPC Fallback

Het instellen van remoteRpcUrl (of remote_rpc_url in Rust) schakelt de Surfnet uit de offlinemodus. Accounts die lokaal niet aanwezig zijn, worden op aanvraag opgehaald van de upstream RPC, wat de basis is voor mainnet-fork tests.

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

Gebruik een hoogwaardige upstream RPC

Gebruik een betaald eindpunt (Helius, Triton, QuickNode) voor tests die veel geforkte accounts aanspreken. De publieke mainnet-beta heeft strenge snelheidslimieten en zal instabiel worden bij parallelle testbelasting.

Blokproductiemodus

ModusWanneer blokken vorderen
Transaction (standaard)Na elke transactie. Het meest geschikt voor tests die direct na verzending controleren.
ClockOp een vast interval ingesteld door slot_time_ms. Het meest geschikt voor tests die afhankelijk zijn van meerdere slot die verstrijken zonder expliciete transacties.
ManualAlleen wanneer een SimnetCommand::AdvanceClock wordt verzonden. Het meest geschikt voor tijdgevoelige tests waarbij de test de klok aanstuurt.

Aangepaste betaler

Standaard is de betaler een nieuw gegenereerd keypair. Geef uw eigen keypair op wanneer tests een bekend adres vereisen, bijvoorbeeld om instructies vooraf op te bouwen die verwijzen naar de publieke sleutel van de betaler.

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());

Feature Gates

Schakel individuele SVM-feature gates in of uit via ID, of activeer alle bekende features met allFeatures: true (alleen JS — de Rust-builder accepteert feature_config voor de volledig set).

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

Blokhash-controle overslaan

skip_blockhash_check(true) (alleen Rust) schakelt blokhashvalidatie uit voor alle transacties. Handig voor tests die transacties ruim van tevoren ondertekenen of die zich niet bekommeren om vervaldatums.

Fouten

Een verkeerd geconfigureerde builder mislukt bij start(). De Rust SDK retourneert SurfnetError:

VariantWanneer
PortAllocation(String)Kon niet binden aan een vrije RPC- of WebSocket-poort.
Startup(String)De runtime kon niet worden geïnitialiseerd (ongeldige configuratie, ongeldige externe URL, enz.).
Runtime(String)De runtime is gecrasht tijdens het opstarten voordat deze gereed was.
Aborted(String)Het opstarten werd geannuleerd (bijv. afsluitingssignaal tijdens het opstarten).
Cheatcode(String)Een cheatcode-aanroep binnen de builder is mislukt.

De JS SDK gooit een Error waarvan het bericht dezelfde onderliggende variant omhult.

Is this page helpful?

Inhoudsopgave

Pagina Bewerken
© 2026 Solana Foundation. Alle rechten voorbehouden.