A Solana program is an
account that contains
executable sBPF bytecode and has its executable flag set to true. Programs
are stateless. All mutable state lives in separate data accounts passed via
instructions.
Diagram of a program account, its 4 components and its loader program.
Program Execution
Compilation, writing programs (Anchor / Native Rust), sBPF VM, compute unit model, syscalls, program cache.
Program Deployment
Deploying, upgrading, and verifying programs. Loader-v3 instruction reference and loader programs.
Core Programs
System Program (with instruction reference), Vote, Stake, Config, Compute Budget, Address Lookup Table, and ZK ElGamal Proof.
Precompiles
Ed25519, Secp256k1, Secp256r1 signature verification programs. Offset structs and validation rules.
Syscall Reference
Complete reference for all ~30 sBPF syscalls with compute unit costs.
Key facts
- Compiled to sBPF: Programs are compiled to Solana Bytecode Format (sBPF) via LLVM and stored in executable accounts.
- Stateless: All mutable state lives in separate data accounts, not in the program account.
- Upgradeable: Programs deployed with loader-v3 (BPF Loader Upgradeable) can be upgraded when an upgrade authority is set; revoking that authority makes the program immutable.
Limits
| Limit | Value | Source |
|---|---|---|
| Default heap size | 32 KiB | HEAP_LENGTH |
| Max heap size (adjustable) | 256 KiB | MAX_HEAP_FRAME_BYTES |
| Stack frame size | 4,096 bytes | STACK_FRAME_SIZE |
| Max sBPF call depth | 64 | MAX_CALL_DEPTH |
| Max instruction stack depth (top-level + CPIs) | 5 (9 with SIMD-0268) | MAX_INSTRUCTION_STACK_DEPTH, MAX_INSTRUCTION_STACK_DEPTH_SIMD_0268 |
| Heap cost | 8 CUs per 32 KiB page | DEFAULT_HEAP_COST |
| Max cached programs | 512 | MAX_LOADED_ENTRY_COUNT |
| Deployment visibility delay | 1 slot | DELAY_VISIBILITY_SLOT_OFFSET |
Is this page helpful?