Program Derived Addresses (PDAs) sind 32-Byte-Kontenadressen, die
deterministisch aus einer Programm-ID und einer Reihe von seeds abgeleitet
werden. Sie liegen garantiert nicht auf der Ed25519-Kurve, was bedeutet, dass
kein privater Schlüssel für sie existiert. Nur das Programm, dessen ID bei der
Ableitung verwendet wurde, kann für eine PDA "signieren", und zwar durch
invoke_signed während Cross-Program-Invocations (CPIs).
Program Derived Address
PDA-Ableitung
Ableitungsalgorithmus, kanonischer bump, findProgramAddress-Beispiele mit verschiedenen seed-Typen.
PDA-Konten
Erstellen von Konten an PDA-Adressen, invoke_signed-Signierung, Anchor-Muster.
Wichtige Fakten
- Deterministisch: Dieselben seeds und Programm-ID erzeugen immer dieselbe Adresse.
- Off-curve: Die abgeleitete Adresse wird verifiziert, dass sie kein gültiger Ed25519 Public Key ist. Wenn der Hash zufällig auf der Kurve landet, schlägt die Ableitung fehl und ein anderer bump seed wird versucht.
- Kein privater Schlüssel: Da die Adresse off-curve ist, kann niemand eine
kryptografische Signatur dafür erzeugen. Das Programm "signiert" stattdessen
über den
invoke_signed-Mechanismus der Runtime.
Wann PDAs verwendet werden
- Deterministische Adressierung: Leiten Sie dasselbe Konto aus denselben seeds jedes Mal ab.
- Programm-Signierung: Nur das besitzende Programm kann über
invoke_signedsignieren, wodurch Programme als autonome Autoritäten agieren können. - Benutzerspezifischer Status: Leiten Sie benutzerspezifische Konten aus
User-pubkey-seeds ab (z. B.
["user", user_pubkey]). - Keine keypair-Verwaltung: Kein privater Schlüssel zum Speichern oder Verlieren. Die Adresse wird rein aus seeds abgeleitet.
Limits
| Limit | Wert | Quelle |
|---|---|---|
| Max seeds | 16 | MAX_SEEDS |
| Max seed-Länge | 32 Bytes maximal pro seed | MAX_SEED_LEN |
| Bump-Bereich | 0-255 (1 Byte) | Als letztes seed-Element angehängt |
create_program_address-Kosten | 1.500 CUs | create_program_address_units |
find_program_address Worst-Case-Kosten | 1.500 Einstieg + 1.500 x Iterationen | 1.500 beim Einstieg + 1.500 pro fehlgeschlagenem Bump |
| Max PDA-Signaturen pro CPI | 16 | MAX_SIGNERS |
Is this page helpful?