Um programa Solana é uma
conta que contém bytecode
sBPF executável e tem o seu sinalizador executable definido como true. Os
programas são sem estado. Todo o estado mutável reside em contas de dados
separadas passadas através de instruções.
Diagrama de uma conta de programa, os seus 4 componentes e o seu programa carregador.
Execução de programa
Compilação, escrita de programas (Anchor, Pinocchio ou Rust nativo), VM sBPF, modelo de unidades de computação, syscalls, cache de programas.
Implantação de programa
Implantação, atualização e verificação de programas. Referência de instruções Loader-v3 e programas carregadores.
Programas principais
System Program (com referência de instruções), Vote, Stake, Config, Compute Budget, Address Lookup Table e ZK ElGamal Proof.
Precompilações
Programas de verificação de assinatura Ed25519, Secp256k1, Secp256r1. Estruturas de offset e regras de validação.
Referência de syscall
Referência completa para todas as ~30 syscalls sBPF com custos de unidade de computação.
Factos principais
- Compilado para sBPF: os programas são compilados para Solana Bytecode Format (sBPF) através do LLVM e armazenados em contas executáveis.
- Sem estado: todo o estado mutável reside em contas de dados separadas, não na conta do programa.
- Atualizável: os programas implantados com loader-v3 (BPF Loader Upgradeable) podem ser atualizados quando uma autoridade de atualização está definida; revogar essa autoridade torna o programa imutável.
Limites
| Limite | Valor | Fonte |
|---|---|---|
| Tamanho padrão da heap | 32 KiB | HEAP_LENGTH |
| Tamanho máximo da heap (ajustável) | 256 KiB | MAX_HEAP_FRAME_BYTES |
| Tamanho da frame de stack | 4.096 bytes | STACK_FRAME_SIZE |
| Profundidade máxima de chamada sBPF | 64 | MAX_CALL_DEPTH |
| Profundidade máxima da pilha de instruções (nível superior + CPIs) | 5 (9 com SIMD-0268) | MAX_INSTRUCTION_STACK_DEPTH, MAX_INSTRUCTION_STACK_DEPTH_SIMD_0268 |
| Custo da heap | 8 CUs por página de 32 KiB | DEFAULT_HEAP_COST |
| Máximo de programas em cache | 512 | MAX_LOADED_ENTRY_COUNT |
| Atraso de visibilidade da implantação | 1 slot | DELAY_VISIBILITY_SLOT_OFFSET |
Is this page helpful?