Generación de Clientes TS
Genera clientes TypeScript a partir de la IDL de Anchor para la resolución tipada de cuentas, constructores de instrucciones y decodificación de errores.
Receta
anchor build
# Cliente Anchor heredado
anchor idl parse -f target/idl/my_program.json -o app/src/idl.tsimport { Program, AnchorProvider } from "@coral-xyz/anchor";
import idl from "./idl/my_program.json";
const program = new Program(idl as MyProgram, provider);
await program.methods.initialize().accounts({ payer }).rpc();Cuándo usar esto: Si construyes dApps o pruebas de integración contra programas de Anchor.
Ejemplo de Trabajo
import { AnchorProvider, Wallet, Program } from "@coral-xyz/anchor";
import { Connection, Keypair } from "@solana/web3.js";
import idl from "../target/idl/counter.json";
const connection = new Connection("http://127.0.0.1:8899");
const wallet = new Wallet(Keypair.generate());
const provider = new AnchorProvider(connection, wallet, {});
const program = new Program(idl, provider);
await program.methods
.increment()
.accounts({
counter: counterPda,
authority: wallet.publicKey,
})
.rpc();Lo que esto demuestra:
- La IDL JSON es el contrato entre el programa y el cliente.
- Los constructores
methods.*codifican los datos de la instrucción. accounts()mapea los nombres de cuenta de la IDL.- Tipos de la IDL para la decodificación de cuentas.
Profundización
Pila Moderna
Para aplicaciones nuevas, prefiere los clientes generados por Codama + @solana/kit 7.0.0 (ver el siguiente artículo). El cliente TS de Anchor sigue siendo común en los flujos de trabajo de pruebas de Anchor.
Publicación
Envía el paquete npm de la IDL o confirma los tipos generados en CI.
Errores Comunes
- IDL no actualizada en el repositorio del cliente - Errores de diseño silenciosos. Solución: Automatiza la copia de la IDL en CI.
- Errores tipográficos en nombres de cuenta en
.accounts()- Fallos en tiempo de ejecución. Solución: Usa tipos generados siempre que sea posible. - IDL con ID de programa de clúster incorrecta - Transacciones enviadas al programa equivocado. Solución: IDL por clúster o anulación de dirección.
- Mezcla de versiones de web3.js - Conflictos de dependencias. Solución: Alinea con las dependencias peer de Anchor o migra a kit.
- Omitir simulación - Mala experiencia de usuario en errores. Solución: Simula antes de la firma de la billetera.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Codama + @solana/kit | Clientes modernos nativos de kit | Pila de pruebas de Anchor heredada |
| Bytes de instrucción hechos a mano | Dependencias mínimas | IDL de Anchor disponible |
| anchorpy (Python) | Bots de Python | dApps de TypeScript |
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!?
IDL JSON del llamador en tiempo de compilación.
¿Puede Anchor hacer CPI a Pinocchio?
Sí, con metadatos de cuenta correctos.
¿Banderas de características e IDL?
Evita 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 el cliente ts.
Relacionados
- Codama a partir de una IDL de Anchor - generación de código de kit
- El Cliente TS de Anchor - patrones de cliente
- Versionado de IDL - sincronización
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.