Deployment dei programmi

Riepilogo

I programmi distribuiti tramite loader-v3 possono essere aggiornati quando è impostata un'autorità di aggiornamento. Revocare l'autorità rende il programma immutabile. Copre il meccanismo di aggiornamento in 9 fasi, tutte le 9 istruzioni loader-v3, la verifica della build e i 5 tipi di loader.

Deployment dei programmi

Aggiornamento dei programmi

Per aggiornare un programma, un account deve detenere l'autorità di aggiornamento (tipicamente l'account che ha originariamente effettuato il deployment del programma). Durante il deployment o l'aggiornamento, il nuovo bytecode viene caricato in un account buffer temporaneo, quindi scritto nell'account programdata. Impostare l'autorità di aggiornamento su None rende il programma immutabile e impedisce permanentemente ulteriori aggiornamenti.

Meccanismo di aggiornamento

Quando viene elaborato UpgradeableLoaderInstruction::Upgrade, il runtime:

  1. Verifica che l'account program sia scrivibile e di proprietà di loader-v3.
  2. Verifica che l'account buffer contenga uno stato Buffer con l'autorità corretta.
  3. Verifica che upgrade_authority_address dell'account programdata corrisponda e non sia None.
  4. Verifica che il programma non sia già stato distribuito nello slot corrente (clock.slot != slot).
  5. Carica e verifica i nuovi byte ELF dal buffer.
  6. Copia il nuovo bytecode dal buffer nell'account programdata e azzera i byte rimanenti.
  7. Finanzia l'account programdata per l'esenzione dall'affitto.
  8. Svuota l'account buffer (imposta i lamport a 0) e tronca i suoi dati.
  9. La nuova versione diventa effettiva nello slot successivo (deployment_slot + 1).

L'account Program stesso (il suo stato e il puntatore programdata_address) non cambia durante un aggiornamento. Vengono aggiornati solo il bytecode dell'account ProgramData e i metadati dello slot.

Riferimento istruzioni loader-v3

Loader-v3 (BPF Loader Upgradeable) è il loader predefinito attuale per il deployment di programmi su Solana.

IstruzioneDescrizione
InitializeBufferImposta lo stato di un account buffer su Buffer con l'autorità specificata. Fallisce se già inizializzato.
WriteScrive byte all'offset specificato in un account buffer. L'autorità deve firmare.
DeployWithMaxDataLenCrea un nuovo programma: deriva l'indirizzo ProgramData, crea l'account ProgramData tramite CPI al System Program, verifica e distribuisce l'ELF dal buffer, imposta lo stato dell'account Program e lo contrassegna come eseguibile.
UpgradeSostituisce il bytecode nell'account ProgramData di un programma esistente da un buffer.
SetAuthorityModifica l'autorità di un account Buffer o ProgramData. Impostare su None su ProgramData rende il programma immutabile. L'autorità del Buffer non può essere impostata su None.
SetAuthorityCheckedCome SetAuthority, ma richiede che anche la nuova autorità firmi la transazione.
CloseChiude un account buffer, non inizializzato o ProgramData trasferendo i suoi lamport a un destinatario. La chiusura di ProgramData scrive anche una tombstone Closed nella cache del programma. Non può chiudere un programma distribuito nello slot corrente.
ExtendProgramCheckedEstende l'allocazione dell'account ProgramData di byte aggiuntivi, finanziando il rent extra dal pagatore.
MigrateMigra un programma loader-v3 a loader-v4 trasferendo la proprietà dell'account del programma e copiando il bytecode. Richiede la firma dell'autorità di migrazione o dell'autorità di aggiornamento del programma. Loader-v4 non è ancora rilasciato su mainnet.

Verifica dei programmi

Solana supporta le build verificabili, che consentono agli utenti di confermare che il bytecode on-chain di un programma corrisponda al suo codice sorgente pubblico. Il framework Anchor fornisce supporto integrato per le build verificabili.

Per verificare lo stato di verifica di un programma distribuito, cerca il suo ID programma sull'Solana Explorer, oppure utilizza la Solana Verifiable Build CLI di Ellipsis Labs per verificare in modo indipendente i programmi on-chain.

Programmi loader

LoaderIndirizzoAggiornabileDescrizione
Native LoaderNativeLoader1111111111111111111111111111111Solo tramite aggiornamento software del validatorPossiede i builtin (System, Vote, Stake) e altri loader
BPF Loader (v1)BPFLoader1111111111111111111111111111111111No (gestione loader disabilitata)Programmi legacy
BPF Loader (v2)BPFLoader2111111111111111111111111111111111No (gestione loader disabilitata)Programmi legacy
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111Sì, se l'autorità di aggiornamento è impostataPossiede tutti i programmi appena distribuiti
Loader-v4LoaderV411111111111111111111111111111111111Sì, se l'autorità è impostataNon ancora rilasciato su mainnet

Is this page helpful?

Indice dei contenuti

Modifica pagina

Gestito da

© 2026 Solana Foundation.
Tutti i diritti riservati.
Resta connesso