Konfigurointi

Surfnet::start() (Rust) ja Surfnet.start() (JS) käynnistävät offline-Surfnetin transaktiotilan lohkontuotannolla ja maksajalla, jolle on ennalta ladattu 10 SOL. Kun tarvitset jotain muuta — mainnet-forkatun Surfnetin, hitaamman kellon, deterministisen rahoituksen tai tietyn maksajan keypair — käytä builderia (Rust) tai startWithConfig (JS).

Oletusasetukset

Jos kutsut start() ilman argumentteja, saat:

AsetusArvo
TilaOffline (ei ylävirran RPC:tä)
LohkontuotantoTransaktio (lohkot etenevät jokaisen tx:n myötä)
Slot-aika1 ms
MaksajaSatunnainen keypair ladattuna 10 SOL:lla (10 000 000 000 lamportia)
RPC URLhttp://127.0.0.1:<random>
WS URLws://127.0.0.1:<random>
OminaisuusasetusMainnetin oletusoMinaisuusjoukko

Mukautettu konfigurointi

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-viite

Rust-builder ja JS-konfiguraatio-objekti tarjoavat samat loogiset asetukset camelCase / snake_case -nimeämisellä.

AsetusRust-asettajaJS-kenttäTyyppiOletus
Offline-tilaoffline(bool)offline?: booleanbooltrue
Ylävirran RPCremote_rpc_url(impl Into<String>)remoteRpcUrl?: stringURL-merkkijonoei mitään
Lohkontuotantoblock_production_mode(BlockProductionMode)blockProductionMode?: stringenum / "manual" | "clock" | "transaction"Transaction
Slot-aikaslot_time_ms(u64)slotTimeMs?: numbermillisekuntia1
Airdrop-osoitteetairdrop_addresses(Vec<Pubkey>)airdropAddresses?: string[]lista pubkey-avaimistatyhjä
Airdrop-määräairdrop_sol(u64)airdropSol?: numberlamportia10_000_000_000
Ohita lohkohashskip_blockhash_check(bool)n/aboolfalse
Mukautettu maksajapayer(Keypair)payerSecretKey?: Uint8Array | number[]Keypair / tavutgeneroitu
Ota ominaisuus käyttöönenable_feature(Pubkey)enableFeatures?: string[]ominaisuus-ID(t)ei mitään
Poista ominaisuus käytöstädisable_feature(Pubkey)disableFeatures?: string[]ominaisuus-ID(t)ei mitään
Kaikki ominaisuudetn/aallFeatures?: booleanboolfalse
Ominaisuusasetusfeature_config(SvmFeatureConfig)n/atäysi konfiguraatiomainnet-oletus

Etä-RPC-varareitti

remoteRpcUrl (tai remote_rpc_url Rustissa) kytkee Surfnetin pois offline-tilasta. Paikallisesti puuttuvat tilit haetaan tarvittaessa ylävirran RPC:stä, joka on mainnet-fork-testien toimintaperiaate.

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

Käytä laadukasta ylävirran RPC:tä

Käytä maksullista päätepistettä (Helius, Triton, QuickNode) testeissä, jotka käyttävät useita haarautettuja tilejä. Julkinen mainnet-beta on voimakkaasti nopeusrajoitettu ja epäluotettava rinnakkaisten testikuormien alla.

Lohkontuotantotila

TilaMilloin lohkot etenevät
Transaction (oletus)Jokaisen transaktion jälkeen. Parhaiten sopii testeille, jotka lähettävät ja tarkistavat välittömästi.
ClockKiinteällä välillä, jonka määrittää slot_time_ms. Parhaiten sopii testeille, jotka edellyttävät useiden slot-jaksojen kulumista ilman eksplisiittisiä transaktioita.
ManualVain kun SimnetCommand::AdvanceClock lähetetään. Parhaiten sopii aikaherkille testeille, joissa testi ohjaa kelloa.

Mukautettu maksaja

Oletuksena maksaja on juuri luotu keypair. Anna oma keypair silloin, kun testeissä tarvitaan tunnettu osoite – esimerkiksi rakennettaessa etukäteen ohjeita, jotka viittaavat maksajan pubkey-avaimeen.

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

Ominaisuusportit

Vaihda yksittäisiä SVM-ominaisuusportteja ID:n perusteella tai aktivoi kaikki tunnetut ominaisuudet allFeatures: true:lla (vain JS — Rust-rakentaja hyväksyy feature_config täyttä joukkoa varten).

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

Ohita lohkotiivisteen tarkistus

skip_blockhash_check(true) (vain Rust) poistaa lohkotiivisteen validoinnin käytöstä kaikissa transaktioissa. Hyödyllinen testeissä, jotka allekirjoittavat transaktiot kauan ennen lähettämistä tai joissa vanhenemisella ei ole merkitystä.

Virheet

Väärin määritelty builder epäonnistuu kohdassa start(). Rust SDK palauttaa SurfnetError:

VarianttiMilloin
PortAllocation(String)Ei voitu sitoutua vapaaseen RPC- tai WebSocket-porttiin.
Startup(String)Ajonaikaisen ympäristön alustus epäonnistui (virheellinen määritys, virheellinen etä-URL jne.).
Runtime(String)Ajonaikainen ympäristö kaatui käynnistyksen aikana ennen kuin se oli valmis.
Aborted(String)Käynnistys peruutettiin (esim. sammutussignaali käynnistyksen aikana).
Cheatcode(String)Builderin sisäinen cheatcode-kutsu epäonnistui.

JS SDK heittää Error -poikkeuksen, jonka viesti sisältää saman taustalla olevan variantin.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua
© 2026 Solana Foundation. Kaikki oikeudet pidätetään.