diff --git a/lib/config/networks/sepolia.ts b/lib/config/networks/sepolia.ts index 6a8c36c87..4811fa377 100644 --- a/lib/config/networks/sepolia.ts +++ b/lib/config/networks/sepolia.ts @@ -31,7 +31,7 @@ const networkConfig: NetworkConfig = { multicall2: '0xca11bde05977b3631167028862be2a173976ca11', balancer: { vaultV2: '0xBA12222222228d8Ba445958a75a0704d566BF2C8', - vaultV3: '0xD5584b37D1845fFeD958C2d94bC675603DdCce68', + vaultV3: '0x0EF1c156a7986F394d90eD1bEeA6483Cc435F542', relayerV6: '0x7852fB9d0895e6e8b3EedA553c03F6e2F9124dF9', minter: '0x1783Cd84b3d01854A96B4eD5843753C2CcbD574A', }, diff --git a/lib/debug-helpers.ts b/lib/debug-helpers.ts index a399cf86d..a1111c7df 100644 --- a/lib/debug-helpers.ts +++ b/lib/debug-helpers.ts @@ -36,6 +36,8 @@ export const vaultV3Address = sepoliaNetworkConfig.contracts.balancer.vaultV3 as export const poolId = '0x68e3266c9c8bbd44ad9dca5afbfe629022aee9fe000200000000000000000512' as const // Balancer Weighted wjAura and WETH +export const sepoliaRouter = '0x1c58cc548a23956469c7C528Bb3a846c842dfaF9' + /* Used to pretty print objects when debugging */ diff --git a/lib/modules/pool/actions/LiquidityActionHelpers.ts b/lib/modules/pool/actions/LiquidityActionHelpers.ts index c19b9ad49..00c2709be 100644 --- a/lib/modules/pool/actions/LiquidityActionHelpers.ts +++ b/lib/modules/pool/actions/LiquidityActionHelpers.ts @@ -232,7 +232,7 @@ export function toPoolStateWithBalances(pool: Pool): PoolStateWithBalances { * - is native and the wrapped native token is already in the array and * - is wrapped native and the native token is already in the array * - * @param {HumanAmoHumanTokenAmountWithAddressuntIn[]} humanAmountsIn - The array of human amounts to filter. + * @param {HumanTokenAmountWithAddress[]} humanAmountsIn - The array of human amounts to filter. * @param {Address} tokenAddress - The token address to compare against. * @param {GqlChain} chain - The chain type for comparison. * @return {HumanTokenAmountWithAddress[]} The filtered array of human amounts. @@ -309,3 +309,12 @@ export function injectNativeAsset( export function hasNoLiquidity(pool: Pool): boolean { return isZero(pool.dynamicData.totalShares) } + +// When the pool has version < v3, it adds extra buildCall params (sender and recipient) that must be present only in V1/V2 +export function formatBuildCallParams(buildCallParams: T, isV3Pool: boolean, account: Address) { + // sender must be undefined for v3 pools + if (isV3Pool) return buildCallParams + + // sender and recipient must be defined only for v1 and v2 pools + return { ...buildCallParams, sender: account, recipient: account } +} 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 f71f483a1..c33ee4716 100644 --- a/lib/modules/pool/actions/add-liquidity/handlers/UnbalancedAddLiquidity.handler.ts +++ b/lib/modules/pool/actions/add-liquidity/handlers/UnbalancedAddLiquidity.handler.ts @@ -11,9 +11,13 @@ import { Slippage, } from '@balancer/sdk' import { Pool } from '../../../PoolProvider' -import { LiquidityActionHelpers, areEmptyAmounts } from '../../LiquidityActionHelpers' -import { SdkBuildAddLiquidityInput, SdkQueryAddLiquidityOutput } from '../add-liquidity.types' +import { + LiquidityActionHelpers, + formatBuildCallParams, + areEmptyAmounts, +} from '../../LiquidityActionHelpers' import { AddLiquidityHandler } from './AddLiquidity.handler' +import { SdkBuildAddLiquidityInput, SdkQueryAddLiquidityOutput } from '../add-liquidity.types' /** * UnbalancedAddLiquidityHandler is a handler that implements the @@ -64,13 +68,19 @@ export class UnbalancedAddLiquidityHandler implements AddLiquidityHandler { }: SdkBuildAddLiquidityInput): Promise { const addLiquidity = new AddLiquidity() - const { callData, to, value } = addLiquidity.buildCall({ + const baseBuildCallParams = { ...queryOutput.sdkQueryOutput, slippage: Slippage.fromPercentage(`${Number(slippagePercent)}`), - sender: account, - recipient: account, wethIsEth: this.helpers.isNativeAssetIn(humanAmountsIn), - }) + } + + const buildCallParams = formatBuildCallParams( + baseBuildCallParams, + this.helpers.isV3Pool(), + account + ) + + const { callData, to, value } = addLiquidity.buildCall(buildCallParams) return { account, diff --git a/lib/modules/pool/actions/add-liquidity/useAddLiquiditySteps.tsx b/lib/modules/pool/actions/add-liquidity/useAddLiquiditySteps.tsx index 74a46d7e8..248a5c589 100644 --- a/lib/modules/pool/actions/add-liquidity/useAddLiquiditySteps.tsx +++ b/lib/modules/pool/actions/add-liquidity/useAddLiquiditySteps.tsx @@ -3,11 +3,11 @@ import { useShouldSignRelayerApproval } from '@/lib/modules/relayer/signRelayerA import { useApproveRelayerStep } from '@/lib/modules/relayer/useApproveRelayerStep' import { useRelayerMode } from '@/lib/modules/relayer/useRelayerMode' import { useTokenApprovalSteps } from '@/lib/modules/tokens/approvals/useTokenApprovalSteps' -import { useContractAddress } from '@/lib/modules/web3/contracts/useContractAddress' import { useMemo } from 'react' import { usePool } from '../../PoolProvider' import { LiquidityActionHelpers } from '../LiquidityActionHelpers' import { AddLiquidityStepParams, useAddLiquidityStep } from './useAddLiquidityStep' +import { getVaultConfig } from '../../pool.helpers' import { useSignRelayerStep } from '@/lib/modules/transactions/transaction-steps/useSignRelayerStep' import { Address } from 'viem' import { isCowAmmPool } from '../../pool.helpers' @@ -21,10 +21,11 @@ export function useAddLiquiditySteps({ humanAmountsIn, simulationQuery, }: AddLiquidityStepsParams) { - const vaultAddress = useContractAddress('balancer.vaultV2') const { pool, chainId, chain } = usePool() + const { vaultAddress } = getVaultConfig(pool) const relayerMode = useRelayerMode(pool) const shouldSignRelayerApproval = useShouldSignRelayerApproval(chainId, relayerMode) + const { step: approveRelayerStep, isLoading: isLoadingRelayerApproval } = useApproveRelayerStep(chainId) const signRelayerStep = useSignRelayerStep(chain) 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 a0370fd47..b3e36e89e 100644 --- a/lib/modules/pool/actions/remove-liquidity/handlers/ProportionalRemoveLiquidity.handler.ts +++ b/lib/modules/pool/actions/remove-liquidity/handlers/ProportionalRemoveLiquidity.handler.ts @@ -10,7 +10,7 @@ import { import { Address, parseEther } from 'viem' import { BPT_DECIMALS } from '../../../pool.constants' import { Pool } from '../../../PoolProvider' -import { LiquidityActionHelpers } from '../../LiquidityActionHelpers' +import { LiquidityActionHelpers, formatBuildCallParams } from '../../LiquidityActionHelpers' import { QueryRemoveLiquidityInput, SdkBuildRemoveLiquidityInput, @@ -50,13 +50,19 @@ export class ProportionalRemoveLiquidityHandler implements RemoveLiquidityHandle }: SdkBuildRemoveLiquidityInput): Promise { const removeLiquidity = new RemoveLiquidity() - const { callData, to, value } = removeLiquidity.buildCall({ + const baseBuildCallParams = { ...queryOutput.sdkQueryOutput, slippage: Slippage.fromPercentage(`${Number(slippagePercent)}`), - sender: account, - recipient: account, wethIsEth, - }) + } + + const buildCallParams = formatBuildCallParams( + baseBuildCallParams, + this.helpers.isV3Pool(), + account + ) + + const { callData, to, value } = removeLiquidity.buildCall(buildCallParams) return { account, 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 3ee78fee1..a0c8736f7 100644 --- a/lib/modules/pool/actions/remove-liquidity/handlers/SingleTokenRemoveLiquidity.handler.ts +++ b/lib/modules/pool/actions/remove-liquidity/handlers/SingleTokenRemoveLiquidity.handler.ts @@ -12,7 +12,11 @@ import { import { Address, parseEther } from 'viem' import { BPT_DECIMALS } from '../../../pool.constants' import { Pool } from '../../../PoolProvider' -import { LiquidityActionHelpers, isEmptyHumanAmount } from '../../LiquidityActionHelpers' +import { + LiquidityActionHelpers, + formatBuildCallParams, + isEmptyHumanAmount, +} from '../../LiquidityActionHelpers' import { SdkBuildRemoveLiquidityInput, SdkQueryRemoveLiquidityOutput, @@ -72,13 +76,19 @@ export class SingleTokenRemoveLiquidityHandler implements RemoveLiquidityHandler }: SdkBuildRemoveLiquidityInput): Promise { const removeLiquidity = new RemoveLiquidity() - const { callData, to, value } = removeLiquidity.buildCall({ + const baseBuildCallParams = { ...queryOutput.sdkQueryOutput, slippage: Slippage.fromPercentage(`${Number(slippagePercent)}`), - sender: account, - recipient: account, wethIsEth, - }) + } + + const buildCallParams = formatBuildCallParams( + baseBuildCallParams, + this.helpers.isV3Pool(), + account + ) + + const { callData, to, value } = removeLiquidity.buildCall(buildCallParams) return { account,