Uma transação Solana viaja do seu cliente pela rede até um líder produtor de blocos, executa atomicamente on-chain e ganha votos até atingir o seu nível de commitment escolhido. Entender esse caminho explica latência, falhas e a estratégia de retentativa.
Tratar processed como final - forks podem reordenar neste nível. Correção: aguarde confirmed ou finalized antes de uma UX irreversível.
Não atualizar o blockhash na retentativa - transações expiradas são descartadas silenciosamente. Correção: busque um novo blockhash e re-assine em cada retentativa.
Ignorar erros de preflight - skipPreflight: true oculta falhas de simulação. Correção: simule primeiro em desenvolvimento; decodifique erros antes de retentar.
Fazer polling em um loop apertado - sobrecarrega o RPC e ainda assim perde confirmações rápidas. Correção: use assinaturas de notificação WebSocket.
Reenvio da mesma assinatura - válido e idempotente, mas inútil se o blockhash expirou. Correção: reenvie a mesma assinatura apenas dentro da janela do blockhash.
Pulo do líder durante congestionamento - transações entram em fila por mais tempo. Correção: adicione taxas de prioridade via Compute Budget Program.
O que acontece imediatamente após sendTransaction?
O RPC encaminha sua transação para os líderes via Gulf Stream. Ela ainda não está confirmada - apenas enviada.
Por quanto tempo um blockhash é válido?
Aproximadamente 60-90 segundos (cerca de 150 slots). Após a expiração, a transação é rejeitada mesmo se reenviada.
Qual a diferença entre dropped e rejected?
Descartado: nunca executado em um bloco. Rejeitado: executado, mas o programa retornou um erro - está on-chain com um status de falha.
Por que finalized leva ~12 segundos?
TowerBFT requer votos suficientes de validadores em vários slots para "enraizar" um bloco. Isso leva aproximadamente 32 slots.
Posso acelerar a confirmação?
Taxas de prioridade aumentam a prioridade de agendamento. Bundles Jito ajudam durante períodos de alta atividade de MEV. Você não pode pular o processo de votação.
O que é simulação de preflight?
O RPC executa sua transação contra o estado atual antes de transmiti-la. Captura a maioria dos erros precocemente.
sendTransaction é síncrono?
Ele retorna uma assinatura imediatamente. A confirmação é assíncrona - faça polling ou assine separadamente.
O que é Gulf Stream?
Um protocolo que encaminha transações diretamente para os próximos líderes de bloco em vez de usar um mempool tradicional.
Todas as instruções em uma transação executam atomicamente?
Sim. Se qualquer instrução falhar, toda a transação é revertida (a menos que um programa capture e trate erros de CPI).
Uma transação pode ter sucesso parcial?
Não. Todas as instruções têm sucesso ou nenhuma alteração de estado é commitada.
Qual commitment uma UI de pagamento deve usar?
confirmed para a maioria dos pagamentos. finalized para ações de alto valor ou irreversíveis.
Como rastrear uma transação em um explorador?
Use https://explorer.solana.com/tx/<SIGNATURE>?cluster=devnet e inspecione logs, CU e o detalhamento das instruções.