NOVO: Helius adquire a Light Protocol
O que são PDAs da Solana? Explicação e exemplos
Blog/Fundamentos

O que são PDAs da Solana? Explicação e exemplos (2026)

Educação para desenvolvedoresMike MacCana no XMike MacCana no LinkedIn
6 min de leitura

Agradecemos a 0xIchigo pela revisão, à Unboxed Software pelo programa de avaliações de filmes e a Paul Verhoeven por Robocop.

Os programas da Solana (contratos inteligentes) armazenam seus dados em contas separadas chamadas endereços derivados de programa (PDAs).

Os PDAs podem ser acessados e atualizados de forma independente, reduzindo a contenção e permitindo o processamento paralelo.

Embora os PDAs não sejam um conceito difícil, eles podem ser complicados para novos desenvolvedores entenderem.

Este artigo ajudará você a pensar nos PDAs como armazenamentos de chave/valor e apresentará quatro exemplos práticos de PDAs.

Vamos começar.

PDAs como armazenamento de dados de chave/valor

Os armazenamentos de chave/valor já existiam na programação muitos anos antes da blockchain. Eles são uma forma de encontrar dados rapidamente. Consultar o valor de uma determinada chave no armazenamento sempre encontra os mesmos dados.

No modelo de programação da Solana, o armazenamento de chave/valor do seu programa é o sistema de PDAs.

A chave de cada conjunto de dados é um tipo especial de endereço criado a partir de seeds de entrada definidas pelo programador.

As mesmas seeds sempre geram o mesmo endereço. Assim, qualquer pessoa pode encontrar de forma determinística os dados de um determinado conjunto de seeds.

Os endereços dos PDAs nunca entram em conflito com chaves públicas reais porque seus valores estão ‘fora da curva’. Ou seja, os endereços criados para PDAs são matematicamente distintos dos valores de chaves públicas existentes na curva Ed25519 da Solana.

O valor é uma struct (ou objeto) com os campos e valores que você, autor do programa, deseja armazenar ali.

A melhor maneira de explicar PDAs é por meio de exemplos. Então, vamos a eles.

1. PDA para armazenar tokens associados a uma carteira

Vamos começar com o programa de outra pessoa — um que você já usou. Você já sabe que tem diferentes tokens em sua carteira e que cada um possui seu próprio saldo. Este é seu primeiro exemplo de PDAs!

Cada um dos seus saldos de tokens é armazenado em uma conta PDA, com as seeds determinadas pelo programa Associated Token Account.

Vamos ver exatamente como isso funciona:

Recapitulação do vídeo

Programa: o programa Associated Token Account

Finalidade da conta: armazenar o saldo de um token específico em sua carteira

Seeds: o endereço da carteira e o endereço de mint do token

Dados: o saldo desse token nessa carteira

Benefício:

Existe um local canônico para consultar os ativos de um token específico mantidos por um usuário. Como os saldos dos usuários ficam em contas separadas, mais transações podem ser executadas em paralelo, tornando a Solana rápida!

2. PDA para armazenar os dados do seu programa

Certo, ótimo, mas como podemos usar PDAs como um armazenamento de dados de uso geral em nossos programas da Solana? O que precisamos considerar ao definir as seeds e os dados dos nossos PDAs?

Recapitulação do vídeo

Programa: um programa de avaliações de filmes que usa a propriedade de ativos para aumentar a probabilidade de as avaliações serem autênticas

Finalidade da conta: armazenar a avaliação de um filme feita por cada proprietário de ativo

Seeds: o endereço da carteira, o nome do filme e o ano de lançamento

Dados:

  1. uma avaliação escrita (string)
  2. uma nota de 0 a 10 armazenada como u8

Benefício:

Existe um local canônico para consultar a avaliação de um filme específico feita por um usuário. Os usuários podem atualizar suas avaliações em paralelo sem bloquear uns aos outros. O design inteligente do nosso PDA garante que exista apenas uma avaliação de cada filme por usuário e trata casos extremos, como pessoas mal-intencionadas refazendo Robocop.

3. PDA para definir valores configuráveis no seu programa

