Creación de Mensajes de Transacción
Compón mensajes de transacción versionados con pagador de tarifas, tiempo de vida e instrucciones.
Receta
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
import {
createTransactionMessage,
pipe,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
} from "@solana/kit";Cuándo usar esto:
- Cualquier paquete de instrucciones personalizado (DeFi, NFT, juego).
- Transacciones atómicas de múltiples instrucciones.
- Mensajes de versión 0 con tablas de búsqueda de direcciones.
- Flujos del lado del cliente antes de la firma de la billetera.
Ejemplo de Trabajo
import {
createSolanaRpc,
createTransactionMessage,
pipe,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstructions,
address,
} from "@solana/kit";
import {
getSetComputeUnitLimitInstruction,
getSetComputeUnitPriceInstruction,
} from "@solana-program/compute-budget";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const { value: blockhash } = await rpc.getLatestBlockhash().send();
const budgetIxs = [
getSetComputeUnitLimitInstruction({ units: 200_000 }),
getSetComputeUnitPriceInstruction({ microLamports: 5_000n }),
];
const message = pipe(
createTransactionMessage({ version: 0 }),
(m) => setTransactionMessageFeePayerSigner(walletSigner, m),
(m) => setTransactionMessageLifetimeUsingBlockhash(blockhash, m),
(m) => appendTransactionMessageInstructions(budgetIxs, m),
(m) => appendTransactionMessageInstructions(programIxs, m)
);Lo que esto demuestra:
- Las instrucciones del presupuesto de cómputo suelen ir primero.
pipemantiene las transformaciones legibles e inmutables.- El tiempo de vida del blockhash debe ser fresco por cada envío.
Análisis Profundo
Cómo Funciona
- Los mensajes listan las cuentas, instrucciones y firmas requeridas en el cable.
- La versión 0 habilita tablas de búsqueda de direcciones para reducir las claves estáticas.
- El pagador de tarifas paga la tarifa de red; firmantes adicionales firman si son escribibles/firmantes.
- El tiempo de vida puede ser un blockhash o un nonce duradero (avanzado).
Lista de Verificación del Mensaje
| Paso | API |
|---|---|
| Versión | createTransactionMessage({ version: 0 }) |
| Pagador de tarifas | setTransactionMessageFeePayerSigner |
| Tiempo de vida | setTransactionMessageLifetimeUsingBlockhash |
| Instrucciones | appendTransactionMessageInstruction(s) |
Errores Comunes
- Blockhash obsoleto - la confirmación falla después de ~60-90s. Solución: volver a obtener y reconstruir.
- Falta de firmante en el mensaje - error de simulación. Solución: adjuntar todos los firmantes requeridos.
- Orden de instrucciones - presupuesto antes que las instrucciones del programa. Solución: anteponer el presupuesto de cómputo.
- Desajuste de la lista de cuentas - el programa espera metadatos diferentes. Solución: usar constructores generados.
- v0 sin ALT cuando es necesario - la tx es demasiado grande. Solución: ver Tablas de Búsqueda de Direcciones.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Constructores Codama | Instrucciones de programa tipadas | Transferencia de sistema única |
| Ayudantes gill | Arranque más rápido | Metadatos de cuenta personalizados |
CLI solana transfer | Envío manual de SOL | Integración de aplicaciones |
Preguntas Frecuentes
¿Funciona esto en devnet?
Sí, apunta el RPC y la billetera al mismo clúster.
¿Puedo mezclar kit y web3.js?
Evita hacerlo en un módulo; migra completamente por ruta.
¿Qué pasa con los adaptadores de billetera?
Las billeteras proporcionan firmantes; kit construye mensajes.
¿Cómo fijo @solana/kit?
Bloquea 7.0.0 en package.json y CI.
¿Dónde están las tarifas de prioridad?
Instrucciones del presupuesto de cómputo antes del envío.
¿Cómo probar?
Surfpool 0.12.0 o un validador local con clones de devnet.
¿Lamports o SOL?
Siempre bigint lamports en el código de kit.
¿Qué compromiso?
confirmed para UI; finalized para tesorería.
¿Componentes de servidor Next.js?
Lectura en el servidor; firma en componentes del cliente.
¿Depurar transacciones fallidas?
Simular, leer logs, verificar propietarios de cuentas.
Relacionado
- Firma y Envío - firmar y confirmar
- Tablas de Búsqueda de Direcciones - reducir txs v0
- Codecs y Serialización - datos personalizados
Versiones de Stack: 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.