diff --git a/lib/modules/pool/actions/add-liquidity/handlers/NestedAddLiquidity.handler.ts b/lib/modules/pool/actions/add-liquidity/handlers/NestedAddLiquidity.handler.ts index 32b21a49c..189927d3d 100644 --- a/lib/modules/pool/actions/add-liquidity/handlers/NestedAddLiquidity.handler.ts +++ b/lib/modules/pool/actions/add-liquidity/handlers/NestedAddLiquidity.handler.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' import { TransactionConfig } from '@/lib/modules/web3/contracts/contract.types' import { AddLiquidityNested, @@ -13,6 +11,7 @@ import { LiquidityActionHelpers, areEmptyAmounts } from '../../LiquidityActionHe import { NestedBuildAddLiquidityInput, NestedQueryAddLiquidityOutput } from '../add-liquidity.types' import { AddLiquidityHandler } from './AddLiquidity.handler' import { HumanTokenAmountWithAddress } from '@/lib/modules/tokens/token.types' +import { getRpcUrl } from '@/lib/modules/web3/transports' /** * NestedAddLiquidityHandler is a handler that implements the @@ -88,7 +87,7 @@ export class NestedAddLiquidityHandler implements AddLiquidityHandler { return { chainId: this.helpers.chainId as ChainId, - rpcUrl: getDefaultRpcUrl(this.helpers.chainId), + rpcUrl: getRpcUrl(this.helpers.chainId), amountsIn: nonEmptyAmountsIn, } } diff --git a/lib/modules/pool/actions/add-liquidity/handlers/ProportionalAddLiquidity.handler.ts b/lib/modules/pool/actions/add-liquidity/handlers/ProportionalAddLiquidity.handler.ts index d62422319..f9cad592b 100644 --- a/lib/modules/pool/actions/add-liquidity/handlers/ProportionalAddLiquidity.handler.ts +++ b/lib/modules/pool/actions/add-liquidity/handlers/ProportionalAddLiquidity.handler.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' import { TransactionConfig } from '@/lib/modules/web3/contracts/contract.types' import { AddLiquidity, @@ -14,6 +12,7 @@ import { LiquidityActionHelpers } from '../../LiquidityActionHelpers' import { SdkBuildAddLiquidityInput, SdkQueryAddLiquidityOutput } from '../add-liquidity.types' import { AddLiquidityHandler } from './AddLiquidity.handler' import { HumanTokenAmountWithAddress } from '@/lib/modules/tokens/token.types' +import { getRpcUrl } from '@/lib/modules/web3/transports' /** * ProportionalAddLiquidityHandler is a handler that implements the @@ -80,7 +79,7 @@ export class ProportionalAddLiquidityHandler implements AddLiquidityHandler { private constructSdkInput(referenceAmount: InputAmount): AddLiquidityProportionalInput { return { chainId: this.helpers.chainId, - rpcUrl: getDefaultRpcUrl(this.helpers.chainId), + rpcUrl: getRpcUrl(this.helpers.chainId), referenceAmount, kind: AddLiquidityKind.Proportional, } diff --git a/lib/modules/pool/actions/add-liquidity/handlers/UnbalancedAddLiquidity.handler.ts b/lib/modules/pool/actions/add-liquidity/handlers/UnbalancedAddLiquidity.handler.ts index aa9d443ad..f71f483a1 100644 --- a/lib/modules/pool/actions/add-liquidity/handlers/UnbalancedAddLiquidity.handler.ts +++ b/lib/modules/pool/actions/add-liquidity/handlers/UnbalancedAddLiquidity.handler.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' +import { HumanTokenAmountWithAddress } from '@/lib/modules/tokens/token.types' import { TransactionConfig } from '@/lib/modules/web3/contracts/contract.types' +import { getRpcUrl } from '@/lib/modules/web3/transports' import { AddLiquidity, AddLiquidityKind, @@ -11,9 +12,8 @@ import { } from '@balancer/sdk' import { Pool } from '../../../PoolProvider' import { LiquidityActionHelpers, areEmptyAmounts } from '../../LiquidityActionHelpers' -import { AddLiquidityHandler } from './AddLiquidity.handler' import { SdkBuildAddLiquidityInput, SdkQueryAddLiquidityOutput } from '../add-liquidity.types' -import { HumanTokenAmountWithAddress } from '@/lib/modules/tokens/token.types' +import { AddLiquidityHandler } from './AddLiquidity.handler' /** * UnbalancedAddLiquidityHandler is a handler that implements the @@ -91,7 +91,7 @@ export class UnbalancedAddLiquidityHandler implements AddLiquidityHandler { return { chainId: this.helpers.chainId, - rpcUrl: getDefaultRpcUrl(this.helpers.chainId), + rpcUrl: getRpcUrl(this.helpers.chainId), amountsIn, kind: AddLiquidityKind.Unbalanced, } diff --git a/lib/modules/pool/actions/remove-liquidity/handlers/NestedProportionalRemoveLiquidity.handler.ts b/lib/modules/pool/actions/remove-liquidity/handlers/NestedProportionalRemoveLiquidity.handler.ts index 91aa1c75e..1e90231a6 100644 --- a/lib/modules/pool/actions/remove-liquidity/handlers/NestedProportionalRemoveLiquidity.handler.ts +++ b/lib/modules/pool/actions/remove-liquidity/handlers/NestedProportionalRemoveLiquidity.handler.ts @@ -1,4 +1,3 @@ -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' import { TransactionConfig } from '@/lib/modules/web3/contracts/contract.types' import { HumanAmount, @@ -16,6 +15,7 @@ import { QueryRemoveLiquidityOutput, } from '../remove-liquidity.types' import { RemoveLiquidityHandler } from './RemoveLiquidity.handler' +import { getRpcUrl } from '@/lib/modules/web3/transports' export interface NestedProportionalQueryRemoveLiquidityOutput extends QueryRemoveLiquidityOutput { sdkQueryOutput: RemoveLiquidityNestedQueryOutput @@ -88,7 +88,7 @@ export class NestedProportionalRemoveLiquidityHandler implements RemoveLiquidity // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore chainId: this.helpers.chainId, - rpcUrl: getDefaultRpcUrl(this.helpers.chainId), + rpcUrl: getRpcUrl(this.helpers.chainId), } return result diff --git a/lib/modules/pool/actions/remove-liquidity/handlers/NestedSingleTokenRemoveLiquidity.handler.ts b/lib/modules/pool/actions/remove-liquidity/handlers/NestedSingleTokenRemoveLiquidity.handler.ts index 9c78d7c81..0c8732173 100644 --- a/lib/modules/pool/actions/remove-liquidity/handlers/NestedSingleTokenRemoveLiquidity.handler.ts +++ b/lib/modules/pool/actions/remove-liquidity/handlers/NestedSingleTokenRemoveLiquidity.handler.ts @@ -1,4 +1,3 @@ -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' import { TransactionConfig } from '@/lib/modules/web3/contracts/contract.types' import { HumanAmount, @@ -18,6 +17,7 @@ import { QueryRemoveLiquidityOutput, } from '../remove-liquidity.types' import { RemoveLiquidityHandler } from './RemoveLiquidity.handler' +import { getRpcUrl } from '@/lib/modules/web3/transports' export interface NestedSingleTokenQueryRemoveLiquidityOutput extends QueryRemoveLiquidityOutput { sdkQueryOutput: RemoveLiquidityNestedQueryOutput @@ -104,7 +104,7 @@ export class NestedSingleTokenRemoveLiquidityHandler implements RemoveLiquidityH // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore chainId: this.helpers.chainId, - rpcUrl: getDefaultRpcUrl(this.helpers.chainId), + rpcUrl: getRpcUrl(this.helpers.chainId), } return result diff --git a/lib/modules/pool/actions/remove-liquidity/handlers/ProportionalRemoveLiquidity.handler.ts b/lib/modules/pool/actions/remove-liquidity/handlers/ProportionalRemoveLiquidity.handler.ts index 2bcf32be7..a0370fd47 100644 --- a/lib/modules/pool/actions/remove-liquidity/handlers/ProportionalRemoveLiquidity.handler.ts +++ b/lib/modules/pool/actions/remove-liquidity/handlers/ProportionalRemoveLiquidity.handler.ts @@ -1,4 +1,3 @@ -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' import { TransactionConfig } from '@/lib/modules/web3/contracts/contract.types' import { HumanAmount, @@ -18,6 +17,7 @@ import { SdkQueryRemoveLiquidityOutput, } from '../remove-liquidity.types' import { RemoveLiquidityHandler } from './RemoveLiquidity.handler' +import { getRpcUrl } from '@/lib/modules/web3/transports' export class ProportionalRemoveLiquidityHandler implements RemoveLiquidityHandler { helpers: LiquidityActionHelpers @@ -79,7 +79,7 @@ export class ProportionalRemoveLiquidityHandler implements RemoveLiquidityHandle return { chainId: this.helpers.chainId, - rpcUrl: getDefaultRpcUrl(this.helpers.chainId), + rpcUrl: getRpcUrl(this.helpers.chainId), bptIn, kind: RemoveLiquidityKind.Proportional, } diff --git a/lib/modules/pool/actions/remove-liquidity/handlers/RecoveryRemoveLiquidity.handler.ts b/lib/modules/pool/actions/remove-liquidity/handlers/RecoveryRemoveLiquidity.handler.ts index 0139deaf2..a7cd09b0d 100644 --- a/lib/modules/pool/actions/remove-liquidity/handlers/RecoveryRemoveLiquidity.handler.ts +++ b/lib/modules/pool/actions/remove-liquidity/handlers/RecoveryRemoveLiquidity.handler.ts @@ -13,11 +13,11 @@ import { SdkBuildRemoveLiquidityInput, SdkQueryRemoveLiquidityOutput, } from '../remove-liquidity.types' -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' import { TransactionConfig } from '@/lib/modules/web3/contracts/contract.types' import { parseEther } from 'viem' import { BPT_DECIMALS } from '../../../pool.constants' import { LiquidityActionHelpers } from '../../LiquidityActionHelpers' +import { getRpcUrl } from '@/lib/modules/web3/transports' /* A recovery exit is just a Proportional one but with Recovery kind @@ -85,7 +85,7 @@ export class RecoveryRemoveLiquidityHandler { return { chainId: this.helpers.chainId, - rpcUrl: getDefaultRpcUrl(this.helpers.chainId), + rpcUrl: getRpcUrl(this.helpers.chainId), bptIn, kind: RemoveLiquidityKind.Recovery, } diff --git a/lib/modules/pool/actions/remove-liquidity/handlers/SingleTokenRemoveLiquidity.handler.ts b/lib/modules/pool/actions/remove-liquidity/handlers/SingleTokenRemoveLiquidity.handler.ts index 2cb2df183..3ee78fee1 100644 --- a/lib/modules/pool/actions/remove-liquidity/handlers/SingleTokenRemoveLiquidity.handler.ts +++ b/lib/modules/pool/actions/remove-liquidity/handlers/SingleTokenRemoveLiquidity.handler.ts @@ -1,4 +1,3 @@ -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' import { TransactionConfig } from '@/lib/modules/web3/contracts/contract.types' import { HumanAmount, @@ -21,6 +20,7 @@ import { } from '../remove-liquidity.types' import { RemoveLiquidityHandler } from './RemoveLiquidity.handler' import { SentryError } from '@/lib/shared/utils/errors' +import { getRpcUrl } from '@/lib/modules/web3/transports' export class SingleTokenRemoveLiquidityHandler implements RemoveLiquidityHandler { helpers: LiquidityActionHelpers @@ -104,7 +104,7 @@ export class SingleTokenRemoveLiquidityHandler implements RemoveLiquidityHandler return { chainId: this.helpers.chainId, - rpcUrl: getDefaultRpcUrl(this.helpers.chainId), + rpcUrl: getRpcUrl(this.helpers.chainId), bptIn: bptInInputAmount, kind: RemoveLiquidityKind.SingleTokenExactIn, tokenOut, diff --git a/lib/modules/swap/handlers/AuraBalSwap.handler.ts b/lib/modules/swap/handlers/AuraBalSwap.handler.ts index e6109683e..a9bb56d1b 100644 --- a/lib/modules/swap/handlers/AuraBalSwap.handler.ts +++ b/lib/modules/swap/handlers/AuraBalSwap.handler.ts @@ -9,7 +9,7 @@ import { AuraBalSimulateSwapResponse, SimulateSwapInputs, } from '../swap.types' -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' +import { getRpcUrl } from '../../web3/transports' import { isNativeAsset, isSameAddress } from '@/lib/shared/utils/addresses' import { bn } from '@/lib/shared/utils/numbers' @@ -20,7 +20,7 @@ export class AuraBalSwapHandler implements SwapHandler { async simulate({ ...variables }: SimulateSwapInputs): Promise { const { chain, swapType } = variables - const rpcUrl = getDefaultRpcUrl(getChainId(chain)) + const rpcUrl = getRpcUrl(getChainId(chain)) const tokenInAddress = isNativeAsset(chain, variables.tokenIn) ? getWrappedNativeAssetAddress(chain) @@ -87,7 +87,7 @@ export class AuraBalSwapHandler implements SwapHandler { relayerApprovalSignature, wethIsEth, }: AuraBalBuildSwapInputs): TransactionConfig { - const rpcUrl = getDefaultRpcUrl(getChainId(selectedChain)) + const rpcUrl = getRpcUrl(getChainId(selectedChain)) const auraBalSwap = new AuraBalSwap(rpcUrl) diff --git a/lib/modules/swap/handlers/DefaultSwap.handler.ts b/lib/modules/swap/handlers/DefaultSwap.handler.ts index 63141cf86..28ba5f9d3 100644 --- a/lib/modules/swap/handlers/DefaultSwap.handler.ts +++ b/lib/modules/swap/handlers/DefaultSwap.handler.ts @@ -6,7 +6,7 @@ import { Path, Slippage, Swap, SwapKind, TokenAmount } from '@balancer/sdk' import { formatUnits } from 'viem' import { TransactionConfig } from '../../web3/contracts/contract.types' import { SdkBuildSwapInputs, SdkSimulateSwapResponse, SimulateSwapInputs } from '../swap.types' -import { getDefaultRpcUrl } from '@/lib/modules/web3/ChainConfig' +import { getRpcUrl } from '../../web3/transports' export class DefaultSwapHandler implements SwapHandler { name = 'DefaultSwapHandler' @@ -15,7 +15,7 @@ export class DefaultSwapHandler implements SwapHandler { async simulate({ ...variables }: SimulateSwapInputs): Promise { const { chain, swapType } = variables - const rpcUrl = getDefaultRpcUrl(getChainId(chain)) + const rpcUrl = getRpcUrl(getChainId(chain)) const { data } = await this.apolloClient.query({ query: GetSorSwapsDocument, diff --git a/lib/modules/web3/transports.ts b/lib/modules/web3/transports.ts index 38213587e..a99a310d6 100644 --- a/lib/modules/web3/transports.ts +++ b/lib/modules/web3/transports.ts @@ -5,7 +5,7 @@ import { fallback, http } from 'wagmi' import { getGqlChain } from '@/lib/config/app.config' import { SupportedChainId } from '@/lib/config/config.types' -import { chains, rpcFallbacks, rpcOverrides } from './ChainConfig' +import { chains, getDefaultRpcUrl, rpcFallbacks, rpcOverrides } from './ChainConfig' export function getTransports(chain: Chain) { const gqlChain = getGqlChain(chain.id as SupportedChainId) const overrideRpcUrl = rpcOverrides[gqlChain] @@ -17,3 +17,8 @@ export function getTransports(chain: Chain) { export const transports = Object.fromEntries( chains.map(chain => [chain.id, getTransports(chain)]) ) as Record> + +export function getRpcUrl(chainId: number): string { + const gqlChain = getGqlChain(chainId) + return rpcOverrides[gqlChain] || rpcFallbacks[gqlChain] || getDefaultRpcUrl(chainId) +} diff --git a/test/anvil/anvil-setup.ts b/test/anvil/anvil-setup.ts index d2ff02a68..6d13fa29a 100644 --- a/test/anvil/anvil-setup.ts +++ b/test/anvil/anvil-setup.ts @@ -85,16 +85,23 @@ export function getTestRpcSetup(networkName: NetworksWithFork) { } export function getForkUrl(network: NetworkSetup, verbose = false): string { - if (network.networkName === 'Ethereum' && process.env['NEXT_PRIVATE_INFURA_KEY']) { - return `https://mainnet.infura.io/v3/${process.env['NEXT_PRIVATE_INFURA_KEY']}` - } else { - if (!network.fallBackRpc) { - throw Error(`Please add a fallback RPC for ${network.networkName} network.`) + const privateInfuraKey = process.env['NEXT_PRIVATE_INFURA_KEY'] + if (privateInfuraKey) { + if (network.networkName === 'Ethereum') { + return `https://mainnet.infura.io/v3/${privateInfuraKey}` } - - if (verbose) { - console.warn(`Falling back to \`${network.fallBackRpc}\`.`) + if (network.networkName === 'Polygon') { + return `https://polygon-mainnet.infura.io/v3/${privateInfuraKey}` } - return network.fallBackRpc + if (network.networkName === 'Sepolia') return `https://sepolia.infura.io/v3/${privateInfuraKey}` + } + + if (!network.fallBackRpc) { + throw Error(`Please add a fallback RPC for ${network.networkName} network.`) + } + + if (verbose) { + console.warn(`Falling back to \`${network.fallBackRpc}\`.`) } + return network.fallBackRpc } diff --git a/test/vitest/setup-integration.ts b/test/vitest/setup-integration.ts index bdd25ca5a..020c41e34 100644 --- a/test/vitest/setup-integration.ts +++ b/test/vitest/setup-integration.ts @@ -1,9 +1,10 @@ import { connectWithDefaultUser, disconnectDefaultUser } from '../utils/wagmi/wagmi-connections' -import * as chainConfigModule from '../../lib/modules/web3/ChainConfig' +import * as transportsModule from '../../lib/modules/web3/transports' import { NetworksWithFork, getTestRpcSetup } from '../anvil/anvil-setup' import { GqlChain } from '@/lib/shared/services/api/generated/graphql' import { createPublicClient, http } from 'viem' import { mainnetTest, polygonTest } from '../anvil/testWagmiConfig' +import { chainsByKey } from '@/lib/modules/web3/ChainConfig' /* Specific setup for integration tests (that it is not needed in unit tests) @@ -22,14 +23,12 @@ afterAll(async () => { Mocks getDefaultRpcUrl to return the test rpcUrl ('http://127.0.0.1:port/poolId') Keeps the rest of the module unmocked */ -vi.mock('../../lib/modules/web3/ChainConfig', async importOriginal => { - const originalModule = await importOriginal() +vi.mock('../../lib/modules/web3/transports', async importOriginal => { + const originalModule = await importOriginal() return { ...originalModule, - getDefaultRpcUrl: (chainId: number) => { - const { rpcUrl } = getTestRpcSetup( - chainConfigModule.chainsByKey[chainId].name as NetworksWithFork - ) + getRpcUrl: (chainId: number) => { + const { rpcUrl } = getTestRpcSetup(chainsByKey[chainId].name as NetworksWithFork) return rpcUrl }, }