Los vaults y escrows custodian SOL o tokens SPL bajo la autoridad de un PDA hasta que las reglas del programa los liberen. Los patrones correctos validan las partes, usan "bumps" canónicos y aplican la secuencia de verificaciones-efectos-interacciones antes de las CPI.
// Custodiar: depósito CPI de token a ATA del vault propiedad del PDA del vault// Liberar: verificar condiciones -> invocar_signed transferencia saliente
pub fn release(bump: u8, escrow_auth: &AccountInfo, source: &AccountInfo, dest: &AccountInfo, token_program: &AccountInfo, amount: u64) -> ProgramResult { // 1. verificar estado del escrow: Abierto y expiración // 2. marcar como Lleno en los datos de la cuenta ANTES de la CPI let ix = spl_token::instruction::transfer(token_program.key, source.key, dest.key, escrow_auth.key, &[], amount)?; invoke_signed(&ix, &[source.clone(), dest.clone(), escrow_auth.clone(), token_program.clone()], &[&[b"escrow", &[bump]]])}
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