From d6097d22e1913a9b06360bb7582daf1b8d4cf720 Mon Sep 17 00:00:00 2001 From: samuelea Date: Tue, 7 Oct 2025 11:40:43 -0400 Subject: [PATCH 1/2] tx receipt retry --- packages/connect/src/styles.ts | 4 +--- packages/connect/src/utils/transactions.ts | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/connect/src/styles.ts b/packages/connect/src/styles.ts index c64720c19..2700224e8 100644 --- a/packages/connect/src/styles.ts +++ b/packages/connect/src/styles.ts @@ -2500,6 +2500,4 @@ export const styles = String.raw` --tw-gradient-to-position: 100%; } } -} - -` +}` diff --git a/packages/connect/src/utils/transactions.ts b/packages/connect/src/utils/transactions.ts index dbcf5cc8a..98cde539c 100644 --- a/packages/connect/src/utils/transactions.ts +++ b/packages/connect/src/utils/transactions.ts @@ -206,9 +206,23 @@ export const waitForTransactionReceipt = async ({ publicClient, confirmations }: WaitForTransactionReceiptInput): Promise => { - const { receipt } = await indexerClient.fetchTransactionReceipt({ - txnHash - }) + const RECEIPT_MAX_WAIT_MINUTES = 3 + const startTime = Date.now() + const maxWaitTime = RECEIPT_MAX_WAIT_MINUTES * 60 * 1000 + + let receipt: TransactionReceipt | undefined + + while (Date.now() - startTime < maxWaitTime && !receipt) { + const response = await indexerClient.fetchTransactionReceipt({ + txnHash + }) + + receipt = response.receipt + } + + if (!receipt) { + throw new Error('Timeout: Transaction receipt not found') + } if (confirmations) { const blockConfirmationPromise = new Promise(resolve => { From 8edb963132e7378e1129af1e82a22cf5ae4cbf82 Mon Sep 17 00:00:00 2001 From: samuelea Date: Tue, 7 Oct 2025 11:57:21 -0400 Subject: [PATCH 2/2] added wait time between request --- packages/connect/src/utils/transactions.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/connect/src/utils/transactions.ts b/packages/connect/src/utils/transactions.ts index 98cde539c..fd8847f3b 100644 --- a/packages/connect/src/utils/transactions.ts +++ b/packages/connect/src/utils/transactions.ts @@ -207,6 +207,7 @@ export const waitForTransactionReceipt = async ({ confirmations }: WaitForTransactionReceiptInput): Promise => { const RECEIPT_MAX_WAIT_MINUTES = 3 + const WAIT_TIME_BETWEEN_REQUESTS_MS = 3000 const startTime = Date.now() const maxWaitTime = RECEIPT_MAX_WAIT_MINUTES * 60 * 1000 @@ -218,6 +219,11 @@ export const waitForTransactionReceipt = async ({ }) receipt = response.receipt + + // Additional wait time between requests. fetchTransactionReceipt will wait for 400 blocks, but this could be short amount of time if the blocktime is very short + if (!receipt) { + await new Promise(resolve => setTimeout(resolve, WAIT_TIME_BETWEEN_REQUESTS_MS)) + } } if (!receipt) {