import { Interface } from '@ethersproject/abi'; import BigNumber from 'bignumber.js'; import { Logger } from 'log4js'; import { Address, Log } from '../../../types'; import { StatefulEventSubscriber } from '../../../stateful-event-subscriber'; import { DeepReadonly } from 'ts-essentials'; import { PoolState as BasepoolState } from './curve-pool'; import { ThreePool } from './3pool'; import { BlockHeader } from 'web3-eth'; import { IDexHelper } from '../../../dex-helper'; export interface MetapoolState { A: BigNumber; fee: BigNumber; admin_fee: BigNumber; supply: BigNumber; balances: BigNumber[]; basepool: BasepoolState; base_virtual_price: BigNumber; base_cache_updated: BigNumber; } export declare abstract class CurveMetapool extends StatefulEventSubscriber { parentName: string; protected dexHelper: IDexHelper; pool: string; address: Address; tokenAddress: Address; protected trackCoins: boolean; protected abi: any; N_COINS: number; PRECISION_MUL: BigNumber[]; USE_LENDING: boolean[]; COINS: Address[]; protected FEE_DENOMINATOR: BigNumber; protected LENDING_PRECISION: BigNumber; protected PRECISION: BigNumber; protected BASE_CACHE_EXPIRES: BigNumber; protected MAX_COIN: number; metapoolAddressesSubscribed: Address[]; protected handlers: { [event: string]: (event: any, state: MetapoolState, log: Log, blockHeader: BlockHeader) => MetapoolState; }; poolIface: Interface; decoder: (log: Log) => any; lastTransferredCoin?: Address; basepool: ThreePool; constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, pool: string, address: Address, tokenAddress: Address, trackCoins: boolean, abi: any, N_COINS: number, PRECISION_MUL: BigNumber[], USE_LENDING: boolean[], COINS: Address[], Basepool: new (name: string, dexHelper: IDexHelper) => ThreePool); protected processLog(state: DeepReadonly, log: Readonly, blockHeader: Readonly): DeepReadonly | null; setup(blockNumber: number, poolState?: MetapoolState | null): Promise; protected getRates(): BigNumber[]; generateState(blockNumber?: number | 'latest'): Promise>; handleBasepoolAddLiquidity(event: any, state: BasepoolState, log: Log): BasepoolState; handleBasepoolRemoveLiquidityOne(event: any, state: BasepoolState, log: Log): BasepoolState; handleBasepoolTokenExchange(event: any, state: BasepoolState, log: Log): BasepoolState; handleNewParameters(event: any, state: MetapoolState, log: Log): MetapoolState; handleRemoveLiquidity(event: any, state: MetapoolState, log: Log): MetapoolState; handleRemoveLiquidityImbalances(event: any, state: MetapoolState, log: Log, blockHeader: BlockHeader): MetapoolState; handleTokenExchange(event: any, state: MetapoolState, log: Log, blockHeader: BlockHeader): MetapoolState; handleTokenExchangeUnderlying(event: any, state: MetapoolState, log: Log, blockHeader: BlockHeader): MetapoolState; handleAddLiquidity(event: any, state: MetapoolState, log: Log, blockHeader: BlockHeader): MetapoolState; protected _vp_rate(basepool: BasepoolState, base_virtual_price: BigNumber, base_cache_updated: BigNumber, blockTimestamp: BigNumber): [BigNumber, BigNumber]; protected _vp_rate_ro(basepool: BasepoolState, base_virtual_price: BigNumber, base_cache_updated: BigNumber, blockTimestamp: BigNumber): BigNumber; _get_dy_underlying(i: number, j: number, dx: BigNumber, A: BigNumber, fee: BigNumber, balances: BigNumber[], rates: BigNumber[], base_virtual_price: BigNumber, base_cache_updated: BigNumber, blockTimestamp: BigNumber, basepool: BasepoolState): BigNumber; get_dy_underlying(i: number, j: number, dx: BigNumber, state: Readonly): BigNumber; _get_dy(i: number, j: number, dx: BigNumber, A: BigNumber, fee: BigNumber, balances: BigNumber[], rates: BigNumber[], base_virtual_price: BigNumber, base_cache_updated: BigNumber, blockTimestamp: BigNumber, basepool: BasepoolState, usefee?: boolean): BigNumber; get_dy(i: number, j: number, dx: BigNumber, state: Readonly): BigNumber; get_D(xp: BigNumber[], amp: BigNumber): BigNumber; get_y(i: number, j: number, x: BigNumber, xp: BigNumber[], A: BigNumber): BigNumber; get_D_mem(vp_rate: BigNumber, rates: BigNumber[], balances: BigNumber[], amp: BigNumber): BigNumber; protected _xp(vp_rate: BigNumber, rates: BigNumber[], balances: BigNumber[]): BigNumber[]; protected _xp_mem(vp_rate: BigNumber, rates: BigNumber[], balances: BigNumber[]): BigNumber[]; handleCoinTransfer(event: any, state: MetapoolState, log: Log): MetapoolState; handleNewFee(event: any, state: MetapoolState, log: Log): MetapoolState; handleRemoveLiquidityOne(event: any, state: MetapoolState, log: Log, blockHeader: BlockHeader): MetapoolState; private get_y_D; private _calc_withdraw_one_coin; }