Résumé
Les programmes déployés via loader-v3 peuvent être mis à niveau lorsqu'une autorité de mise à niveau est définie. Révoquer l'autorité rend le programme immuable. Couvre le mécanisme de mise à niveau en 9 étapes, les 9 instructions loader-v3, la vérification de build et les 5 types de loader.
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 buffer sur Buffer avec l'autorité spécifiée. Échoue si déjà initialisé. |
Write | Écrit des octets à l'offset spécifié dans un compte buffer. 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 buffer, 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 buffer. |
SetAuthority | Modifie l'autorité d'un compte Buffer ou ProgramData. Définir sur None sur ProgramData rend le programme immuable. L'autorité du Buffer ne peut pas être définie sur None. |
SetAuthorityChecked | Comme SetAuthority, mais nécessite que la nouvelle autorité signe également la transaction. |
Close | Ferme un compte buffer, non initialisé ou ProgramData en transférant ses lamports à 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 loyer supplémentaire depuis le payeur. |
Migrate | Migre un programme loader-v3 vers loader-v4 en transférant la propriété du compte programme et en copiant le bytecode. Nécessite que l'autorité de migration ou l'autorité de mise à niveau du programme signe. Loader-v4 n'est pas encore disponible sur le mainnet. |
Vérification des programmes
Solana prend en charge les builds vérifiables, qui permettent aux utilisateurs de confirmer que le bytecode on-chain 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 ID de programme sur le Solana Explorer, ou utilisez le Solana Verifiable Build CLI d'Ellipsis Labs pour vérifier indépendamment les programmes on-chain.
Programmes de chargement
| Chargeur | Adresse | Évolutif | Description |
|---|---|---|---|
| Native Loader | NativeLoader1111111111111111111111111111111 | Uniquement via mise à jour du validateur | 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 |
| Loader-v4 | LoaderV411111111111111111111111111111111111 | Oui, si l'autorité est définie | Pas encore publié sur le mainnet |
Is this page helpful?