IDLs en Cadena
Anchor puede almacenar la IDL en cadena en una cuenta propiedad del programa para que los exploradores y clientes obtengan interfaces canónicas por ID de programa.
Receta
anchor idl init -f target/idl/my_program.json <PROGRAM_ID>
anchor idl fetch <PROGRAM_ID> -o idl/my_program.jsonCuándo usar esto: Quieres interfaces descubribles sin depender únicamente de GitHub.
Ejemplo de Trabajo
# Después de desplegar y compilar
anchor idl init -f target/idl/my_program.json Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS --provider.cluster devnet
# Los consumidores obtienen
anchor idl fetch Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS -o fetched.jsonLo que esto demuestra:
idl initcrea la cuenta de IDL en cadena.idl fetchrecupera el JSON para los clientes.- Actualiza la IDL con
anchor idl upgradecuando la API cambia. - Empareja con compilaciones verificables para generar confianza.
Análisis Profundo
Modelo de Confianza
La IDL en cadena es conveniente, no un sustituto de las compilaciones reproducibles. Empareja con hashes de programa verificados.
Límites de Tamaño
Las IDLs grandes pueden necesitar estrategias de fragmentación; monitoriza el tamaño de la cuenta y el alquiler.
Errores Comunes
- IDL no actualizada después de la actualización - Los clientes obtienen API obsoleta. Solución: Ejecuta
idl upgradecon la versión del programa. - Confiar en la IDL obtenida sin verificación de hash - Riesgo en la cadena de suministro. Solución: Compara con el artefacto de lanzamiento.
- Compromiso de la clave de autoridad - Se publica una IDL maliciosa. Solución: Protege la autoridad de actualización.
- Obtener desde el clúster incorrecto - Mapeo incorrecto del ID de programa. Solución: Fija el clúster en las herramientas.
- Cuenta de IDL sobredimensionada -
initfalla. Solución: Recorta los metadatos de documentación del JSON de la IDL.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Solo lanzamientos de GitHub | Revisión completa de CI | Descubrimiento por billetera/explorador |
| Paquete npm de IDL | Instalaciones versionadas | Descubrimiento en cadena |
Preguntas Frecuentes
Versión de Anchor?
0.32.1 en temas avanzados.
Cuándo usar `zero_copy`?
Diseños fijos grandes cuando Borsh CU es demasiado alto.
¿Es `realloc` reversible?
No fácilmente; planifica el crecimiento futuro.
¿Están las cuentas restantes en la IDL?
No; documentar por separado.
¿Qué necesita `declare_program!`?
JSON de IDL del llamado en tiempo de compilación.
¿Puede Anchor hacer CPI a Pinocchio?
Sí, con metadatos de cuenta correctos.
¿Banderas de características y IDL?
Evita diferentes IDL por característica en mainnet.
¿Cómo medir CU?
LiteSVM, Surfpool, simulación en devnet.
¿Son comunes los tipos de cuenta personalizados?
No; último recurso.
¿Próximos pasos?
Ver enlaces relacionados para IDL en cadena.
Relacionados
- La IDL de Anchor - contenido
- Versionado de IDL - lanzamientos
- Compilaciones Verificables - verificar
Versiones de Stack: 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.