Ao criar seus próprios aplicativos, você provavelmente terá alguns valores configuráveis que desejará definir ao longo do ciclo de vida do programa: 

  • Valores constantes (por exemplo, taxas da sua plataforma)
  • Listas de endereços de mint dos tokens que seu programa usará
  • Feature flags que você pode ativar e desativar quando quiser
  • Se o programa está ativo ou pausado (por exemplo, permitir que uma conta de administrador pause um programa é um recurso emergencial comum em muitos programas de blockchain)

Não queremos atualizar nosso programa apenas para alterar esses valores. Então, vamos colocar nossa configuração em uma conta PDA! Depois, podemos criar handlers de instruções para atualizar esses valores e verificar se as instruções recebidas foram assinadas por uma conta de ‘administrador’ designada. 

Neste caso, teremos uma configuração com uma lista de chaves públicas permitidas para limitar quem pode interagir com nosso programa, mas poderíamos adicionar quaisquer outras definições de configuração que quiséssemos.

Este é um exemplo interessante, pois talvez não seja óbvio que os PDAs podem ser usados para armazenar uma configuração global como essa!

Recapitulação do vídeo

Programa: qualquer programa que você tenha criado

Finalidade da conta: armazenar uma configuração que possa ser atualizada dinamicamente

Seeds: "config"

Dados: nossa configuração — neste caso, uma lista de permissões e uma conta de administrador

  • allow_list: um vetor de chaves públicas dos usuários autorizados a usar este aplicativo
  • authority: a chave pública de uma conta que pode alterar essas definições (os aplicativos da Solana normalmente usam a palavra authority para representar algum tipo de permissão). Garantiremos que essa conta assine ações privilegiadas!

Benefício:

Em vez de fixar uma determinada configuração no código-fonte, podemos atualizá-la em tempo real usando uma função de instrução do nosso programa.

As atualizações da nossa configuração também não são bloqueadas por alterações em dados não relacionados. Na primeira vez que implantar seu programa, você também deverá executar intialize_config() e definir sua autoridade!

4. PDA para possuir e transferir tokens

Os PDAs não servem apenas para armazenar dados. Eles também podem possuir suas próprias contas de tokens. Nosso programa assina transações como o PDA para mover tokens dessas contas para outros lugares. Isso permite que nossos programas armazenem e transfiram valor:

Recapitulação do vídeo

Programa: programa de swap

Finalidade da conta: 

  1. Armazenar os detalhes de uma oferta de swap, especificamente quais tokens e qual quantidade deles o criador da oferta deseja receber em troca dos tokens fornecidos. 
  2. Esse PDA possui uma conta de tokens que armazena os tokens fornecidos. O PDA pode assinar transações e transferir tokens dessa conta para os destinatários. 

Seeds: "offer", um ID de oferta (qualquer identificador, desde que ainda não esteja em uso) e o endereço do criador

Dados:

  • maker_wanted_token: o token desejado em troca, representado pela chave pública do endereço de mint do token
  • maker_wanted_amount: a quantidade desejada do token (u64)

Benefício:

Esse PDA permite que os usuários armazenem dados e também atua como proprietário de uma conta de tokens para manter tokens e transferi-los para outras contas.

Resumo

Esses foram quatro exemplos práticos de PDAs da Solana.

Primeiro, o programa Associated Token Account usa PDAs para armazenar o saldo de cada token que sua carteira possui.

Segundo, um programa escrito por você pode armazenar dados associados a usuários específicos usando a chave pública deles ou a itens de dados específicos usando os IDs que você definiu para esses itens.

Terceiro, os programas podem armazenar a própria configuração em um PDA, com handlers de instruções exclusivos para administradores que restringem quem pode alterar essas definições.

Quarto, seus PDAs podem possuir suas próprias contas de tokens, permitindo que seu programa mantenha fundos. Seu programa pode ‘assinar’ transações que usam esses tokens apenas especificando as seeds do PDA que os possui.

Além de tornar a Solana rápida, os PDAs oferecem um armazenamento completo de chave/valor que permite que seus programas encontrem dados rapidamente com base nas seeds especificadas por você. 

Divirta-se usando PDAs e assista a mais filmes de Paul Verhoeven!

Assine a Helius

Acompanhe as novidades mais recentes do desenvolvimento Solana e receba atualizações quando publicarmos