From aaf63641af484640a4a97b0af22eb8d3d25d8d88 Mon Sep 17 00:00:00 2001 From: Jon Tzeng Date: Mon, 23 Dec 2024 14:52:59 -0800 Subject: [PATCH] WIP --- src/solana/SolanaEngine.ts | 10 ++++++++-- src/solana/SolanaTools.ts | 12 ++++++++++-- src/solana/solanaInfo.ts | 5 +++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/solana/SolanaEngine.ts b/src/solana/SolanaEngine.ts index 75c766ec8..3fd3dbbd2 100644 --- a/src/solana/SolanaEngine.ts +++ b/src/solana/SolanaEngine.ts @@ -126,9 +126,11 @@ export class SolanaEngine extends CurrencyEngine< const funcs = rpcNodes.map(serverUrl => async () => { serverUrl = this.tools.rpcWithApiKey(serverUrl) const res = await this.fetch(serverUrl, options) - if (!res.ok) { + const json = await res.json() + if (!res.ok || json.error != null) { + this.log.warn('fetchRpc json', json) throw new Error( - `fetchRpc ${options.method} failed error: ${res.status}` + `fetchRpc ${options.method} failed error: ${json.error ?? res.status}` ) } const out = await res.json() @@ -464,6 +466,7 @@ export class SolanaEngine extends CurrencyEngine< }) } ) + try { const txResponse: Array< TransactionResponse | VersionedTransactionResponse > = await asyncWaterfall(funcs) @@ -511,6 +514,9 @@ export class SolanaEngine extends CurrencyEngine< } } } + } catch (e: any) { + this.error('getTransactions failed with error: ', e) + } } this.walletLocalDataDirty = true diff --git a/src/solana/SolanaTools.ts b/src/solana/SolanaTools.ts index cda491556..8da759df0 100644 --- a/src/solana/SolanaTools.ts +++ b/src/solana/SolanaTools.ts @@ -218,11 +218,19 @@ export class SolanaTools implements EdgeCurrencyTools { } makeConnections(rpcUrls: string[]): Connection[] { - const fetchCorsBypassed: EdgeFetchFunction = async (uri, opts) => - await this.io.fetch(uri, { + const fetchCorsBypassed: EdgeFetchFunction = async (uri, opts) => { + const res = await this.io.fetch(uri, { ...opts, corsBypass: 'always' }) + // Alchemy returns status 200 (ok) for failed requests + const json = await res.json() + if (json.error != null) { + throw new Error(`fetchCorsBypassed: ${json.error}`) + } + + return res + } const connectionConfig: ConnectionConfig = { commitment: this.networkInfo.commitment, fetch: fetchCorsBypassed as FetchFn diff --git a/src/solana/solanaInfo.ts b/src/solana/solanaInfo.ts index 4f7887f02..b23a165e6 100644 --- a/src/solana/solanaInfo.ts +++ b/src/solana/solanaInfo.ts @@ -186,15 +186,16 @@ const builtinTokens: EdgeTokenMap = { const networkInfo: SolanaNetworkInfo = { rpcNodes: [ // 'https://api.mainnet-beta.solana.com', - // 'https://solana-mainnet.rpc.grove.city/v1/{{poktPortalApiKey}}', // fails to return some transactions + // 'https://solana-mainnet.rpc.grove.city/v1/{{poktPortalApiKey}}' // fails to return some transactions 'https://mainnet.helius-rpc.com/?api-key={{heliusApiKey}}' ], rpcNodesArchival: [ // 'https://api.mainnet-beta.solana.com', - // 'https://solana-mainnet.g.alchemy.com/v2/{{alchemyApiKey}}', + // 'https://solana-mainnet.g.alchemy.com/v2/{{alchemyApiKey}}' 'https://mainnet.helius-rpc.com/?api-key={{heliusApiKey}}' ], stakedConnectionRpcNodes: [ + // has some staked solana to broadcast 'https://staked.helius-rpc.com?api-key={{heliusApiKey}}' ], commitment: 'confirmed', // confirmed is faster, finalized is safer. Even faster processed is unsupported for tx querys