realloc & Contas em Crescimento
Programas podem crescer (ou encolher) dados de contas via a syscall/CPI realloc, pagando aluguel adicional de um pagador. Necessário quando esquemas crescem ou coleções dinâmicas se expandem.
Receita
account.realloc(new_len, false)?;
account.transfer_required_rent(payer)?; // conceitualmente - use o padrão CPI de reallocQuando usar isso:
- Adicionando campos em atualizações de programa.
- Crescendo armazenamento de vetor dinâmico.
- Encolhendo em poda de dados.
Exemplo de Trabalho
// Nativo: use solana_program::program::realloc ou padrões de CPI do sistema por SDK
// Após realloc, zere os novos bytes e inicialize novos campos
let new_len = old_len + 8;
// realloc a conta para new_len com o pagador financiando a diferença de aluguelO que isso demonstra:
- A diferença de aluguel deve ser financiada.
- Novos bytes devem ser inicializados.
- Encolher retorna aluguel para o destino.
Mergulho Profundo
Segurança
- Rejeite o encolhimento se truncar campos ativos.
- Zere a nova região para evitar vazamento de bytes obsoletos.
Anchor
Restrição de realloc em 0.32.1.
Notas de Rust
// Documente max_len para limitar griefing.Armadilhas
- Realloc sem fundos do pagador - Falha no meio da atualização. Correção: Garanta que o pagador assine com lamports.
- Novos bytes não inicializados - Desserializa lixo. Correção: Inicialize com zero.
- Encolher dados ativos - Corrupção. Correção: Proíba ou migre primeiro.
- Crescimento ilimitado - Griefing de aluguel. Correção: Limite max_len.
- Realloc em loop - Caro em CU. Correção: Agrupe o crescimento.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Migração de nova conta | Mais seguro | Fricção do usuário |
| Tamanho máximo fixo antecipadamente | Desperdiça aluguel cedo | Simples |
| Armazenamento off-chain | Barato | Modelo de confiança |
FAQs
Quem paga o aumento do aluguel?
O pagador signatário que você especificar.
Crescimento máximo?
Limite de conta de 10 MB.
Encolher retorna aluguel?
Para o destinatário escolhido.
Anchor realloc?
Atributo na conta.
Realloc concorrente?
Serialização de Tx por conta.
Zero novo espaço?
Prática de segurança necessária.
Ix de migração?
Caminho comum de atualização.
LiteSVM realloc?
Suportado.
Custo de CU?
Analise o ix de realloc.
Cliente deve assinar?
O pagador sim.
Realloc parcial?
Defina o novo comprimento absoluto.
Programa imutável?
Planeje espaço extra antecipadamente.
Relacionado
- Versionamento e Migração de Dados - Esquema
- Cálculo de Espaço - Planejamento
- Design de Dados à Prova de Atualização - Compatibilidade futura
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.