Espaço e Aluguel
As contas Solana devem ser isentas de aluguel. O init do Anchor usa seu atributo space para alocar bytes, incluindo o discriminador de 8 bytes.
Receita
#[account]
pub struct User {
pub authority: Pubkey,
pub points: u64,
}
// space = 8 + User::INIT_SPACE
#[account(init, payer = payer, space = 8 + User::INIT_SPACE)]
pub user: Account<'info, User>,Quando usar isso: Você adiciona campos ao estado on-chain ou cria novos tipos de conta.
Exemplo de Trabalho
#[account]
#[derive(InitSpace)]
pub struct Config {
pub admin: Pubkey,
#[max_len(64)]
pub name: String,
pub fee_bps: u16,
}
#[account(init, payer = payer, space = 8 + Config::INIT_SPACE)]
pub config: Account<'info, Config>,O que isso demonstra:
InitSpacederive calcula o tamanho em tempo de compilação- O discriminador de 8 bytes é obrigatório para contas Anchor
- O pagador fornece lamports para isenção de aluguel
max_lenem strings/vecs limita a alocação
Mergulho Profundo
Regras de Dimensionamento
- Campos fixos: soma dos tamanhos Borsh.
String/Vec: precisam demax_lencomInitSpace.- Contas zero-copy usam dimensionamento diferente (sem Borsh na cadeia).
Aluguel
O mínimo de isenção de aluguel depende do tamanho alocado. Use Rent::get()?.minimum_balance(space) em testes para afirmar o financiamento.
Armadilhas
- Esquecer o discriminador no espaço - Conta muito pequena; serialização falha. Correção: Sempre adicione 8 a
INIT_SPACE. - String Ilimitada - Sem
max_len; tamanho desconhecido. Correção: Use#[max_len(n)]com InitSpace. - Vec Subdimensionado - Cresce além da alocação. Correção: Pré-aloque o comprimento máximo ou use
realloc. - INIT_SPACE Incorreto após adicionar campo - Atualização quebra novas inicializações. Correção: Aumente a versão e migre.
- Fechamento sem recuperação de aluguel - Usuários perdem SOL. Correção: Use
close = recipient.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| restrição de realloc | Contas em crescimento | Tamanho fixo conhecido antecipadamente |
| zero_copy | Estruturas fixas grandes | Pequenas contas de configuração |
| Cálculo manual de espaço | Não-Anchor | Derive InitSpace |
FAQs
Qual versão do Anchor este site usa?
0.32.1 para anchor-lang, Anchor CLI e exemplos nesta seção.
Preciso do Solana CLI junto com o Anchor?
Sim. O Solana CLI 3.0.10 lida com keypairs, airdrops e inspeção de solana program.
Onde fica o IDL após a compilação?
target/idl/<program>.json em seu workspace.
Posso misturar UncheckedAccount com Signer?
Sim, mas cada campo não verificado precisa de restrições explícitas ou verificações do manipulador.
Como testar sem devnet?
Use anchor test com Surfpool 0.12.0 ou LiteSVM 0.6.x em CI.
O que é o prefixo de 8 bytes nos dados da conta?
Discriminador de conta Anchor; não o remova ao dimensionar space.
Devo confirmar o IDL gerado?
Sim, ou publique o IDL on-chain para que os clientes tenham uma fonte canônica.
Como depurar falhas de restrição?
Execute com logs; o Anchor imprime o nome da restrição e o índice da conta.
O Anchor funciona no Agave 4.1.1?
Sim. Esta pilha visa validadores Agave com Solana CLI 3.0.10.
O que devo ler em seguida nesta seção?
Veja artigos irmãos vinculados em Relacionados para tópicos mais aprofundados sobre espaço e aluguel.
Relacionado
- realloc no Anchor - crescer contas
- Cálculo de Espaço - dimensionamento de serialização
- init & init_if_needed - alocação
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.