Programma-implementatie

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

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 deze al is geïnitialiseerd.
WriteSchrijft bytes op de opgegeven offset in een buffer-account. Authority moet ondertekenen.
DeployWithMaxDataLenCreë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.
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.
SetAuthorityCheckedVergelijkbaar met SetAuthority, maar vereist dat de nieuwe authority de transactie ook ondertekent.
CloseSluit 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.
ExtendProgramCheckedBreidt 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

LoaderAdresUpgradebaarBeschrijving
Native LoaderNativeLoader1111111111111111111111111111111Alleen via validator software upgradeEigenaar van 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-autoriteit is ingesteldEigenaar van alle nieuw geïmplementeerde programma's

Is this page helpful?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden