From 5cfb8605746b08d847b5571b21f314926840de8f Mon Sep 17 00:00:00 2001 From: Michelle Brier Date: Tue, 9 Apr 2024 15:18:22 -0700 Subject: [PATCH 1/4] increase solana RPC reselect freq --- packages/libs/src/services/solana/transactionHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/libs/src/services/solana/transactionHandler.ts b/packages/libs/src/services/solana/transactionHandler.ts index 6366fae1a81..aa8a4de8439 100644 --- a/packages/libs/src/services/solana/transactionHandler.ts +++ b/packages/libs/src/services/solana/transactionHandler.ts @@ -53,7 +53,7 @@ export class TransactionHandler { identityService = null, feePayerKeypairs = null, skipPreflight = true, - retryTimeoutMs = 60000, + retryTimeoutMs = 10000, pollingFrequencyMs = 2000, sendingFrequencyMs = 2000, fallbackConnections = null From 5fd7fb0322d71d417078f13d78f3c2d24cb38eab Mon Sep 17 00:00:00 2001 From: Michelle Brier Date: Tue, 9 Apr 2024 15:43:42 -0700 Subject: [PATCH 2/4] cycle through all RPCs every 2s --- .../src/services/solana/transactionHandler.ts | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/packages/libs/src/services/solana/transactionHandler.ts b/packages/libs/src/services/solana/transactionHandler.ts index aa8a4de8439..7c833f888d6 100644 --- a/packages/libs/src/services/solana/transactionHandler.ts +++ b/packages/libs/src/services/solana/transactionHandler.ts @@ -53,7 +53,7 @@ export class TransactionHandler { identityService = null, feePayerKeypairs = null, skipPreflight = true, - retryTimeoutMs = 10000, + retryTimeoutMs = 60000, pollingFrequencyMs = 2000, sendingFrequencyMs = 2000, fallbackConnections = null @@ -287,6 +287,14 @@ export class TransactionHandler { }) } + const sendRawTransactionToConn = async (conn: Connection) => { + return await conn.sendRawTransaction(rawTransaction, { + skipPreflight: true, + preflightCommitment: 'processed', + maxRetries: 0 + }) + } + try { await sendRawTransaction() } catch (e) { @@ -304,17 +312,27 @@ export class TransactionHandler { const startTime = Date.now() if (retry) { ;(async () => { + const connections = + this.fallbackConnections?.filter( + (conn) => conn.rpcEndpoint !== this.connection.rpcEndpoint + ) ?? [] + connections.push(this.connection) let elapsed = Date.now() - startTime + let currConnIdx = 0 // eslint-disable-next-line no-unmodified-loop-condition while (!done && elapsed < this.retryTimeoutMs) { + const conn = connections[currConnIdx % connections.length] try { - sendRawTransaction() + sendRawTransactionToConn(conn!) } catch (e) { logger.warn( - `transactionHandler: error in send loop: ${e} for txId ${txid}` + `transactionHandler: error in send loop: ${e} for txId ${txid} to ${ + conn!.rpcEndpoint + }` ) } sendCount++ + currConnIdx++ await delay(this.sendingFrequencyMs) elapsed = Date.now() - startTime } @@ -326,9 +344,9 @@ export class TransactionHandler { await this._awaitTransactionSignatureConfirmation(txid, logger) done = true logger.info( - `transactionHandler: finished sending txid ${txid} with ${sendCount} retries to ${ - this.connection.rpcEndpoint - } in ${Date.now() - txStartTime} ms` + `transactionHandler: finished sending txid ${txid} with ${sendCount} retries in ${ + Date.now() - txStartTime + } ms` ) return { res: txid, From eed931447c19ec067c8947675e9e69d1668afa7e Mon Sep 17 00:00:00 2001 From: Michelle Brier Date: Tue, 9 Apr 2024 15:55:37 -0700 Subject: [PATCH 3/4] use sendCount --- packages/libs/src/services/solana/transactionHandler.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/libs/src/services/solana/transactionHandler.ts b/packages/libs/src/services/solana/transactionHandler.ts index 7c833f888d6..3f05d6dc098 100644 --- a/packages/libs/src/services/solana/transactionHandler.ts +++ b/packages/libs/src/services/solana/transactionHandler.ts @@ -318,10 +318,9 @@ export class TransactionHandler { ) ?? [] connections.push(this.connection) let elapsed = Date.now() - startTime - let currConnIdx = 0 // eslint-disable-next-line no-unmodified-loop-condition while (!done && elapsed < this.retryTimeoutMs) { - const conn = connections[currConnIdx % connections.length] + const conn = connections[sendCount % connections.length] try { sendRawTransactionToConn(conn!) } catch (e) { @@ -332,7 +331,6 @@ export class TransactionHandler { ) } sendCount++ - currConnIdx++ await delay(this.sendingFrequencyMs) elapsed = Date.now() - startTime } From 8630602cda6ffca20a0d77f4e2733d998a98eddb Mon Sep 17 00:00:00 2001 From: Michelle Brier Date: Tue, 9 Apr 2024 16:06:22 -0700 Subject: [PATCH 4/4] clean up --- packages/libs/src/services/solana/transactionHandler.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/libs/src/services/solana/transactionHandler.ts b/packages/libs/src/services/solana/transactionHandler.ts index 3f05d6dc098..7a17add1a0d 100644 --- a/packages/libs/src/services/solana/transactionHandler.ts +++ b/packages/libs/src/services/solana/transactionHandler.ts @@ -312,11 +312,10 @@ export class TransactionHandler { const startTime = Date.now() if (retry) { ;(async () => { - const connections = - this.fallbackConnections?.filter( - (conn) => conn.rpcEndpoint !== this.connection.rpcEndpoint - ) ?? [] - connections.push(this.connection) + const connections = this.fallbackConnections ?? [] + if (connections.length === 0) { + connections.push(this.connection) + } let elapsed = Date.now() - startTime // eslint-disable-next-line no-unmodified-loop-condition while (!done && elapsed < this.retryTimeoutMs) {