Conceptos básicos de las PDA
10 ejemplos para empezar con las PDA: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con las PDA: 7 básicos y 3 intermedios.
solana address fuera de la cadena.Los clientes encuentran la PDA + bump antes de construir transacciones.
use solana_program::pubkey::Pubkey;
let program_id = Pubkey::new_unique();
let (pda, bump) = Pubkey::find_program_address(&[b"vault"], &program_id);find_program_address prueba los bumps 255..0.Las transacciones hacen referencia a la pubkey de la PDA como cualquier otra cuenta.
// AccountMeta::new(pda, false) - la PDA no es un firmante de billeterainvoke_signed del programa.Las semillas son cadenas de bytes: pubkeys, cadenas, números.
let seeds: &[&[u8]] = &[b"escrow", buyer.as_ref(), seller.as_ref()];Cambiar la ID del programa cambia la dirección de la PDA.
Pubkey::find_program_address(seeds, program_id);Los usuarios finales nunca tienen las claves privadas de la PDA.
// Solo el programa propietario puede firmar para la PDA a través de invoke_signedLas PDA están intencionalmente fuera de la curva ed25519.
// Fuera de la cadena: Pubkey::create_program_address valida el bumpcreate_program_address falla si está en la curva.find_program_address busca un bump válido.Solo el programa que deriva puede firmar para la PDA.
invoke_signed(&ix, accounts, &[&[b"vault", &[bump]]])?;Guarda el bump al inicializar para evitar la búsqueda en la cadena.
pub struct Vault { pub bump: u8, pub total: u64 }seeds[bump] == stored_bump en cada ix.Relacionado: Bumps Canónicos - almacenamiento de bumps
Las cuentas de token pueden usar la PDA como autoridad.
// seeds: [b"token", mint.key.as_ref(), owner.as_ref()]invoke_signed.Relacionado: PDA como Autoridades - bóvedas
Diferentes conjuntos de semillas no deben colisionar semánticamente.
const PREFIX_VAULT: &[u8] = b"vault";
const PREFIX_ESCROW: &[u8] = b"escrow";Relacionado: Diseño de Semillas y Colisiones - reglas de diseño
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