Programma-implementatie

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

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:

  1. Verifieert dat het program account schrijfbaar is en eigendom is van loader-v3.
  2. Verifieert dat het bufferaccount een Buffer status bevat met de juiste autoriteit.
  3. Verifieert dat de upgrade_authority_address van het programdata-account overeenkomt en niet None is.
  4. Verifieert dat het programma niet al in de huidige slot is geïmplementeerd (clock.slot != slot).
  5. Laadt en verifieert de nieuwe ELF-bytes uit de buffer.
  6. Kopieert de nieuwe bytecode uit de buffer naar het programdata-account en zet de resterende bytes op nul.
  7. Financiert het programdata-account tot huurvrijstelling.
  8. Leegt het bufferaccount (zet lamports op 0) en kapt de data af.
  9. 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.

InstructieBeschrijving
InitializeBufferStelt de status van een buffer account in op Buffer met de opgegeven authority. Mislukt als het al geïnitialiseerd is.
WriteSchrijft bytes op de opgegeven offset in een buffer account. Authority moet ondertekenen.
DeployWithMaxDataLenCreë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.
UpgradeVervangt de bytecode in het ProgramData account van een bestaand programma vanuit een buffer.
SetAuthorityWijzigt 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.
SetAuthorityCheckedZoals SetAuthority, maar vereist dat de nieuwe authority ook de transactie ondertekent.
CloseSluit 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.
ExtendProgramCheckedBreidt de allocatie van het ProgramData account uit met extra bytes, waarbij de extra rent wordt gefinancierd door de betaler.
MigrateMigreert 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

LoaderAdresUpgradebaarBeschrijving
Native LoaderNativeLoader1111111111111111111111111111111Alleen via validator software-upgradeBezit builtins (System, Vote, Stake) en andere loaders
BPF Loader (v1)BPFLoader1111111111111111111111111111111111Nee (loaderbeheer uitgeschakeld)Legacy-programma's
BPF Loader (v2)BPFLoader2111111111111111111111111111111111Nee (loaderbeheer uitgeschakeld)Legacy-programma's
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111Ja, als upgrade authority is ingesteldBezit alle nieuw geïmplementeerde programma's
Loader-v4LoaderV411111111111111111111111111111111111Ja, als authority is ingesteldNog niet uitgebracht op mainnet

Is this page helpful?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden