Estoy trabajando en un DAPP que se conecta a un contrato inteligente a través de Web3 y MetaMask. Estoy llamando a un método de reclamo en el contrato de la siguiente manera:
try { const claimRes = await batchClaimTokenRewards(tokensArray, weeksArray); console.log('claim response: ', claimRes); this.getNftDataFromContract(); } catch(error) { console.log('claim error: ', error); }
La función batchClaimTokenRewards se importa de otro archivo, aquí también está esa función:
export async function batchClaimTokenRewards(tokensArray:string[], weeksArray:string[]) { return distributionContract.methods.batchClaimTokenRewards(tokensArray, [weeksArray]).send({from: web3.utils.toChecksumAddress('<metamask address>')}); }
Según tengo entendido, el método .send() invocado en la instancia del contrato debería devolver una promesa, que debería poder await
, sin embargo, la línea en la que estoy tratando de claimRes
nunca se alcanza, incluso como muestra MetaMask la transacción como completada. La expresión catch()
nunca se alcanza tampoco. Cuando registro ClaimRes sin usar await
en la promesa, obtengo una promesa <pending>
en la consola de Chrome que permanece en el estado <pending>
y nunca se resuelve, nuevamente, incluso cuando MetaMask informa que la transacción se completó. ¿Qué puedo hacer para obtener de manera confiable la confirmación de una transacción completada?