Configuração

Surfnet::start() (Rust) e Surfnet.start() (JS) inicializam um Surfnet offline com produção de blocos em modo de transação e um pagador pré-financiado com 10 SOL. Quando você precisar de qualquer outra coisa — um Surfnet com fork da mainnet, um relógio mais lento, financiamento determinístico, um keypair específico de pagador — utilize o builder (Rust) ou startWithConfig (JS).

Padrões

Se você chamar start() sem argumentos, obterá:

ConfiguraçãoValor
ModoOffline (sem RPC upstream)
Produção de blocosTransação (blocos avançam a cada tx)
Tempo de slot1 ms
Pagadorkeypair aleatório financiado com 10 SOL (10.000.000.000 lamports)
URL RPChttp://127.0.0.1:<random>
URL WSws://127.0.0.1:<random>
Configuração de featuresConjunto de features padrão da mainnet

Configuração Personalizada

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

Referência do Builder

O builder Rust e o objeto de configuração JS expõem as mesmas opções lógicas sob nomenclatura camelCase / snake_case.

OpçãoSetter RustCampo JSTipoPadrão
Modo offlineoffline(bool)offline?: booleanbooltrue
RPC upstreamremote_rpc_url(impl Into<String>)remoteRpcUrl?: stringString de URLnenhum
Produção de blocosblock_production_mode(BlockProductionMode)blockProductionMode?: stringenum / "manual" | "clock" | "transaction"Transaction
Tempo de slotslot_time_ms(u64)slotTimeMs?: numbermilissegundos1
Endereços de airdropairdrop_addresses(Vec<Pubkey>)airdropAddresses?: string[]lista de pubkeysvazio
Valor do airdropairdrop_sol(u64)airdropSol?: numberlamports10_000_000_000
Ignorar blockhashskip_blockhash_check(bool)n/aboolfalse
Pagador personalizadopayer(Keypair)payerSecretKey?: Uint8Array | number[]Keypair / bytesgerado
Habilitar featureenable_feature(Pubkey)enableFeatures?: string[]ID(s) de featurenenhum
Desabilitar featuredisable_feature(Pubkey)disableFeatures?: string[]ID(s) de featurenenhum
Todas as featuresn/aallFeatures?: booleanboolfalse
Configuração de featuresfeature_config(SvmFeatureConfig)n/aconfiguração completamainnet padrão

Fallback para RPC Remoto

Definir remoteRpcUrl (ou remote_rpc_url em Rust) tira o Surfnet do modo offline. As contas não presentes localmente são obtidas sob demanda a partir do RPC upstream, que é como funcionam os testes de mainnet-fork.

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

Use um RPC upstream de alta qualidade

Use um endpoint pago (Helius, Triton, QuickNode) para testes que utilizam muitas contas bifurcadas. O mainnet-beta público tem limites de taxa severos e poderá falhar sob cargas de testes paralelos.

Modo de Produção de Blocos

ModoQuando os blocos avançam
Transaction (padrão)Após cada transação. Ideal para testes que enviam e verificam imediatamente.
ClockEm um intervalo fixo definido por slot_time_ms. Ideal para testes que dependem de múltiplos slots passando sem transações explícitas.
ManualApenas quando um SimnetCommand::AdvanceClock é enviado. Ideal para testes sensíveis ao tempo em que o teste controla o relógio.

Pagador Personalizado

Por padrão, o pagador é um keypair gerado recentemente. Forneça o seu próprio quando os testes precisarem de um endereço conhecido, por exemplo, para pré-construir instruções que referenciem a chave pública do pagador.

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

Ative ou desative feature gates individuais do SVM por ID, ou ative todos os recursos conhecidos com allFeatures: true (somente JS — o builder Rust aceita feature_config para o conjunto completo).

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

Ignorar Verificação de Blockhash

skip_blockhash_check(true) (somente Rust) desativa a validação de blockhash em todas as transações. Útil para testes que assinam transações muito antes do envio ou que não se preocupam com a expiração.

Erros

Um builder mal configurado falha em start(). O SDK Rust retorna SurfnetError:

VarianteQuando
PortAllocation(String)Não foi possível vincular a uma porta RPC ou WebSocket livre.
Startup(String)O runtime falhou ao inicializar (configuração inválida, URL remota inválida, etc.).
Runtime(String)O runtime travou durante a inicialização antes de ficar pronto.
Aborted(String)A inicialização foi cancelada (ex.: sinal de desligamento durante o boot).
Cheatcode(String)Uma chamada de cheatcode dentro do builder falhou.

O SDK JS lança um Error cuja mensagem encapsula a mesma variante subjacente.

Is this page helpful?

Índice

Editar Página
© 2026 Fundação Solana. Todos os direitos reservados.