Mollusk
Mollusk SVM es un ligero arnés de Rust para ejecutar instrucciones individuales contra programas BPF compilados. Úsalo cuando desees pruebas a nivel de instrucción sin la API de transacciones completa de LiteSVM o un validador en ejecución.
Busca en todas las páginas de la documentación
Mollusk SVM es un ligero arnés de Rust para ejecutar instrucciones individuales contra programas BPF compilados. Úsalo cuando desees pruebas a nivel de instrucción sin la API de transacciones completa de LiteSVM o un validador en ejecución.
Tarjeta de receta de referencia rápida - lista para copiar y pegar.
use mollusk_svm::Mollusk;
use solana_sdk::instruction::{AccountMeta, Instruction};
let mollusk = Mollusk::new(&program_id, "target/deploy/my_program.so");
let result = mollusk.process_instruction(&ix, &account_store);
assert!(result.program_result.is_ok());Cuándo usar esto:
use mollusk_svm::{Mollusk, result::Check};
use solana_sdk::{
account::Account,
instruction::{AccountMeta, Instruction},
pubkey::Pubkey,
};
#[test]
fn process_deposit() {
let program_id = Pubkey::new_unique();
let mollusk = Mollusk::new(&program_id, "target/deploy/my_program.so");
let user = Pubkey::new_unique();
let vault = Pubkey::new_unique();
let accounts = vec![
(user, Account::default()),
(vault, Account::default()),
];
let ix = Instruction {
program_id,
accounts: vec![
AccountMeta::new(user, true),
AccountMeta::new(vault, false),
],
data: vec![0], // discriminador de depósito
};
mollusk.process_and_validate_instruction(
&ix,
&accounts,
&[Check::success()],
);
}Lo que esto demuestra:
process_and_validate_instruction ejecuta la instrucción y verifica las comprobaciones de éxito.target/deploy de cargo build-sbf.Check valida el éxito, los códigos de error y los patrones de registro.| Aspecto | Mollusk | LiteSVM 0.6.x |
|---|---|---|
| Nivel de API | Instrucción | Transacción |
| Métricas de CU | Comprobaciones integradas | Disponible en errores |
| Soporte CPI | Sí | Sí |
| Control del reloj | Cuentas manuales | Ayudantes de Sysvar |
use mollusk_svm::result::Check;
mollusk.process_and_validate_instruction(
&ix,
&accounts,
&[
Check::success(),
Check::compute_units(45_000..=60_000),
],
);Account::data..so de depuración y lanzamiento. Solución: Perfil de cargo build-sbf consistente en CI.is_signer en meta sin verificación de firma en el contexto de mollusk. Solución: Emparejar con pruebas de transacciones de LiteSVM para rutas de firma.account.owner = program_id.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| LiteSVM | Flujos de transacciones completos | Solo se necesita a nivel de instrucción |
| prueba de anchor | Clientes de IDL de Anchor | Desarrolladores solo de Rust |
| Trident fuzz | Entradas aleatorias | Regresión determinista |
No, ejecución puramente en proceso.
Sí, carga el .so de Anchor y pasa los bytes del discriminador en los datos de la instrucción.
Usa Check::err(solana_sdk::program_error::ProgramError::Custom(code)).
Sí, Check::compute_units con límites de rango inclusivos.
Incluye las cuentas del programa llamado y carga los ELFs de programas dependientes en mollusk.
Mollusk se mantiene para pruebas centradas en instrucciones; preferirlo para nuevos proyectos solo de Rust.
cargo test después de anchor build o cargo build-sbf - capa rápida en el pipeline.
Establece suficientes lamports en las cuentas para satisfacer los mínimos exentos de alquiler.
No para process_instruction; las preocupaciones a nivel de transacción usan LiteSVM en su lugar.
Mantén la crate mollusk-svm actualizada junto con las fijaciones de la cadena de herramientas de Solana SDK 2.x / Agave.
Versiones de 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