Why Transactions Fail to Land
Transações falham em aterrissar quando blockhashes expiram, orçamentos de compute se esgotam, priority fees são muito baixas ou o envio via RPC nunca chega a um leader.
Busque em todas as páginas da documentação
Transações falham em aterrissar quando blockhashes expiram, orçamentos de compute se esgotam, priority fees são muito baixas ou o envio via RPC nunca chega a um leader.
Cartão de receita para referência rápida - pronto para copiar e colar.
solana confirm -v <SIGNATURE>
solana transaction <SIGNATURE> --output json-compact | jq '.meta.err, .meta.logMessages'const sim = await rpc.simulateTransaction(wireTx, { sigVerify: false }).send();
console.log(sim.value.err, sim.value.unitsConsumed);Quando usar:
import { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const status = await rpc.getSignatureStatuses([signature]).send();
const value = status.value[0];
console.log({
confirmationStatus: value?.confirmationStatus,
err: value?.err,
slot: value?.slot,
});
const tx = await rpc
.getTransaction(signature, { encoding: "json", maxSupportedTransactionVersion: 0 })
.send();
console.log("landed err:", tx?.value?.meta?.err);
console.log("logs tail:", tx?.value?.meta?.logMessages?.slice(-5));O que isso demonstra:
getSignatureStatuses mostra se a assinatura é desconhecida (descartada) vs falhou vs confirmada.sendTransaction, mas o validador descarta a tx se estiver subprecificada.| Sintoma | Causa provável | Direção de correção |
|---|---|---|
| Assinatura não encontrada | Descartada / blockhash expirado | Reconstruir tx, priority fee maior |
| Erro de programa em meta | Bug de lógica | Corrigir programa ou contas |
| CU excedido | Limite muito baixo | Aumentar compute budget |
| Blockhash não encontrado | Muito antigo | Blockhash novo + retry |
# Check if still valid blockhash age at send time - compare current slot to tx slot in logs
solana slotsendTransaction retorna assinatura antes da inclusão. Correção: rastreie status de confirmação separadamente.| Alternativa | Use quando | Não use quando |
|---|---|---|
| Jito bundles | Aterrissagem em alta contenção | Testes simples em devnet |
| Durable nonce | Fluxo de assinatura longo | Txs normais com blockhash fresco |
| Envio via RPC privado | Melhor propagação | MVP sensível a custo |
| Janela de tráfego menor | Mitigação operacional | UX em tempo real para usuário |
Geralmente - mas condições de corrida são raras; trate simulação como sinal forte.
Congestionamento na mainnet e maior contenção de account lock - fees e CU diferem.
Recent blockhash da transação deve estar na fila de recent blockhashes conhecida pelos validadores - hashes obsoletos rejeitam inclusão.
Sim - incluída no bloco com falha de programa meta.err; você ainda paga a base fee.
getSignatureStatuses retorna null para assinatura desconhecida após período de espera.
Não - melhoram probabilidade sob contenção; erros de programa e CU ainda falham.
false captura erros cedo; true envio mais rápido, mas mais txs ruins descartadas.
v0 habilita ALTs para caber listas grandes de contas - limites de tamanho legacy causam descartes silenciosos.
Tips Jito pagam validadores no caminho de bundle; priority fees são compute unit price nativo - complementares.
Versões da stack: Esta página foi 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 e LiteSVM 0.6.x.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026