import { OptimalRoute, OptimalRate, OptimalSwap, OptimalSwapExchange } from '@paraswap/core'; import { DexExchangeBuildParam } from '../types'; import { Executors, Flag } from './types'; import { DepositWithdrawReturn } from '../dex/weth/types'; import { DexCallDataParams, ExecutorBytecodeBuilder, SingleSwapCallDataParams } from './ExecutorBytecodeBuilder'; export type Executor02SingleSwapCallDataParams = { routeIndex: number; swapIndex: number; wrapToSwapMap: { [key: number]: boolean; }; unwrapToSwapMap: { [key: number]: boolean; }; wrapToSwapExchangeMap: { [key: string]: boolean; }; swap: OptimalSwap; }; export type Executor02DexCallDataParams = { swapExchange: OptimalSwapExchange; }; /** * Class to build bytecode for Executor02 - simpleSwap with N DEXs (VERTICAL_BRANCH), multiSwaps (VERTICAL_BRANCH_HORIZONTAL_SEQUENCE) and megaswaps (NESTED_VERTICAL_BRANCH_HORIZONTAL_SEQUENCE) */ export declare class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder { type: Executors; /** * Executor02 Flags: * switch (flag % 4): * case 0: don't instert fromAmount * case 1: sendEth equal to fromAmount * case 2: sendEth equal to fromAmount + insert fromAmount * case 3: insert fromAmount * switch (flag % 3): * case 0: don't check balance after swap * case 1: check eth balance after swap * case 2: check destToken balance after swap */ protected buildSimpleSwapFlags(priceRoute: OptimalRate, exchangeParams: DexExchangeBuildParam[], routeIndex: number, swapIndex: number, swapExchangeIndex: number, exchangeParamIndex: number, maybeWethCallData?: DepositWithdrawReturn): { dexFlag: Flag; approveFlag: Flag; }; /** * Executor02 Flags: * switch (flag % 4): * case 0: don't instert fromAmount * case 1: sendEth equal to fromAmount * case 2: sendEth equal to fromAmount + insert fromAmount * case 3: insert fromAmount * switch (flag % 3): * case 0: don't check balance after swap * case 1: check eth balance after swap * case 2: check destToken balance after swap */ protected buildMultiMegaSwapFlags(priceRoute: OptimalRate, exchangeParams: DexExchangeBuildParam[], routeIndex: number, swapIndex: number, swapExchangeIndex: number, exchangeParamIndex: number, maybeWethCallData?: DepositWithdrawReturn): { dexFlag: Flag; approveFlag: Flag; }; protected buildDexCallData(params: DexCallDataParams): string; private addMultiSwapMetadata; private packVerticalBranchingData; private packVerticalBranchingCallData; private buildVerticalBranchingCallData; private buildSingleSwapExchangeCallData; private appendWrapEthCallData; private eachDexOnSwapNeedsWrapNative; private anyDexOnSwapNeedsWrapNative; private isLastExchangeWithNeedWrapNative; private getSwapExchangesWhichNeedWrapNative; private getSwapExchangesWhichDontNeedWrapNative; private anyDexOnSwapDoesntNeedWrapNative; private everyDexOnSwapNeedWrapNative; private everyDexOnSwapDoesntNeedWrapNative; private doesSwapNeedToApplyVerticalBranching; private buildVerticalBranchingFlag; protected buildSingleSwapCallData(params: SingleSwapCallDataParams): string; protected buildSingleRouteCallData(priceRoute: OptimalRate, exchangeParams: DexExchangeBuildParam[], route: OptimalRoute, routeIndex: number, flags: { approves: Flag[]; dexes: Flag[]; wrap: Flag; }, sender: string, maybeWethCallData?: DepositWithdrawReturn): string; private doesRouteNeedsRootWrapEth; private doesRouteNeedsRootUnwrapEth; getAddress(): string; buildByteCode(priceRoute: OptimalRate, exchangeParams: DexExchangeBuildParam[], sender: string, maybeWethCallData?: DepositWithdrawReturn): string; }