Konfigurasi

Surfnet::start() (Rust) dan Surfnet.start() (JS) menjalankan Surfnet secara offline dengan produksi blok mode transaksi dan payer yang telah didanai sebesar 10 SOL. Jika Anda membutuhkan hal lain — Surfnet yang di-fork dari mainnet, clock yang lebih lambat, pendanaan deterministik, keypair payer tertentu — gunakan builder (Rust) atau startWithConfig (JS).

Default

Jika Anda memanggil start() tanpa argumen, Anda akan mendapatkan:

SettingValue
ModeOffline (tanpa RPC upstream)
Produksi blokTransaksi (blok maju setiap tx)
Waktu slot1 ms
Payerkeypair acak yang didanai dengan 10 SOL (10.000.000.000 lamport)
RPC URLhttp://127.0.0.1:<random>
WS URLws://127.0.0.1:<random>
Konfigurasi fiturSet fitur mainnet default

Konfigurasi Kustom

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

Referensi Builder

Builder Rust dan objek konfigurasi JS mengekspos opsi logis yang sama dengan penamaan camelCase / snake_case.

OptionRust setterJS fieldTypeDefault
Mode offlineoffline(bool)offline?: booleanbooltrue
RPC upstreamremote_rpc_url(impl Into<String>)remoteRpcUrl?: stringString URLtidak ada
Produksi blokblock_production_mode(BlockProductionMode)blockProductionMode?: stringenum / "manual" | "clock" | "transaction"Transaction
Waktu slotslot_time_ms(u64)slotTimeMs?: numbermilidetik1
Alamat airdropairdrop_addresses(Vec<Pubkey>)airdropAddresses?: string[]daftar pubkeykosong
Jumlah airdropairdrop_sol(u64)airdropSol?: numberlamport10_000_000_000
Lewati blockhashskip_blockhash_check(bool)n/aboolfalse
Payer kustompayer(Keypair)payerSecretKey?: Uint8Array | number[]keypair / bytesdibuat otomatis
Aktifkan fiturenable_feature(Pubkey)enableFeatures?: string[]ID fiturtidak ada
Nonaktifkan fiturdisable_feature(Pubkey)disableFeatures?: string[]ID fiturtidak ada
Semua fiturn/aallFeatures?: booleanboolfalse
Konfigurasi fiturfeature_config(SvmFeatureConfig)n/akonfigurasi lengkapmainnet default

Fallback RPC Jarak Jauh

Mengatur remoteRpcUrl (atau remote_rpc_url di Rust) mengalihkan Surfnet keluar dari mode offline. Akun yang tidak tersedia secara lokal akan diambil sesuai permintaan dari RPC upstream, yang merupakan cara kerja pengujian mainnet-fork.

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

Gunakan RPC upstream berkualitas tinggi

Gunakan endpoint berbayar (Helius, Triton, QuickNode) untuk pengujian yang mengakses banyak akun yang di-fork. mainnet-beta publik sangat dibatasi rate-nya dan akan tidak stabil di bawah beban pengujian paralel.

Mode Produksi Blok

ModeKapan blok maju
Transaction (default)Setelah setiap transaksi. Terbaik untuk pengujian yang mengirim dan langsung melakukan asersi.
ClockPada interval tetap yang diatur oleh slot_time_ms. Terbaik untuk pengujian yang bergantung pada beberapa slot yang berlalu tanpa transaksi eksplisit.
ManualHanya ketika SimnetCommand::AdvanceClock dikirim. Terbaik untuk pengujian yang sensitif terhadap waktu di mana pengujian mengendalikan clock.

Pembayar Kustom

Secara default, pembayar adalah keypair yang baru dibuat. Berikan milik Anda sendiri saat pengujian memerlukan alamat yang diketahui, misalnya untuk membuat instruksi yang mereferensikan kunci publik pembayar terlebih dahulu.

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

Aktifkan atau nonaktifkan feature gates SVM individual berdasarkan ID, atau aktifkan semua fitur yang diketahui dengan allFeatures: true (khusus JS — builder Rust menerima feature_config untuk set lengkap).

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

Lewati Pemeriksaan Blockhash

skip_blockhash_check(true) (khusus Rust) menonaktifkan validasi blockhash pada semua transaksi. Berguna untuk pengujian yang menandatangani transaksi jauh sebelum pengiriman atau yang tidak mempedulikan kedaluwarsa.

Kesalahan

Builder yang salah dikonfigurasi gagal pada start(). Rust SDK mengembalikan SurfnetError:

VariantKondisi
PortAllocation(String)Tidak dapat mengikat ke port RPC atau WebSocket yang bebas.
Startup(String)Runtime gagal diinisialisasi (konfigurasi buruk, URL remote buruk, dll.).
Runtime(String)Runtime mengalami crash saat startup sebelum siap digunakan.
Aborted(String)Startup dibatalkan (mis., sinyal shutdown saat booting).
Cheatcode(String)Pemanggilan cheatcode di dalam builder gagal.

JS SDK melempar Error yang pesannya membungkus varian dasar yang sama.

Is this page helpful?

Daftar Isi

Edit Halaman
© 2026 Yayasan Solana. Semua hak dilindungi.