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 Address
Derivação de PDA
Algoritmo de derivação, bump canónico, exemplos de findProgramAddress com diferentes tipos de seed.
Contas PDA
Criação de contas em endereços PDA, assinatura invoke_signed, padrões Anchor.
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_signeddo 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
| Limite | Valor | Fonte |
|---|---|---|
| Máximo de seeds | 16 | MAX_SEEDS |
| Comprimento máximo de seed | 32 bytes máximo por seed | MAX_SEED_LEN |
| Intervalo de bump | 0-255 (1 byte) | Anexado como o elemento final de seed |
Custo de create_program_address | 1.500 CUs | create_program_address_units |
Custo no pior caso de find_program_address | 1.500 de entrada + 1.500 x iterações | 1.500 na entrada + 1.500 por bump falhado |
| Máximo de signatários PDA por CPI | 16 | MAX_SIGNERS |
Is this page helpful?