Résumé
Les programmes déployés via loader-v3 peuvent être mis à niveau lorsqu'une autorité de mise à niveau est définie. La révocation de l'autorité rend le programme immuable. Couvre le mécanisme de mise à niveau, les instructions de déploiement et de mise à niveau loader-v3, la vérification de build, et les programmes de chargement disponibles.
Déploiement de programmes
Rust natif
Déployez en utilisant la CLI Solana avec solana program deploy.
Anchor
Déployez en utilisant le framework Anchor avec anchor deploy.
Mise à niveau de programmes
Pour mettre à niveau un programme, un compte doit détenir l'autorité de mise à
niveau (généralement le compte qui a initialement
déployé le programme). Lors du déploiement ou de la
mise à niveau, le nouveau bytecode est téléchargé vers un compte tampon
temporaire, puis écrit dans le programdata account. Définir l'autorité de mise à
niveau sur None rend le programme immuable et empêche définitivement toute
mise à jour ultérieure.
Mécanisme de mise à niveau
Lorsque
UpgradeableLoaderInstruction::Upgrade
est traité, le runtime :
- Vérifie que le program account est modifiable et appartient à loader-v3.
- Vérifie que le compte tampon contient un état
Bufferavec l'autorité correcte. - Vérifie que l'
upgrade_authority_addressdu programdata account correspond et n'est pasNone. - Vérifie que le programme n'a pas déjà été déployé dans le slot actuel
(
clock.slot != slot). - Charge et vérifie les nouveaux octets ELF depuis le tampon.
- Copie le nouveau bytecode depuis le tampon dans le programdata account et met à zéro les octets restants.
- Finance le programdata account pour l'exemption de loyer.
- Vide le compte tampon (définit les lamports à 0) et tronque ses données.
- La nouvelle version devient effective dans le slot suivant
(
deployment_slot + 1).
Le compte Program lui-même (son état et le pointeur programdata_address) ne
change pas lors d'une mise à niveau. Seuls le bytecode du compte
ProgramData et les métadonnées de slot sont mis à jour.
Référence des instructions Loader-v3
Loader-v3 (BPF Loader Upgradeable) est le chargeur par défaut actuel pour déployer des programmes sur Solana.
| Instruction | Description |
|---|---|
InitializeBuffer | Définit l'état d'un compte tampon sur Buffer avec l'autorité spécifiée. Échoue si déjà initialisé. |
Write | Écrit des octets à l'offset spécifié dans un compte tampon. L'autorité doit signer. |
DeployWithMaxDataLen | Crée un nouveau programme : dérive l'adresse ProgramData, crée le compte ProgramData via CPI vers le System Program, vérifie et déploie l'ELF depuis le tampon, définit l'état du compte Program et le marque comme exécutable. |
Upgrade | Remplace le bytecode dans le compte ProgramData d'un programme existant à partir d'un tampon. |
SetAuthority | Modifie l'autorité d'un compte Buffer ou ProgramData. Définir sur None sur ProgramData rend le programme immuable. L'autorité Buffer ne peut pas être définie sur None. |
SetAuthorityChecked | Similaire à SetAuthority, mais requiert également que la nouvelle autorité signe la transaction. |
Close | Ferme un compte tampon, non initialisé, ou ProgramData en transférant ses lamports vers un destinataire. La fermeture de ProgramData écrit également une pierre tombale Closed dans le cache du programme. Ne peut pas fermer un programme déployé dans le slot actuel. |
ExtendProgramChecked | Étend l'allocation du compte ProgramData d'octets supplémentaires, en finançant le rent supplémentaire depuis le payeur. |
Vérification des programmes
Solana prend en charge les builds vérifiables, qui permettent aux utilisateurs de confirmer que le bytecode onchain d'un programme correspond à son code source public. Le framework Anchor fournit une prise en charge intégrée pour les builds vérifiables.
Pour vérifier le statut de vérification d'un programme déployé, recherchez son identifiant de programme sur le Solana Explorer, ou utilisez la CLI de construction vérifiable Solana d'Ellipsis Labs pour vérifier indépendamment les programmes onchain.
Programmes de chargement
| Chargeur | Adresse | Évolutif | Description |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Uniquement via mise à jour du logiciel validator | Possède les builtins (System, Vote, Stake) et autres chargeurs |
| BPF Loader (v1) | BPFLoader1111111111111111111111111111111111 | Non (gestion du chargeur désactivée) | Programmes legacy |
| BPF Loader (v2) | BPFLoader2111111111111111111111111111111111 | Non (gestion du chargeur désactivée) | Programmes legacy |
| BPF Loader Upgradeable | BPFLoaderUpgradeab1e11111111111111111111111 | Oui, si l'autorité de mise à jour est définie | Possède tous les programmes nouvellement déployés |
Is this page helpful?