Samenvatting
Programma's die via loader-v3 zijn gedeployed, kunnen worden geüpgraded wanneer een upgrade-authority is ingesteld. Het intrekken van de authority maakt het programma onveranderlijk. Behandelt het upgrademechanisme, loader-v3 deployment- en upgrade-instructies, buildverificatie en de beschikbare loaderprogramma's.
Programma's implementeren
Native Rust
Implementeer met de Solana CLI met solana program deploy.
Anchor
Implementeer met het Anchor-framework met anchor deploy.
Programma's upgraden
Om een programma te upgraden moet een account de upgrade-autoriteit bezitten
(doorgaans het account dat oorspronkelijk
het programma heeft geïmplementeerd). Tijdens
implementatie of upgrade wordt nieuwe bytecode geüpload naar een tijdelijk
bufferaccount en vervolgens naar het programdata-account geschreven. Het
instellen van de upgrade-autoriteit op None maakt het programma
onveranderlijk en voorkomt permanent verdere updates.
Upgrademechanisme
Wanneer
UpgradeableLoaderInstruction::Upgrade
wordt verwerkt, doet de runtime het volgende:
- Verifieert dat het program account schrijfbaar is en eigendom is van loader-v3.
- Verifieert dat het bufferaccount een
Bufferstatus bevat met de juiste autoriteit. - Verifieert dat de
upgrade_authority_addressvan het programdata-account overeenkomt en nietNoneis. - Verifieert dat het programma niet al in de huidige slot is geïmplementeerd
(
clock.slot != slot). - Laadt en verifieert de nieuwe ELF-bytes uit de buffer.
- Kopieert de nieuwe bytecode uit de buffer naar het programdata-account en zet de resterende bytes op nul.
- Financiert het programdata-account tot huurvrijstelling.
- Leegt het bufferaccount (zet lamports op 0) en kapt de data af.
- De nieuwe versie wordt effectief in de volgende slot (
deployment_slot + 1).
Het Program account zelf (zijn status en de programdata_address pointer)
verandert niet tijdens een upgrade. Alleen de bytecode en slot metadata van het
ProgramData account worden bijgewerkt.
Loader-v3 instructiereferentie
Loader-v3 (BPF Loader Upgradeable) is de huidige standaard loader voor het deployen van programma's op Solana.
| Instructie | Beschrijving |
|---|---|
InitializeBuffer | Stelt de status van een buffer-account in op Buffer met de opgegeven authority. Mislukt als deze al is geïnitialiseerd. |
Write | Schrijft bytes op de opgegeven offset in een buffer-account. Authority moet ondertekenen. |
DeployWithMaxDataLen | Creëert een nieuw programma: leidt het ProgramData-adres af, maakt het ProgramData-account aan via CPI naar System Program, verifieert en deployt de ELF vanuit de buffer, stelt de status van het Program-account in en markeert het als uitvoerbaar. |
Upgrade | Vervangt de bytecode in het ProgramData-account van een bestaand programma vanuit een buffer. |
SetAuthority | Wijzigt de authority van een Buffer- of ProgramData-account. Instellen op None op ProgramData maakt het programma onveranderlijk. Buffer-authority kan niet worden ingesteld op None. |
SetAuthorityChecked | Vergelijkbaar met SetAuthority, maar vereist dat de nieuwe authority de transactie ook ondertekent. |
Close | Sluit een buffer-, uninitialized- of ProgramData-account door de lamports over te dragen naar een ontvanger. Het sluiten van ProgramData schrijft ook een Closed-tombstone naar de programma-cache. Kan geen programma sluiten dat in de huidige slot is gedeployed. |
ExtendProgramChecked | Breidt de allocatie van het ProgramData-account uit met extra bytes, waarbij de extra rent wordt gefinancierd vanuit de betaler. |
Programma's verifiëren
Solana ondersteunt verifieerbare builds, waarmee gebruikers kunnen bevestigen dat de onchain-bytecode van een programma overeenkomt met de publieke broncode. Het Anchor-framework biedt ingebouwde ondersteuning voor verifieerbare builds.
Om de verificatiestatus van een geïmplementeerd programma te controleren, zoek je het programma-ID op in de Solana Explorer, of gebruik je de Ellipsis Labs Solana Verifiable Build CLI om onchain-programma's onafhankelijk te verifiëren.
Loader-programma's
| Loader | Adres | Upgradebaar | Beschrijving |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Alleen via validator software upgrade | Eigenaar van builtins (System, Vote, Stake) en andere loaders |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Nee (loaderbeheer uitgeschakeld) | Legacy-programma's |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Nee (loaderbeheer uitgeschakeld) | Legacy-programma's |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Ja, als upgrade-autoriteit is ingesteld | Eigenaar van alle nieuw geïmplementeerde programma's |
Is this page helpful?