Les Program Derived Addresses (PDAs) sont des adresses de compte de 32 octets
dérivées de manière déterministe à partir d'un ID de programme et d'un ensemble
de seeds. Elles sont garanties de ne pas se trouver sur la courbe Ed25519, ce
qui signifie qu'aucune clé privée n'existe pour elles. Seul le programme dont
l'ID a été utilisé dans la dérivation peut « signer » pour une PDA, et il le
fait via invoke_signed lors d'invocations inter-programmes
(CPIs).
Program Derived Address
Dérivation de PDA
Algorithme de dérivation, bump seed canonique, exemples de findProgramAddress avec différents types de seeds.
Comptes PDA
Création de comptes aux adresses PDA, signature invoke_signed, patterns Anchor.
Points clés
- Déterministe : les mêmes seeds et ID de programme produisent toujours la même adresse.
- Hors courbe : l'adresse dérivée est vérifiée pour ne pas être une clé publique Ed25519 valide. Si le hash se trouve sur la courbe, la dérivation échoue et un bump seed différent est essayé.
- Aucune clé privée : comme l'adresse est hors courbe, personne ne peut
produire une signature cryptographique pour elle. Le programme « signe » via
le mécanisme
invoke_signeddu runtime à la place.
Quand utiliser les PDAs
- Adressage déterministe : dérivez le même compte à partir des mêmes seeds à chaque fois.
- Signature par programme : seul le programme propriétaire peut signer via
invoke_signed, permettant aux programmes d'agir comme autorités autonomes. - État par utilisateur : dérivez des comptes par utilisateur à partir de
seeds de pubkey utilisateur (par ex.,
["user", user_pubkey]). - Aucune gestion de keypair : aucune clé privée à stocker ou perdre. L'adresse est dérivée uniquement à partir des seeds.
Limites
| Limite | Valeur | Source |
|---|---|---|
| Nombre maximum de seeds | 16 | MAX_SEEDS |
| Longueur maximale de seed | 32 octets maximum par seed | MAX_SEED_LEN |
| Plage de bump | 0-255 (1 octet) | Ajouté comme élément de seed final |
Coût create_program_address | 1 500 CU | create_program_address_units |
Coût find_program_address dans le pire cas | 1 500 à l'entrée + 1 500 x itérations | 1 500 à l'entrée + 1 500 par bump échoué |
| Nombre maximum de signataires PDA par CPI | 16 | MAX_SIGNERS |
Is this page helpful?