Un programme Solana est un
compte qui contient du
bytecode sBPF exécutable et dont le flag executable est défini sur true. Les
programmes sont sans état. Tout état mutable réside dans des comptes de données
séparés transmis via des instructions.
Diagramme d'un program account, ses 4 composants et son programme chargeur.
Exécution de programme
Compilation, écriture de programmes (Anchor / Rust natif), VM sBPF, modèle d'unités de calcul, syscalls, cache de programmes.
Déploiement de programme
Déploiement, mise à niveau et vérification des programmes. Référence des instructions Loader-v3 et programmes chargeurs.
Programmes principaux
System Program (avec référence des instructions), Vote, Stake, Config, Compute Budget, Address Lookup Table et ZK ElGamal Proof.
Précompilations
Programmes de vérification de signature Ed25519, Secp256k1, Secp256r1. Structures d'offset et règles de validation.
Référence des syscalls
Référence complète des ~30 syscalls sBPF avec coûts en unités de calcul.
Points clés
- Compilés en sBPF : les programmes sont compilés en Solana Bytecode Format (sBPF) via LLVM et stockés dans des comptes exécutables.
- Sans état : tout état mutable réside dans des comptes de données séparés, pas dans le program account.
- Évolutifs : les programmes déployés avec loader-v3 (BPF Loader Upgradeable) peuvent être mis à niveau lorsqu'une autorité de mise à niveau est définie ; révoquer cette autorité rend le programme immuable.
Limites
| Limite | Valeur | Source |
|---|---|---|
| Taille de heap par défaut | 32 Kio | HEAP_LENGTH |
| Taille de heap maximale (ajustable) | 256 Kio | MAX_HEAP_FRAME_BYTES |
| Taille de stack frame | 4 096 octets | STACK_FRAME_SIZE |
| Profondeur d'appel sBPF maximale | 64 | MAX_CALL_DEPTH |
| Profondeur de pile d'instructions maximale (top-level + CPI) | 5 (9 avec SIMD-0268) | MAX_INSTRUCTION_STACK_DEPTH, MAX_INSTRUCTION_STACK_DEPTH_SIMD_0268 |
| Coût du heap | 8 CU par page de 32 Kio | DEFAULT_HEAP_COST |
| Programmes en cache maximum | 512 | MAX_LOADED_ENTRY_COUNT |
| Délai de visibilité du déploiement | 1 slot | DELAY_VISIBILITY_SLOT_OFFSET |
Is this page helpful?