Surfnet::start() (Rust) και Surfnet.start() (JS) εκκινούν ένα εκτός σύνδεσης
Surfnet με παραγωγή μπλοκ σε λειτουργία συναλλαγής και έναν πληρωτή
προχρηματοδοτημένο με 10 SOL. Όταν χρειάζεστε οτιδήποτε άλλο — ένα Surfnet με
fork από το mainnet, πιο αργό ρολόι, ντετερμινιστική χρηματοδότηση, ένα
συγκεκριμένο keypair πληρωτή — χρησιμοποιήστε τον builder (Rust) ή
startWithConfig (JS).
Προεπιλογές
Αν καλέσετε το start() χωρίς ορίσματα, λαμβάνετε:
| Ρύθμιση | Τιμή |
|---|---|
| Λειτουργία | Εκτός σύνδεσης (χωρίς upstream RPC) |
| Παραγωγή μπλοκ | Συναλλαγή (τα μπλοκ προχωρούν με κάθε tx) |
| Χρόνος slot | 1 ms |
| Πληρωτής | Τυχαίο keypair χρηματοδοτημένο με 10 SOL (10.000.000.000 lamports) |
| RPC URL | http://127.0.0.1:<random> |
| WS URL | ws://127.0.0.1:<random> |
| Διαμόρφωση χαρ/κών | Προεπιλεγμένο σύνολο χαρακτηριστικών mainnet |
Προσαρμοσμένη Διαμόρφωση
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
Ο builder της Rust και το αντικείμενο διαμόρφωσης JS εκθέτουν τις ίδιες λογικές επιλογές με ονοματολογία camelCase / snake_case.
| Επιλογή | Setter Rust | Πεδίο JS | Τύπος | Προεπιλογή |
|---|---|---|---|---|
| Λειτουργία εκτός σύνδεσης | offline(bool) | offline?: boolean | bool | true |
| Upstream RPC | remote_rpc_url(impl Into<String>) | remoteRpcUrl?: string | URL string | none |
| Παραγωγή μπλοκ | block_production_mode(BlockProductionMode) | blockProductionMode?: string | enum / "manual" | "clock" | "transaction" | Transaction |
| Χρόνος slot | slot_time_ms(u64) | slotTimeMs?: number | milliseconds | 1 |
| Διευθύνσεις airdrop | airdrop_addresses(Vec<Pubkey>) | airdropAddresses?: string[] | list of pubkeys | empty |
| Ποσό airdrop | airdrop_sol(u64) | airdropSol?: number | lamports | 10_000_000_000 |
| Παράλειψη blockhash | skip_blockhash_check(bool) | n/a | bool | false |
| Προσαρμοσμένος πληρωτής | payer(Keypair) | payerSecretKey?: Uint8Array | number[] | Keypair / bytes | generated |
| Ενεργοποίηση χαρ/κού | enable_feature(Pubkey) | enableFeatures?: string[] | feature ID(s) | none |
| Απενεργοποίηση χαρ/κού | disable_feature(Pubkey) | disableFeatures?: string[] | feature ID(s) | none |
| Όλα τα χαρ/κά | n/a | allFeatures?: boolean | bool | false |
| Διαμόρφωση χαρ/κών | feature_config(SvmFeatureConfig) | n/a | full config | default mainnet |
Εναλλακτικό Απομακρυσμένο RPC
Η ρύθμιση remoteRpcUrl (ή remote_rpc_url σε Rust) βγάζει το Surfnet από τη
λειτουργία εκτός σύνδεσης. Λογαριασμοί που δεν υπάρχουν τοπικά ανακτώνται κατ'
απαίτηση από το ανάντη RPC, που είναι ο τρόπος λειτουργίας των δοκιμών
mainnet-fork.
let surfnet = Surfnet::builder().remote_rpc_url("https://api.mainnet-beta.solana.com").start().await?;
Χρησιμοποιήστε ένα RPC ανάντη υψηλής ποιότητας
Χρησιμοποιήστε ένα επί πληρωμή endpoint (Helius, Triton, QuickNode) για
δοκιμές που χρησιμοποιούν πολλούς διαβιβασμένους λογαριασμούς. Το δημόσιο
mainnet-beta έχει αυστηρό όριο ρυθμού κλήσεων και θα παρουσιάσει αστοχίες
υπό παράλληλα φορτία δοκιμών.
Λειτουργία Παραγωγής Μπλοκ
| Λειτουργία | Πότε προχωρούν τα μπλοκ |
|---|---|
Transaction (προεπιλογή) | Μετά από κάθε συναλλαγή. Ιδανική για δοκιμές που αποστέλλουν και ελέγχουν άμεσα. |
Clock | Σε σταθερό διάστημα που ορίζεται από το slot_time_ms. Ιδανική για δοκιμές που εξαρτώνται από την πάροδο πολλών slot χωρίς ρητές συναλλαγές. |
Manual | Μόνο όταν αποστέλλεται ένα SimnetCommand::AdvanceClock. Ιδανική για δοκιμές ευαίσθητες στο χρόνο όπου η δοκιμή ελέγχει το ρολόι. |
Προσαρμοσμένος Πληρωτής
Από προεπιλογή, ο πληρωτής είναι ένα νεοδημιουργημένο keypair. Παρέχετε το δικό σας όταν οι δοκιμές χρειάζονται μια γνωστή διεύθυνση, για παράδειγμα για την εκ των προτέρων κατασκευή εντολών που αναφέρονται στο δημόσιο κλειδί του πληρωτή.
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());
Πύλες Χαρακτηριστικών
Εναλλάξτε μεμονωμένες πύλες χαρακτηριστικών SVM ανά ID, ή ενεργοποιήστε κάθε
γνωστό χαρακτηριστικό με allFeatures: true (μόνο JS — ο κατασκευαστής Rust
δέχεται feature_config για το πλήρες σύνολο).
use surfpool_sdk::{Pubkey, Surfnet};let feature_id: Pubkey = "9bn2vTJUsUcnpiZWbu2woSKtTGW3ErZC9ERv88SDqQjK".parse().unwrap();let surfnet = Surfnet::builder().enable_feature(feature_id).start().await?;
Παράλειψη Ελέγχου Blockhash
Το skip_blockhash_check(true) (μόνο Rust) απενεργοποιεί την επικύρωση
blockhash σε όλες τις συναλλαγές. Χρήσιμο για δοκιμές που υπογράφουν συναλλαγές
πολύ νωρίτερα από την υποβολή ή που δεν ενδιαφέρονται για τη λήξη.
Σφάλματα
Ένας λανθασμένα διαμορφωμένος builder αποτυγχάνει στο start(). Το Rust SDK
επιστρέφει SurfnetError:
| Παραλλαγή | Πότε |
|---|---|
PortAllocation(String) | Δεν ήταν δυνατή η δέσμευση σε ελεύθερη θύρα RPC ή WebSocket. |
Startup(String) | Το runtime απέτυχε να αρχικοποιηθεί (κακή διαμόρφωση, κακό απομακρυσμένο URL κ.λπ.). |
Runtime(String) | Το runtime κατέρρευσε κατά την εκκίνηση πριν γίνει έτοιμο. |
Aborted(String) | Η εκκίνηση ακυρώθηκε (π.χ., σήμα τερματισμού κατά την εκκίνηση). |
Cheatcode(String) | Μια κλήση cheatcode μέσα στον builder απέτυχε. |
Το JS SDK εκτοξεύει ένα Error του οποίου το μήνυμα περιτυλίγει την ίδια
υποκείμενη παραλλαγή.
Is this page helpful?