import { AsyncOrSync, DeepReadonly } from 'ts-essentials'; import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, PoolLiquidity, Logger, DexExchangeParam } from '../../types'; import { SwapSide, Network } from '../../constants'; import { IDex } from '../../dex/idex'; import { IDexHelper } from '../../dex-helper/idex-helper'; import { BalancerV3Data, PoolState, PoolStateMap } from './types'; import { SimpleExchange } from '../simple-exchange'; import { BalancerV3EventPool } from './balancer-v3-pool'; import { NumberAsString } from '@paraswap/core'; import { Interface } from '@ethersproject/abi'; import { Block } from '@ethersproject/abstract-provider'; import { BalancerEventHook } from './hooks/balancer-hook-event-subscriber'; export declare class BalancerV3 extends SimpleExchange implements IDex { readonly network: Network; readonly dexKey: string; readonly dexHelper: IDexHelper; protected eventPools: BalancerV3EventPool; protected eventHooks: BalancerEventHook; readonly hasConstantPriceLargeAmounts = false; readonly needWrapNative = false; readonly isFeeOnTransferSupported = false; static dexKeysWithNetwork: { key: string; networks: Network[]; }[]; logger: Logger; balancerRouter: Interface; balancerBatchRouter: Interface; updateNewPoolsTimer?: NodeJS.Timeout; updateRatesTimer?: NodeJS.Timeout; updateHooksTimer?: NodeJS.Timeout; latestBlock?: Block; constructor(network: Network, dexKey: string, dexHelper: IDexHelper); initializePricing(blockNumber: number): Promise; getAdapters(side: SwapSide): null; getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise; findPoolAddressesWithTokens(pools: DeepReadonly, tokenA: string, tokenB: string): string[]; /** * Filter pools that have tokens from/to and are in limitPool list * @param pools * @param from * @param to * @param limitPools * @returns Array of PoolState */ filterPools(pools: DeepReadonly, from: string, to: string, limitPools?: string[]): PoolState[]; hasTokens(pool: DeepReadonly, tokens: string[]): boolean; getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise>; getCalldataGasCost(poolPrices: PoolPrices): number | number[]; getAdapterParam(): AdapterExchangeParam; getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: BalancerV3Data, side: SwapSide): DexExchangeParam; getExactInParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, data: BalancerV3Data): DexExchangeParam; getExactOutParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, data: BalancerV3Data): DexExchangeParam; /** * Uses multicall to get onchain token rate for each pool then updates pool state */ updateStatePoolRates(): Promise; updatePoolState(): Promise; updateHooksState(): Promise; getTopPoolsForToken(tokenAddress: Address, count: number): Promise; releaseResources(): AsyncOrSync; }