invoke vs invoke_signed
invoke reenvía solo las firmas de transacciones. invoke_signed añade firmas de PDA derivadas de porciones de semillas, permitiendo a los programas mover fondos que custodian.
Busca en todas las páginas de la documentación
invoke reenvía solo las firmas de transacciones. invoke_signed añade firmas de PDA derivadas de porciones de semillas, permitiendo a los programas mover fondos que custodian.
invoke(&ix, accounts)?; // solo firmantes de billetera
invoke_signed(&ix, accounts, seeds)?; // + firmantes de PDACuándo usar esto:
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]]])
}Lo que esto demuestra:
invoke_signed, la CPI falla por falta de firma.| invoke | invoke_signed | |
|---|---|---|
| Firma PDA | No | Sí |
| CU | Menor | Ligeramente mayor |
| Riesgo | Menor si no hay custodia | Errores de semillas críticos |
// signers_seeds: &[&[&[u8]]]
// outer = una entrada por firmante PDA
// inner = las semillas de esa PDA + [bump]
&[
&[b"vault", user.key.as_ref(), &[vault_bump]],
&[b"mint_auth", &[mint_bump]],
]MissingRequiredSignature. Solución: Usar invoke_signed.| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Co-firma del cliente | El usuario paga directamente | Bóveda autónoma |
| Patrón de cuenta nonce | Claves duraderas | Custodia de PDA |
No, solo firmas de programa PDA.
4, incluyendo CPIs anidadas.
A menudo invoke_signed.
invoke_signed para el pagador PDA.
Las mismas reglas en LiteSVM.
Envuelve invoke_signed con semillas.
InvalidSeeds o firma faltante.
El programa propietario debe hacer CPI.
Cada línea de invoke_signed.
El "borrow checker" lo impone.
Metadato PDA signer verdadero.
La macro selecciona basándose en las semillas.
Versiones de la pila: Esta página fue 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, y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026