Una transacción de Solana viaja desde tu cliente a través de la red hasta un líder productor de bloques, se ejecuta atómicamente en la cadena y recibe votos hasta alcanzar tu nivel de compromiso elegido. Comprender esta ruta explica la latencia, los fallos y la estrategia de reintentos.
Tarjeta de referencia rápida - lista para copiar y pegar.
Cliente construye → Firma → sendTransaction → Líder recibe (Gulf Stream)→ Ordenamiento PoH → Ejecución Sealevel → Propagación de bloque (Turbine)→ Votos del validador (TowerBFT) → Sondeo de confirmación RPC
import { createSolanaRpc, createSolanaRpcSubscriptions } from "@solana/kit";const rpc = createSolanaRpc("https://api.devnet.solana.com");const rpcSubs = createSolanaRpcSubscriptions("wss://api.devnet.solana.com");// Después de que sendTransaction devuelva una firma:const sub = await rpcSubs.signatureNotifications(signature, { commitment: "confirmed" });
Cuándo usar esto:
Para depurar por qué una transacción fue descartada en lugar de rechazada
Para elegir el nivel de compromiso adecuado para tu UX
Para comprender el tiempo de reintento en relación con la expiración del blockhash
Para explicar a los usuarios la diferencia entre "procesado" en subsegundos y "finalizado" en ~12s
Para diseñar la resubmisión de transacciones idempotentes
Tratar processed como final - las bifurcaciones pueden reordenar a este nivel. Solución: esperar confirmed o finalized antes de una UX irreversible.
No refrescar el blockhash al reintentar - las transacciones expiradas se descartan silenciosamente. Solución: obtener un nuevo blockhash y volver a firmar en cada reintento.
Ignorar errores de prevalidación - skipPreflight: true oculta los fallos de simulación. Solución: simular primero en desarrollo; decodificar errores antes de reintentar.
Sondear en un bucle ajustado - sobrecarga el RPC y aún así se pierde confirmaciones rápidas. Solución: usar suscripciones de firma WebSocket.
Reenvío de la misma firma - válido e idempotente, pero inútil si el blockhash expiró. Solución: solo reenviar la misma firma dentro de la ventana del blockhash.
Salto del líder durante la congestión - las transacciones se ponen en cola por más tiempo. Solución: agregar tarifas de prioridad a través del Programa de Presupuesto de Cómputo.
¿Qué sucede inmediatamente después de sendTransaction?
El RPC reenvía tu transacción a los líderes a través de Gulf Stream. Todavía no está confirmada, solo enviada.
¿Cuánto tiempo es válido un blockhash?
Aproximadamente 60-90 segundos (alrededor de 150 slots). Después de la expiración, la transacción es rechazada incluso si se reenvía.
¿Cuál es la diferencia entre descartada y rechazada?
Descartada: nunca ejecutada en un bloque. Rechazada: ejecutada pero el programa devolvió un error; está en la cadena con un estado de fallo.
¿Por qué la finalidad tarda ~12 segundos?
TowerBFT requiere suficientes votos de validadores a través de múltiples slots para enraizar un bloque. Esto toma aproximadamente 32 slots.
¿Puedo acelerar la confirmación?
Las tarifas de prioridad aumentan la prioridad de programación. Los bundles de Jito ayudan durante períodos de alta actividad de MEV. No puedes saltarte el proceso de votación.
¿Qué es la simulación de prevalidación?
El RPC ejecuta tu transacción contra el estado actual antes de transmitirla. Detecta la mayoría de los errores de forma temprana.
¿Es sendTransaction síncrono?
Devuelve una firma inmediatamente. La confirmación es asíncrona; sondea o suscríbete por separado.
¿Qué es Gulf Stream?
Un protocolo que reenvía transacciones directamente a los próximos líderes de bloques en lugar de usar un mempool tradicional.
¿Se ejecutan todas las instrucciones de una transacción atómicamente?
Sí. Si alguna instrucción falla, toda la transacción se revierte (a menos que un programa capture y maneje errores de CPI).
¿Puede una transacción tener éxito parcialmente?
No. Todas las instrucciones tienen éxito o ninguno de los cambios de estado se confirma.
¿Qué compromiso debe usar una interfaz de pago?
confirmed para la mayoría de los pagos. finalized para acciones de alto valor o irreversibles.
¿Cómo rastreo una transacción en un explorador?
Usa https://explorer.solana.com/tx/<SIGNATURE>?cluster=devnet e inspecciona los logs, CU y el desglose de instrucciones.
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.
Revisado por Chris St. John·Última actualización: 19 jul 2026