Program Derived Addresses (PDA's) zijn 32-byte accountadressen die
deterministisch worden afgeleid van een program ID en een set seeds. Ze liggen
gegarandeerd niet op de Ed25519-curve, wat betekent dat er geen private key voor
bestaat. Alleen het programma waarvan het ID is gebruikt bij de afleiding kan
"ondertekenen" voor een PDA, en dit doet het via
invoke_signed tijdens cross-program invocations (CPI's).
Program Derived Address
PDA-afleiding
Afleidingsalgoritme, canonical bump, findProgramAddress-voorbeelden met verschillende seed-types.
PDA-accounts
Accounts aanmaken op PDA-adressen, invoke_signed-ondertekening, Anchor-patronen.
Belangrijkste feiten
- Deterministisch: Dezelfde seeds en program ID produceren altijd hetzelfde adres.
- Off-curve: Het afgeleide adres wordt geverifieerd om geen geldige Ed25519 public key te zijn. Als de hash toevallig op de curve terechtkomt, mislukt de afleiding en wordt een andere bump seed geprobeerd.
- Geen private key: Omdat het adres off-curve is, kan niemand een
cryptografische handtekening ervoor produceren. Het programma "ondertekent"
via het
invoke_signed-mechanisme van de runtime.
Wanneer PDA's gebruiken
- Deterministisch adresseren: Leid hetzelfde account af van dezelfde seeds elke keer.
- Programma-ondertekening: Alleen het eigenaar-programma kan ondertekenen
via
invoke_signed, waardoor programma's kunnen fungeren als autonome autoriteiten. - Gebruikersspecifieke state: Leid per-gebruiker accounts af van user pubkey
seeds (bijv.
["user", user_pubkey]). - Geen keypair-beheer: Geen private key om op te slaan of te verliezen. Het adres wordt puur afgeleid van seeds.
Limieten
| Limiet | Waarde | Bron |
|---|---|---|
| Max seeds | 16 | MAX_SEEDS |
| Max seed-lengte | 32 bytes maximum per seed | MAX_SEED_LEN |
| Bump-bereik | 0-255 (1 byte) | Toegevoegd als het laatste seed-element |
create_program_address kosten | 1.500 CU's | create_program_address_units |
find_program_address worst-case kosten | 1.500 entry + 1.500 x iteraties | 1.500 bij entry + 1.500 per mislukte bump |
| Max PDA-ondertekenaars per CPI | 16 | MAX_SIGNERS |
Is this page helpful?