Conceptos básicos de @solana/kit
9 ejemplos para empezar con @solana/kit: 6 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
9 ejemplos para empezar con @solana/kit: 6 básicos y 3 intermedios.
Instala kit 7.0.0 y las utilidades del programa del sistema:
npm install @solana/kit@7.0.0 @solana-program/systemEstablece RPC_URL a un endpoint de devnet (se recomienda la URL del proveedor sobre los límites de tasa públicos).
JSON-RPC tipado con .send() en cada método.
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const slot = await rpc.getSlot().send();
console.log(slot);createSolanaRpc devuelve un cliente apto para tree-shaking: importa solo lo que uses..send() para E/S de red explícita.Relacionado: RPC y suscripciones - suscripciones y proveedores
Las direcciones son cadenas de texto con marca: no son arrays de bytes en el código de la aplicación.
import { createSolanaRpc, address, lamports } from "@solana/kit";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const owner = address("TU_PUBKEY_DE_CARTERA");
const { value } = await rpc.getBalance(owner).send();
console.log(Number(value) / 1e9);address() valida base58 y devuelve una Address tipada.Lamports (bigint): conviértelos cuidadosamente para mostrarlos.Relacionado: RPC y suscripciones - HTTP vs WebSocket
Los scripts del servidor y las pruebas usan firmantes explícitos.
import { generateKeyPairSigner } from "@solana/kit";
const signer = await generateKeyPairSigner();
console.log(signer.address);generateKeyPairSigner crea una clave Ed25519 utilizable en mensajes de transacción.chmod 600 y nunca los incluyas en git.Relacionado: Keypairs y firmantes - CryptoKey y importación de archivos
Coincide con el formato de array de solana-keygen.
import { createKeyPairSignerFromBytes } from "@solana/kit";
import { readFileSync } from "node:fs";
const secret = Uint8Array.from(
JSON.parse(readFileSync("./dev-wallet.json", "utf8"))
);
const signer = await createKeyPairSignerFromBytes(secret);Relacionado: Keypairs y firmantes - traits de firmante
Los blockhashes caducan: actualízalos por cada lote de transacciones.
const { value: blockhash } = await rpc.getLatestBlockhash().send();
console.log(blockhash.blockhash, blockhash.lastValidBlockHeight);lastValidBlockHeight: los hashes obsoletos fallan en la confirmación.Relacionado: Construcción de mensajes de transacción - vidas útiles
La pipe funcional compone transformaciones inmutables de mensajes.
import {
createTransactionMessage,
pipe,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
} from "@solana/kit";
import { getTransferSolInstruction } from "@solana-program/system";
const message = pipe(
createTransactionMessage({ version: 0 }),
(m) => setTransactionMessageFeePayerSigner(signer, m),
(m) => setTransactionMessageLifetimeUsingBlockhash(blockhash, m),
(m) =>
appendTransactionMessageInstruction(
getTransferSolInstruction({
source: signer,
destination: recipient,
amount: 10_000_000n,
}),
m
)
);@solana-program/*, no de IDs de programa en cadena.bigint.Relacionado: Construcción de mensajes de transacción - pipeline completo
Los firmantes se resuelven desde el mensaje, luego el RPC envía la transacción de red.
import {
signTransactionMessageWithSigners,
getSignatureFromTransaction,
sendAndConfirmTransactionFactory,
} from "@solana/kit";
const signed = await signTransactionMessageWithSigners(message);
const signature = getSignatureFromTransaction(signed);
const sendAndConfirm = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });
await sendAndConfirm(signed, { commitment: "confirmed" });signTransactionMessageWithSigners recopila los firmantes requeridos del mensaje.Relacionado: Firma y envío - estrategias de confirmación
Las actualizaciones push son mejores que el sondeo para las interfaces de usuario de carteras.
import { createSolanaRpcSubscriptions, address } from "@solana/kit";
const rpcSubscriptions = createSolanaRpcSubscriptions("wss://api.devnet.solana.com");
const abort = new AbortController();
const notifications = await rpcSubscriptions
.accountNotifications(address("TU_CUENTA"), { commitment: "confirmed" })
.subscribe({ abortSignal: abort.signal });
for await (const n of notifications) {
console.log(n.value.lamports);
}wss://; las URLs HTTP fallan para las suscripciones.Relacionado: RPC y suscripciones - tipos de suscripción
Los codecs de Kit reemplazan los diseños de Buffer hechos a mano.
import {
getU32Encoder,
getU32Decoder,
getStructEncoder,
getStructDecoder,
} from "@solana/kit";
const layout = getStructEncoder([["count", getU32Encoder()]]);
const bytes = layout.encode({ count: 42 });
const decoded = getStructDecoder([["count", getU32Decoder()]]).decode(bytes);Relacionado: Codecs y serialización - diseños avanzados
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.
Revisado por Chris St. John·Última actualización: 19 jul 2026