Περίληψη
Τα προγράμματα που αναπτύσσονται μέσω loader-v3 μπορούν να αναβαθμιστούν όταν έχει οριστεί μια αρχή αναβάθμισης. Η ανάκληση της αρχής καθιστά το πρόγραμμα αμετάβλητο. Καλύπτει τον μηχανισμό αναβάθμισης, τις οδηγίες ανάπτυξης και αναβάθμισης loader-v3, την επαλήθευση κατασκευής και τα διαθέσιμα προγράμματα φόρτωσης.
Ανάπτυξη προγραμμάτων
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 μεταφέροντας τα lamport του σε έναν αποδέκτη. Το κλείσιμο του ProgramData γράφει επίσης ένα Closed tombstone στην προσωρινή μνήμη προγράμματος. Δεν μπορεί να κλείσει ένα πρόγραμμα που αναπτύχθηκε στο τρέχον slot. |
ExtendProgramChecked | Επεκτείνει την κατανομή του λογαριασμού ProgramData κατά επιπλέον bytes, χρηματοδοτώντας το επιπλέον rent από τον πληρωτή. |
Επαλήθευση προγραμμάτων
Η Solana υποστηρίζει επαληθεύσιμες κατασκευές, οι οποίες επιτρέπουν στους χρήστες να επιβεβαιώσουν ότι ο bytecode ενός προγράμματος onchain ταιριάζει με τον δημόσιο πηγαίο κώδικά του. Το πλαίσιο Anchor παρέχει ενσωματωμένη υποστήριξη για επαληθεύσιμες κατασκευές.
Για να ελέγξετε την κατάσταση επαλήθευσης ενός αναπτυγμένου προγράμματος, αναζητήστε το αναγνωριστικό προγράμματος του στον Solana Explorer, ή χρησιμοποιήστε το Solana Verifiable Build CLI της Ellipsis Labs για να επαληθεύσετε ανεξάρτητα τα onchain προγράμματα.
Προγράμματα φόρτωσης
| Φορτωτής | Διεύθυνση | Δυνατότητα Αναβάθμισης | Περιγραφή |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Μόνο μέσω αναβάθμισης λογισμικού validator | Κατέχει τα builtins (System, Vote, Stake) και άλλους φορτωτές |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Όχι (η διαχείριση φορτωτή απενεργοποιήθηκε) | Παλαιότερα προγράμματα |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Όχι (η διαχείριση φορτωτή απενεργοποιήθηκε) | Παλαιότερα προγράμματα |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Ναι, εφόσον έχει οριστεί δικαίωμα αναβάθμισης | Κατέχει όλα τα πρόσφατα αναπτυγμένα προγράμματα |
Is this page helpful?