@solana/kit, Codama & gill (JS/TS)
La pila de clientes moderna de Solana en TypeScript se centra en @solana/kit 7.0.0 para RPC, códecs y mensajes de transacción. Codama genera clientes nativos de kit a partir de IDLs de Anchor 0.32.1. gill es una capa de conveniencia que agrupa patrones comunes de kit para el código de aplicación. Juntos, reemplazan el uso de @solana/web3.js v1 en Greenfield con Agave 4.1.1.
Receta
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
npm install @solana/kit@7.0.0 gill
npm install -D @codama/nodes-from-anchor @codama/renderers-jsimport { createSolanaRpc, address, lamports } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const balance = await rpc.getBalance(address("11111111111111111111111111111111")).send();
console.log(balance.value);Cuándo usar esto:
- Nuevas dApps Next.js o React dirigidas a RPC de Agave 4.x.
- Generación de clientes tipados después de la salida del IDL de
anchor build. - Importaciones funcionales "tree-shakable" en lugar de clases monolíticas de web3.js.
- Códecs compartidos entre el frontend y las rutas de API.
Ejemplo de Trabajo
import {
createSolanaRpc,
createTransactionMessage,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
signTransactionMessageWithSigners,
getSignatureFromTransaction,
address,
} from "@solana/kit";
import { getTransferSolInstruction } from "@solana-program/system";
import { createKeyPairSignerFromBytes } from "@solana/signers";
import fs from "node:fs";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const secret = Uint8Array.from(JSON.parse(fs.readFileSync(process.env.KEYPAIR!, "utf8")));
const payer = await createKeyPairSignerFromBytes(secret);
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
let message = createTransactionMessage({ version: 0 });
message = setTransactionMessageFeePayerSigner(payer, message);
message = setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, message);
message = appendTransactionMessageInstruction(
getTransferSolInstruction({
source: payer,
destination: address("11111111111111111111111111111111"),
amount: 1_000n,
}),
message,
);
const signed = await signTransactionMessageWithSigners(message);
const sig = getSignatureFromTransaction(signed);
await rpc.sendTransaction(signed, { encoding: "base64" }).send();
console.log(sig);Lo que esto demuestra:
- La composición funcional de pipeline crea mensajes de transacción de forma inmutable.
- Los firmantes son adaptadores explícitos de par de claves.
- Los ayudantes del programa del sistema provienen de paquetes
@solana-program/*. - RPC usa
.send()para respuestas tipadas.
Inmersión Profunda
Cómo Funciona
- kit divide las exportaciones de subrutas (
@solana/rpc,@solana/transaction-messages, códecs). - Codama lee el IDL, construye un grafo de nodos, renderiza funciones cliente de TypeScript.
- gill reexporta kit + clientes de programas comunes para un arranque de aplicación más rápido.
- Los adaptadores de billetera se integran en la capa de firmantes; kit se mantiene agnóstico a la billetera.
Tabla de TypeScript / NPM
| Paquete | Rol | Fijado (este sitio) |
|---|---|---|
@solana/kit | RPC, mensajes, códecs, direcciones | 7.0.0 |
gill | Ayudantes a nivel de aplicación sobre kit | Última versión compatible con kit 7 |
@codama/cli | Orquestación de codegen | Fijado por proyecto |
@codama/renderers-js | Renderizador de clientes TS | Coincide con CLI |
@solana-program/system | Ayudantes de ix del sistema | Coincide con la versión principal de kit |
@solana-program/token | Ayudantes de ix de Token SPL | Coincide con la revisión del token |
Tabla de Crates de Rust (paridad)
| Crate | Rol | Cuándo |
|---|---|---|
anchor-lang | Fuente del IDL | En cadena Anchor 0.32.1 |
solana-sdk | Transacciones de cliente Rust | Servicios Rust |
declare_program! | Consumidor de IDL Rust | Backend Rust |
Notas de TypeScript
// Regenerar clientes cuando cambie el IDL
// npx codama run --config codama.json
// Preferir lamports bigint en ejemplos de kit
const amount = 1_000_000n;Trampas
- Mezclar tipos de web3.js v1 y kit - modelos de Pubkey duplicados. Solución: migrar módulos completamente por ruta.
- Salida de Codama obsoleta después de un cambio en el IDL - errores de codificación en tiempo de ejecución. Solución: CI falla si la carpeta generada está sucia.
- Falta de firmante en el mensaje - la simulación falla. Solución:
setTransactionMessageFeePayerSigner+ firmantes requeridos. - Asumir que gill reemplaza a kit - gill es azúcar; entender kit para casos extremos. Solución: leer las API subyacentes de kit.
- Soporte incorrecto de características RPC - las API de DAS y tarifas de prioridad varían según el proveedor. Solución: matriz de capacidades por proveedor.
Alternativas
| Alternativa | Usar Cuándo | No Usar Cuándo |
|---|---|---|
@coral-xyz/anchor TS | Aplicaciones Anchor heredadas | Proyectos Greenfield con kit |
@solana/web3.js v1 | Mantenimiento de código antiguo | Nuevas aplicaciones 2026+ |
solana-py / AnchorPy | Backends de Python | Billeteras del navegador |
Rust solana-client | Servicio de firmante de alto rendimiento | Frontend |
Preguntas Frecuentes
¿Está web3.js obsoleto?
Se considera heredado; kit es la ruta recomendada para TypeScript nuevo.
¿Codama con IDL nativo?
Sí, si publicas IDL JSON compatible con Shank/Anchor.
¿App Router de Next.js?
Mantén los firmantes solo en el navegador; las rutas del servidor construyen mensajes sin firmar o usan pares de claves del servidor con cuidado.
¿Estándar de Billetera?
Integra adaptadores de billetera que expongan firmantes compatibles con kit.
¿Transacciones versionadas?
Por defecto en los ejemplos de kit - usa mensajes v0 con ALTs cuando sea necesario.
¿Tarifas de prioridad en kit?
Añade instrucciones de presupuesto de cómputo desde @solana-program/compute-budget.
¿gill vs kit?
Empieza con gill para velocidad; recurre a kit para un control fino.
¿Pruebas?
Pruebas de integración con Bankrun TS o respaldadas por Surfpool usando clientes kit.
¿Solo ESM?
Sigue las exportaciones de paquetes de kit; configura el bundler para Node ESM en rutas de API.
¿Versión de Anchor?
IDL de Anchor CLI 0.32.1 / anchor-lang 0.32.1 para compatibilidad con Codama.
Relacionado
- Conceptos básicos de @solana/kit - introducción a kit
- Codama - pipeline de codegen
- gill - ayudantes de gill
- Generación de Clientes TS - flujo de trabajo
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.