From e517ecaf8e6c1887333324a56cc78a62cef10d59 Mon Sep 17 00:00:00 2001 From: Sergei Tikhomirov Date: Fri, 13 Dec 2024 17:19:13 +0100 Subject: [PATCH] make queries to web3 provider in parallel --- waku/incentivization/txid_proof.nim | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/waku/incentivization/txid_proof.nim b/waku/incentivization/txid_proof.nim index 52da84f75..3a4d7dcde 100644 --- a/waku/incentivization/txid_proof.nim +++ b/waku/incentivization/txid_proof.nim @@ -4,6 +4,25 @@ import waku/incentivization/rpc const SimpleTransferGasUsed = Quantity(21000) +proc eth_getTransactionByHash_async( + txHash: TxHash, web3: Web3 +): Future[TransactionObject] {.async.} = + await web3.provider.eth_getTransactionByHash(txHash) + +proc getMinedTransactionReceipt_async( + txHash: TxHash, web3: Web3 +): Future[ReceiptObject] {.async.} = + await web3.getMinedTransactionReceipt(txHash) + +proc getTxAndTxReceipt( + txHash: TxHash, web3: Web3 +): Future[(TransactionObject, ReceiptObject)] {.async.} = + let txFuture = eth_getTransactionByHash_async(txHash, web3) + let receiptFuture = getMinedTransactionReceipt_async(txHash, web3) + let tx = await txFuture + let txReceipt = await receiptFuture + return (tx, txReceipt) + proc isEligibleTxId*( eligibilityProof: EligibilityProof, expectedToAddress: Address, @@ -28,9 +47,7 @@ proc isEligibleTxId*( var txReceipt: ReceiptObject let txHash = TxHash.fromHex(byteutils.toHex(eligibilityProof.proofOfPayment.get())) try: - # TODO: make requests in parallel (?) - tx = await web3.provider.eth_getTransactionByHash(txHash) - txReceipt = await web3.getMinedTransactionReceipt(txHash) + (tx, txReceipt) = waitFor getTxAndTxReceipt(txHash, web3) except ValueError: let errorMsg = "Failed to fetch tx or tx receipt: " & getCurrentExceptionMsg() error "exception in isEligibleTxId", error = $errorMsg