LiteSVM
LiteSVM 0.6.x ejecuta una VM de Solana en proceso para pruebas de programas en menos de un segundo sin solana-test-validator. Úsalo para pruebas unitarias, casos negativos de seguridad y bucles de retroalimentación de Rust rápidos.
Busca en todas las páginas de la documentación
LiteSVM 0.6.x ejecuta una VM de Solana en proceso para pruebas de programas en menos de un segundo sin solana-test-validator. Úsalo para pruebas unitarias, casos negativos de seguridad y bucles de retroalimentación de Rust rápidos.
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
use litesvm::LiteSVM;
use solana_sdk::{
instruction::{AccountMeta, Instruction},
pubkey::Pubkey,
signature::Keypair,
signer::Signer,
transaction::Transaction,
};
let mut svm = LiteSVM::new();
let payer = Keypair::new();
svm.airdrop(&payer.pubkey(), 10_000_000_000).unwrap();
svm.add_program(program_id, include_bytes!("../target/deploy/my_program.so"));Cuándo usar esto:
#[test].anchor test más lento.use litesvm::LiteSVM;
use solana_sdk::{
instruction::{AccountMeta, Instruction},
pubkey::Pubkey,
signature::Keypair,
signer::Signer,
system_program,
transaction::Transaction,
};
#[test]
fn withdraw_requires_signer() {
let program_id = Pubkey::new_unique();
let mut svm = LiteSVM::new();
svm.add_program(program_id, include_bytes!("../target/deploy/my_program.so"));
let payer = Keypair::new();
svm.airdrop(&payer.pubkey(), 2_000_000_000).unwrap();
let vault = Pubkey::new_unique();
let ix = Instruction {
program_id,
accounts: vec![
AccountMeta::new(vault, false),
AccountMeta::new_readonly(payer.pubkey(), false), // falta firmante
],
data: vec![1, 0, 0, 0], // marcador de posición del discriminador de retiro
};
let tx = Transaction::new_signed_with_payer(
&[ix],
Some(&payer.pubkey()),
&[&payer],
svm.latest_blockhash(),
);
let result = svm.send_transaction(tx);
assert!(result.is_err());
}Lo que esto demuestra:
.so compilado directamente en LiteSVM.| Herramienta | Velocidad | Fidelidad | Idioma |
|---|---|---|---|
| LiteSVM 0.6.x | Más rápido | Alto para la lógica de ix | Rust |
| Mollusk | Rápido | Enfocado en instrucciones | Rust |
| Bankrun | Rápido | Ergonomía de TS | TypeScript |
| test-validator | Lento | RPC completo | Cualquiera |
// Avanzar el reloj para pruebas de obsolescencia
svm.set_sysvar(&solana_sdk::clock::Clock {
unix_timestamp: 1_700_000_000,
..Default::default()
});.so obsoleto - La prueba ejecuta una binario antigua después de un cambio de código. Solución: anchor build en CI antes de cargo test.svm.add_program para dependencias.svm.expire_blockhash() o actualización. Solución: Obtener latest_blockhash() por tx.Cargo.toml que la compilación de lanzamiento.| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Mollusk | Solo Rust a nivel de instrucción | Quieres ergonomía completa de simulación de tx |
| Bankrun | Equipo de TypeScript | Flujo de trabajo puro de Rust |
| anchor test | Integración completa | Velocidad del bucle interno |
Fija LiteSVM 0.6.x por manifiesto; verifica las notas de la versión para compatibilidad de syscalls.
Sí: carga los programas llamados (Token, tu bóveda) y proporciona el grafo de cuentas correcto.
svm.airdrop para SOL; establece manualmente los datos de la cuenta de token para saldos de SPL.
Usa .so crudo + datos de instrucción, o ayudantes de la comunidad para construir discriminadores de Anchor.
cargo test después de anchor build - no se requiere servicio de validador para la capa LiteSVM.
Incluye la cuenta PDA correcta con is_signer: false; el programa invoca CPI firmada internamente.
Las transacciones fallidas devuelven registros en el error - afirma subcadenas de registro para depuración personalizada de msg!.
Cada prueba debe poseer LiteSVM::new() - evita compartir svm mutables entre hilos.
Usa los mismos IDs de programa que el clúster de destino al probar listas de permitidos de CPI.
Al depender de métodos RPC, ALTs o comportamiento de aterrizaje de transacciones múltiples.
Versiones de la pila: Esta página se escribió para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026