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:
| Ayar | Değer |
|---|---|
| Mod | Çevrimdışı (yukarı akış RPC yok) |
| Blok üretimi | İşlem (bloklar her tx'te ilerler) |
| Slot süresi | 1 ms |
| Ödeyici | 10 SOL (10.000.000.000 lamport) ile fonlanmış rastgele keypair |
| RPC URL | http://127.0.0.1:<random> |
| WS URL | ws://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çenek | Rust setter | JS alanı | Tür | Varsayılan |
|---|---|---|---|---|
| Çevrimdışı mod | offline(bool) | offline?: boolean | bool | true |
| Yukarı akış RPC | remote_rpc_url(impl Into<String>) | remoteRpcUrl?: string | URL dizisi | yok |
| Blok üretimi | block_production_mode(BlockProductionMode) | blockProductionMode?: string | enum / "manual" | "clock" | "transaction" | Transaction |
| Slot süresi | slot_time_ms(u64) | slotTimeMs?: number | milisaniye | 1 |
| Airdrop adresleri | airdrop_addresses(Vec<Pubkey>) | airdropAddresses?: string[] | pubkey listesi | boş |
| Airdrop miktarı | airdrop_sol(u64) | airdropSol?: number | lamport | 10_000_000_000 |
| Blockhash'i atla | skip_blockhash_check(bool) | n/a | bool | false |
| Özel ödeyici | payer(Keypair) | payerSecretKey?: Uint8Array | number[] | Keypair / bayt | oluşturulan |
| Özellik etkinleştir | enable_feature(Pubkey) | enableFeatures?: string[] | özellik kimliği/leri | yok |
| Özellik devre dışı bırak | disable_feature(Pubkey) | disableFeatures?: string[] | özellik kimliği/leri | yok |
| Tüm özellikler | n/a | allFeatures?: boolean | bool | false |
| Özellik yapılandırması | feature_config(SvmFeatureConfig) | n/a | tam yapılandırma | varsayı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
| Mod | Blokların ilerleme zamanı |
|---|---|
Transaction (varsayılan) | Her işlemden sonra. İşlem gönderip hemen doğrulama yapan testler için en uygunudur. |
Clock | slot_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. |
Manual | Yalnı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:
| Varyant | Ne 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?