Al enviar una transacción usando Solana web3, a veces muestra este error:
Error: failed to send transaction: Transaction simulation failed: Blockhash not found
¿Cuál es la forma correcta de lidiar con este error además de volver a intentarlo x cantidad de veces?
¿Hay alguna manera de garantizar que este problema no ocurrirá al enviar transacciones?
Aquí hay un ejemplo de cómo estoy enviando una transacción:
const web3 = require("@solana/web3.js") const bs58 = require('bs58') const publicKey = new web3.PublicKey(new Uint8Array(bs58.decode("BASE_58_PUBLIC_KEY").toJSON().data)) const secretKey = new Uint8Array(bs58.decode("BASE_58_SECRET_KEY").toJSON().data) const connection = new web3.Connection( "https://api.mainnet-beta.solana.com", "finalized", { commitment: "finalized", confirmTransactionInitialTimeout: 30000 } ) const transaction = new web3.Transaction().add( web3.SystemProgram.transfer({ fromPubkey: publicKey, toPubkey: publicKey, lamports: 1 }) ) web3.sendAndConfirmTransaction( connection, transaction, [{publicKey: publicKey, secretKey: secretKey}], {commitment: "finalized"} ) ¿Cómo puedo mejorar esto para evitar el error Blockhash not found ?
¡Reintentar no es malo! En algunas situaciones, en realidad es la forma preferida de manejar las transacciones descartadas.
Es posible que desee leer esta entrada del libro de cocina sobre el reintento de transacciones: https://solanacookbook.com/guides/retrying-transactions.html
Específicamente, explica cómo implementar alguna lógica de reintento: https://solanacookbook.com/guides/retrying-transactions.html#customizing-rebroadcast-logic
Y qué significa reintentar específicamente: https://solanacookbook.com/guides/retrying-transactions.html#when-to-re-sign-transactions