Contas Zero-Copy
Contas zero-copy usam layout bytemuck e AccountLoader para evitar serializar/desserializar Borsh em structs grandes, economizando CU para estados grandes.
Busque em todas as páginas da documentação
Contas zero-copy usam layout bytemuck e AccountLoader para evitar serializar/desserializar Borsh em structs grandes, economizando CU para estados grandes.
#[account(zero_copy)]
pub struct Market {
pub bids: [u64; 1024],
}
#[derive(Accounts)]
pub struct Update<'info> {
#[account(mut)]
pub market: AccountLoader<'info, Market>,
}Quando usar isso: Os dados da conta são grandes (livros de ofertas, arrays de ticks) e o custo de Borsh em CU é muito alto.
use anchor_lang::prelude::*;
#[account(zero_copy)]
#[repr(C)]
pub struct LargeState {
pub head: u64,
pub data: [u8; 10_000],
}
pub fn touch(ctx: Context<Touch>) -> Result<()> {
let mut market = ctx.accounts.state.load_mut()?;
market.head += 1;
Ok(())
}
#[derive(Accounts)]
pub struct Touch<'info> {
#[account(mut)]
pub state: AccountLoader<'info, LargeState>,
}O que isso demonstra:
zero_copy requer layout repr(C)AccountLoader::load_mut para mutaçãoINIT_SPACE para dimensionamento Borsh da mesma formabytemuck.Evita a cópia completa da conta (memcpy) em cada instrução.
repr(C) e bytemuck Pod.zero_copy - Tipo de carregador errado. Correção: Escolha um por conta.Vec dinâmico em zero_copy - Não suportado nativamente. Correção: Buffers fixos ou conta Borsh.mut na conta do carregador - Não é possível persistir. Correção: Marque a conta como mut.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
Borsh Account<T> | Configurações pequenas | Grandes buffers fixos |
| Compressão de conta off-chain | Sem livro de ofertas on-chain | Livro de ofertas on-chain |
0.32.1 em tópicos avançados.
Layouts fixos grandes quando o custo de CU do Borsh é muito alto.
Não facilmente; planeje o crescimento futuro.
Não; documente separadamente.
IDL JSON do chamador em tempo de compilação.
Sim, com metadados de conta corretos.
Evite IDLs diferentes por recurso no mainnet.
LiteSVM, Surfpool, simulação em devnet.
Não; último recurso.
Veja os links relacionados para zero copy.
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.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026