NUEVO: Helius adquiere Light Protocol
¿Qué son las PDA de Solana? Explicación y ejemplos
Blog/Fundamentos

¿Qué son las PDA de Solana? Explicación y ejemplos (2026)

Formación para desarrolladoresMike MacCana en XMike MacCana en LinkedIn
6 min de lectura

Gracias a 0xIchigo por la revisión, a Unboxed Software por el programa de reseñas de películas y a Paul Verhoeven por Robocop.

Los programas de Solana (contratos inteligentes) almacenan sus datos en cuentas separadas llamadas direcciones derivadas de programas (PDA).

Puedes acceder a las PDA y actualizarlas de forma independiente, lo que reduce la contención y permite el procesamiento en paralelo.

Aunque las PDA no son un concepto difícil, puede resultar complicado para los desarrolladores nuevos entenderlas.

Este artículo te ayudará a pensar en las PDA como almacenes de clave-valor y mostrará cuatro ejemplos prácticos de PDA.

Comencemos.

Las PDA como almacén de datos de clave-valor

Los almacenes de clave-valor existían en la programación muchos años antes que la blockchain. Permiten encontrar datos rápidamente. Consultar el valor de una clave específica dentro del almacén siempre devuelve los mismos datos.

En el modelo de programación de Solana, el sistema de PDA funciona como el almacén de clave-valor de tu programa.

La clave de cada dato es un tipo especial de dirección creada a partir de semillas de entrada que determina el programador.

Las mismas semillas siempre generan la misma dirección, por lo que cualquiera puede encontrar de forma determinista los datos de un conjunto específico de semillas.

Las direcciones de las PDA nunca entran en conflicto con claves públicas reales porque sus valores están «fuera de la curva». Es decir, las direcciones creadas para las PDA son matemáticamente distintas de los valores de claves públicas que existen en la curva Ed25519 de Solana.

El valor es una estructura (u objeto) con los campos y valores que tú, como autor del programa, quieres almacenar allí.

La mejor forma de explicar las PDA es con ejemplos. Veamos algunos.

1. PDA para almacenar tokens asociados con una wallet

Comencemos con el programa de otra persona, uno que ya usaste. Ya sabes que tienes diferentes tokens en tu wallet y que cada uno tiene su propio saldo. ¡Este es tu primer ejemplo de PDA!

Cada uno de los saldos de tus tokens se almacena en una cuenta PDA. Las semillas las determina el programa Associated Token Account.

Veamos exactamente cómo funciona:

Resumen del video

Programa: el programa Associated Token Account

Propósito de la cuenta: almacenar el saldo de un token único en tu wallet

Semillas: la dirección de la wallet y la dirección de mint del token

Datos: el saldo de este token para esta wallet

Beneficio:

Existe un lugar canónico donde consultar las tenencias de un token específico de un usuario. Además, como los saldos de los usuarios están en cuentas separadas, pueden ejecutarse más transacciones en paralelo, lo que hace que Solana sea rápida.

2. PDA para almacenar los datos de tu programa

Bien, pero ¿cómo podemos usar las PDA como un almacén de datos de uso general en nuestros programas de Solana? ¿Qué debemos considerar al diseñar las semillas y los datos de nuestras PDA?

Resumen del video

Programa: un programa de reseñas de películas que usa la propiedad de activos para aumentar la probabilidad de que las reseñas sean auténticas

Propósito de la cuenta: almacenar la reseña de una película hecha por cada propietario de un activo

Semillas: la dirección de la wallet, el nombre de la película y el año de estreno

Datos:

  1. una reseña escrita (string)
  2. una calificación de 0 a 10 almacenada como u8

Beneficio:

Existe un lugar canónico donde consultar la reseña de una película específica hecha por un usuario. Los usuarios pueden actualizar sus reseñas en paralelo sin bloquearse entre sí. Nuestro diseño inteligente de PDA garantiza que solo haya una reseña de cada película por usuario y gestiona casos extremos, como el de personas malintencionadas que hagan una nueva versión de Robocop.

3. PDA para definir valores configurables de tu programa

