Cuentas Zero-Copy
Las cuentas Zero-copy utilizan el diseño de bytemuck y AccountLoader para evitar la serialización/deserialización de Borsh en structs grandes, ahorrando CU para estados grandes.
Busca en todas las páginas de la documentación
Las cuentas Zero-copy utilizan el diseño de bytemuck y AccountLoader para evitar la serialización/deserialización de Borsh en structs grandes, ahorrando 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>,
}Cuándo usar esto: Los datos de la cuenta son grandes (libros de órdenes, arrays de ticks) y Borsh cuesta demasiada CU.
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>,
}Lo que esto demuestra:
zero_copy requiere el diseño repr(C)AccountLoader::load_mut para mutaciónINIT_SPACE para dimensionar Borsh de la misma manerabytemuck.Evita la copia completa de la cuenta en cada instrucción.
repr(C) y bytemuck Pod.Vec dinámico en zero_copy - No soportado de forma nativa. Solución: Buffers fijos o cuenta Borsh.mut en la cuenta del cargador - No se puede persistir. Solución: Marca la cuenta como mut.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
Borsh Account<T> | Configuraciones pequeñas | Buffers grandes y fijos |
| Compresión de cuentas fuera de la cadena | Sin libro de órdenes en cadena | Libro de órdenes en cadena |
0.32.1 en temas avanzados.
Diseños grandes y fijos cuando la CU de Borsh es demasiado alta.
No fácilmente; planifica el crecimiento futuro.
No; documentar por separado.
JSON del IDL del llamado en tiempo de compilación.
Sí, con metadatos de cuenta correctos.
Evita diferentes IDL por característica en mainnet.
LiteSVM, Surfpool, simulación en devnet.
No; último recurso.
Ver enlaces relacionados para zero copy.
Versiones de la pila: Esta página fue 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, y LiteSVM 0.6.x.
Revisado por Chris St. John·Última actualización: 16 jul 2026