isBlockhashValid verifica se um blockhash obtido anteriormente ainda é considerado válido pela rede. Os blockhashes têm um tempo de vida limitado (aproximadamente 2 minutos, ou 150 blocos), após o qual as transações que os referenciam serão rejeitadas.
Este método é crucial para aplicativos que mantêm blockhashes por algum tempo antes de enviar uma transação, para garantir que a transação não falhe devido a um blockhash expirado.
Nota de Versão: Este método está disponível em solana-core v1.9 e mais recentes. Para nós executando solana-core v1.8 ou mais antigos, você deve usar getFeeCalculatorForBlockhash que, além de informações de taxa, também indica implicitamente a validade do blockhash (um erro ocorrerá se o blockhash for muito antigo).
Casos de Uso Comuns
- Reenvio de Transação: Antes de tentar uma transação que falhou, verifique se seu blockhash original ainda é válido. Caso contrário, um novo blockhash deve ser buscado.
- Assinatura Atrasada de Transação: Se uma transação for preparada, mas assinada e enviada mais tarde, verifique a validade do blockhash logo antes do envio.
- Processamento Otimista de Transações: Determine se um blockhash provavelmente será aceito pela rede se uma transação for enviada imediatamente.
Parâmetros de Solicitação
blockhash(string, obrigatório): O blockhash a ser verificado, como uma string codificada em base-58.options(objeto, opcional): Um objeto de configuração opcional que pode incluir:commitment(string, opcional): Especifica o nível de compromisso para a consulta (por exemplo,"finalized","confirmed","processed"). Se omitido, o compromisso padrão do nó é usado.minContextSlot(u64, opcional): O slot mínimo em que a solicitação pode ser avaliada. Isso garante que o nó RPC não responda com um status de um slot mais antigo do que ominContextSlot.
Estrutura de Resposta
O camporesult na resposta JSON-RPC é um objeto RpcResponse contendo:
context(objeto): Um objeto contendo:slot(u64): O slot no qual o nó RPC avaliou a validade do blockhash.
value(boolean):truese o blockhash ainda for válido,falsecaso contrário.
Exemplos de Código
Dicas para Desenvolvedores
- Blockhashes Expiram: Blockhashes são válidos apenas por um tempo limitado (cerca de 150 slots, ou aproximadamente 1-2 minutos). Sempre busque um blockhash novo se não tiver certeza ou se muito tempo se passou.
- Uso de
minContextSlot: UseminContextSlotpara se proteger contra consultas a um nó RPC obsoleto que possa dar uma resposta “válida” desatualizada para um blockhash que está realmente muito antigo do ponto de vista do resto do cluster. - Alternativa para Nós Mais Antigos: Para nós rodando versões do Solana anteriores a 1.9, use
getFeeCalculatorForBlockhash("<YOUR_BLOCKHASH>"). Se este método retornar com sucesso, o blockhash é válido. Se ocorrer um erro (tipicamente porque o blockhash não é encontrado ou é muito antigo), então o blockhash é inválido. - Confirmação de Rede: Mesmo que
isBlockhashValidretornetrue, uma transação só é finalizada quando atinge o nível de compromisso desejado na rede após o envio.
isBlockhashValid de forma eficaz ao construir aplicativos Solana.
Métodos Relacionados
getLatestBlockhash
Obtenha um blockhash novo para novas transações