Program Derived Addresses (PDAs)

Program Derived Addresses (PDAs) são endereços de conta de 32 bytes que são derivados deterministicamente de um ID de programa e um conjunto de seeds. Eles são garantidamente fora da curva Ed25519, o que significa que não existe chave privada para eles. Apenas o programa cujo ID foi usado na derivação pode "assinar" por um PDA, e faz isso através de invoke_signed durante invocações entre programas (CPIs).

Program Derived AddressProgram Derived Address

Factos principais

  • Determinístico: As mesmas seeds e ID de programa produzem sempre o mesmo endereço.
  • Fora da curva: O endereço derivado é verificado para não ser uma chave pública Ed25519 válida. Se o hash acontecer de cair na curva, a derivação falha e um bump seed diferente é tentado.
  • Sem chave privada: Como o endereço está fora da curva, ninguém pode produzir uma assinatura criptográfica para ele. O programa "assina" através do mecanismo invoke_signed do runtime.

Quando usar PDAs

  • Endereçamento determinístico: Derive a mesma conta das mesmas seeds sempre.
  • Assinatura de programa: Apenas o programa proprietário pode assinar via invoke_signed, permitindo que programas atuem como autoridades autónomas.
  • Estado com escopo de utilizador: Derive contas por utilizador a partir de seeds de pubkey do utilizador (por exemplo, ["user", user_pubkey]).
  • Sem gestão de keypair: Sem chave privada para armazenar ou perder. O endereço é derivado puramente de seeds.

Limites

LimiteValorFonte
Máximo de seeds16MAX_SEEDS
Comprimento máximo de seed32 bytes máximo por seedMAX_SEED_LEN
Intervalo de bump0-255 (1 byte)Anexado como o elemento final de seed
Custo de create_program_address1.500 CUscreate_program_address_units
Custo no pior caso de find_program_address1.500 de entrada + 1.500 x iterações1.500 na entrada + 1.500 por bump falhado
Máximo de signatários PDA por CPI16MAX_SIGNERS

Is this page helpful?

Índice

Editar Página

Gerenciado por

© 2026 Fundação Solana.
Todos os direitos reservados.
Conecte-se
  • Blog