Mollusk
Mollusk SVM é um harness Rust leve para executar instruções únicas contra programas BPF compilados. Use quando quiser testes em nível de instrução sem a API completa de transação do LiteSVM ou um validador em execução.
Busque em todas as páginas da documentação
Mollusk SVM é um harness Rust leve para executar instruções únicas contra programas BPF compilados. Use quando quiser testes em nível de instrução sem a API completa de transação do LiteSVM ou um validador em execução.
Cartão de receita de referência rápida - pronto para copiar e colar.
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());Quando usar:
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], // deposit discriminator
};
mollusk.process_and_validate_instruction(
&ix,
&accounts,
&[Check::success()],
);
}O que isso demonstra:
process_and_validate_instruction executa ix e asserta checks de sucesso.target/deploy de cargo build-sbf.Check valida sucesso, códigos de erro e padrões de log.| Aspecto | Mollusk | LiteSVM 0.6.x |
|---|---|---|
| Nível API | Instrução | Transação |
| Métricas CU | Checks built-in | Disponível em erros |
| Suporte CPI | Sim | Sim |
| Controle de clock | Contas manuais | Helpers sysvar |
use mollusk_svm::result::Check;
mollusk.process_and_validate_instruction(
&ix,
&accounts,
&[
Check::success(),
Check::compute_units(45_000..=60_000),
],
);Account::data.cargo build-sbf consistente no CI.is_signer no meta sem verificação de assinatura no contexto mollusk. Correção: Combine com testes tx LiteSVM para caminhos de assinatura.account.owner = program_id.| Alternativa | Use quando | Não use quando |
|---|---|---|
| LiteSVM | Fluxos de transação completos | Só precisa nível ix |
| anchor test | Clientes IDL Anchor | Devs só Rust |
| Trident fuzz | Inputs aleatórios | Regressão determinística |
Não - execução puramente in-process.
Sim - carregue .so Anchor e passe bytes discriminator nos dados de instrução.
Use Check::err(solana_sdk::program_error::ProgramError::Custom(code)).
Sim - Check::compute_units com limites inclusivos.
Inclua contas de programa callee e carregue ELFs de programa dependente no mollusk.
Mollusk é mantido para testes focados em instrução; prefira para novos projetos só Rust.
cargo test após anchor build ou cargo build-sbf - camada rápida no pipeline.
Defina lamports suficientes nas contas para mínimos rent-exempt.
Não para process_instruction - preocupações de nível transação usam LiteSVM.
Mantenha crate mollusk-svm atualizado junto com pins toolchain Solana SDK 2.x / Agave.
Versões da stack: Esta página foi escrita 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 e LiteSVM 0.6.x.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026