Melhores Práticas de Serialização
Os bytes da conta são o seu esquema de banco de dados. Estas práticas mantêm os layouts auditáveis, amigáveis à migração e resistentes à confusão de tipos.
Como Usar Esta Lista
- Documente a fórmula SPACE ao lado de cada struct de conta.
- Adicione testes de desserialização com fixtures corrompidas.
- Revise a tabela de unicidade de discriminadores.
A - Layout
- Prefira cada tipo de conta com um discriminador único. Impede ataques de confusão de tipos.
- Armazene constantes
LENouSPACE; afirme em tempo de execução no acesso. Previne bugs de leitura/escrita parciais. - Anexe campos para upgrades; nunca reordene ou remova campos no local. Preserva a compatibilidade de contas ativas.
- Limite campos de comprimento variável com tamanhos máximos explícitos. Controla aluguel e griefing de CU.
- Prefira layouts fixos em caminhos de acesso frequente; documente splits híbridos zero-copy + Borsh. Desempenho previsível.
B - Migração
- Envie uma instrução de migração dedicada antes de impor um novo esquema. Evita inutilizar usuários.
- Leia em duplicidade versões antigas e novas durante a transição. Rollout suave.
- Zero novos bytes após realloc. Previne vazamentos de dados obsoletos.
- Registre eventos de migração para indexadores. Visibilidade operacional.
- Congele o esquema quando o programa for tornado imutável. Planeje espaço com antecedência.
C - Testes
- Testes de serialização/desserialização roundtrip no host. Captura erros de LEN.
- Fuzz a desserialização com bytes aleatórios. Encontra caminhos de pânico.
- Snapshot de bytes de conta em testes de integração LiteSVM. Segurança contra regressão.
- Verifique se o cálculo de aluguel corresponde ao SPACE. Correção de financiamento do usuário.
- Alinhe atributos
spacedo Anchor com constantes nativas. Única fonte de verdade.
FAQs
Padrão Borsh vs zero-copy?
Borsh a menos que o perfil exija.
Comprimento do discriminador?
8 bytes estilo Anchor é comum.
String na conta?
Raro - prefira chaves de pubkey.
InitSpace suficiente?
Revise o tamanho gerado.
Deploy imutável?
Nenhuma migração possível - planeje o espaço.
Compressão?
Não nativo on-chain.
JSON da Conta?
Apenas off-chain.
Registry de Esquema?
Na documentação do repositório.
Codama?
Alinhamento de decodificação do cliente.
Picos de Aluguel?
De Vec ilimitado.
Agave 4.1.1?
Regras de aluguel via SDK.
Foco da Auditoria?
Disc + LEN + migração.
Relacionados
- Noções Básicas de Serialização - Introdução
- Discriminadores de Conta - Marcação
- Melhores Práticas de Rust para Solana - Rust Geral
Versões da Stack: 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.