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

Περίληψη

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

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

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

Για να αναβαθμίσετε ένα πρόγραμμα, ένας λογαριασμός πρέπει να κατέχει την αρχή αναβάθμισης (συνήθως ο λογαριασμός που αρχικά ανέπτυξε το πρόγραμμα). Κατά την ανάπτυξη ή αναβάθμιση, ο νέος 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 μεταφέροντας τα lamports του σε έναν παραλήπτη. Το κλείσιμο του ProgramData γράφει επίσης ένα tombstone Closed στην κρυφή μνήμη προγράμματος. Δεν μπορεί να κλείσει ένα πρόγραμμα που αναπτύχθηκε στο τρέχον slot.
ExtendProgramCheckedΕπεκτείνει την κατανομή του λογαριασμού ProgramData κατά επιπλέον bytes, χρηματοδοτώντας το επιπλέον rent από τον πληρωτή.
MigrateΜεταφέρει ένα πρόγραμμα loader-v3 σε loader-v4 μεταβιβάζοντας την κυριότητα του λογαριασμού προγράμματος και αντιγράφοντας τον bytecode. Απαιτεί την εξουσιοδότηση μετανάστευσης ή την εξουσιοδότηση αναβάθμισης του προγράμματος να υπογράψει. Το loader-v4 δεν έχει ακόμη κυκλοφορήσει στο mainnet.

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

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

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

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

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

Is this page helpful?

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

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

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

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