Οι Program Derived Addresses (PDAs) είναι διευθύνσεις λογαριασμών 32 bytes που
προκύπτουν ντετερμινιστικά από ένα program ID και ένα σύνολο seeds. Είναι
εγγυημένο ότι δεν βρίσκονται πάνω στην καμπύλη Ed25519, πράγμα που σημαίνει ότι
δεν υπάρχει ιδιωτικό κλειδί γι' αυτές. Μόνο το πρόγραμμα του οποίου το ID
χρησιμοποιήθηκε στην παραγωγή μπορεί να "υπογράψει" για ένα PDA, και το κάνει
αυτό μέσω invoke_signed κατά τη διάρκεια κλήσεων μεταξύ
προγραμμάτων (CPIs).
Program Derived Address
Παραγωγή PDA
Αλγόριθμος παραγωγής, κανονικό bump, παραδείγματα findProgramAddress με διαφορετικούς τύπους seed.
Λογαριασμοί PDA
Δημιουργία λογαριασμών σε διευθύνσεις PDA, υπογραφή invoke_signed, μοτίβα Anchor.
Βασικά στοιχεία
- Ντετερμινιστικό: Τα ίδια seeds και program ID παράγουν πάντα την ίδια διεύθυνση.
- Εκτός καμπύλης: Η παραγόμενη διεύθυνση επαληθεύεται ότι δεν είναι έγκυρο δημόσιο κλειδί Ed25519. Αν το hash τυχαίνει να πέσει πάνω στην καμπύλη, η παραγωγή αποτυγχάνει και δοκιμάζεται ένα διαφορετικό bump seed.
- Χωρίς ιδιωτικό κλειδί: Επειδή η διεύθυνση είναι εκτός καμπύλης, κανείς δεν
μπορεί να παράγει κρυπτογραφική υπογραφή γι' αυτήν. Το πρόγραμμα "υπογράφει"
μέσω του μηχανισμού
invoke_signedτου runtime.
Πότε να χρησιμοποιείτε PDAs
- Ντετερμινιστική διευθυνσιοδότηση: Παράγετε τον ίδιο λογαριασμό από τα ίδια seeds κάθε φορά.
- Υπογραφή προγράμματος: Μόνο το πρόγραμμα-ιδιοκτήτης μπορεί να υπογράψει
μέσω
invoke_signed, επιτρέποντας στα προγράμματα να λειτουργούν ως αυτόνομες αρχές. - Κατάσταση ανά χρήστη: Παράγετε λογαριασμούς ανά χρήστη από seeds pubkey
χρήστη (π.χ.,
["user", user_pubkey]). - Χωρίς διαχείριση keypair: Δεν υπάρχει ιδιωτικό κλειδί για αποθήκευση ή απώλεια. Η διεύθυνση προκύπτει αποκλειστικά από seeds.
Όρια
| Όριο | Τιμή | Πηγή |
|---|---|---|
| Μέγιστα seeds | 16 | MAX_SEEDS |
| Μέγιστο μήκος seed | 32 bytes μέγιστο ανά seed | MAX_SEED_LEN |
| Εύρος bump | 0-255 (1 byte) | Προστίθεται ως το τελικό στοιχείο seed |
Κόστος create_program_address | 1.500 CUs | create_program_address_units |
Κόστος find_program_address χειρότερης περίπτωσης | 1.500 εισόδου + 1.500 x επαναλήψεις | 1.500 κατά την είσοδο + 1.500 ανά αποτυχημένο bump |
| Μέγιστοι υπογράφοντες PDA ανά CPI | 16 | MAX_SIGNERS |
Is this page helpful?