isBlockhashValid vérifie si un blockhash précédemment obtenu est toujours considéré comme valide par le réseau. Les blockhashes ont une durée de vie limitée (environ 2 minutes, ou 150 blocs), après quoi les transactions les référant seront rejetées.
Cette méthode est cruciale pour les applications qui conservent des blockhashes pendant un certain temps avant de soumettre une transaction, afin de s’assurer que la transaction ne échoue pas en raison d’un blockhash expiré.
Remarque sur la version : Cette méthode est disponible dans solana-core v1.9 et plus récent. Pour les nœuds exécutant solana-core v1.8 ou plus ancien, vous devez utiliser getFeeCalculatorForBlockhash qui, en plus des informations sur les frais, indique également implicitement la validité du blockhash (il renverra une erreur si le blockhash est trop ancien).
Cas d’utilisation courants
- Réenvoi de transaction : Avant de réessayer une transaction échouée, vérifiez si son blockhash original est toujours valide. Sinon, un nouveau blockhash doit être récupéré.
- Signature de transaction différée : Si une transaction est préparée mais signée et soumise plus tard, vérifiez la validité du blockhash juste avant la soumission.
- Traitement optimiste des transactions : Déterminez si un blockhash est susceptible d’être accepté par le réseau si une transaction est envoyée immédiatement.
Paramètres de requête
blockhash(string, requis): Le blockhash à vérifier, en tant que chaîne encodée en base-58.options(objet, optionnel): Un objet de configuration optionnel pouvant inclure :commitment(string, optionnel): Spécifie le niveau d’engagement pour la requête (par exemple,"finalized","confirmed","processed"). Si omis, l’engagement par défaut du nœud est utilisé.minContextSlot(u64, optionnel): Le slot minimum auquel la requête peut être évaluée. Cela garantit que le nœud RPC ne répond pas avec un statut provenant d’un slot antérieur auminContextSlot.
Structure de la réponse
Le champresult dans la réponse JSON-RPC est un objet RpcResponse contenant :
context(objet) : Un objet contenant :slot(u64) : Le slot auquel le nœud RPC a évalué la validité du blockhash.
value(booléen) :truesi le blockhash est toujours valide,falsesinon.
Exemples de code
Conseils pour les développeurs
- Expiration des blockhashes : Les blockhashes ne sont valides que pendant un temps limité (environ 150 slots, ou environ 1-2 minutes). Récupérez toujours un blockhash frais si vous avez un doute ou si un temps significatif s’est écoulé.
- Utilisation de
minContextSlot: UtilisezminContextSlotpour vous protéger contre l’interrogation d’un nœud RPC obsolète qui pourrait donner une réponse “valide” dépassée pour un blockhash qui est en réalité trop ancien du point de vue du reste du cluster. - Alternative pour les nœuds plus anciens : Pour les nœuds exécutant des versions de Solana antérieures à 1.9, utilisez
getFeeCalculatorForBlockhash("<YOUR_BLOCKHASH>"). Si cette méthode réussit, le blockhash est valide. Si une erreur est renvoyée (généralement parce que le blockhash est introuvable ou trop ancien), alors le blockhash est invalide. - Confirmation réseau : Même si
isBlockhashValidretournetrue, une transaction n’est finalisée que lorsqu’elle atteint le niveau d’engagement souhaité sur le réseau après soumission.
isBlockhashValid lors de la création d’applications Solana.
Méthodes associées
getLatestBlockhash
Obtenez un nouveau blockhash pour de nouvelles transactions