import { ChainId } from '../../chain';
import { Token } from '../../currency';
import { Address, Hex, PublicClient } from 'viem';
import { PoolResponse2 } from '../lib/api';
import { PoolCode } from '../pools/PoolCode';
import { LiquidityProvider } from './LiquidityProvider';
interface PoolInfo {
poolCode: PoolCode;
validUntilTimestamp: number;
}
interface StaticPool {
address: Address;
token0: Token;
token1: Token;
fee: number;
}
export declare abstract class UniswapV2BaseProvider extends LiquidityProvider {
readonly TOP_POOL_SIZE = 155;
readonly TOP_POOL_LIQUIDITY_THRESHOLD = 5000;
readonly ON_DEMAND_POOL_SIZE = 20;
readonly REFRESH_INITIAL_POOLS_INTERVAL = 60;
topPools: Map
;
poolsByTrade: Map;
onDemandPools: Map;
availablePools: Map;
staticPools: Map;
blockListener?: () => void;
unwatchBlockNumber?: () => void;
fee: number;
isInitialized: boolean;
factory: Record;
initCodeHash: Record;
latestPoolCreatedAtTimestamp: Date;
discoverNewPoolsTimestamp: number;
refreshAvailablePoolsTimestamp: number;
constructor(chainId: ChainId, web3Client: PublicClient, factory: Record, initCodeHash: Record);
initialize(): Promise;
private getInitialPools;
getOnDemandPools(t0: Token, t1: Token, excludePools?: Set): Promise;
updatePools(): Promise;
private discoverNewPools;
private updateAvailablePools;
private prioritizeTopPools;
private updatePoolWithReserves;
_getPoolAddress(t1: Token, t2: Token): Address;
_getProspectiveTokens(t0: Token, t1: Token): Token[];
getStaticPools(t1: Token, t2: Token): StaticPool[];
startFetchPoolsData(): void;
private removeStalePools;
fetchPoolsForToken(t0: Token, t1: Token, excludePools?: Set): Promise;
/**
* The pools returned are the initial pools, plus any on demand pools that have been fetched for the two tokens.
* @param t0
* @param t1
* @returns
*/
getCurrentPoolList(t0: Token, t1: Token): PoolCode[];
stopFetchPoolsData(): void;
}
export {};