Cálculo de Espaço
O cálculo correto do espaço evita falhas de inicialização e surpresas com aluguéis. Some discriminadores, campos Borsh ou size_of::<Pod>(), em seguida, consulte Rent para lamports.
Receita
pub const SPACE: usize = 8 + User::LEN;
let lamports = Rent::get()?.minimum_balance(SPACE);Quando usar isto:
- Criando contas no programa ou cliente.
- Estimando custos de aluguel do protocolo.
- Revisando atributos
space =do Anchor.
Exemplo de Trabalho
#[derive(BorshSerialize, BorshDeserialize)]
pub struct User { pub authority: Pubkey, pub points: u64 }
impl User { pub const LEN: usize = 32 + 8; }
pub const USER_SPACE: usize = 8 + User::LEN; // disc + bodyO que isto demonstra:
- Discriminador de 8 bytes mais o corpo.
- Constante LEN documentada.
- Aluguel da constante SPACE.
Mergulho Profundo
Fórmula
SPACE = disc + soma(tamanhos de campo) + limites de comprimento variável.
Vec Variável
4 + max_entries * entry_size.
Notas Rust
// Teste no host: assert_eq!(serialized.len(), USER_SPACE - 8);Armadilhas
- Discriminador esquecido - Erro de 8 bytes. Correção: Sempre adicione o discriminador.
- String sem limites - Não é possível pré-calcular. Correção: Use bytes máximos de UTF-8.
- Campos Option - 1 + tamanho interno cada. Correção: Inclua na soma.
- Tamanho Pubkey incorreto - Deve ser 32. Correção: Use constantes.
- Preenchimento em Pod - Use size_of em vez de adivinhação manual. Correção: Asserção em tempo de compilação.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Anchor InitSpace | Automático | Nativo manual |
| Medida de serialização no host | Verdade absoluta | Apenas tempo de execução |
| Calculadora de aluguel Excel | Planejamento | Não substitui código |
FAQs
Mínimo isento de aluguel?
Rent::minimum_balance.
Crescer mais tarde?
realloc paga a diferença.
Tamanho da conta de token?
165 bytes clássicos SPL.
Sobrecarga da conta?
Comprimento dos dados apenas on-chain.
Espaço máximo?
10 MB.
Espaço zero?
Apenas o detentor de lamports.
InitSpace anchor 0.32?
Macro expande em tempo de compilação.
Array de Pubkey?
32 * n.
String C?
Evitar - usar bytes fixos.
Testar LEN?
Teste unitário no host.
Calculadora de aluguel CLI?
solana rent.
Surfpool?
Verificar criação com SPACE.
Relacionado
- Structs Borsh - Tamanhos de campo
- Aluguel e Isenção de Aluguel - Economia
- Criando Contas via CPI - Alocar
Versões da Pilha: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, e LiteSVM 0.6.x.