Program Derived Address (PDA)

I Program Derived Address (PDA) sono indirizzi di account a 32 byte derivati in modo deterministico da un ID programma e un insieme di seed. Sono garantiti per non trovarsi sulla curva Ed25519, il che significa che non esiste alcuna chiave privata per essi. Solo il programma il cui ID è stato utilizzato nella derivazione può "firmare" per un PDA, e lo fa attraverso invoke_signed durante le invocazioni cross-program (CPI).

Program Derived AddressProgram Derived Address

Concetti chiave

  • Deterministico: gli stessi seed e ID programma producono sempre lo stesso indirizzo.
  • Fuori curva: l'indirizzo derivato è verificato per non essere una chiave pubblica Ed25519 valida. Se l'hash capita di trovarsi sulla curva, la derivazione fallisce e viene provato un bump seed diverso.
  • Nessuna chiave privata: poiché l'indirizzo è fuori curva, nessuno può produrre una firma crittografica per esso. Il programma "firma" tramite il meccanismo invoke_signed del runtime.

Quando utilizzare i PDA

  • Indirizzamento deterministico: deriva lo stesso account dagli stessi seed ogni volta.
  • Firma del programma: solo il programma proprietario può firmare tramite invoke_signed, consentendo ai programmi di agire come autorità autonome.
  • Stato per utente: deriva account per utente dai seed pubkey dell'utente (ad es., ["user", user_pubkey]).
  • Nessuna gestione di keypair: nessuna chiave privata da memorizzare o perdere. L'indirizzo è derivato puramente dai seed.

Limiti

LimiteValoreFonte
Seed massimi16MAX_SEEDS
Lunghezza massima seed32 byte massimo per seedMAX_SEED_LEN
Range bump0-255 (1 byte)Aggiunto come elemento seed finale
Costo create_program_address1.500 CUcreate_program_address_units
Costo worst-case find_program_address1.500 iniziali + 1.500 x iterazioni1.500 all'ingresso + 1.500 per ogni bump fallito
Firmatari PDA massimi per CPI16MAX_SIGNERS

Is this page helpful?

Indice dei contenuti

Modifica pagina

Gestito da

© 2026 Solana Foundation.
Tutti i diritti riservati.
Resta connesso