Al crear tus propias aplicaciones, probablemente tendrás algunos valores configurables que querrás definir a lo largo del ciclo de vida del programa: 

  • Valores constantes (p. ej., las comisiones de tu plataforma)
  • Listas de direcciones de mint de los tokens que usará tu programa
  • Indicadores de funciones que puedes activar y desactivar cuando quieras
  • Si tu programa está activo o pausado (p. ej., permitir que una cuenta de administrador pause un programa es un mecanismo de emergencia habitual en muchos programas de blockchain)

No queremos actualizar nuestro programa solo para cambiar estos valores, así que almacenemos la configuración en una cuenta PDA. Después podemos crear controladores de instrucciones para actualizar estos valores y verificar que una cuenta «administradora» designada firme las instrucciones entrantes. 

En este caso, tendremos una configuración con una lista de claves públicas permitidas para limitar quién puede interactuar con nuestro programa, pero podríamos agregar cualquier otro ajuste de configuración que queramos.

Este es un ejemplo interesante, ya que puede no ser obvio que las PDA pueden usarse para almacenar una configuración global como esta.

Resumen del video

Programa: cualquier programa que hayas creado

Propósito de la cuenta: almacenar una configuración que pueda actualizarse dinámicamente

Semillas: "config"

Datos: nuestra configuración; en este caso, una lista de permitidos y una cuenta de administrador

  • allow_list: un vector de claves públicas de los usuarios que pueden usar esta aplicación
  • authority: la clave pública de una cuenta que puede cambiar estos ajustes (las aplicaciones de Solana suelen usar la palabra authority para expresar algún tipo de permiso). Nos aseguraremos de que esta cuenta firme las acciones con privilegios.

Beneficio:

En lugar de codificar una configuración específica directamente en el código fuente, podemos actualizarla sobre la marcha mediante una función de instrucción de nuestro programa.

Los cambios en datos no relacionados tampoco bloquean las actualizaciones de nuestra configuración. La primera vez que implementes tu programa, también querrás ejecutar intialize_config() y definir tu autoridad.

4. PDA para poseer y transferir tokens

Las PDA no solo sirven para almacenar datos. También pueden ser propietarias de sus propias cuentas de tokens. Nuestro programa firma entonces las transacciones como la PDA para transferir tokens desde esas cuentas a otros destinos. Esto permite que nuestros programas almacenen y transfieran valor:

Resumen del video

Programa: programa de intercambio

Propósito de la cuenta: 

  1. Almacenar los detalles de una oferta de intercambio, específicamente qué tokens y qué cantidad de tokens quiere recibir el creador de la oferta a cambio de los tokens que suministró. 
  2. Esta PDA posee una cuenta de tokens que almacena los tokens suministrados. La PDA puede firmar transacciones y transferir tokens desde esta cuenta a los destinatarios. 

Semillas: "offer", un ID de oferta (cualquier identificador sirve, siempre que no esté ocupado) y la dirección del creador

Datos:

  • maker_wanted_token: el token que se quiere recibir a cambio, representado por la clave pública de su dirección de mint
  • maker_wanted_amount: la cantidad deseada del token (u64)

Beneficio:

Esta PDA permite que los usuarios almacenen datos y también actúa como propietaria de una cuenta de tokens para conservarlos y transferirlos a otras cuentas.

Resumen

Estos fueron cuatro ejemplos prácticos de PDA de Solana.

Primero, el programa Associated Token Account usa PDA para almacenar el saldo de cada token que posee tu wallet.

Segundo, un programa que escribas puede almacenar datos asociados con usuarios específicos mediante sus claves públicas o con elementos de datos específicos mediante los ID que les hayas asignado.

Tercero, los programas pueden almacenar su propia configuración en una PDA, con controladores de instrucciones exclusivos para administradores que restringen quién puede modificar estos ajustes.

Cuarto, tus PDA pueden ser propietarias de sus propias cuentas de tokens, lo que permite que tu programa mantenga fondos. Tu programa puede «firmar» transacciones que usen estos tokens con solo especificar las semillas de la PDA propietaria.

Las PDA no solo hacen que Solana sea rápida. También proporcionan un almacén completo de clave-valor que permite que tus programas encuentren datos rápidamente a partir de las semillas que especifiques. 

¡Diviértete usando PDA y mira más películas de Paul Verhoeven!

Suscríbete a Helius

Mantente al día con las novedades del desarrollo en Solana y recibe actualizaciones cuando publiquemos