Borsh (Binary Object Representation Serializer for Hashing) es el formato de serialización predeterminado para los datos de cuentas e instrucciones de Anchor en Agave 4.1.1. bytemuck permite la conversión de tipo sin copia (zero-copy) de diseños de cuentas plain-old-data (POD) cuando controlas la alineación y la validación. Elige Borsh para flexibilidad; elige bytemuck para rutas críticas sensibles a la Unidad de Cómputo (CU).
// Cuenta de Anchor con discriminador// space = 8 + UserMeta::serialized_size() // o INIT_SPACE en Anchor más reciente// Nunca uses bytemuck para convertir cuentas no confiables sin comprobaciones de propietario + longitud
bytemuck en structs empaquetadas o con muchos bool - riesgo de comportamiento indefinido. Solución:repr(C) + campos de relleno explícitos; probar en el objetivo.
Cambio de esquema sin migración - deserializa basura. Solución: byte de versión + instrucción de migración.
Mezclar Serde JSON con datos en cadena - formato diferente. Solución: Solo Borsh (o personalizado) dentro de los programas.
try_from_slice no verificado en datos de usuario - provoca pánicos en código nativo. Solución:try_from_slice -> ProgramError::InvalidAccountData.
Suposiciones de endianidad - Borsh es LE; bytemuck sigue al host para POD - usa solo tipos LE.
Versiones de la pila: Esta página se escribió 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