import { Interface } from '@ethersproject/abi'; import { IDexHelper } from '../dex-helper'; import { Address, OptimalRate, OptimalSwap } from '@paraswap/core'; import { DepositWithdrawReturn } from '../dex/weth/types'; import { Executors, Flag, SpecialDex } from './types'; import { DexExchangeBuildParam, DexExchangeParam } from '../types'; export type SingleSwapCallDataParams = { priceRoute: OptimalRate; exchangeParams: DexExchangeBuildParam[]; index: number; flags: { approves: Flag[]; dexes: Flag[]; wrap: Flag; }; sender: string; maybeWethCallData?: DepositWithdrawReturn; } & T; export type DexCallDataParams = { priceRoute: OptimalRate; routeIndex: number; swapIndex: number; swapExchangeIndex: number; exchangeParams: DexExchangeBuildParam[]; exchangeParamIndex: number; isLastSwap: boolean; flag: Flag; } & T; export declare abstract class ExecutorBytecodeBuilder { protected dexHelper: IDexHelper; type: Executors; erc20Interface: Interface; permit2Interface: Interface; constructor(dexHelper: IDexHelper); protected buildSimpleSwapFlags(priceRoute: OptimalRate, exchangeParams: DexExchangeBuildParam[], routeIndex: number, swapIndex: number, swapExchangeIndex: number, exchangeParamIndex: number, maybeWethCallData?: DepositWithdrawReturn): { dexFlag: Flag; approveFlag: Flag; }; protected buildMultiMegaSwapFlags(priceRoute: OptimalRate, exchangeParams: DexExchangeBuildParam[], routeIndex: number, swapIndex: number, swapExchangeIndex: number, exchangeParamIndex: number, maybeWethCallData?: DepositWithdrawReturn): { dexFlag: Flag; approveFlag: Flag; }; abstract buildByteCode(priceRoute: OptimalRate, exchangeParams: DexExchangeBuildParam[], sender: string, maybeWethCallData?: DepositWithdrawReturn): string; abstract getAddress(): string; protected buildSingleSwapCallData(params: SingleSwapCallDataParams): string; protected buildDexCallData(params: DexCallDataParams): string; protected buildApproveCallData(spender: string, tokenAddr: Address, flag: Flag, permit2?: boolean, amount?: string): string; protected buildPermit2CallData(spender: string, tokenAddr: Address, flag: Flag): string; protected findAmountPosInCalldata(exchangeData: string, encodedAmount: string): number; protected buildWrapEthCallData(wethAddress: string, depositCallData: string, flag: Flag, destTokenPos?: number): string; protected buildUnwrapEthCallData(wethAddress: string, withdrawCallData: string): string; protected buildTransferCallData(transferCallData: string, tokenAddr: Address): string; protected buildFinalSpecialFlagCalldata(): string; buildCallData(tokenAddress: string, calldata: string, fromAmountPos: number, destTokenPos: number, specialDexFlag: SpecialDex, flag: Flag, toAmountPos?: number, returnAmountPos?: number): string; private buildExecutor0102CallData; private buildExecutor03CallData; protected buildFlags(priceRoute: OptimalRate, exchangeParams: DexExchangeBuildParam[], maybeWethCallData?: DepositWithdrawReturn): { approves: Flag[]; dexes: Flag[]; wrap: Flag; }; addTokenAddressToCallData(callData: string, tokenAddr: Address): string; getApprovalTokenAndTarget(swap: OptimalSwap, exchangeParam: DexExchangeParam): { target: string; token: Address; } | null; protected getWETHAddress(exchangeParam: DexExchangeParam): string; }