¿Qué es un PDA en Solana?
En el desarrollo de Solana, PDA significa Dirección Derivada del Programa.
Un PDA es un tipo especial de dirección de cuenta generada por un Programa de Solana utilizando reglas deterministas. A diferencia de las direcciones de billetera normales, un PDA no tiene una clave privada y no puede ser controlada directamente por los usuarios.
El PDA es uno de los mecanismos más importantes en Solana porque permite que los Programas gestionen de manera segura el estado y los activos en la cadena.
¿Por qué necesita Solana un PDA?
En Solana, los Programas son sin estado y de solo lectura.
Esto significa:
- Los Programas ejecutan lógica
- Las Cuentas almacenan datos
Un Programa no puede almacenar directamente los datos del usuario internamente como lo haría un tradicional.
servicio de backend.
Aplicaciones como:
- Protocolos DeFi
- Mercados de NFT
- Sistemas de staking
- Juegos en blockchain
todas necesitan cuentas para almacenar:
- Balances de usuarios
- Posiciones
- Metadatos
- Activos de vault
Las cuentas de billetera regulares son controladas por claves privadas, lo que crea problemas de seguridad y propiedad para los protocolos.
Por lo tanto, Solana introdujo cuentas PDA:
- Sin clave privada
- Controladas solo por Programas
- Generadas de manera determinista
Cómo Funciona la PDA
Una PDA se deriva de:
- Semillas
- ID del Programa
- Semilla Bump
Ejemplo:
const [pda, bump] = PublicKey.findProgramAddressSync(
[
Buffer.from("user"),
wallet.publicKey.toBuffer(),
],
programId
);
Aquí:
-
"user"es una semilla -
wallet.publicKeyes la dirección del usuario -
programIdidentifica el Programa
El resultado es una dirección PDA determinista.
Siempre y cuando:
- Las semillas se mantengan iguales
- El ID del programa se mantenga igual
la PDA siempre será idéntica.
¿Qué es una Semilla de Bump?
Las direcciones de Solana son claves públicas de curva elíptica.
Sin embargo, los PDAs no deben tener claves privadas válidas.
Por lo tanto, Solana intenta continuamente valores de bump:
255 → 254 → 253 ...
hasta que encuentra una dirección que:
- No puede generar una clave privada
- Solo puede ser controlada por el Programa
Este valor se llama la semilla de bump.
Por qué los PDA no tienen claves privadas
Las direcciones de billetera normales se generan así:
Clave Privada → Clave Pública → Dirección
Pero la generación de PDA funciona de manera diferente:
Semillas + ProgramID → Hash → PDA
Como resultado:
- Los PDA no tienen claves privadas
- Los usuarios no pueden controlarlas
- Los hackers no pueden recuperar una clave secreta
Solo el Programa asociado puede gestionarlas.
Cómo los Programas Controlan los PDA
Aunque los PDA no pueden firmar transacciones directamente, el tiempo de ejecución de Solana permite a los Programas probar la propiedad utilizando:
- Semillas
- Aumento
- ID del Programa
Esto permite que los Programas "firmen" en nombre del PDA.
Como resultado, los PDA pueden:
- Transferir tokens
- Modificar el estado en la cadena
- Realizar llamadas CPI
- Emitir tokens
Casos de Uso Comunes de PDA
Vaults de DeFi
Muchos protocolos de DeFi utilizan cuentas PDA como vaults para:
- Piscinas de liquidez
- Activos de staking
- Gestión de tesorerías
Metadatos de NFT
Los protocolos de NFT a menudo derivan cuentas de metadatos utilizando:
metadata + mint address
Esto crea PDAs de metadatos predecibles.
Proyectos como Metaplex dependen en gran medida de este diseño.
Administración del Estado del Usuario
Los protocolos suelen crear PDAs dedicadas para los usuarios:
User PDA Position PDA Stake PDA
Estas cuentas almacenan:
- Posiciones del usuario
- Datos de staking
- Progreso en el juego
- Puntos de recompensa
PDA vs Direcciones de Wallet Normal
TipoDirección de WalletPDA¿Tiene Clave Privada?SíNo¿Puede Firmar?SíNo¿Controlado Por?UsuarioPrograma¿Predecible?NoSíUso PrincipalPagosAdministración del Estado
PDA en Anchor
En el marco de Anchor, las PDAs se utilizan ampliamente.
Ejemplo:
#[account(
seeds = [b"user", user.key().as_ref()],
bump
)]
pub user_account: Account<'info, UserAccount>,
Ancla automáticamente:
- Deriva PDA
- Verifica bump
- Valida cuentas
Este se ha convertido en el patrón de desarrollo estándar en Solana.