Cấu hình

Surfnet::start() (Rust) và Surfnet.start() (JS) khởi động một Surfnet ngoại tuyến với chế độ sản xuất khối theo giao dịch và người thanh toán được nạp sẵn 10 SOL. Khi bạn cần bất kỳ điều gì khác — một Surfnet được fork từ mainnet, đồng hồ chậm hơn, tài trợ xác định, một keypair người thanh toán cụ thể — hãy dùng builder (Rust) hoặc startWithConfig (JS).

Mặc định

Nếu bạn gọi start() mà không có đối số, bạn sẽ nhận được:

Cài đặtGiá trị
Chế độNgoại tuyến (không có RPC thượng nguồn)
Sản xuất khốiGiao dịch (các khối tiến lên theo từng tx)
Thời gian slot1 ms
Người thanh toánkeypair ngẫu nhiên được nạp 10 SOL (10.000.000.000 lamport)
URL RPChttp://127.0.0.1:<random>
URL WSws://127.0.0.1:<random>
Cấu hình tính năngBộ tính năng mainnet mặc định

Cấu hình tùy chỉnh

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

Tham chiếu Builder

Rust builder và đối tượng cấu hình JS cung cấp các tùy chọn logic giống nhau theo cách đặt tên camelCase / snake_case.

Tùy chọnSetter RustTrường JSKiểuMặc định
Chế độ ngoại tuyếnoffline(bool)offline?: booleanbooltrue
RPC thượng nguồnremote_rpc_url(impl Into<String>)remoteRpcUrl?: stringChuỗi URLkhông có
Sản xuất khốiblock_production_mode(BlockProductionMode)blockProductionMode?: stringenum / "manual" | "clock" | "transaction"Transaction
Thời gian slotslot_time_ms(u64)slotTimeMs?: numbermili giây1
Địa chỉ airdropairdrop_addresses(Vec<Pubkey>)airdropAddresses?: string[]danh sách pubkeytrống
Số lượng airdropairdrop_sol(u64)airdropSol?: numberlamport10_000_000_000
Bỏ qua blockhashskip_blockhash_check(bool)n/aboolfalse
Người thanh toán tùy chỉnhpayer(Keypair)payerSecretKey?: Uint8Array | number[]Keypair / bytestự tạo
Bật tính năngenable_feature(Pubkey)enableFeatures?: string[]ID tính năngkhông có
Tắt tính năngdisable_feature(Pubkey)disableFeatures?: string[]ID tính năngkhông có
Tất cả tính năngn/aallFeatures?: booleanboolfalse
Cấu hình tính năngfeature_config(SvmFeatureConfig)n/acấu hình đầy đủmainnet mặc định

Dự phòng RPC từ xa

Thiết lập remoteRpcUrl (hoặc remote_rpc_url trong Rust) sẽ chuyển Surfnet ra khỏi chế độ ngoại tuyến. Các tài khoản không có sẵn ở local sẽ được tải theo yêu cầu từ RPC upstream, đây là cách các bài kiểm thử mainnet-fork hoạt động.

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

Sử dụng RPC upstream chất lượng cao

Sử dụng endpoint trả phí (Helius, Triton, QuickNode) cho các bài kiểm thử liên quan đến nhiều tài khoản forked. mainnet-beta công khai bị giới hạn tốc độ nghiêm ngặt và sẽ gặp lỗi khi chạy kiểm thử song song.

Chế độ sản xuất khối

Chế độKhi nào khối được tiến lên
Transaction (mặc định)Sau mỗi giao dịch. Phù hợp nhất cho các bài kiểm thử gửi và xác nhận ngay lập tức.
ClockTheo chu kỳ cố định được đặt bởi slot_time_ms. Phù hợp nhất cho các bài kiểm thử phụ thuộc vào nhiều slot trôi qua mà không có giao dịch rõ ràng.
ManualChỉ khi có SimnetCommand::AdvanceClock được gửi. Phù hợp nhất cho các bài kiểm thử nhạy cảm về thời gian khi bài kiểm thử điều khiển đồng hồ.

Người thanh toán tùy chỉnh

Theo mặc định, người thanh toán là một keypair được tạo mới. Hãy cung cấp keypair của riêng bạn khi các bài kiểm thử cần một địa chỉ đã biết, ví dụ để xây dựng trước các lệnh tham chiếu đến khóa công khai của người thanh toá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());

Cổng tính năng

Bật/tắt từng cổng tính năng SVM theo ID, hoặc kích hoạt tất cả các tính năng đã biết với allFeatures: true (chỉ JS — Rust builder chấp nhận feature_config cho bộ đầy đủ).

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

Bỏ qua kiểm tra Blockhash

skip_blockhash_check(true) (chỉ Rust) vô hiệu hóa xác thực blockhash trên tất cả các giao dịch. Hữu ích cho các bài kiểm thử ký giao dịch từ trước khi nộp hoặc không quan tâm đến thời hạn hết hạn.

Lỗi

Một builder bị cấu hình sai sẽ thất bại tại start(). Rust SDK trả về SurfnetError:

Biến thểKhi nào
PortAllocation(String)Không thể liên kết với cổng RPC hoặc WebSocket trống.
Startup(String)Runtime khởi tạo thất bại (cấu hình sai, URL từ xa không hợp lệ, v.v.).
Runtime(String)Runtime bị crash trong quá trình khởi động trước khi sẵn sàng.
Aborted(String)Quá trình khởi động bị hủy (ví dụ: tín hiệu tắt máy trong quá trình boot).
Cheatcode(String)Một lệnh gọi cheatcode bên trong builder đã thất bại.

JS SDK ném ra một Error có thông báo bao gồm cùng biến thể lỗi bên dưới.

Is this page helpful?

Mục lục

Chỉnh sửa trang