Ανάπτυξη προγράμματος

Περίληψη

Τα προγράμματα που αναπτύσσονται μέσω loader-v3 μπορούν να αναβαθμιστούν όταν έχει οριστεί μια αρχή αναβάθμισης. Η ανάκληση της αρχής καθιστά το πρόγραμμα αμετάβλητο. Καλύπτει τον μηχανισμό αναβάθμισης, τις οδηγίες ανάπτυξης και αναβάθμισης loader-v3, την επαλήθευση κατασκευής και τα διαθέσιμα προγράμματα φόρτωσης.

Ανάπτυξη προγραμμάτων

Αναβάθμιση προγραμμάτων

Για να αναβαθμίσετε ένα πρόγραμμα, ένας λογαριασμός πρέπει να κατέχει την αρχή αναβάθμισης (συνήθως ο λογαριασμός που αρχικά ανέπτυξε το πρόγραμμα). Κατά την ανάπτυξη ή αναβάθμιση, ο νέος bytecode μεταφορτώνεται σε έναν προσωρινό λογαριασμό buffer και στη συνέχεια εγγράφεται στον λογαριασμό program data. Ο ορισμός της αρχής αναβάθμισης σε None καθιστά το πρόγραμμα αμετάβλητο και αποτρέπει μόνιμα περαιτέρω ενημερώσεις.

Μηχανισμός αναβάθμισης

Όταν εκτελείται η εντολή UpgradeableLoaderInstruction::Upgrade, το runtime:

  1. Επαληθεύει ότι ο λογαριασμός Program είναι εγγράψιμος και ανήκει στον loader-v3.
  2. Επαληθεύει ότι ο λογαριασμός Buffer περιέχει μια κατάσταση Buffer με τη σωστή αρχή.
  3. Επαληθεύει ότι το upgrade_authority_address του λογαριασμού ProgramData ταιριάζει και δεν είναι None.
  4. Επαληθεύει ότι το πρόγραμμα δεν είχε ήδη αναπτυχθεί στο τρέχον slot (clock.slot != slot).
  5. Φορτώνει και επαληθεύει τα νέα ELF bytes από το buffer.
  6. Αντιγράφει τον νέο bytecode από το buffer στον λογαριασμό ProgramData και μηδενίζει τα υπόλοιπα bytes.
  7. Χρηματοδοτεί τον λογαριασμό ProgramData για απαλλαγή από ενοίκιο.
  8. Αδειάζει τον λογαριασμό buffer (ορίζει τα lamports σε 0) και περικόπτει τα δεδομένα του.
  9. Η νέα έκδοση τίθεται σε ισχύ στο επόμενο slot (deployment_slot + 1).

Ο ίδιος ο λογαριασμός Program (η κατάστασή του και ο δείκτης programdata_address) δεν αλλάζει κατά τη διάρκεια μιας αναβάθμισης. Μόνο ο bytecode του λογαριασμού ProgramData και τα μεταδεδομένα slot ενημερώνονται.

Αναφορά εντολών loader-v3

Το loader-v3 (BPF Loader Upgradeable) είναι ο τρέχων προεπιλεγμένος loader για την ανάπτυξη προγραμμάτων στο Solana.

ΟδηγίαΠεριγραφή
InitializeBufferΟρίζει την κατάσταση ενός λογαριασμού buffer σε Buffer με την καθορισμένη αρχή. Αποτυγχάνει εάν έχει ήδη αρχικοποιηθεί.
WriteΓράφει bytes στην καθορισμένη μετατόπιση σε έναν λογαριασμό buffer. Η αρχή πρέπει να υπογράψει.
DeployWithMaxDataLenΔημιουργεί ένα νέο πρόγραμμα: παράγει τη διεύθυνση ProgramData, δημιουργεί τον λογαριασμό ProgramData μέσω CPI στο System Program, επαληθεύει και αναπτύσσει το ELF από το buffer, ορίζει την κατάσταση του λογαριασμού Program και τον σημειώνει ως εκτελέσιμο.
UpgradeΑντικαθιστά τον bytecode σε έναν υπάρχοντα λογαριασμό ProgramData προγράμματος από ένα buffer.
SetAuthorityΑλλάζει την αρχή ενός λογαριασμού Buffer ή ProgramData. Ο ορισμός σε None στο ProgramData καθιστά το πρόγραμμα αμετάβλητο. Η αρχή Buffer δεν μπορεί να οριστεί σε None.
SetAuthorityCheckedΌπως το SetAuthority, αλλά απαιτεί η νέα αρχή να υπογράψει επίσης τη συναλλαγή.
CloseΚλείνει έναν λογαριασμό buffer, μη αρχικοποιημένο ή ProgramData μεταφέροντας τα lamport του σε έναν αποδέκτη. Το κλείσιμο του ProgramData γράφει επίσης ένα Closed tombstone στην προσωρινή μνήμη προγράμματος. Δεν μπορεί να κλείσει ένα πρόγραμμα που αναπτύχθηκε στο τρέχον slot.
ExtendProgramCheckedΕπεκτείνει την κατανομή του λογαριασμού ProgramData κατά επιπλέον bytes, χρηματοδοτώντας το επιπλέον rent από τον πληρωτή.

Επαλήθευση προγραμμάτων

Η Solana υποστηρίζει επαληθεύσιμες κατασκευές, οι οποίες επιτρέπουν στους χρήστες να επιβεβαιώσουν ότι ο bytecode ενός προγράμματος onchain ταιριάζει με τον δημόσιο πηγαίο κώδικά του. Το πλαίσιο Anchor παρέχει ενσωματωμένη υποστήριξη για επαληθεύσιμες κατασκευές.

Για να ελέγξετε την κατάσταση επαλήθευσης ενός αναπτυγμένου προγράμματος, αναζητήστε το αναγνωριστικό προγράμματος του στον Solana Explorer, ή χρησιμοποιήστε το Solana Verifiable Build CLI της Ellipsis Labs για να επαληθεύσετε ανεξάρτητα τα onchain προγράμματα.

Προγράμματα φόρτωσης

ΦορτωτήςΔιεύθυνσηΔυνατότητα ΑναβάθμισηςΠεριγραφή
Native LoaderNativeLoader1111111111111111111111111111111Μόνο μέσω αναβάθμισης λογισμικού validatorΚατέχει τα builtins (System, Vote, Stake) και άλλους φορτωτές
BPF Loader (v1)BPFLoader1111111111111111111111111111111111Όχι (η διαχείριση φορτωτή απενεργοποιήθηκε)Παλαιότερα προγράμματα
BPF Loader (v2)BPFLoader2111111111111111111111111111111111Όχι (η διαχείριση φορτωτή απενεργοποιήθηκε)Παλαιότερα προγράμματα
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111Ναι, εφόσον έχει οριστεί δικαίωμα αναβάθμισηςΚατέχει όλα τα πρόσφατα αναπτυγμένα προγράμματα

Is this page helpful?

Πίνακας Περιεχομένων

Επεξεργασία Σελίδας

Διαχειρίζεται από

© 2026 Ίδρυμα Solana.
Με επιφύλαξη παντός δικαιώματος.
Συνδεθείτε