Samenvatting
Programma's die via loader-v3 zijn geïmplementeerd kunnen worden geüpgraded wanneer een upgrade-autoriteit is ingesteld. Het intrekken van de autoriteit maakt het programma onveranderlijk. Behandelt het 9-stappen upgrademechanisme, alle 9 loader-v3 instructies, buildverificatie en de 5 loader-typen.
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 het al geïnitialiseerd is. |
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, creëert het ProgramData account 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 | Zoals SetAuthority, maar vereist dat de nieuwe authority ook de transactie ondertekent. |
Close | Sluit een buffer, niet-geïnitialiseerd of ProgramData account door zijn lamports over te dragen aan 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 gedeployd. |
ExtendProgramChecked | Breidt de allocatie van het ProgramData account uit met extra bytes, waarbij de extra rent wordt gefinancierd door de betaler. |
Migrate | Migreert een loader-v3 programma naar loader-v4 door het eigendom van het program account over te dragen en de bytecode te kopiëren. Vereist dat de migratie authority of de upgrade authority van het programma ondertekent. Loader-v4 is nog niet uitgebracht op mainnet. |
Programma's verifiëren
Solana ondersteunt verifieerbare builds, waarmee gebruikers kunnen bevestigen dat de on-chain 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 naar het programma-ID op de Solana Explorer, of gebruik de Ellipsis Labs Solana Verifiable Build CLI om on-chain programma's onafhankelijk te verifiëren.
Loader-programma's
| Loader | Adres | Upgradebaar | Beschrijving |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Alleen via validator software-upgrade | Bezit 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 authority is ingesteld | Bezit alle nieuw geïmplementeerde programma's |
| Loader-v4 | LoaderV411111111111111111111111111111111111 | Ja, als authority is ingesteld | Nog niet uitgebracht op mainnet |
Is this page helpful?