Por qué LiteSVM

Descripción general

Piensa en LiteSVM como una VM de Solana que se ejecuta dentro de tu función de prueba. No como un proceso separado, no como un servicio de red; es simplemente una llamada a una biblioteca en tu código.

Pruebas tradicionales

// Traditional approach - slow and complex
let validator = TestValidator::new().await; // Starts separate process
let client = RpcClient::new(validator.url()); // Network connection
// Every operation is async and goes over network
let balance = client.get_balance(&pubkey).await?;
tokio::time::sleep(Duration::from_secs(1)).await; // Wait for confirmation

Pruebas con LiteSVM

// LiteSVM - fast and simple
let mut svm = LiteSVM::new(); // Just a struct in memory
// Everything is synchronous and immediate
let balance = svm.get_balance(&pubkey).unwrap_or(0);

Principios clave

1. Todo es síncrono

Sin async, sin await, sin demoras:

// Send transaction and check result immediately
svm.send_transaction(tx).unwrap();
let balance = svm.get_balance(&account).unwrap(); // Already updated!

2. Manipulación directa del estado

// Create any account with any data
svm.set_account(pubkey, Account {
lamports: 1_000_000_000,
data: vec![1, 2, 3, 4],
owner: program_id,
executable: false,
rent_epoch: 0,
}).unwrap();

3. El Tiempo Está Bajo Tu Control

// Jump to any slot instantly
svm.warp_to_slot(1000);
// Expire blockhashes on demand
svm.expire_blockhash();
// Set any sysvar
let mut clock = svm.get_sysvar::<Clock>();
clock.unix_timestamp = 1735689600; // Jan 1, 2025
svm.set_sysvar(&clock);

4. Los Errores son Inmediatos y Claros

match svm.send_transaction(tx) {
Ok(meta) => {
// Transaction succeeded
println!("Compute units: {}", meta.compute_units_consumed);
}
Err(e) => {
// Error with full details
println!("Error: {:?}", e.err);
println!("Logs: {:?}", e.meta.logs);
}
}

Próximos Pasos

Prueba Tu Programa → Aprende cómo probar tu propio programa de Solana
Ejemplos → Consulta soluciones listas para usar para escenarios comunes y ejemplos completos del repositorio
Referencia de API → Aprende funciones avanzadas y configuraciones personalizadas

Is this page helpful?

Tabla de Contenidos

Editar Página