Zusammenfassung
Programme, die über Loader-v3 bereitgestellt werden, können aktualisiert werden, wenn eine Upgrade-Authority festgelegt ist. Das Widerrufen der Authority macht das Programm unveränderlich. Behandelt den 9-Schritte-Upgrade-Mechanismus, alle 9 Loader-v3- Anweisungen, Build-Verifizierung und die 5 Loader-Typen.
Programme deployen
Native Rust
Deployment mit der Solana-CLI über solana program deploy.
Anchor
Deployment mit dem Anchor-Framework über anchor deploy.
Programme upgraden
Um ein Programm zu upgraden, muss ein Konto die Upgrade-Authority besitzen
(normalerweise das Konto, das das Programm ursprünglich
deployed hat). Während des Deployments oder Upgrades
wird neuer Bytecode in ein temporäres Buffer-Konto hochgeladen und dann in das
Programmdaten-Konto geschrieben. Wenn die Upgrade-Authority auf None
gesetzt wird, wird das Programm unveränderlich und weitere Updates werden
dauerhaft verhindert.
Upgrade-Mechanismus
Wenn
UpgradeableLoaderInstruction::Upgrade
verarbeitet wird, führt die Runtime folgende Schritte aus:
- Überprüft, ob das Programm-Konto beschreibbar ist und sich im Besitz von Loader-v3 befindet.
- Überprüft, ob das Buffer-Konto einen
Buffer-Status mit der korrekten Authority enthält. - Überprüft, ob die
upgrade_authority_addressdes ProgramData-Kontos übereinstimmt und nichtNoneist. - Überprüft, ob das Programm nicht bereits im aktuellen Slot deployed wurde
(
clock.slot != slot). - Lädt und verifiziert die neuen ELF-Bytes aus dem Buffer.
- Kopiert den neuen Bytecode aus dem Buffer in das ProgramData-Konto und setzt die verbleibenden Bytes auf null.
- Finanziert das ProgramData-Konto bis zur Mietbefreiung.
- Leert das Buffer-Konto (setzt Lamports auf 0) und kürzt dessen Daten.
- Die neue Version wird im nächsten Slot wirksam (
deployment_slot + 1).
Das Program-Konto selbst (sein Zustand und der programdata_address-Zeiger)
ändert sich während eines Upgrades nicht. Nur der Bytecode und die
Slot-Metadaten des ProgramData-Kontos werden aktualisiert.
Loader-v3-Anweisungsreferenz
Loader-v3 (BPF Loader Upgradeable) ist der aktuelle Standard-Loader für die Bereitstellung von Programmen auf Solana.
| Anweisung | Beschreibung |
|---|---|
InitializeBuffer | Setzt den Zustand eines Buffer-Kontos auf Buffer mit der angegebenen Authority. Schlägt fehl, wenn bereits initialisiert. |
Write | Schreibt Bytes am angegebenen Offset in ein Buffer-Konto. Authority muss signieren. |
DeployWithMaxDataLen | Erstellt ein neues Programm: leitet die ProgramData-Adresse ab, erstellt das ProgramData-Konto via CPI zum System Program, verifiziert und deployt die ELF aus dem Buffer, setzt den Zustand des Program-Kontos und markiert es als ausführbar. |
Upgrade | Ersetzt den Bytecode im ProgramData-Konto eines bestehenden Programms aus einem Buffer. |
SetAuthority | Ändert die Authority eines Buffer- oder ProgramData-Kontos. Das Setzen auf None bei ProgramData macht das Programm unveränderlich. Buffer-Authority kann nicht auf None gesetzt werden. |
SetAuthorityChecked | Wie SetAuthority, erfordert jedoch zusätzlich, dass die neue Authority die Transaktion signiert. |
Close | Schließt ein Buffer-, nicht initialisiertes oder ProgramData-Konto, indem seine Lamports an einen Empfänger übertragen werden. Das Schließen von ProgramData schreibt auch einen Closed-Tombstone in den Programm-Cache. Ein Programm, das im aktuellen Slot deployt wurde, kann nicht geschlossen werden. |
ExtendProgramChecked | Erweitert die Allokation des ProgramData-Kontos um zusätzliche Bytes und finanziert die zusätzliche Miete vom Zahler. |
Migrate | Migriert ein Loader-v3-Programm zu Loader-v4, indem die Eigentümerschaft des Program-Kontos übertragen und der Bytecode kopiert wird. Erfordert die Signatur der Migrations-Authority oder der Upgrade-Authority des Programms. Loader-v4 ist noch nicht im Mainnet veröffentlicht. |
Programme verifizieren
Solana unterstützt verifizierbare Builds, die es Nutzern ermöglichen zu bestätigen, dass der On-Chain-Bytecode eines Programms mit seinem öffentlichen Quellcode übereinstimmt. Das Anchor-Framework bietet integrierte Unterstützung für verifizierbare Builds.
Um den Verifizierungsstatus eines bereitgestellten Programms zu überprüfen, suchen Sie nach seiner Programm-ID im Solana Explorer, oder verwenden Sie die Ellipsis Labs Solana Verifiable Build CLI, um On-Chain-Programme unabhängig zu verifizieren.
Loader-Programme
| Loader | Adresse | Aktualisierbar | Beschreibung |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Nur über Validator-Software-Upgrade | Besitzt Builtins (System, Vote, Stake) und andere Loader |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Nein (Loader-Verwaltung deaktiviert) | Legacy-Programme |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Nein (Loader-Verwaltung deaktiviert) | Legacy-Programme |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Ja, wenn Upgrade-Authority gesetzt ist | Besitzt alle neu bereitgestellten Programme |
| Loader-v4 | LoaderV411111111111111111111111111111111111 | Ja, wenn Authority gesetzt ist | Noch nicht im Mainnet veröffentlicht |
Is this page helpful?