export interface LiquidityInfoBase { protocol: string; address: string; } export interface LimitOrderInfo extends LiquidityInfoBase { maker: string; makerToken: string; takerToken: string; makerAmount: bigint; takerAmount: bigint; nonce: bigint; deadline: bigint; signature: string; } export interface UniswapV3Info extends LiquidityInfoBase { fee: bigint; } export type LiquidityInfo = LiquidityInfoBase | LimitOrderInfo | UniswapV3Info; export interface Swap { fromTokenOp: TokenOperation; toTokenOp: TokenOperation; amountIn: bigint; amountOut: bigint; liquidityInfo: LiquidityInfo; } export interface TokenOperation { tokenInfo: { address: string; name: string; symbol: string; decimals: number; usdPrice?: number; }; fromSwaps: Swap[]; toSwaps: Swap[]; } export interface IRoutingPlan { tokenOps: TokenOperation[]; swaps: Swap[]; fromToken: string; toToken: string; amountIn: bigint; amountOut: bigint; }