Codama
Genera clientes @solana/kit 7.0.0 a partir de IDLs de Anchor 0.32.1.
Receta
npm install -D @codama/cli @codama/nodes-from-anchor @codama/renderers-js{
"idl": "target/idl/my_program.json",
"scripts": { "js": "@codama/renderers-js" }
}Cuándo usar esto:
- Cualquier programa Anchor que necesite clientes tipados para el frontend.
- Compartir constructores de instrucciones entre rutas web y de API.
- Eliminar discriminadores mantenidos manualmente.
Ejemplo de Trabajo
anchor build
npx codama run --config codama.jsonimport { createSolanaRpc } from "@solana/kit";
import { fetchCounter, getIncrementInstruction } from "./generated/clients/js";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const account = await fetchCounter(rpc, counterAddress);
const ix = getIncrementInstruction({ counter: counterAddress, authority: signer });Lo que esto demuestra:
- Los ayudantes
fetch*combinan RPC + decodificador. get*Instructiondevuelve instrucciones nativas de kit.- La carpeta de salida es segura para confirmar con comprobaciones de deriva de CI.
Análisis Profundo
Cómo Funciona
- Codama analiza la IDL en un grafo de nodos AST.
- Los renderizadores emiten TypeScript ajustado a los códecs de @solana/kit.
- Funciona con IDL de Anchor; las IDLs nativas de Shank se admiten con un esquema compatible.
- Actualiza el renderizador al actualizar la versión principal de kit.
Errores Comunes
- Se olvidó
anchor build- entrada de IDL obsoleta. Solución: el paso de generación de código depende del artefacto de compilación. - Desajuste de versión del renderizador/kit - errores de tipo. Solución: fijar versiones compatibles en la documentación.
- Ediciones manuales en la carpeta generada - se borran al regenerar. Solución: extender solo a través de envolturas.
- Cuentas faltantes en el constructor - la simulación falla. Solución: confiar en las metadatos de cuenta generadas.
- IDL confirmada del clúster incorrecto - ID de programa incorrecta. Solución: configuración por entorno.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| anchor-client-gen (legado) | Repositorios antiguos | Nueva canalización de Codama |
| Códecs escritos a mano | Algo pequeño y único | Aplicaciones de producción Anchor |
Preguntas Frecuentes
IDL de Anchor 0.32.1?
Ejecuta anchor build; apunta Codama al JSON de target/idl.
Regenerar cuándo?
Cada cambio en la interfaz en cadena en CI.
Clientes tipados de kit?
Codama renderiza funciones nativas de @solana/kit.
Se requiere gill?
Azúcar opcional sobre kit.
Next.js?
Importa clientes generados en componentes cliente para escrituras.
Pruebas?
Pruebas de integración con Surfpool + devnet.
web3.js?
No mezclar con clientes de kit generados.
Múltiples programas?
Una configuración de Codama por programa o espacio de trabajo monorepo.
Obtener cuenta?
Usa decodificadores generados con getAccountInfo.
Errores?
Mapea códigos de error del programa a partir de metadatos de IDL.
Relacionado
- Construcción de Instrucciones - usar constructores
- Mantener Clientes Sincronizados - flujo de trabajo de CI
- @solana/kit, Codama y gill - pila
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.