Περίληψη
Τα προγράμματα που αναπτύσσονται μέσω loader-v3 μπορούν να αναβαθμιστούν όταν έχει οριστεί μια αρχή αναβάθμισης. Η ανάκληση της αρχής καθιστά το πρόγραμμα αμετάβλητο. Καλύπτει τον μηχανισμό αναβάθμισης 9 βημάτων, και τις 9 οδηγίες loader-v3, την επαλήθευση κατασκευής και τους 5 τύπους φόρτωσης.
Ανάπτυξη προγραμμάτων
Native Rust
Αναπτύξτε χρησιμοποιώντας το Solana CLI με solana program deploy.
Anchor
Αναπτύξτε χρησιμοποιώντας το framework Anchor με anchor deploy.
Αναβάθμιση προγραμμάτων
Για να αναβαθμίσετε ένα πρόγραμμα, ένας λογαριασμός πρέπει να κατέχει την αρχή
αναβάθμισης (συνήθως ο λογαριασμός που αρχικά
ανέπτυξε το πρόγραμμα). Κατά την ανάπτυξη ή
αναβάθμιση, ο νέος bytecode μεταφορτώνεται σε έναν προσωρινό λογαριασμό buffer
και στη συνέχεια εγγράφεται στον λογαριασμό program data. Ο ορισμός της αρχής
αναβάθμισης σε None καθιστά το πρόγραμμα αμετάβλητο και αποτρέπει μόνιμα
περαιτέρω ενημερώσεις.
Μηχανισμός αναβάθμισης
Όταν εκτελείται η εντολή
UpgradeableLoaderInstruction::Upgrade,
το runtime:
- Επαληθεύει ότι ο λογαριασμός Program είναι εγγράψιμος και ανήκει στον loader-v3.
- Επαληθεύει ότι ο λογαριασμός Buffer περιέχει μια κατάσταση
Bufferμε τη σωστή αρχή. - Επαληθεύει ότι το
upgrade_authority_addressτου λογαριασμού ProgramData ταιριάζει και δεν είναιNone. - Επαληθεύει ότι το πρόγραμμα δεν είχε ήδη αναπτυχθεί στο τρέχον slot
(
clock.slot != slot). - Φορτώνει και επαληθεύει τα νέα ELF bytes από το buffer.
- Αντιγράφει τον νέο bytecode από το buffer στον λογαριασμό ProgramData και μηδενίζει τα υπόλοιπα bytes.
- Χρηματοδοτεί τον λογαριασμό ProgramData για απαλλαγή από ενοίκιο.
- Αδειάζει τον λογαριασμό buffer (ορίζει τα lamports σε 0) και περικόπτει τα δεδομένα του.
- Η νέα έκδοση τίθεται σε ισχύ στο επόμενο 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 Loader | NativeLoader1111111111111111111111111111111 | Μόνο μέσω αναβάθμισης λογισμικού validator | Κατέχει builtins (System, Vote, Stake) και άλλους φορτωτές |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Όχι (η διαχείριση φορτωτή είναι απενεργοποιημένη) | Παλαιά προγράμματα |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Όχι (η διαχείριση φορτωτή είναι απενεργοποιημένη) | Παλαιά προγράμματα |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Ναι, εάν έχει οριστεί upgrade authority | Κατέχει όλα τα νέα αναπτυγμένα προγράμματα |
| Loader-v4 | LoaderV411111111111111111111111111111111111 | Ναι, εάν έχει οριστεί authority | Δεν έχει κυκλοφορήσει ακόμα στο mainnet |
Is this page helpful?