import { Interface } from '@ethersproject/abi'; import { DeepReadonly } from 'ts-essentials'; import { Address, BlockHeader, Log, Logger, Token } from '../../types'; import { StatefulEventSubscriber } from '../../stateful-event-subscriber'; import { IDexHelper } from '../../dex-helper/idex-helper'; import { PoolState } from './types'; import { Contract } from 'web3-eth-contract'; import { MaverickPoolMath } from './maverick-math/maverick-pool-math'; import { MultiResult } from '../../lib/multi-wrapper'; import { BytesLike } from 'ethers'; export declare const decodeMaverickFullState: (result: MultiResult | BytesLike) => any; export declare class MaverickV2EventPool extends StatefulEventSubscriber { readonly parentName: string; protected network: number; protected dexHelper: IDexHelper; tokenA: Token; tokenB: Token; feeAIn: bigint; feeBIn: bigint; tickSpacing: bigint; protocolFeeRatio: bigint; lookback: bigint; activeTick: bigint; address: Address; poolLensAddress: Address; protected maverickV2Iface: Interface; protected maverickV2LensIface: Interface; handlers: { [event: string]: (event: any, state: DeepReadonly, log: Readonly, blockHeader: BlockHeader) => DeepReadonly | null; }; poolContract: Contract; logDecoder: (log: Log) => any; addressesSubscribed: string[]; poolMath: MaverickPoolMath; constructor(parentName: string, network: number, dexHelper: IDexHelper, logger: Logger, tokenA: Token, tokenB: Token, feeAIn: bigint, feeBIn: bigint, tickSpacing: bigint, protocolFeeRatio: bigint, lookback: bigint, activeTick: bigint, address: Address, poolLensAddress: Address, maverickV2Iface?: Interface, maverickV2LensIface?: Interface); /** * The function is called every time any of the subscribed * addresses release log. The function accepts the current * state, updates the state according to the log, and returns * the updated state. * @param state - Current state of event subscriber * @param log - Log released by one of the subscribed addresses * @returns Updates state of the event subscriber after the log */ protected processLog(state: DeepReadonly, log: Readonly, blockHeader: Readonly): DeepReadonly | null; /** * The function generates state using on-chain calls. This * function is called to regenerate state if the event based * system fails to fetch events and the local state is no * more correct. * @param blockNumber - Blocknumber for which the state should * should be generated * @returns state of the event subscriber at blocknumber */ generateState(blockNumber: number): Promise>; handleRemoveLiquidityEvent(event: any, state: PoolState, log: Log, blockHeader: BlockHeader): PoolState; handleAddLiquidityEvent(event: any, state: PoolState, log: Log, blockHeader: BlockHeader): PoolState; handleSwapEvent(event: any, state: PoolState, log: Log, blockHeader: BlockHeader): PoolState; swap(amount: bigint, from: Token, to: Token, exactOutput: boolean): [bigint, bigint]; getOrGenerateState(blockNumber: number): Promise | null>; }