Program Solana to konto,
które zawiera wykonywalny bajtkod sBPF i ma ustawioną flagę executable na
true. Programy są bezstanowe. Cały stan możliwy do zmiany przechowywany jest w
osobnych kontach danych przekazywanych przez
instrukcje.
Diagram konta programu, jego 4 komponentów i programu ładującego.
Wykonywanie programu
Kompilacja, pisanie programów (Anchor / natywny Rust), maszyna wirtualna sBPF, model jednostek obliczeniowych, wywołania systemowe (syscalls), cache programów.
Wdrażanie programu
Wdrażanie, aktualizacja i weryfikacja programów. Instrukcje loader-v3 oraz programy ładujące.
Programy podstawowe
System Program (z referencją instrukcji), Vote, Stake, Config, Compute Budget, Address Lookup Table oraz ZK ElGamal Proof.
Prekompilacje
Programy weryfikacji podpisów Ed25519, Secp256k1, Secp256r1. Struktury offsetów i zasady walidacji.
Referencja syscalls
Pełna referencja wszystkich ~30 wywołań systemowych sBPF wraz z kosztami jednostek obliczeniowych.
Najważniejsze informacje
- Kompilowane do sBPF: Programy są kompilowane do Solana Bytecode Format (sBPF) przez LLVM i przechowywane w kontach wykonywalnych.
- Bezstanowe: Cały stan możliwy do zmiany przechowywany jest w osobnych kontach danych, a nie w program account.
- Aktualizowalne: Programy wdrożone z loader-v3 (BPF Loader Upgradeable) mogą być aktualizowane, jeśli ustawiono uprawnienia do aktualizacji; cofnięcie tych uprawnień sprawia, że program staje się niezmienny.
Limity
| Limit | Wartość | Źródło |
|---|---|---|
| Domyślny rozmiar sterty | 32 KiB | HEAP_LENGTH |
| Maksymalny rozmiar sterty (regulowany) | 256 KiB | MAX_HEAP_FRAME_BYTES |
| Rozmiar ramki stosu | 4 096 bajtów | STACK_FRAME_SIZE |
| Maksymalna głębokość wywołań sBPF | 64 | MAX_CALL_DEPTH |
| Maksymalna głębokość stosu instrukcji (top-level + CPI) | 5 (9 z SIMD-0268) | MAX_INSTRUCTION_STACK_DEPTH, MAX_INSTRUCTION_STACK_DEPTH_SIMD_0268 |
| Koszt sterty | 8 CU za każdą stronę 32 KiB | DEFAULT_HEAP_COST |
| Maksymalna liczba programów w cache | 512 | MAX_LOADED_ENTRY_COUNT |
| Opóźnienie widoczności wdrożenia | 1 slot | DELAY_VISIBILITY_SLOT_OFFSET |
Is this page helpful?