Un programma Solana è un
account che contiene
bytecode sBPF eseguibile e ha il suo flag executable impostato su true. I
programmi sono stateless. Tutto lo stato mutabile risiede in account di dati
separati passati tramite istruzioni.
Diagramma di un program account, i suoi 4 componenti e il suo loader program.
Esecuzione del programma
Compilazione, scrittura di programmi (Anchor / Rust nativo), sBPF VM, modello delle compute unit, syscall, cache dei programmi.
Deployment del programma
Deployment, aggiornamento e verifica dei programmi. Riferimento alle istruzioni Loader-v3 e loader program.
Programmi core
System Program (con riferimento alle istruzioni), Vote, Stake, Config, Compute Budget, Address Lookup Table e ZK ElGamal Proof.
Precompilati
Programmi di verifica delle firme Ed25519, Secp256k1, Secp256r1. Strutture offset e regole di validazione.
Riferimento syscall
Riferimento completo per tutte le ~30 syscall sBPF con i costi in compute unit.
Fatti chiave
- Compilati in sBPF: i programmi sono compilati in Solana Bytecode Format (sBPF) tramite LLVM e memorizzati in account eseguibili.
- Stateless: tutto lo stato mutabile risiede in account di dati separati, non nell'account del programma.
- Aggiornabili: i programmi deployati con loader-v3 (BPF Loader Upgradeable) possono essere aggiornati quando è impostata un'autorità di aggiornamento; revocare tale autorità rende il programma immutabile.
Limiti
| Limite | Valore | Fonte |
|---|---|---|
| Dimensione heap predefinita | 32 KiB | HEAP_LENGTH |
| Dimensione heap massima (regolabile) | 256 KiB | MAX_HEAP_FRAME_BYTES |
| Dimensione stack frame | 4.096 byte | STACK_FRAME_SIZE |
| Profondità massima chiamate sBPF | 64 | MAX_CALL_DEPTH |
| Profondità massima stack istruzioni (top-level + CPI) | 5 (9 con SIMD-0268) | MAX_INSTRUCTION_STACK_DEPTH, MAX_INSTRUCTION_STACK_DEPTH_SIMD_0268 |
| Costo heap | 8 CU per pagina 32 KiB | DEFAULT_HEAP_COST |
| Programmi massimi in cache | 512 | MAX_LOADED_ENTRY_COUNT |
| Ritardo visibilità deployment | 1 slot | DELAY_VISIBILITY_SLOT_OFFSET |
Is this page helpful?