Los clientes tipados son la forma en que TypeScript off-chain habla con un programa de Solana sin codificar a mano discriminadores, metadatos de cuentas y layouts de Borsh. Una vez que tratas la IDL como el contrato compartido y cada generador de clientes como un consumidor de ese contrato, la API Program de Anchor, la salida de Codama, los ayudantes de gill, los constructores de instrucciones y los decodificadores de cuentas dejan de parecer bibliotecas competidoras y empiezan a parecer un único pipeline desde anchor build hasta una transacción firmada.
La superficie pública de un programa se describe mediante una IDL; los clientes tipados regeneran constructores de instrucciones, codecs y ayudantes de fetch a partir de ese JSON, de modo que TypeScript no pueda inventar silenciosamente layouts que diverjan de la codificación on-chain.
Por qué Importa: Las listas de cuentas y los buffers de argumentos escritos a mano se desvían; una superficie de cliente impulsada por IDL reduce los errores de codificación en mainnet, acelera el trabajo de UI y bots, y permite que CI falle cuando la interfaz se mueve sin una actualización del cliente.
Conceptos Clave:IDL de Anchor, Program TS de Anchor, Codama + @solana/kit, gill, constructores de instrucciones tipados, ayudantes de fetch/decode, discriminadores y Borsh, regeneración de CI y comprobaciones de desvío.
Cuándo Usar: Para lanzar o mantener aplicaciones TypeScript contra programas de Anchor (o descritos por IDL), elegir entre el cliente clásico de Anchor y stacks centrados en kit, o diseñar puertas de lanzamiento de monorepos para programas más frontend.
Limitaciones / Compensaciones: La calidad del cliente sigue a la calidad de la IDL; las cuentas restantes y algunos programas nativos necesitan documentación adicional; Anchor TS y Codama se dirigen a diferentes tiempos de ejecución, así que elige una historia de transacción por aplicación; gill no genera la superficie del programa de tu IDL.
Temas Relacionados: Cliente TS de Anchor, Codama, gill, construcción de instrucciones, obtención y decodificación de cuentas, mantenimiento de clientes sincronizados.
Los programas de Solana exponen bytes: datos de instrucciones (generalmente un discriminador de 8 bytes más argumentos) y listas de cuentas con indicadores de firmante y escritura. Nada en la red es "nativo de TypeScript". Sin una descripción compartida de esas formas, cada dApp, script e indexador inventa su propia codificación y, finalmente, discrepa con el programa.
Anchor llena ese vacío para los programas del framework. Las macros en instrucciones, cuentas, eventos y errores alimentan anchor build, que emite JSON de IDL bajo target/idl/. Ese archivo es el contrato para el trabajo off-chain en esta sección: nombres de instrucciones y cuentas, tipos, errores, eventos y metadatos de dirección del programa. Los clientes tipados existen para consumir ese contrato, no para reemplazarlo.
Piensa en el stack off-chain como capas desde la IDL hacia la UX:
+------------------------------------------+ | App / bot / API (flujos de negocio) | <- UI, trabajos, wallets +------------------------------------------+ | Conveniencia (ayudantes opcionales de gill) | <- Patrones RPC + envío +------------------------------------------+ | Superficie del cliente del programa | | Codecs / ixs generados por Codama | | o Anchor TS Program.methods.* | +------------------------------------------+ | Primitivas de tiempo de ejecución (@solana/kit 7.0.0) | <- RPC, mensajes, firmantes +------------------------------------------+ | Artefacto IDL (JSON, anclado en git/npm) | <- Contrato versionado +------------------------------------------+ | Build del programa (Anchor 0.32.1 + sBPF) | +------------------------------------------+
Dos historias de cliente de programa de TypeScript dominan:
Cliente TS de Anchor (@coral-xyz/anchor): carga la IDL en new Program(...), llama a program.methods.<ix>(...).accounts(...).rpc(). Encaja bien con anchor test, dApps existentes y equipos que ya usan patrones de Anchor Provider.
Codama: analiza la IDL de Anchor en un grafo de nodos y renderiza módulos orientados a @solana/kit (get*Instruction, ayudantes fetch* / decode*, mapas de errores). Encaja bien con stacks de kit nuevos y ensamblaje de transacciones apto para tree-shaking.
@solana/kit 7.0.0 es la capa moderna de RPC, codecs, firmantes y mensajes de transacción. Codama es el puente habitual desde la IDL de Anchor a los tipos de kit. Kit por sí solo no conoce los layouts de cuenta de tu programa; sin Codama (o codecs escritos a mano) vuelves a inventar bytes.
gill se sitúa por encima de kit como conveniencia opcional: patrones de fábrica de clientes, RPC por nombre y ayudantes de envío comunes. No reemplaza la salida de Codama para tu programa personalizado. Todavía generas constructores y decodificadores específicos del programa a partir de la IDL, y luego los compones con rutas de envío de kit o gill.
Lecturas y escrituras comparten la misma superficie generada: los constructores codifican el discriminador + argumentos y metadatos de cuenta; los ayudantes de fetch decodifican los bytes de RPC con el layout coincidente. Un generador mantiene ambas rutas alineadas.
Los pines de plataforma para este sitio son: Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, Rust 1.91.1 y @solana/kit 7.0.0.
programs/.../lib.rs --macros--> anchor build | v target/idl/foo.json | +--------------------------+--------------------------+ v v Anchor TS Program(idl) Codama CLI + renderers methods / account.fetch get*Instruction, fetch* | | v v Proveedor clásico / pruebas mensajes de transacción de kit
Regenera en cada cambio de interfaz pública. Editar a mano carpetas generadas o el JSON de IDL para "coincidir con la UI" crea un desvío silencioso: el programa todavía codifica el layout definido por macros mientras que los clientes codifican ficción. Los detalles para la generación se encuentran en Codama; la ruta clásica es El Cliente TS de Anchor.
Pruebas, dApps heredadas, prototipos rápidos de Anchor
Aplicaciones de kit nuevas, paquetes de servidor/web compartidos
Costo de migración
Bajo si ya tiene forma de Anchor
Pagar una vez por la familiaridad con el pipeline de mensajes de kit
No mezcles el ensamblaje de transacciones de kit con objetos de instrucción de web3.js sin un puente deliberado. Elige un tiempo de ejecución de cliente por aplicación y regenera cuando la IDL cambie. Prefiere Codama + kit para módulos nuevos; mantén Anchor TS donde el costo de migración sea dominante.
Un constructor de instrucciones generado responde: qué cuentas, qué indicadores, qué tipos de argumentos, qué discriminador. Pasas direcciones y firmantes; el constructor emite un objeto de instrucción nativo de kit (o nativo de Anchor) listo para ser añadido a un mensaje de transacción.
Nunca reordenes manualmente los metadatos de cuenta. El orden y los indicadores provienen de la IDL; los flujos de tipo init todavía necesitan el Sistema Program y cuentas de financiación cuando sea necesario. Inmersión profunda: Construcción de Instrucciones.
Un propietario incorrecto, un ID de programa de clúster incorrecto o un decodificador obsoleto producen basura que parece válida hasta que una escritura falla. Prefiere los ayudantes fetch* generados; usa RPC crudo + decode* para lotes personalizados. Detalles: Obtención y Decodificación de Cuentas.
gill reduce el boilerplate de kit (creación de clientes, nombres de alias, patrones de envío y confirmación). El conocimiento específico del programa todavía proviene de Codama (o Anchor TS). Una composición saludable es:
gill createSolanaClient --> ayudantes de RPC y envío Módulo generado por Codama --> getIx / fetchAccount Código de la aplicación --> componer ambos
Trata gill como una aceleración sobre la familiaridad con kit, no como una caja negra que inventa la API de tu programa. Ver gill.
Los clientes tipados solo se mantienen correctos si la regeneración es mecánica y forzada:
Edita la superficie del programa bajo Anchor 0.32.1; compila con Agave/CLI y Rust fijados.
Revisa la diferencia de IDL; confirma el artefacto si es la fuente de verdad del equipo.
Ejecuta Codama (o actualiza los tipos de Anchor); falla CI en árboles generados sucios.
Ejecuta pruebas unitarias/de integración contra localnet o harnesses estilo Surfpool.
Coordina los despliegues de frontend/bots con los despliegues de programas cuando el cambio sea disruptivo.
Etiqueta las versiones con el ID del programa, el clúster y el hash del contenido de la IDL (o SHA del commit).
cambio de programa --> diferencia IDL --> diferencia cliente --> reconstrucción de app --> despliegue ^ | CI: git diff --exit-code generated/
La obtención de IDL on-chain ayuda al descubrimiento; los clientes de producción todavía fijan artefactos confiables. Práctica completa: Mantener los Clientes Sincronizados.
Ajusta la antigüedad del stack, la elección del tiempo de ejecución y el rigor de la versión a una ruta, luego añade compuertas cuando aumente el desvío entre desarrolladores o el riesgo de mainnet.
Ruta
Qué envías
Fortalezas
Debilidades
Mejor ajuste
Solo Anchor TS
IDL + Program en app/pruebas
API fluida rápida; natural con pruebas de Anchor
Migración a kit más tarde; acoplamiento histórico con web3.js
dApps de Anchor existentes
Codama + kit
Codecs generados en monorepo o paquete
Stack de kit moderno; mensajes explícitos
Paso de generación de código y disciplina de pines
Interfaces de producto y APIs nuevas
Codama + kit + gill
Lo anterior + ayudantes de cliente de gill
Arranque más rápido; patrones de envío compartidos
Otra versión a rastrear; todavía se necesita Codama
Aplicaciones generadas y equipos pequeños
Monorepo multi-programa
Una IDL y una carpeta generada por programa
Espacios de nombres claros; CI compartida
Colisiones de nombres si las carpetas se fusionan
Espacios de trabajo con varios crates de programas
Tren de lanzamiento completo
Hash de IDL, pin npm/git, CI de árbol sucio, despliegue coordinado
Listo para integradores; amigable para auditorías
Costo del proceso
Programas de Mainnet con clientes externos
Aplicaciones multi-programa: nunca fusiones superficies de IDL en un solo JSON. Nombra por espacio de nombres la salida generada (clients/program_a, clients/program_b) y evita colisiones de nombres de exportación.
Los indexadores y bots también son clientes; un decodificador de trabajador obsoleto es la misma clase de error que un hook de UI obsoleto, solo que más silencioso.
Los programas nativos pueden carecer de una IDL de Anchor completa. Prefiere una IDL compatible mantenida, Codama a partir de una descripción personalizada, o codecs de kit construidos a mano.
Las cuentas restantes a menudo se encuentran fuera de las listas fijas de IDL. Documentarlas y pasarlas explícitamente; la generación de código puede no inventar el grafo completo de cuentas en tiempo de ejecución.
Para revisiones de diseño: qué tiempo de ejecución TS se estandariza, quién posee el artefacto de IDL, cómo la CI detecta el desvío, si se permite gill y cómo se implementan los cambios disruptivos de IDL.
"Los clientes tipados significan que puedo saltarme aprender los mensajes de kit." Los constructores todavía aterrizan en mensajes de transacción; la simulación, las tarifas y los firmantes siguen siendo tu responsabilidad.
"Anchor TS y Codama son reemplazos directos." Ambos leen la IDL, pero se dirigen a diferentes stacks de clientes; elige una ruta de transacción principal por aplicación.
"gill genera mi cliente de programa." gill ayuda con los flujos de trabajo de kit; las instrucciones y decodificadores específicos del programa todavía provienen de Codama o Anchor TS.
"Puedo editar manualmente los archivos generados para una corrección urgente." La próxima regeneración los borrará; pon las anulaciones solo en módulos envolventes.
"Si la UI tiene tipos correctos, la IDL coincide con mainnet." Los tipos coinciden con la IDL contra la que generaste, no necesariamente con el programa desplegado; fija el ID del programa, el clúster y el hash de la IDL.
"Los ayudantes de fetch son un pulido opcional." Los decodificadores compartidos evitan que dos layouts (ruta de lectura vs ruta de escritura) diverjan dentro de una misma base de código.
"La regeneración de CI es excesiva para un repositorio individual." El desvío aparece la primera vez que cambias un campo de cuenta y olvidas un segundo paquete.
"Importar el JSON completo de la IDL en tiempo de ejecución siempre está bien." Las IDLs grandes hinchan los bundles; prefiere módulos generados aptos para tree-shaking o cargas perezosas.
¿Cuál es la idea más importante en los clientes tipados?
Una IDL versionada es el contrato compartido; cada ayudante tipado de TypeScript es un consumidor regenerado de ese contrato, no una ABI escrita a mano paralela.
¿De dónde viene la IDL?
Para programas de Anchor, anchor build (0.32.1 en este sitio) emite JSON bajo target/idl/ a partir de macros. Confirma y revisa ese artefacto como producto de API.
¿Cuándo debería usar el cliente TS de Anchor?
Cuando mantienes pruebas clásicas de Anchor o dApps existentes en el modelo Provider / .methods y aún no estás estandarizando el ensamblaje de transacciones de kit.
¿Cuándo debería usar Codama?
Cuando la aplicación se estandariza en @solana/kit 7.0.0 y deseas constructores de instrucciones y decodificadores de cuentas generados que coincidan con la IDL de Anchor sin codecs manuales.
¿Cómo se relaciona Codama con la IDL de Anchor?
Codama ingiere JSON de IDL de Anchor (a través de nodes-from-anchor y paquetes relacionados), construye un grafo interno y renderiza TypeScript orientado a kit. Reconstruye cuando la IDL cambia y fija las versiones de CLI/renderizador en CI.
¿Es gill obligatorio?
No. Es un azúcar opcional para patrones de RPC y envío de kit. La tipificación específica del programa todavía depende de Codama o Anchor TS.
¿Cómo construyo una instrucción tipada?
Llama a get*Instruction (Codama) o program.methods.* (Anchor TS) generados con cuentas y argumentos, luego coloca el resultado en tu ruta de envío elegida. Ver Construcción de Instrucciones.
¿Cómo obtengo una cuenta tipada?
Usa los ayudantes fetch* generados con RPC de kit, o getAccountInfo más decode*. Siempre maneja las cuentas faltantes y verifica las suposiciones del propietario/ID del programa. Ver Obtención y Decodificación de Cuentas.
¿Qué se rompe si la IDL y el programa divergen?
Discriminadores, orden de cuentas o layouts incorrectos causan fallos de simulación, errores personalizados crípticos, decodificaciones de cuentas corruptas o mentiras silenciosas de la UI que solo fallan al escribir.
¿Cómo mantiene CI los clientes sincronizados?
Compila el programa, regenera los clientes, git diff --exit-code en las rutas generadas y ejecuta pruebas. Combínalo con etiquetas de versión que incluyan el hash del programa y la versión de la IDL. Ver Mantener los Clientes Sincronizados.
¿Puedo mezclar kit y web3.js en una sola característica?
Solo con un puente explícito. Prefiere un tiempo de ejecución por límite de característica para que los tipos de instrucción y dirección no fluctúen.
¿Reemplazan los clientes tipados la validación on-chain?
No. Los clientes reducen los errores de codificación; el programa todavía aplica restricciones, propiedad y reglas de firmante. La simulación sigue siendo obligatoria para flujos serios.
¿Cómo se mantienen limpios los monorepos multi-programa?
Una IDL y un directorio de salida generada por programa, regeneración de CI compartida para todos, y exportaciones de paquetes explícitas para que las rutas de importación no puedan cruzar silenciosamente los cables.
¿Dónde encaja @solana/kit en relación con Codama?
Kit es el stack de RPC y transacciones (este sitio: 7.0.0). Codama une la IDL de Anchor a ese stack. Kit no compila sBPF ni posee el formato IDL.