invoke vs invoke_signed
invoke encaminha apenas assinaturas de transação. invoke_signed adiciona assinaturas de PDA derivadas de fatias de sementes (seeds), permitindo que programas movam fundos que eles custodiam.
Busque em todas as páginas da documentação
invoke encaminha apenas assinaturas de transação. invoke_signed adiciona assinaturas de PDA derivadas de fatias de sementes (seeds), permitindo que programas movam fundos que eles custodiam.
invoke(&ix, accounts)?; // apenas signers da carteira
invoke_signed(&ix, accounts, seeds)?; // + signers de PDAQuando usar isso:
pub fn move_from_vault(bump: u8, amount: u64, from: &AccountInfo, to: &AccountInfo, sys: &AccountInfo) -> ProgramResult {
let ix = system_instruction::transfer(from.key, to.key, amount);
invoke_signed(&ix, &[from.clone(), to.clone(), sys.clone()], &[&[b"vault", &[bump]]])
}O que isso demonstra:
| invoke | invoke_signed | |
|---|---|---|
| Assinatura de PDA | Não | Sim |
| CU | Menor | Ligeiramente maior |
| Risco | Menor se não houver custódia | Bugs em seeds são críticos |
// signers_seeds: &[&[&[u8]]]
// outer = uma entrada por signer de PDA
// inner = as sementes desse PDA + [bump]
&[
&[b"vault", user.key.as_ref(), &[vault_bump]],
&[b"mint_auth", &[mint_bump]],
]| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Co-assinatura do cliente | Usuário paga diretamente | Cofre autônomo |
| Padrão de conta nonce | Chaves duráveis | Custódia de PDA |
Não - apenas assinaturas de programa PDA.
4, incluindo CPIs aninhados.
Frequentemente invoke_signed.
invoke_signed para pagador PDA.
Mesmas regras no LiteSVM.
Envolve invoke_signed com seeds.
InvalidSeeds ou assinatura ausente.
O programa proprietário deve fazer CPI.
Cada linha de invoke_signed.
O borrow checker impõe.
PDA meta signer true.
Macro seleciona com base nas seeds.
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