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..fd8847f3b 100644 --- a/packages/connect/src/utils/transactions.ts +++ b/packages/connect/src/utils/transactions.ts @@ -206,9 +206,29 @@ export const waitForTransactionReceipt = async ({ publicClient, confirmations }: WaitForTransactionReceiptInput): Promise => { - const { receipt } = await indexerClient.fetchTransactionReceipt({ - txnHash - }) + 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 + + let receipt: TransactionReceipt | undefined + + while (Date.now() - startTime < maxWaitTime && !receipt) { + const response = await indexerClient.fetchTransactionReceipt({ + txnHash + }) + + 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) { + throw new Error('Timeout: Transaction receipt not found') + } if (confirmations) { const blockConfirmationPromise = new Promise(resolve => {