Ancla vs. Nativo
Los programas nativos de Solana usan entrypoint! y análisis manual de cuentas. Ancla genera el despacho, discriminadores, validación de cuentas e IDL a partir de macros, a costa del tamaño binario y algo de sobrecarga de CU.
Receta
| Preocupación | Nativo | Ancla 0.32.1 |
|---|---|---|
| Punto de entrada | Escrito a mano | Generado por #[program] |
| Comprobaciones de cuenta | Manual en el manejador | Restricciones #[derive(Accounts)] |
| Tipos de cliente | Mantenidos a mano | IDL / declare_program! |
| Errores | Códigos u32 personalizados | #[error_code] + mapeo de IDL |
Cuándo elegir esto: Eliges un framework para un nuevo programa o debates migrar código nativo existente.
Ejemplo de trabajo
// Ancla: la validación es declarativa
#[derive(Accounts)]
pub struct Increment<'info> {
#[account(mut, has_one = authority)]
pub counter: Account<'info, Counter>,
pub authority: Signer<'info>,
}
// Equivalente nativo: comprobaciones manuales en cada manejador
// - verificar firmante
// - verificar propietario == program_id
// - verificar counter.authority == authority.key()
// - deserializar con discriminadorLo que esto demuestra:
- Ancla agrega comprobaciones de discriminador en los datos de la cuenta automáticamente
- IDL habilita módulos CPI de
declare_program!en 0.32 - Nativo/Pinocchio gana en CU para rutas críticas
- Los sistemas mixtos pueden hacer CPI entre frameworks con metadatos de cuenta correctos
Inmersión Profunda
Lo que genera Ancla
- Despacho de instrucciones - Discriminadores de 8 bytes y deserialización Borsh.
- Validación de cuentas - Restricciones de propietario, firmante, mut, semillas, init, token.
- IDL JSON - Instrucciones, cuentas, tipos, errores para clientes.
- Ayudantes de CPI - Especialmente a través de
anchor-splydeclare_program!.
Cuándo todavía gana lo nativo
- Presupuestos extremos de CU (matemáticas AMM de alta frecuencia).
- Requisitos mínimos de tamaño de despliegue.
- Programas sin necesidades de cliente tipado fuera de la cadena.
Trampas
- Asumir que Ancla elimina todo el trabajo de seguridad - Las invariantes personalizadas todavía necesitan
constraintyrequire!.. Solución: Modelar amenazas explícitamente. - Mezclar frameworks en un solo crate - No soportado; elige uno por programa.. Solución: Dividir crates o usar nativo.
- Migración ciega nativo→Ancla - Los diseños de cuenta deben coincidir con los discriminadores.. Solución: Planificar instrucciones de migración de datos.
- Ignorar la regresión de CU - La sobrecarga de Ancla importa a escala.. Solución: Perfilar con
solana program logy medidores de CU. - Omitir IDL para programas de Ancla - Anula la razón principal para usar Ancla.. Solución: Publicar IDL con cada lanzamiento.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Pinocchio + diseño manual | Código sensible a CU | Quieres macros de cuenta de Ancla |
| Framework Steel | Patrones nativos estructurados | Necesitas herramientas de IDL del ecosistema Ancla |
| Permanecer nativo | Programa pequeño, sin generación de código de cliente | Necesidades ricas de validación de cuentas |
Preguntas Frecuentes
¿Qué versión de Ancla utiliza este sitio?
0.32.1 para anchor-lang, Ancla CLI y ejemplos en esta sección.
¿Necesito Solana CLI junto con Ancla?
Sí. Solana CLI 3.0.10 maneja pares de claves, airdrops e inspección de solana program.
¿Dónde vive la IDL después de la compilación?
target/idl/<program>.json en tu espacio de trabajo.
¿Puedo mezclar UncheckedAccount con Signer?
Sí, pero cada campo no verificado necesita restricciones explícitas o comprobaciones en el manejador.
¿Cómo pruebo sin devnet?
Usa anchor test con Surfpool 0.12.0 o LiteSVM 0.6.x en CI.
¿Qué es el prefijo de 8 bytes en los datos de la cuenta?
Discriminador de cuenta de Ancla; no lo elimines al dimensionar space.
¿Debo confirmar la IDL generada?
Sí, o publica la IDL en la cadena para que los clientes tengan una fuente canónica.
¿Cómo depuro fallos de restricciones?
Ejecuta con registros; Ancla imprime el nombre de la restricción y el índice de la cuenta.
¿Ancla funciona en Agave 4.1.1?
Sí. Esta pila se dirige a validadores Agave con Solana CLI 3.0.10.
¿Qué debo leer a continuación en esta sección?
Consulta los artículos hermanos vinculados en Relacionados para temas más profundos de ancla vs. nativo.
Relacionados
- Conceptos básicos de programas nativos - modelo de punto de entrada
- Interactuar con programas nativos/Pinocchio - sistemas mixtos
- Optimización de CU y tamaño - ajuste de sobrecarga
Versiones de la pila: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Ancla 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.