Yapılandırma

Surfnet::start() (Rust) ve Surfnet.start() (JS), işlem modunda blok üretimiyle ve 10 SOL ile önceden fonlanmış bir ödeyiciyle çevrimdışı bir Surfnet başlatır. Başka bir şeye ihtiyaç duyduğunuzda — mainnet'ten fork edilmiş bir Surfnet, daha yavaş bir saat, deterministik fonlama, belirli bir ödeyici keypair — Rust için builder'a ya da startWithConfig (JS) seçeneğine başvurun.

Varsayılanlar

start()'i hiçbir argüman olmadan çağırırsanız şunları elde edersiniz:

AyarDeğer
ModÇevrimdışı (yukarı akış RPC yok)
Blok üretimiİşlem (bloklar her tx'te ilerler)
Slot süresi1 ms
Ödeyici10 SOL (10.000.000.000 lamport) ile fonlanmış rastgele keypair
RPC URLhttp://127.0.0.1:<random>
WS URLws://127.0.0.1:<random>
Özellik yapılandırmasıVarsayılan mainnet özellik seti

Özel Yapılandırma

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 Referansı

Rust builder ve JS yapılandırma nesnesi, camelCase / snake_case adlandırması altında aynı mantıksal seçenekleri sunar.

SeçenekRust setterJS alanıTürVarsayılan
Çevrimdışı modoffline(bool)offline?: booleanbooltrue
Yukarı akış RPCremote_rpc_url(impl Into<String>)remoteRpcUrl?: stringURL dizisiyok
Blok üretimiblock_production_mode(BlockProductionMode)blockProductionMode?: stringenum / "manual" | "clock" | "transaction"Transaction
Slot süresislot_time_ms(u64)slotTimeMs?: numbermilisaniye1
Airdrop adresleriairdrop_addresses(Vec<Pubkey>)airdropAddresses?: string[]pubkey listesiboş
Airdrop miktarıairdrop_sol(u64)airdropSol?: numberlamport10_000_000_000
Blockhash'i atlaskip_blockhash_check(bool)n/aboolfalse
Özel ödeyicipayer(Keypair)payerSecretKey?: Uint8Array | number[]Keypair / baytoluşturulan
Özellik etkinleştirenable_feature(Pubkey)enableFeatures?: string[]özellik kimliği/leriyok
Özellik devre dışı bırakdisable_feature(Pubkey)disableFeatures?: string[]özellik kimliği/leriyok
Tüm özelliklern/aallFeatures?: booleanboolfalse
Özellik yapılandırmasıfeature_config(SvmFeatureConfig)n/atam yapılandırmavarsayılan mainnet

Uzak RPC Yedeklemesi

remoteRpcUrl (veya Rust'ta remote_rpc_url) ayarı, Surfnet'i çevrimdışı moddan çıkarır. Yerel olarak bulunmayan hesaplar, istek üzerine yukarı akış RPC'sinden getirilir; mainnet-fork testleri de bu şekilde çalışır.

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

Yüksek kaliteli bir yukarı akış RPC'si kullanın

Çok sayıda çatallanmış hesabı kullanan testler için ücretli bir uç nokta (Helius, Triton, QuickNode) kullanın. Genel mainnet-beta yoğun şekilde hız sınırına tabidir ve paralel test yüklerinde kararsız davranabilir.

Blok Üretim Modu

ModBlokların ilerleme zamanı
Transaction (varsayılan)Her işlemden sonra. İşlem gönderip hemen doğrulama yapan testler için en uygunudur.
Clockslot_time_ms tarafından belirlenen sabit bir aralıkta. Açık işlemler olmaksızın birden fazla slot geçmesine bağlı testler için en uygunudur.
ManualYalnızca bir SimnetCommand::AdvanceClock gönderildiğinde. Testin saati yönettiği zamana duyarlı testler için en uygunudur.

Özel Ödeyici

Varsayılan olarak ödeyici, yeni oluşturulmuş bir keypair'dir. Testlerin bilinen bir adrese ihtiyaç duyduğu durumlarda, örneğin ödeyicinin pubkey'ine referans veren talimatları önceden oluşturmak için kendi keypair'inizi sağlayın.

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

Özellik Kapıları

Bireysel SVM özellik kapılarını kimliğe göre açıp kapatın ya da tüm bilinen özellikleri allFeatures: true ile etkinleştirin (yalnızca JS — Rust oluşturucu tam set için feature_config kabul eder).

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

Blok Hash Doğrulamasını Atla

skip_blockhash_check(true) (yalnızca Rust) tüm işlemlerde blok hash doğrulamasını devre dışı bırakır. Gönderimden çok önce imzalanan veya süre dolumunu önemsemeyen işlemleri test etmek için kullanışlıdır.

Hatalar

Yanlış yapılandırılmış bir builder, start() aşamasında başarısız olur. Rust SDK şunu döndürür SurfnetError:

VaryantNe Zaman
PortAllocation(String)Boş bir RPC veya WebSocket portuna bağlanılamadı.
Startup(String)Çalışma zamanı başlatılamadı (hatalı yapılandırma, hatalı uzak URL vb.).
Runtime(String)Çalışma zamanı, hazır hale gelmeden önce başlatma sırasında çöktü.
Aborted(String)Başlatma iptal edildi (ör. önyükleme sırasında kapatma sinyali).
Cheatcode(String)Builder içindeki bir cheatcode çağrısı başarısız oldu.

JS SDK, aynı temel varyantı sarmalayan bir mesajla birlikte Error fırlatır.

Is this page helpful?

İçindekiler

Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.