Instrucciones de compilación
Construye instrucciones tipadas a partir de clientes Codama generados.
Receta
import { getIncrementInstruction } from "./generated/clients/js";
import { appendTransactionMessageInstruction } from "@solana/kit";Cuándo usar esto:
- Componer llamadas a programas en flujos de billetera.
- Transacciones parciales creadas en el servidor.
- Rutas DeFi de múltiples instrucciones.
Ejemplo práctico
import {
createTransactionMessage,
pipe,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
createSolanaRpc,
} from "@solana/kit";
import { getIncrementInstruction } from "./generated/clients/js";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const { value: bh } = await rpc.getLatestBlockhash().send();
const ix = getIncrementInstruction({
counter: counterAddress,
authority: walletSigner,
});
const message = pipe(
createTransactionMessage({ version: 0 }),
(m) => setTransactionMessageFeePayerSigner(walletSigner, m),
(m) => setTransactionMessageLifetimeUsingBlockhash(bh, m),
(m) => appendTransactionMessageInstruction(ix, m)
);Lo que esto demuestra:
- El generador generado codifica el discriminador + argumentos Borsh.
- Los objetos
Signersatisfacen los requisitos de metadatos de autoridad. - Combina múltiples
ixde programa en un solo mensaje.
Análisis profundo
Cómo funciona
- Datos de instrucción = discriminador de 8 bytes + argumentos serializados.
- Las
Account metasincluyen indicadoressigner/writablepor IDL. - Las cuentas restantes para CPI se muestran también en la IDL.
- Simula para detectar fallos de restricciones de forma temprana.
Errores comunes
- Orden incorrecto de cuentas - error del programa 0x... Solución: nunca reordenes manualmente las
metas. - Cadenas
Pubkeyen lugar deSigner- falta firma. Solución: pasa el tipoSignerpara las firmas. - Cuentas de inicialización faltantes - necesita
system+rent. Solución: incluye instrucciones de inicialización de los ayudantes de la IDL. - Incompatibilidad de tipos de argumento -
BNvsbigint. Solución: usa los tipos TS generados literalmente. - Profundidad
CUdeCPI-OOMde simulación. Solución: aumenta el límite de unidades de cómputo.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
Anchor .methods | Scripts rápidos heredados | Control de mensajes de Kit |
| Diseño de búfer sin procesar | Solo para aprender | Producción |
Preguntas frecuentes
¿IDL de Anchor 0.32.1?
Ejecuta anchor build; apunta Codama al JSON 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 los clientes generados en componentes cliente para escrituras.
¿Pruebas?
Pruebas de integración con Surfpool + devnet.
¿`web3.js`?
No mezclar con los clientes de Kit generados.
¿Múltiples programas?
Una configuración de Codama por programa o espacio de trabajo monorepo.
¿Obtención de cuentas?
Usa los decodificadores generados con getAccountInfo.
¿Errores?
Mapea los códigos de error del programa a partir de metadatos de la IDL.
Relacionado
- Construcción de mensajes de transacción - componer tx
- Firma del lado del cliente - enviar desde billetera
- Codama - generar generadores
Versiones de la pila: Esta página se escribió 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.