Codama desde un IDL de Anchor
Codama transforma el IDL de Anchor en TypeScript compatible con @solana/kit 7.0.0: codecs de instrucciones, decodificadores de cuentas y enums de errores.
Receta
anchor build
npx @codama/cli@latest run --idl target/idl/my_program.json --out clients/ts/src/generatedimport { createSolanaRpc, pipe } from "@solana/kit";
import { getIncrementInstruction } from "./generated/instructions";Cuándo usar esto: Las dApps Greenfield se estandarizan en @solana/kit en lugar de web3.js v1.
Ejemplo de Trabajo
import { address, createSolanaRpc, pipe, setTransactionMessageLifetime } from "@solana/kit";
import { getIncrementInstruction } from "./generated/instructions";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const programId = address("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
const ix = getIncrementInstruction({
counter: counterPda,
authority: signerAddress,
});
// Pipe a constructores de mensajes de transacción (patrones de kit 7)Lo que esto demuestra:
- Codama lee el JSON del IDL de Anchor
- Genera ayudantes de instrucciones nativos de kit
- Regenera cuando el IDL cambia
- Emparejar con pruebas de surfpool/litesvm
Análisis Profundo
Pipeline
anchor buildproduce el IDL.- Codama genera módulos TS.
- La aplicación importa solo codecs generados (sin codificación manual).
CI
Falla la compilación si la carpeta generada difiere de una ejecución reciente de Codama.
Trampas Comunes
- Carpeta generada obsoleta - Discriminadores incorrectos. Solución: Paso de Codama en CI pre-compilación.
- Características del IDL que Codama no mapea - Se necesitan parches manuales. Solución: Seguir las notas de la versión de Codama.
- Mezclar kit y web3 en una tx - Fricción de tipos. Solución: Migrar el ensamblaje de transacciones a kit.
- Tipos RPC incorrectos con decodificadores generados - Fallos de decodificación. Solución: Usar RPC de kit en todo momento.
- No fijar la versión de Codama - Deriva en la generación de código. Solución: Bloquear la versión de CLI en package.json.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Programa de @coral-xyz/anchor | Pruebas heredadas de Anchor | Aplicaciones que priorizan Kit |
| Ayudantes de Gill | Envoltorio de kit de nivel superior | Codecs de kit en bruto |
Preguntas Frecuentes
¿Versión de Anchor?
0.32.1 en temas avanzados.
¿Cuándo usar zero_copy?
Grandes layouts fijos cuando Borsh CU es demasiado alto.
¿Es realloc reversible?
No fácilmente; planifica el crecimiento futuro.
¿Están las cuentas restantes en el IDL?
No; documentar por separado.
¿Qué necesita declare_program!?
JSON del IDL del llamador en tiempo de compilación.
¿Puede Anchor hacer CPI a Pinocchio?
Sí, con metadatos de cuenta correctos.
¿Banderas de características y IDL?
Evitar diferentes IDL por característica en mainnet.
¿Cómo medir CU?
LiteSVM, Surfpool, simulación en devnet.
¿Tipos de cuenta personalizados comunes?
No; último recurso.
¿Próximos pasos?
Ver enlaces relacionados para codama.
Relacionado
- Codama y gill de solana/kit - crates
- Construyendo Instrucciones - ix de kit
- Generando Clientes TS - Cliente de Anchor
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.