@paraswap/dex-lib 3.0.6 → 3.2.5-return-amount-pos.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/aws.xml +17 -0
- package/.idea/codeStyles/Project.xml +55 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/inspectionProfiles/Project_Default.xml +6 -0
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/paraswap-dex-lib-private.iml +9 -0
- package/.idea/prettier.xml +7 -0
- package/.idea/vcs.xml +6 -0
- package/README.md +327 -10
- package/build/abi/AugustusV6.abi.json +1454 -0
- package/build/abi/angle/stagToken.json +963 -0
- package/build/abi/augustus-v6/ABI.json +1084 -587
- package/build/abi/balancer-v2/gyro-e.abi.json +1595 -0
- package/build/abi/etherfi/eETHPool.json +9 -0
- package/build/abi/etherfi/weETH.json +20 -0
- package/build/abi/maker-psm/pot.json +322 -0
- package/build/abi/rswETH.json +1142 -0
- package/build/abi/sdai/SavingsDai.abi.json +877 -0
- package/build/abi/velodrome-slipstream/VelodromeSlipstreamFactory.abi.json +579 -0
- package/build/abi/velodrome-slipstream/VelodromeSlipstreamPool.abi.json +1275 -0
- package/build/abi/velodrome-slipstream/VelodromeSlipstreamStateMulticall.abi.json +766 -0
- package/build/config.js +51 -46
- package/build/config.js.map +1 -1
- package/build/dex/aave-v1/aave-v1.js +1 -0
- package/build/dex/aave-v1/aave-v1.js.map +1 -1
- package/build/dex/aave-v2/aave-v2.js +1 -0
- package/build/dex/aave-v2/aave-v2.js.map +1 -1
- package/build/dex/aave-v3/aave-v3.js +1 -0
- package/build/dex/aave-v3/aave-v3.js.map +1 -1
- package/build/dex/algebra/algebra-factory.js +1 -1
- package/build/dex/algebra/algebra-factory.js.map +1 -1
- package/build/dex/algebra/algebra-pool-v1_1.d.ts +7 -2
- package/build/dex/algebra/algebra-pool-v1_1.js +9 -2
- package/build/dex/algebra/algebra-pool-v1_1.js.map +1 -1
- package/build/dex/algebra/algebra-pool-v1_9.d.ts +4 -0
- package/build/dex/algebra/algebra-pool-v1_9.js +6 -0
- package/build/dex/algebra/algebra-pool-v1_9.js.map +1 -1
- package/build/dex/algebra/algebra-pool-v1_9_bidirectional_fee.d.ts +16 -0
- package/build/dex/algebra/algebra-pool-v1_9_bidirectional_fee.js +26 -0
- package/build/dex/algebra/algebra-pool-v1_9_bidirectional_fee.js.map +1 -0
- package/build/dex/algebra/algebra.d.ts +2 -1
- package/build/dex/algebra/algebra.js +13 -7
- package/build/dex/algebra/algebra.js.map +1 -1
- package/build/dex/algebra/config.js +4 -0
- package/build/dex/algebra/config.js.map +1 -1
- package/build/dex/algebra/types.d.ts +1 -1
- package/build/dex/angle-staked-stable/angle-staked-stable-pool.d.ts +56 -0
- package/build/dex/angle-staked-stable/angle-staked-stable-pool.js +197 -0
- package/build/dex/angle-staked-stable/angle-staked-stable-pool.js.map +1 -0
- package/build/dex/angle-staked-stable/angle-staked-stable.d.ts +49 -0
- package/build/dex/angle-staked-stable/angle-staked-stable.js +239 -0
- package/build/dex/angle-staked-stable/angle-staked-stable.js.map +1 -0
- package/build/dex/angle-staked-stable/config.d.ts +4 -0
- package/build/dex/angle-staked-stable/config.js +139 -0
- package/build/dex/angle-staked-stable/config.js.map +1 -0
- package/build/dex/angle-staked-stable/types.d.ts +15 -0
- package/build/dex/angle-staked-stable/types.js +3 -0
- package/build/dex/angle-staked-stable/types.js.map +1 -0
- package/build/dex/bProtocol/bProtocol.js +5 -0
- package/build/dex/bProtocol/bProtocol.js.map +1 -1
- package/build/dex/balancer-v1/balancer-v1.js +4 -0
- package/build/dex/balancer-v1/balancer-v1.js.map +1 -1
- package/build/dex/balancer-v2/balancer-v2.d.ts +9 -4
- package/build/dex/balancer-v2/balancer-v2.js +111 -84
- package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
- package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.d.ts +32 -0
- package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.js +149 -0
- package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.js.map +1 -0
- package/build/dex/balancer-v2/pools/gyro/GyroEPool.d.ts +37 -0
- package/build/dex/balancer-v2/pools/gyro/GyroEPool.js +222 -0
- package/build/dex/balancer-v2/pools/gyro/GyroEPool.js.map +1 -0
- package/build/dex/balancer-v2/pools/gyro/gyro-helpers.d.ts +2 -0
- package/build/dex/balancer-v2/pools/gyro/gyro-helpers.js +19 -0
- package/build/dex/balancer-v2/pools/gyro/gyro-helpers.js.map +1 -0
- package/build/dex/balancer-v2/queryOnChain.d.ts +1 -0
- package/build/dex/balancer-v2/queryOnChain.js +40 -0
- package/build/dex/balancer-v2/queryOnChain.js.map +1 -0
- package/build/dex/balancer-v2/types.d.ts +41 -2
- package/build/dex/balancer-v2/types.js +2 -0
- package/build/dex/balancer-v2/types.js.map +1 -1
- package/build/dex/balancer-v2/utils.d.ts +8 -0
- package/build/dex/balancer-v2/utils.js +17 -1
- package/build/dex/balancer-v2/utils.js.map +1 -1
- package/build/dex/bancor/bancor.js +4 -0
- package/build/dex/bancor/bancor.js.map +1 -1
- package/build/dex/camelot/camelot.js +1 -0
- package/build/dex/camelot/camelot.js.map +1 -1
- package/build/dex/compound/compound.js +1 -0
- package/build/dex/compound/compound.js.map +1 -1
- package/build/dex/curve-v1/curve-v1.js +1 -0
- package/build/dex/curve-v1/curve-v1.js.map +1 -1
- package/build/dex/curve-v1-factory/config.js +128 -11
- package/build/dex/curve-v1-factory/config.js.map +1 -1
- package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +1 -0
- package/build/dex/curve-v1-factory/curve-v1-factory.js +30 -17
- package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
- package/build/dex/curve-v1-factory/curve-v1-pool-manager.js +1 -0
- package/build/dex/curve-v1-factory/curve-v1-pool-manager.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/_calc_withdraw_one_coin.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/_calc_withdraw_one_coin.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/_dynamic_fee.js +4 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/_dynamic_fee.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/_rates.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/_rates.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/_xp.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/_xp.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/_xp_mem.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/_xp_mem.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/calc_token_amount.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/calc_token_amount.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/calc_withdraw_one_coin.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/calc_withdraw_one_coin.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/constants.js +10 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/constants.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/get_D.js +40 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/get_D.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/get_D_mem.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/get_D_mem.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/get_D_precisions.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/get_D_precisions.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/get_dy.js +24 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/get_dy.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/get_dy_underlying.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/get_dy_underlying.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/get_y.js +53 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/get_y.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/get_y_D.js +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/get_y_D.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/utils.d.ts +1 -0
- package/build/dex/curve-v1-factory/price-handlers/functions/utils.js +5 -1
- package/build/dex/curve-v1-factory/price-handlers/functions/utils.js.map +1 -1
- package/build/dex/curve-v1-factory/price-handlers/types.d.ts +2 -2
- package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.d.ts +3 -2
- package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.js +38 -6
- package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.js.map +1 -1
- package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.js.map +1 -1
- package/build/dex/curve-v1-factory/types.d.ts +11 -2
- package/build/dex/curve-v1-factory/types.js +3 -0
- package/build/dex/curve-v1-factory/types.js.map +1 -1
- package/build/dex/curve-v2/curve-v2.js +1 -0
- package/build/dex/curve-v2/curve-v2.js.map +1 -1
- package/build/dex/dexalot/config.js +7 -0
- package/build/dex/dexalot/config.js.map +1 -1
- package/build/dex/dexalot/dexalot.js +2 -0
- package/build/dex/dexalot/dexalot.js.map +1 -1
- package/build/dex/dodo-v1/dodo-v1.js +4 -0
- package/build/dex/dodo-v1/dodo-v1.js.map +1 -1
- package/build/dex/dodo-v2.js +4 -0
- package/build/dex/dodo-v2.js.map +1 -1
- package/build/dex/etherfi.d.ts +27 -0
- package/build/dex/etherfi.js +146 -0
- package/build/dex/etherfi.js.map +1 -0
- package/build/dex/generic-rfq/generic-rfq.js +4 -3
- package/build/dex/generic-rfq/generic-rfq.js.map +1 -1
- package/build/dex/generic-rfq/rate-fetcher.d.ts +1 -1
- package/build/dex/generic-rfq/rate-fetcher.js +2 -1
- package/build/dex/generic-rfq/rate-fetcher.js.map +1 -1
- package/build/dex/generic-rfq/types.d.ts +1 -0
- package/build/dex/generic-rfq/types.js.map +1 -1
- package/build/dex/gmx/gmx.js +4 -0
- package/build/dex/gmx/gmx.js.map +1 -1
- package/build/dex/hashflow/constants.d.ts +27 -0
- package/build/dex/hashflow/constants.js +29 -1
- package/build/dex/hashflow/constants.js.map +1 -1
- package/build/dex/hashflow/hashflow.d.ts +3 -2
- package/build/dex/hashflow/hashflow.js +72 -13
- package/build/dex/hashflow/hashflow.js.map +1 -1
- package/build/dex/hashflow/types.d.ts +11 -0
- package/build/dex/hashflow/types.js +9 -0
- package/build/dex/hashflow/types.js.map +1 -1
- package/build/dex/idex.d.ts +2 -2
- package/build/dex/index.d.ts +2 -2
- package/build/dex/index.js +10 -0
- package/build/dex/index.js.map +1 -1
- package/build/dex/jarvis-v6/jarvis-v6.js +1 -0
- package/build/dex/jarvis-v6/jarvis-v6.js.map +1 -1
- package/build/dex/jarvis.js +8 -0
- package/build/dex/jarvis.js.map +1 -1
- package/build/dex/kyberdmm/kyberdmm.js +4 -0
- package/build/dex/kyberdmm/kyberdmm.js.map +1 -1
- package/build/dex/lido/lido.d.ts +4 -1
- package/build/dex/lido/lido.js +18 -1
- package/build/dex/lido/lido.js.map +1 -1
- package/build/dex/maker-psm/maker-psm.js +1 -0
- package/build/dex/maker-psm/maker-psm.js.map +1 -1
- package/build/dex/maverick-v1/maverick-v1.js +4 -0
- package/build/dex/maverick-v1/maverick-v1.js.map +1 -1
- package/build/dex/nerve/nerve.js +4 -0
- package/build/dex/nerve/nerve.js.map +1 -1
- package/build/dex/onebit/onebit.js +5 -0
- package/build/dex/onebit/onebit.js.map +1 -1
- package/build/dex/pancakeswap-v3/config.js +30 -0
- package/build/dex/pancakeswap-v3/config.js.map +1 -1
- package/build/dex/pancakeswap-v3/pancakeswap-v3-factory.js +1 -1
- package/build/dex/pancakeswap-v3/pancakeswap-v3-factory.js.map +1 -1
- package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.d.ts +5 -0
- package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js +7 -0
- package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js.map +1 -1
- package/build/dex/pancakeswap-v3/pancakeswap-v3.js +16 -8
- package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +1 -0
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
- package/build/dex/platypus/platypus.js +17 -3
- package/build/dex/platypus/platypus.js.map +1 -1
- package/build/dex/polygon-migrator/polygon-migrator.js +1 -0
- package/build/dex/polygon-migrator/polygon-migrator.js.map +1 -1
- package/build/dex/quick-perps/quick-perps.js +7 -1
- package/build/dex/quick-perps/quick-perps.js.map +1 -1
- package/build/dex/simple-exchange.d.ts +0 -1
- package/build/dex/simple-exchange.js +0 -2
- package/build/dex/simple-exchange.js.map +1 -1
- package/build/dex/smoothy/smoothy.js +1 -0
- package/build/dex/smoothy/smoothy.js.map +1 -1
- package/build/dex/smoothy.d.ts +1 -1
- package/build/dex/smoothy.js +2 -3
- package/build/dex/smoothy.js.map +1 -1
- package/build/dex/solidly/config.js +12 -0
- package/build/dex/solidly/config.js.map +1 -1
- package/build/dex/solidly/forks-override/pharaohV1.d.ts +8 -0
- package/build/dex/solidly/forks-override/pharaohV1.js +15 -0
- package/build/dex/solidly/forks-override/pharaohV1.js.map +1 -0
- package/build/dex/solidly/solidly.js +2 -0
- package/build/dex/solidly/solidly.js.map +1 -1
- package/build/dex/solidly-v3/config.js +13 -1
- package/build/dex/solidly-v3/config.js.map +1 -1
- package/build/dex/solidly-v3/solidly-v3-factory.js +1 -1
- package/build/dex/solidly-v3/solidly-v3-factory.js.map +1 -1
- package/build/dex/solidly-v3/solidly-v3-pool.d.ts +5 -0
- package/build/dex/solidly-v3/solidly-v3-pool.js +7 -0
- package/build/dex/solidly-v3/solidly-v3-pool.js.map +1 -1
- package/build/dex/solidly-v3/solidly-v3.d.ts +1 -2
- package/build/dex/solidly-v3/solidly-v3.js +5 -11
- package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
- package/build/dex/solidly-v3/types.d.ts +0 -1
- package/build/dex/solidly-v3/types.js.map +1 -1
- package/build/dex/spark/config.d.ts +11 -0
- package/build/dex/spark/config.js +21 -0
- package/build/dex/spark/config.js.map +1 -0
- package/build/dex/spark/constants.d.ts +2 -0
- package/build/dex/spark/constants.js +6 -0
- package/build/dex/spark/constants.js.map +1 -0
- package/build/dex/spark/scripts/validate-state.d.ts +1 -0
- package/build/dex/spark/scripts/validate-state.js +102 -0
- package/build/dex/spark/scripts/validate-state.js.map +1 -0
- package/build/dex/spark/spark-sdai-pool.d.ts +16 -0
- package/build/dex/spark/spark-sdai-pool.js +85 -0
- package/build/dex/spark/spark-sdai-pool.js.map +1 -0
- package/build/dex/spark/spark.d.ts +52 -0
- package/build/dex/spark/spark.js +195 -0
- package/build/dex/spark/spark.js.map +1 -0
- package/build/dex/spark/types.d.ts +21 -0
- package/build/dex/spark/types.js +11 -0
- package/build/dex/spark/types.js.map +1 -0
- package/build/dex/spark/utils.d.ts +4 -0
- package/build/dex/spark/utils.js +39 -0
- package/build/dex/spark/utils.js.map +1 -0
- package/build/dex/stable-pool/stable-pool.js +4 -0
- package/build/dex/stable-pool/stable-pool.js.map +1 -1
- package/build/dex/swaap-v1/swaap-v1.js +4 -0
- package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
- package/build/dex/swaap-v2/swaap-v2.js +1 -0
- package/build/dex/swaap-v2/swaap-v2.js.map +1 -1
- package/build/dex/swell/config.d.ts +1 -0
- package/build/dex/swell/config.js +1 -0
- package/build/dex/swell/config.js.map +1 -1
- package/build/dex/swell/rsweth-pool.d.ts +16 -0
- package/build/dex/swell/rsweth-pool.js +38 -0
- package/build/dex/swell/rsweth-pool.js.map +1 -0
- package/build/dex/swell/swell.d.ts +7 -2
- package/build/dex/swell/swell.js +58 -27
- package/build/dex/swell/swell.js.map +1 -1
- package/build/dex/swell/sweth-pool.js +1 -1
- package/build/dex/swell/sweth-pool.js.map +1 -1
- package/build/dex/swell/type.d.ts +3 -0
- package/build/dex/swell/utils.d.ts +3 -2
- package/build/dex/swell/utils.js +19 -3
- package/build/dex/swell/utils.js.map +1 -1
- package/build/dex/synthetix/synthetix.js +6 -0
- package/build/dex/synthetix/synthetix.js.map +1 -1
- package/build/dex/trader-joe-v2.1/trader-joe-v2.1.js +4 -0
- package/build/dex/trader-joe-v2.1/trader-joe-v2.1.js.map +1 -1
- package/build/dex/uniswap-v2/config.js +56 -0
- package/build/dex/uniswap-v2/config.js.map +1 -1
- package/build/dex/uniswap-v2/types.d.ts +1 -1
- package/build/dex/uniswap-v2/uniswap-v2.js +2 -1
- package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
- package/build/dex/uniswap-v3/config.js +102 -1
- package/build/dex/uniswap-v3/config.js.map +1 -1
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/utils.d.ts +4 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/utils.js +56 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/utils.js.map +1 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-factory.d.ts +7 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-factory.js +23 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-factory.js.map +1 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.d.ts +13 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.js +137 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.js.map +1 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.d.ts +46 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js +117 -0
- package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js.map +1 -0
- package/build/dex/uniswap-v3/types.d.ts +8 -2
- package/build/dex/uniswap-v3/types.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3-factory.js +1 -1
- package/build/dex/uniswap-v3/uniswap-v3-factory.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +9 -2
- package/build/dex/uniswap-v3/uniswap-v3-pool.js +15 -2
- package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.d.ts +27 -12
- package/build/dex/uniswap-v3/uniswap-v3.js +108 -76
- package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
- package/build/dex/uniswap-v3.js +4 -0
- package/build/dex/uniswap-v3.js.map +1 -1
- package/build/dex/weth/weth.js +1 -0
- package/build/dex/weth/weth.js.map +1 -1
- package/build/dex/wombat/wombat.js +4 -0
- package/build/dex/wombat/wombat.js.map +1 -1
- package/build/dex/woo-fi-v2/config.js +16 -16
- package/build/dex/woo-fi-v2/woo-fi-v2.js +4 -0
- package/build/dex/woo-fi-v2/woo-fi-v2.js.map +1 -1
- package/build/dex/wsteth/wsteth.js +8 -1
- package/build/dex/wsteth/wsteth.js.map +1 -1
- package/build/dex/zerox/index.js +1 -0
- package/build/dex/zerox/index.js.map +1 -1
- package/build/executor/Executor01BytecodeBuilder.d.ts +6 -8
- package/build/executor/Executor01BytecodeBuilder.js +47 -8
- package/build/executor/Executor01BytecodeBuilder.js.map +1 -1
- package/build/executor/Executor02BytecodeBuilder.d.ts +18 -12
- package/build/executor/Executor02BytecodeBuilder.js +55 -10
- package/build/executor/Executor02BytecodeBuilder.js.map +1 -1
- package/build/executor/Executor03BytecodeBuilder.d.ts +11 -8
- package/build/executor/Executor03BytecodeBuilder.js +27 -5
- package/build/executor/Executor03BytecodeBuilder.js.map +1 -1
- package/build/executor/ExecutorBytecodeBuilder.d.ts +29 -6
- package/build/executor/ExecutorBytecodeBuilder.js +23 -4
- package/build/executor/ExecutorBytecodeBuilder.js.map +1 -1
- package/build/executor/ExecutorDetector.d.ts +2 -0
- package/build/executor/ExecutorDetector.js +12 -0
- package/build/executor/ExecutorDetector.js.map +1 -1
- package/build/executor/IExecutorBytecodeBuilder.d.ts +10 -0
- package/build/executor/IExecutorBytecodeBuilder.js +3 -0
- package/build/executor/IExecutorBytecodeBuilder.js.map +1 -0
- package/build/executor/WETHBytecodeBuilder.d.ts +14 -0
- package/build/executor/WETHBytecodeBuilder.js +47 -0
- package/build/executor/WETHBytecodeBuilder.js.map +1 -0
- package/build/executor/constants.d.ts +3 -1
- package/build/executor/constants.js +8 -3
- package/build/executor/constants.js.map +1 -1
- package/build/executor/types.d.ts +1 -0
- package/build/executor/types.js +1 -0
- package/build/executor/types.js.map +1 -1
- package/build/executor/utils.d.ts +2 -0
- package/build/executor/utils.js +30 -0
- package/build/executor/utils.js.map +1 -0
- package/build/generic-swap-transaction-builder.js +11 -5
- package/build/generic-swap-transaction-builder.js.map +1 -1
- package/build/implementations/local-paraswap-sdk.js +1 -1
- package/build/implementations/local-paraswap-sdk.js.map +1 -1
- package/build/stateful-event-subscriber.d.ts +1 -0
- package/build/stateful-event-subscriber.js +8 -1
- package/build/stateful-event-subscriber.js.map +1 -1
- package/build/types.d.ts +3 -0
- package/package.json +4 -3
- package/src/abi/angle/stagToken.json +963 -0
- package/src/abi/augustus-v6/ABI.json +1084 -587
- package/src/abi/balancer-v2/gyro-e.abi.json +1595 -0
- package/src/abi/etherfi/eETHPool.json +9 -0
- package/src/abi/etherfi/weETH.json +20 -0
- package/src/abi/maker-psm/pot.json +322 -0
- package/src/abi/rswETH.json +1142 -0
- package/src/abi/sdai/SavingsDai.abi.json +877 -0
- package/src/abi/velodrome-slipstream/VelodromeSlipstreamFactory.abi.json +579 -0
- package/src/abi/velodrome-slipstream/VelodromeSlipstreamPool.abi.json +1275 -0
- package/src/abi/velodrome-slipstream/VelodromeSlipstreamQuoterV2.abi.json +267 -0
- package/src/abi/velodrome-slipstream/VelodromeSlipstreamStateMulticall.abi.json +766 -0
- package/src/config.ts +51 -46
- package/src/dex/aave-v1/aave-v1.ts +1 -0
- package/src/dex/aave-v2/aave-v2.ts +1 -0
- package/src/dex/aave-v3/aave-v3.ts +1 -0
- package/src/dex/algebra/algebra-e2e.test.ts +22 -0
- package/src/dex/algebra/algebra-factory.ts +8 -1
- package/src/dex/algebra/algebra-pool-v1_1.ts +10 -2
- package/src/dex/algebra/algebra-pool-v1_9.ts +7 -0
- package/src/dex/algebra/algebra-pool-v1_9_bidirectional_fee.ts +55 -0
- package/src/dex/algebra/algebra.ts +28 -14
- package/src/dex/algebra/config.ts +4 -0
- package/src/dex/algebra/types.ts +1 -1
- package/src/dex/angle-staked-stable/angle-staked-stable-e2e.test.ts +146 -0
- package/src/dex/angle-staked-stable/angle-staked-stable-events.test.ts +95 -0
- package/src/dex/angle-staked-stable/angle-staked-stable-integration.test.ts +476 -0
- package/src/dex/angle-staked-stable/angle-staked-stable-pool.ts +325 -0
- package/src/dex/angle-staked-stable/angle-staked-stable.ts +351 -0
- package/src/dex/angle-staked-stable/config.ts +139 -0
- package/src/dex/angle-staked-stable/types.ts +16 -0
- package/src/dex/bProtocol/bProtocol.ts +8 -0
- package/src/dex/balancer-v1/balancer-v1.ts +9 -0
- package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +94 -0
- package/src/dex/balancer-v2/balancer-v2-gyro3.test.ts +268 -0
- package/src/dex/balancer-v2/balancer-v2-gyroE.test.ts +401 -0
- package/src/dex/balancer-v2/balancer-v2-integration.test.ts +253 -112
- package/src/dex/balancer-v2/balancer-v2.ts +203 -143
- package/src/dex/balancer-v2/pools/gyro/Gyro3Pool.ts +255 -0
- package/src/dex/balancer-v2/pools/gyro/GyroEPool.ts +403 -0
- package/src/dex/balancer-v2/pools/gyro/gyro-helpers.ts +15 -0
- package/src/dex/balancer-v2/queryOnChain.ts +48 -0
- package/src/dex/balancer-v2/types.ts +45 -1
- package/src/dex/balancer-v2/utils.ts +16 -0
- package/src/dex/bancor/bancor.ts +8 -0
- package/src/dex/camelot/camelot.ts +1 -0
- package/src/dex/compound/compound.ts +1 -0
- package/src/dex/curve-v1/curve-v1.ts +1 -0
- package/src/dex/curve-v1-factory/config.ts +128 -11
- package/src/dex/curve-v1-factory/curve-v1-factory-e2e.test.ts +122 -1
- package/src/dex/curve-v1-factory/curve-v1-factory-integration.test.ts +392 -0
- package/src/dex/curve-v1-factory/curve-v1-factory.ts +62 -39
- package/src/dex/curve-v1-factory/curve-v1-pool-manager.ts +1 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/_calc_withdraw_one_coin.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/_dynamic_fee.ts +6 -2
- package/src/dex/curve-v1-factory/price-handlers/functions/_rates.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/_xp.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/_xp_mem.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/calc_token_amount.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/calc_withdraw_one_coin.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/constants.ts +11 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/get_D.ts +59 -1
- package/src/dex/curve-v1-factory/price-handlers/functions/get_D_mem.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/get_D_precisions.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/get_dy.ts +51 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/get_dy_underlying.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/get_y.ts +68 -1
- package/src/dex/curve-v1-factory/price-handlers/functions/get_y_D.ts +2 -0
- package/src/dex/curve-v1-factory/price-handlers/functions/utils.ts +4 -0
- package/src/dex/curve-v1-factory/price-handlers/types.ts +8 -1
- package/src/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.ts +71 -18
- package/src/dex/curve-v1-factory/state-polling-pools/pool-polling-base.ts +1 -0
- package/src/dex/curve-v1-factory/types.ts +12 -1
- package/src/dex/curve-v2/curve-v2.ts +1 -0
- package/src/dex/dexalot/config.ts +7 -0
- package/src/dex/dexalot/dexalot-e2e.test.ts +23 -1
- package/src/dex/dexalot/dexalot-integration.test.ts +121 -0
- package/src/dex/dexalot/dexalot.ts +2 -0
- package/src/dex/dodo-v1/dodo-v1.ts +9 -0
- package/src/dex/dodo-v2.ts +9 -0
- package/src/dex/etherfi.ts +239 -0
- package/src/dex/generic-rfq/generic-rfq.ts +4 -2
- package/src/dex/generic-rfq/rate-fetcher.ts +2 -0
- package/src/dex/generic-rfq/types.ts +1 -0
- package/src/dex/gmx/gmx.ts +8 -0
- package/src/dex/hashflow/constants.ts +32 -0
- package/src/dex/hashflow/hashflow.ts +126 -20
- package/src/dex/hashflow/types.ts +20 -2
- package/src/dex/idex.ts +2 -1
- package/src/dex/index.ts +12 -2
- package/src/dex/jarvis-v6/jarvis-v6.ts +1 -0
- package/src/dex/jarvis.ts +14 -0
- package/src/dex/kyberdmm/kyberdmm.ts +9 -0
- package/src/dex/lido/lido-e2e.test.ts +10 -0
- package/src/dex/lido/lido.ts +25 -2
- package/src/dex/maker-psm/maker-psm.ts +1 -0
- package/src/dex/maverick-v1/maverick-v1.ts +9 -0
- package/src/dex/nerve/nerve.ts +8 -0
- package/src/dex/onebit/onebit.ts +8 -0
- package/src/dex/pancakeswap-v3/config.ts +32 -0
- package/src/dex/pancakeswap-v3/pancakeswap-v3-e2e.test.ts +21 -0
- package/src/dex/pancakeswap-v3/pancakeswap-v3-factory.ts +8 -1
- package/src/dex/pancakeswap-v3/pancakeswap-v3-pool.ts +8 -0
- package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +27 -13
- package/src/dex/paraswap-limit-orders/paraswap-limit-orders.ts +1 -0
- package/src/dex/platypus/platypus.ts +20 -3
- package/src/dex/polygon-migrator/polygon-migrator.ts +1 -0
- package/src/dex/quick-perps/quick-perps.ts +11 -1
- package/src/dex/simple-exchange.ts +0 -4
- package/src/dex/smoothy/smoothy.ts +1 -0
- package/src/dex/solidly/config.ts +14 -0
- package/src/dex/solidly/forks-override/pharaohV1.ts +10 -0
- package/src/dex/solidly/solidly-e2e.test.ts +21 -0
- package/src/dex/solidly/solidly-integration.test.ts +143 -0
- package/src/dex/solidly/solidly.ts +2 -0
- package/src/dex/solidly-v3/config.ts +15 -1
- package/src/dex/solidly-v3/solidly-v3-e2e.test.ts +33 -0
- package/src/dex/solidly-v3/solidly-v3-factory.ts +8 -1
- package/src/dex/solidly-v3/solidly-v3-pool.ts +8 -0
- package/src/dex/solidly-v3/solidly-v3.ts +8 -16
- package/src/dex/solidly-v3/types.ts +0 -1
- package/src/dex/spark/config.ts +25 -0
- package/src/dex/spark/constants.ts +2 -0
- package/src/dex/spark/scripts/validate-state.ts +144 -0
- package/src/dex/spark/spark-e2e.test.ts +96 -0
- package/src/dex/spark/spark-events.test.ts +102 -0
- package/src/dex/spark/spark-integration.test.ts +151 -0
- package/src/dex/spark/spark-sdai-pool.ts +114 -0
- package/src/dex/spark/spark.ts +284 -0
- package/src/dex/spark/types.ts +23 -0
- package/src/dex/spark/utils.ts +47 -0
- package/src/dex/stable-pool/stable-pool.ts +8 -0
- package/src/dex/swaap-v1/swaap-v1.ts +9 -0
- package/src/dex/swaap-v2/swaap-v2.ts +1 -0
- package/src/dex/swell/config.ts +2 -0
- package/src/dex/swell/rsweth-pool.ts +58 -0
- package/src/dex/swell/swell-e2e.test.ts +33 -31
- package/src/dex/swell/swell.ts +88 -35
- package/src/dex/swell/sweth-pool.ts +2 -2
- package/src/dex/swell/type.ts +4 -0
- package/src/dex/swell/utils.ts +26 -2
- package/src/dex/synthetix/synthetix-state.ts +2 -2
- package/src/dex/synthetix/synthetix.ts +11 -0
- package/src/dex/trader-joe-v2.1/trader-joe-v2.1.ts +9 -0
- package/src/dex/uniswap-v2/config.ts +58 -0
- package/src/dex/uniswap-v2/types.ts +2 -2
- package/src/dex/uniswap-v2/uniswap-v2-e2e-base.test.ts +48 -0
- package/src/dex/uniswap-v2/uniswap-v2.ts +2 -1
- package/src/dex/uniswap-v3/config.ts +112 -3
- package/src/dex/uniswap-v3/forks/velodrome-slipstream/utils.ts +65 -0
- package/src/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-factory.ts +16 -0
- package/src/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.ts +197 -0
- package/src/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.ts +237 -0
- package/src/dex/uniswap-v3/types.ts +6 -2
- package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +184 -3
- package/src/dex/uniswap-v3/uniswap-v3-factory.ts +8 -1
- package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +741 -6
- package/src/dex/uniswap-v3/uniswap-v3-pool.ts +17 -9
- package/src/dex/uniswap-v3/uniswap-v3.ts +204 -121
- package/src/dex/uniswap-v3.ts +9 -0
- package/src/dex/weth/weth-e2e-v6.test.ts +117 -0
- package/src/dex/weth/weth.ts +1 -0
- package/src/dex/wombat/wombat.ts +9 -0
- package/src/dex/woo-fi-v2/config.ts +16 -16
- package/src/dex/woo-fi-v2/woo-fi-v2.ts +5 -0
- package/src/dex/wsteth/wsteth.ts +13 -4
- package/src/dex/zerox/index.ts +1 -0
- package/src/executor/Executor01BytecodeBuilder.ts +69 -29
- package/src/executor/Executor02BytecodeBuilder.ts +99 -44
- package/src/executor/Executor03BytecodeBuilder.ts +52 -33
- package/src/executor/ExecutorBytecodeBuilder.ts +57 -18
- package/src/executor/ExecutorDetector.ts +14 -0
- package/src/executor/WETHBytecodeBuilder.ts +57 -0
- package/src/executor/constants.ts +8 -2
- package/src/executor/executor01-bytecode-builder-e2e.test.ts +39 -0
- package/src/executor/executor02-bytecode-builder-e2e.test.ts +35 -0
- package/src/executor/types.ts +1 -0
- package/src/executor/utils.ts +44 -0
- package/src/generic-swap-transaction-builder.ts +14 -4
- package/src/implementations/local-paraswap-sdk.ts +1 -1
- package/src/stateful-event-subscriber.ts +13 -1
- package/src/types.ts +3 -0
- package/tests/constants-e2e.ts +233 -12
- package/tests/utils-e2e.ts +82 -2
- package/tests/debug-price-route.json +0 -87
|
@@ -9,7 +9,11 @@ import { DexExchangeBuildParam, DexExchangeParam } from '../types';
|
|
|
9
9
|
import { Executors, Flag, SpecialDex } from './types';
|
|
10
10
|
import { isETHAddress } from '../utils';
|
|
11
11
|
import { DepositWithdrawReturn } from '../dex/weth/types';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
DexCallDataParams,
|
|
14
|
+
ExecutorBytecodeBuilder,
|
|
15
|
+
SingleSwapCallDataParams,
|
|
16
|
+
} from './ExecutorBytecodeBuilder';
|
|
13
17
|
import {
|
|
14
18
|
BYTES_64_LENGTH,
|
|
15
19
|
NOT_EXISTING_EXCHANGE_PARAM_INDEX,
|
|
@@ -18,6 +22,7 @@ import {
|
|
|
18
22
|
ZEROS_20_BYTES,
|
|
19
23
|
ZEROS_28_BYTES,
|
|
20
24
|
ZEROS_4_BYTES,
|
|
25
|
+
DEFAULT_RETURN_AMOUNT_POS,
|
|
21
26
|
} from './constants';
|
|
22
27
|
import { assert } from 'ts-essentials';
|
|
23
28
|
|
|
@@ -25,10 +30,25 @@ const {
|
|
|
25
30
|
utils: { hexlify, hexDataLength, hexConcat, hexZeroPad, solidityPack },
|
|
26
31
|
} = ethers;
|
|
27
32
|
|
|
33
|
+
export type Executor02SingleSwapCallDataParams = {
|
|
34
|
+
routeIndex: number;
|
|
35
|
+
swapIndex: number;
|
|
36
|
+
wrapToSwapMap: { [key: number]: boolean };
|
|
37
|
+
wrapToSwapExchangeMap: { [key: string]: boolean };
|
|
38
|
+
swap: OptimalSwap;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export type Executor02DexCallDataParams = {
|
|
42
|
+
swapExchange: OptimalSwapExchange<any>;
|
|
43
|
+
};
|
|
44
|
+
|
|
28
45
|
/**
|
|
29
46
|
* Class to build bytecode for Executor02 - simpleSwap with N DEXs (VERTICAL_BRANCH), multiSwaps (VERTICAL_BRANCH_HORIZONTAL_SEQUENCE) and megaswaps (NESTED_VERTICAL_BRANCH_HORIZONTAL_SEQUENCE)
|
|
30
47
|
*/
|
|
31
|
-
export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder
|
|
48
|
+
export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder<
|
|
49
|
+
Executor02SingleSwapCallDataParams,
|
|
50
|
+
Executor02DexCallDataParams
|
|
51
|
+
> {
|
|
32
52
|
type = Executors.TWO;
|
|
33
53
|
/**
|
|
34
54
|
* Executor02 Flags:
|
|
@@ -64,6 +84,7 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
64
84
|
specialDexFlag,
|
|
65
85
|
specialDexSupportsInsertFromAmount,
|
|
66
86
|
swappedAmountNotPresentInExchangeData,
|
|
87
|
+
preSwapUnwrapCalldata,
|
|
67
88
|
} = exchangeParam;
|
|
68
89
|
|
|
69
90
|
const needWrap = needWrapNative && isEthSrc && maybeWethCallData?.deposit;
|
|
@@ -95,6 +116,13 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
95
116
|
: Flag.INSERT_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP; // 8 or 11
|
|
96
117
|
}
|
|
97
118
|
|
|
119
|
+
// Actual srcToken is eth, because we'll unwrap weth before swap.
|
|
120
|
+
// Need to check balance, some dexes don't have 1:1 ETH -> custom_ETH rate
|
|
121
|
+
if (preSwapUnwrapCalldata) {
|
|
122
|
+
dexFlag =
|
|
123
|
+
Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP;
|
|
124
|
+
}
|
|
125
|
+
|
|
98
126
|
return {
|
|
99
127
|
dexFlag,
|
|
100
128
|
approveFlag,
|
|
@@ -147,6 +175,7 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
147
175
|
swappedAmountNotPresentInExchangeData,
|
|
148
176
|
wethAddress,
|
|
149
177
|
sendEthButSupportsInsertFromAmount,
|
|
178
|
+
preSwapUnwrapCalldata,
|
|
150
179
|
} = exchangeParam;
|
|
151
180
|
|
|
152
181
|
const isEthSrc = isETHAddress(srcToken);
|
|
@@ -217,6 +246,13 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
217
246
|
: Flag.INSERT_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP; // 3
|
|
218
247
|
}
|
|
219
248
|
|
|
249
|
+
// Actual srcToken is eth, because we'll unwrap weth before swap.
|
|
250
|
+
// Need to check balance, some dexes don't have 1:1 ETH -> custom_ETH rate
|
|
251
|
+
if (preSwapUnwrapCalldata) {
|
|
252
|
+
dexFlag =
|
|
253
|
+
Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP;
|
|
254
|
+
}
|
|
255
|
+
|
|
220
256
|
return {
|
|
221
257
|
dexFlag,
|
|
222
258
|
approveFlag,
|
|
@@ -224,21 +260,27 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
224
260
|
}
|
|
225
261
|
|
|
226
262
|
protected buildDexCallData(
|
|
227
|
-
|
|
228
|
-
routeIndex: number,
|
|
229
|
-
swapIndex: number,
|
|
230
|
-
swapExchangeIndex: number,
|
|
231
|
-
exchangeParams: DexExchangeBuildParam[],
|
|
232
|
-
exchangeParamIndex: number,
|
|
233
|
-
isLastSwap: boolean,
|
|
234
|
-
flag: Flag,
|
|
235
|
-
swapExchange: OptimalSwapExchange<any>,
|
|
263
|
+
params: DexCallDataParams<Executor02DexCallDataParams>,
|
|
236
264
|
): string {
|
|
265
|
+
const {
|
|
266
|
+
priceRoute,
|
|
267
|
+
exchangeParamIndex,
|
|
268
|
+
swapExchange,
|
|
269
|
+
exchangeParams,
|
|
270
|
+
routeIndex,
|
|
271
|
+
swapIndex,
|
|
272
|
+
flag,
|
|
273
|
+
} = params;
|
|
274
|
+
|
|
237
275
|
const swap = priceRoute.bestRoute[routeIndex].swaps[swapIndex];
|
|
238
276
|
const exchangeParam = exchangeParams[exchangeParamIndex];
|
|
239
277
|
let { exchangeData, specialDexFlag, targetExchange, needWrapNative } =
|
|
240
278
|
exchangeParam;
|
|
241
279
|
|
|
280
|
+
const returnAmountPos =
|
|
281
|
+
exchangeParam.returnAmountPos !== undefined
|
|
282
|
+
? exchangeParam.returnAmountPos
|
|
283
|
+
: DEFAULT_RETURN_AMOUNT_POS;
|
|
242
284
|
const applyVerticalBranching = this.doesSwapNeedToApplyVerticalBranching(
|
|
243
285
|
priceRoute,
|
|
244
286
|
routeIndex,
|
|
@@ -306,6 +348,8 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
306
348
|
destTokenPos,
|
|
307
349
|
specialDexFlag || SpecialDex.DEFAULT,
|
|
308
350
|
flag,
|
|
351
|
+
undefined,
|
|
352
|
+
returnAmountPos,
|
|
309
353
|
);
|
|
310
354
|
}
|
|
311
355
|
|
|
@@ -510,19 +554,27 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
510
554
|
|
|
511
555
|
const curExchangeParam = exchangeParams[exchangeParamIndex];
|
|
512
556
|
|
|
513
|
-
const dexCallData = this.buildDexCallData(
|
|
557
|
+
const dexCallData = this.buildDexCallData({
|
|
514
558
|
priceRoute,
|
|
515
559
|
routeIndex,
|
|
516
560
|
swapIndex,
|
|
517
561
|
swapExchangeIndex,
|
|
518
562
|
exchangeParams,
|
|
519
563
|
exchangeParamIndex,
|
|
520
|
-
false,
|
|
521
|
-
flags.dexes[exchangeParamIndex],
|
|
564
|
+
isLastSwap: false,
|
|
565
|
+
flag: flags.dexes[exchangeParamIndex],
|
|
522
566
|
swapExchange,
|
|
523
|
-
);
|
|
567
|
+
});
|
|
524
568
|
|
|
525
|
-
|
|
569
|
+
if (curExchangeParam.preSwapUnwrapCalldata) {
|
|
570
|
+
const withdrawCallData = this.buildUnwrapEthCallData(
|
|
571
|
+
this.getWETHAddress(curExchangeParam),
|
|
572
|
+
curExchangeParam.preSwapUnwrapCalldata,
|
|
573
|
+
);
|
|
574
|
+
swapExchangeCallData = hexConcat([withdrawCallData, dexCallData]);
|
|
575
|
+
} else {
|
|
576
|
+
swapExchangeCallData = hexConcat([dexCallData]);
|
|
577
|
+
}
|
|
526
578
|
|
|
527
579
|
const isLastSwap =
|
|
528
580
|
swapIndex === priceRoute.bestRoute[routeIndex].swaps.length - 1;
|
|
@@ -546,7 +598,7 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
546
598
|
}
|
|
547
599
|
|
|
548
600
|
if (
|
|
549
|
-
!isETHAddress(swap
|
|
601
|
+
!isETHAddress(swap.srcToken) &&
|
|
550
602
|
!curExchangeParam.transferSrcTokenBeforeSwap &&
|
|
551
603
|
curExchangeParam.approveData
|
|
552
604
|
) {
|
|
@@ -560,7 +612,7 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
560
612
|
}
|
|
561
613
|
|
|
562
614
|
if (curExchangeParam.needWrapNative) {
|
|
563
|
-
if (isETHAddress(swap
|
|
615
|
+
if (isETHAddress(swap.srcToken)) {
|
|
564
616
|
let approveWethCalldata = '0x';
|
|
565
617
|
if (
|
|
566
618
|
curExchangeParam.approveData &&
|
|
@@ -963,7 +1015,7 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
963
1015
|
flag = Flag.INSERT_FROM_AMOUNT_DONT_CHECK_BALANCE_AFTER_SWAP; // 3
|
|
964
1016
|
}
|
|
965
1017
|
} else {
|
|
966
|
-
const isEthDest = isETHAddress(swap
|
|
1018
|
+
const isEthDest = isETHAddress(swap.destToken);
|
|
967
1019
|
|
|
968
1020
|
if (isEthDest) {
|
|
969
1021
|
if (
|
|
@@ -982,36 +1034,38 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
982
1034
|
}
|
|
983
1035
|
|
|
984
1036
|
protected buildSingleSwapCallData(
|
|
985
|
-
|
|
986
|
-
exchangeParams: DexExchangeBuildParam[],
|
|
987
|
-
routeIndex: number,
|
|
988
|
-
swapIndex: number,
|
|
989
|
-
flags: { approves: Flag[]; dexes: Flag[]; wrap: Flag },
|
|
990
|
-
sender: string,
|
|
991
|
-
appendedWrapToSwapMap: { [key: number]: boolean },
|
|
992
|
-
addedWrapToSwapExchangeMap: { [key: string]: boolean },
|
|
993
|
-
maybeWethCallData?: DepositWithdrawReturn,
|
|
994
|
-
swap?: OptimalSwap,
|
|
1037
|
+
params: SingleSwapCallDataParams<Executor02SingleSwapCallDataParams>,
|
|
995
1038
|
): string {
|
|
1039
|
+
const {
|
|
1040
|
+
priceRoute,
|
|
1041
|
+
exchangeParams,
|
|
1042
|
+
routeIndex,
|
|
1043
|
+
swapIndex,
|
|
1044
|
+
flags,
|
|
1045
|
+
maybeWethCallData,
|
|
1046
|
+
wrapToSwapMap,
|
|
1047
|
+
wrapToSwapExchangeMap,
|
|
1048
|
+
swap,
|
|
1049
|
+
} = params;
|
|
996
1050
|
const isLastSwap =
|
|
997
1051
|
swapIndex === priceRoute.bestRoute[routeIndex].swaps.length - 1;
|
|
998
1052
|
const isMegaSwap = priceRoute.bestRoute.length > 1;
|
|
999
1053
|
const isMultiSwap =
|
|
1000
1054
|
!isMegaSwap && priceRoute.bestRoute[routeIndex].swaps.length > 1;
|
|
1001
1055
|
|
|
1002
|
-
const { swapExchanges } = swap
|
|
1056
|
+
const { swapExchanges } = swap;
|
|
1003
1057
|
|
|
1004
1058
|
const applyVerticalBranching = this.doesSwapNeedToApplyVerticalBranching(
|
|
1005
1059
|
priceRoute,
|
|
1006
1060
|
routeIndex,
|
|
1007
|
-
swap
|
|
1061
|
+
swap,
|
|
1008
1062
|
);
|
|
1009
1063
|
|
|
1010
1064
|
const anyDexOnSwapDoesntNeedWrapNative =
|
|
1011
|
-
this.anyDexOnSwapDoesntNeedWrapNative(priceRoute, swap
|
|
1065
|
+
this.anyDexOnSwapDoesntNeedWrapNative(priceRoute, swap, exchangeParams);
|
|
1012
1066
|
|
|
1013
1067
|
const needToAppendWrapCallData =
|
|
1014
|
-
isETHAddress(swap
|
|
1068
|
+
isETHAddress(swap.destToken) &&
|
|
1015
1069
|
anyDexOnSwapDoesntNeedWrapNative &&
|
|
1016
1070
|
!isLastSwap &&
|
|
1017
1071
|
maybeWethCallData?.deposit;
|
|
@@ -1027,11 +1081,11 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
1027
1081
|
swapExchangeIndex,
|
|
1028
1082
|
exchangeParams,
|
|
1029
1083
|
flags,
|
|
1030
|
-
|
|
1031
|
-
!
|
|
1032
|
-
|
|
1084
|
+
wrapToSwapExchangeMap,
|
|
1085
|
+
!wrapToSwapMap[swapIndex - 1],
|
|
1086
|
+
wrapToSwapMap[swapIndex - 1],
|
|
1033
1087
|
maybeWethCallData,
|
|
1034
|
-
swap
|
|
1088
|
+
swap.swapExchanges.length > 1,
|
|
1035
1089
|
applyVerticalBranching,
|
|
1036
1090
|
),
|
|
1037
1091
|
]);
|
|
@@ -1040,7 +1094,7 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
1040
1094
|
);
|
|
1041
1095
|
|
|
1042
1096
|
if (needToAppendWrapCallData) {
|
|
1043
|
-
|
|
1097
|
+
wrapToSwapMap[swapIndex] = true;
|
|
1044
1098
|
}
|
|
1045
1099
|
|
|
1046
1100
|
if (!isMultiSwap && !isMegaSwap) {
|
|
@@ -1054,11 +1108,11 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
1054
1108
|
priceRoute,
|
|
1055
1109
|
routeIndex,
|
|
1056
1110
|
exchangeParams,
|
|
1057
|
-
swap
|
|
1111
|
+
swap,
|
|
1058
1112
|
swapCallData,
|
|
1059
1113
|
this.buildVerticalBranchingFlag(
|
|
1060
1114
|
priceRoute,
|
|
1061
|
-
swap
|
|
1115
|
+
swap,
|
|
1062
1116
|
exchangeParams,
|
|
1063
1117
|
routeIndex,
|
|
1064
1118
|
swapIndex,
|
|
@@ -1098,18 +1152,19 @@ export class Executor02BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
1098
1152
|
(swapAcc, swap, swapIndex) =>
|
|
1099
1153
|
hexConcat([
|
|
1100
1154
|
swapAcc,
|
|
1101
|
-
this.buildSingleSwapCallData(
|
|
1155
|
+
this.buildSingleSwapCallData({
|
|
1102
1156
|
priceRoute,
|
|
1103
1157
|
exchangeParams,
|
|
1104
1158
|
routeIndex,
|
|
1105
1159
|
swapIndex,
|
|
1106
1160
|
flags,
|
|
1107
1161
|
sender,
|
|
1108
|
-
appendedWrapToSwapExchangeMap,
|
|
1109
|
-
addedWrapToSwapMap,
|
|
1162
|
+
wrapToSwapExchangeMap: appendedWrapToSwapExchangeMap,
|
|
1163
|
+
wrapToSwapMap: addedWrapToSwapMap,
|
|
1110
1164
|
maybeWethCallData,
|
|
1111
1165
|
swap,
|
|
1112
|
-
|
|
1166
|
+
index: 0,
|
|
1167
|
+
}),
|
|
1113
1168
|
]),
|
|
1114
1169
|
'0x',
|
|
1115
1170
|
);
|
|
@@ -9,18 +9,34 @@ import {
|
|
|
9
9
|
import { isETHAddress } from '../utils';
|
|
10
10
|
import { DepositWithdrawReturn } from '../dex/weth/types';
|
|
11
11
|
import { Executors, Flag, SpecialDex } from './types';
|
|
12
|
-
import { BYTES_96_LENGTH
|
|
13
|
-
import {
|
|
12
|
+
import { BYTES_96_LENGTH } from './constants';
|
|
13
|
+
import {
|
|
14
|
+
DexCallDataParams,
|
|
15
|
+
ExecutorBytecodeBuilder,
|
|
16
|
+
SingleSwapCallDataParams,
|
|
17
|
+
} from './ExecutorBytecodeBuilder';
|
|
14
18
|
import { assert } from 'ts-essentials';
|
|
15
19
|
|
|
16
20
|
const {
|
|
17
21
|
utils: { hexlify, hexDataLength, hexConcat, hexZeroPad, solidityPack },
|
|
18
22
|
} = ethers;
|
|
19
23
|
|
|
24
|
+
export type Executor03SingleSwapCallDataParams = {
|
|
25
|
+
swap: OptimalSwap;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type Executor03DexCallDataParams = {
|
|
29
|
+
swapExchange?: OptimalSwapExchange<any>;
|
|
30
|
+
maybeWethCallData?: DepositWithdrawReturn;
|
|
31
|
+
};
|
|
32
|
+
|
|
20
33
|
/**
|
|
21
34
|
* Class to build bytecode for Executor03 - simpleSwap (SINGLE_STEP) with 100% on a path and multiSwap with 100% amounts on each path (HORIZONTAL_SEQUENCE)
|
|
22
35
|
*/
|
|
23
|
-
export class Executor03BytecodeBuilder extends ExecutorBytecodeBuilder
|
|
36
|
+
export class Executor03BytecodeBuilder extends ExecutorBytecodeBuilder<
|
|
37
|
+
Executor03SingleSwapCallDataParams,
|
|
38
|
+
Executor03DexCallDataParams
|
|
39
|
+
> {
|
|
24
40
|
type = Executors.THREE;
|
|
25
41
|
/**
|
|
26
42
|
* Executor03 Flags:
|
|
@@ -98,30 +114,33 @@ export class Executor03BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
98
114
|
}
|
|
99
115
|
|
|
100
116
|
protected buildSingleSwapCallData(
|
|
101
|
-
|
|
102
|
-
exchangeParams: DexExchangeBuildParam[],
|
|
103
|
-
index: number,
|
|
104
|
-
flags: { approves: Flag[]; dexes: Flag[]; wrap: Flag },
|
|
105
|
-
sender: string,
|
|
106
|
-
maybeWethCallData: DepositWithdrawReturn | undefined,
|
|
107
|
-
swap: OptimalSwap,
|
|
117
|
+
params: SingleSwapCallDataParams<Executor03SingleSwapCallDataParams>,
|
|
108
118
|
): string {
|
|
119
|
+
const {
|
|
120
|
+
priceRoute,
|
|
121
|
+
exchangeParams,
|
|
122
|
+
index,
|
|
123
|
+
flags,
|
|
124
|
+
maybeWethCallData,
|
|
125
|
+
swap,
|
|
126
|
+
} = params;
|
|
127
|
+
if (!swap) throw new Error('Swap is not provided for single swap calldata');
|
|
128
|
+
|
|
109
129
|
let swapCallData = '';
|
|
110
130
|
|
|
111
131
|
const curExchangeParam = exchangeParams[index];
|
|
112
132
|
|
|
113
|
-
const dexCallData = this.buildDexCallData(
|
|
133
|
+
const dexCallData = this.buildDexCallData({
|
|
114
134
|
priceRoute,
|
|
115
|
-
0,
|
|
116
|
-
0,
|
|
117
|
-
index,
|
|
135
|
+
routeIndex: 0,
|
|
136
|
+
swapIndex: 0,
|
|
137
|
+
swapExchangeIndex: index,
|
|
118
138
|
exchangeParams,
|
|
119
|
-
index,
|
|
120
|
-
true,
|
|
121
|
-
flags.dexes[index],
|
|
122
|
-
undefined,
|
|
139
|
+
exchangeParamIndex: index,
|
|
140
|
+
isLastSwap: true,
|
|
141
|
+
flag: flags.dexes[index],
|
|
123
142
|
maybeWethCallData,
|
|
124
|
-
);
|
|
143
|
+
});
|
|
125
144
|
|
|
126
145
|
swapCallData = hexConcat([dexCallData]);
|
|
127
146
|
|
|
@@ -220,17 +239,17 @@ export class Executor03BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
220
239
|
}
|
|
221
240
|
|
|
222
241
|
protected buildDexCallData(
|
|
223
|
-
|
|
224
|
-
routeIndex: number,
|
|
225
|
-
swapIndex: number,
|
|
226
|
-
swapExchangeIndex: number,
|
|
227
|
-
exchangeParams: DexExchangeBuildParam[],
|
|
228
|
-
exchangeParamIndex: number,
|
|
229
|
-
isLastSwap: boolean,
|
|
230
|
-
flag: Flag,
|
|
231
|
-
_?: OptimalSwapExchange<any>,
|
|
232
|
-
maybeWethCalldata?: DepositWithdrawReturn,
|
|
242
|
+
params: DexCallDataParams<Executor03DexCallDataParams>,
|
|
233
243
|
): string {
|
|
244
|
+
const {
|
|
245
|
+
priceRoute,
|
|
246
|
+
routeIndex,
|
|
247
|
+
swapIndex,
|
|
248
|
+
exchangeParams,
|
|
249
|
+
exchangeParamIndex,
|
|
250
|
+
flag,
|
|
251
|
+
maybeWethCallData,
|
|
252
|
+
} = params;
|
|
234
253
|
const dontCheckBalanceAfterSwap = flag % 3 === 0;
|
|
235
254
|
const checkDestTokenBalanceAfterSwap = flag % 3 === 2;
|
|
236
255
|
|
|
@@ -254,7 +273,7 @@ export class Executor03BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
254
273
|
if (
|
|
255
274
|
isETHAddress(swap.destToken) &&
|
|
256
275
|
exchangeParam.needWrapNative &&
|
|
257
|
-
|
|
276
|
+
maybeWethCallData?.withdraw
|
|
258
277
|
) {
|
|
259
278
|
exchangeData = this.addTokenAddressToCallData(
|
|
260
279
|
exchangeData,
|
|
@@ -354,15 +373,15 @@ export class Executor03BytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
|
354
373
|
(acc, ep, index) =>
|
|
355
374
|
hexConcat([
|
|
356
375
|
acc,
|
|
357
|
-
this.buildSingleSwapCallData(
|
|
376
|
+
this.buildSingleSwapCallData({
|
|
358
377
|
priceRoute,
|
|
359
378
|
exchangeParams,
|
|
360
379
|
index,
|
|
361
380
|
flags,
|
|
362
381
|
sender,
|
|
363
382
|
maybeWethCallData,
|
|
364
|
-
swapWithOrderedExchanges,
|
|
365
|
-
),
|
|
383
|
+
swap: swapWithOrderedExchanges,
|
|
384
|
+
}),
|
|
366
385
|
]),
|
|
367
386
|
'0x',
|
|
368
387
|
);
|
|
@@ -30,7 +30,27 @@ const {
|
|
|
30
30
|
utils: { hexlify, hexDataLength, hexConcat, hexZeroPad, solidityPack },
|
|
31
31
|
} = ethers;
|
|
32
32
|
|
|
33
|
-
export
|
|
33
|
+
export type SingleSwapCallDataParams<T> = {
|
|
34
|
+
priceRoute: OptimalRate;
|
|
35
|
+
exchangeParams: DexExchangeBuildParam[];
|
|
36
|
+
index: number;
|
|
37
|
+
flags: { approves: Flag[]; dexes: Flag[]; wrap: Flag };
|
|
38
|
+
sender: string;
|
|
39
|
+
maybeWethCallData?: DepositWithdrawReturn;
|
|
40
|
+
} & T;
|
|
41
|
+
|
|
42
|
+
export type DexCallDataParams<T> = {
|
|
43
|
+
priceRoute: OptimalRate;
|
|
44
|
+
routeIndex: number;
|
|
45
|
+
swapIndex: number;
|
|
46
|
+
swapExchangeIndex: number;
|
|
47
|
+
exchangeParams: DexExchangeBuildParam[];
|
|
48
|
+
exchangeParamIndex: number;
|
|
49
|
+
isLastSwap: boolean;
|
|
50
|
+
flag: Flag;
|
|
51
|
+
} & T;
|
|
52
|
+
|
|
53
|
+
export abstract class ExecutorBytecodeBuilder<S = {}, D = {}> {
|
|
34
54
|
type!: Executors;
|
|
35
55
|
erc20Interface: Interface;
|
|
36
56
|
|
|
@@ -38,7 +58,7 @@ export abstract class ExecutorBytecodeBuilder {
|
|
|
38
58
|
this.erc20Interface = new Interface(ERC20ABI);
|
|
39
59
|
}
|
|
40
60
|
|
|
41
|
-
protected
|
|
61
|
+
protected buildSimpleSwapFlags(
|
|
42
62
|
priceRoute: OptimalRate,
|
|
43
63
|
exchangeParams: DexExchangeBuildParam[],
|
|
44
64
|
routeIndex: number,
|
|
@@ -46,9 +66,18 @@ export abstract class ExecutorBytecodeBuilder {
|
|
|
46
66
|
swapExchangeIndex: number,
|
|
47
67
|
exchangeParamIndex: number,
|
|
48
68
|
maybeWethCallData?: DepositWithdrawReturn,
|
|
49
|
-
): {
|
|
69
|
+
): {
|
|
70
|
+
dexFlag: Flag;
|
|
71
|
+
approveFlag: Flag;
|
|
72
|
+
} {
|
|
73
|
+
return {
|
|
74
|
+
dexFlag:
|
|
75
|
+
Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP,
|
|
76
|
+
approveFlag: 0,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
50
79
|
|
|
51
|
-
protected
|
|
80
|
+
protected buildMultiMegaSwapFlags(
|
|
52
81
|
priceRoute: OptimalRate,
|
|
53
82
|
exchangeParams: DexExchangeBuildParam[],
|
|
54
83
|
routeIndex: number,
|
|
@@ -56,7 +85,16 @@ export abstract class ExecutorBytecodeBuilder {
|
|
|
56
85
|
swapExchangeIndex: number,
|
|
57
86
|
exchangeParamIndex: number,
|
|
58
87
|
maybeWethCallData?: DepositWithdrawReturn,
|
|
59
|
-
): {
|
|
88
|
+
): {
|
|
89
|
+
dexFlag: Flag;
|
|
90
|
+
approveFlag: Flag;
|
|
91
|
+
} {
|
|
92
|
+
return {
|
|
93
|
+
dexFlag:
|
|
94
|
+
Flag.SEND_ETH_EQUAL_TO_FROM_AMOUNT_CHECK_SRC_TOKEN_BALANCE_AFTER_SWAP,
|
|
95
|
+
approveFlag: 0,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
60
98
|
|
|
61
99
|
public abstract buildByteCode(
|
|
62
100
|
priceRoute: OptimalRate,
|
|
@@ -67,18 +105,15 @@ export abstract class ExecutorBytecodeBuilder {
|
|
|
67
105
|
|
|
68
106
|
public abstract getAddress(): string;
|
|
69
107
|
|
|
70
|
-
protected
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
swapExchange?: OptimalSwapExchange<any>,
|
|
80
|
-
maybeWethCallData?: DepositWithdrawReturn,
|
|
81
|
-
): string;
|
|
108
|
+
protected buildSingleSwapCallData(
|
|
109
|
+
params: SingleSwapCallDataParams<S>,
|
|
110
|
+
): string {
|
|
111
|
+
return '0x';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
protected buildDexCallData(params: DexCallDataParams<D>): string {
|
|
115
|
+
return '0x';
|
|
116
|
+
}
|
|
82
117
|
|
|
83
118
|
protected buildApproveCallData(
|
|
84
119
|
spender: string,
|
|
@@ -193,6 +228,7 @@ export abstract class ExecutorBytecodeBuilder {
|
|
|
193
228
|
specialDexFlag: SpecialDex,
|
|
194
229
|
flag: Flag,
|
|
195
230
|
toAmountPos = 0,
|
|
231
|
+
returnAmountPos = DEFAULT_RETURN_AMOUNT_POS,
|
|
196
232
|
): string {
|
|
197
233
|
const builder =
|
|
198
234
|
this.type !== Executors.THREE
|
|
@@ -207,6 +243,7 @@ export abstract class ExecutorBytecodeBuilder {
|
|
|
207
243
|
specialDexFlag,
|
|
208
244
|
flag,
|
|
209
245
|
toAmountPos,
|
|
246
|
+
returnAmountPos,
|
|
210
247
|
);
|
|
211
248
|
}
|
|
212
249
|
|
|
@@ -217,13 +254,15 @@ export abstract class ExecutorBytecodeBuilder {
|
|
|
217
254
|
destTokenPos: number,
|
|
218
255
|
specialDexFlag: SpecialDex,
|
|
219
256
|
flag: Flag,
|
|
257
|
+
toAmountPos = 0, // not used for Executor01 and Executor02, just to follow the same interface
|
|
258
|
+
returnAmountPos = DEFAULT_RETURN_AMOUNT_POS,
|
|
220
259
|
) {
|
|
221
260
|
return solidityPack(EXECUTOR_01_02_FUNCTION_CALL_DATA_TYPES, [
|
|
222
261
|
tokenAddress, // token address
|
|
223
262
|
hexZeroPad(hexlify(hexDataLength(calldata) + BYTES_28_LENGTH), 4), // calldata length + bytes28(0)
|
|
224
263
|
hexZeroPad(hexlify(fromAmountPos), 2), // fromAmountPos
|
|
225
264
|
hexZeroPad(hexlify(destTokenPos), 2), // destTokenPos
|
|
226
|
-
hexZeroPad(hexlify(
|
|
265
|
+
hexZeroPad(hexlify(returnAmountPos), 1), // returnAmountPos
|
|
227
266
|
hexZeroPad(hexlify(specialDexFlag), 1), // special
|
|
228
267
|
hexZeroPad(hexlify(flag), 2), // flag
|
|
229
268
|
ZEROS_28_BYTES, // bytes28(0)
|
|
@@ -5,11 +5,13 @@ import { Executor01BytecodeBuilder } from './Executor01BytecodeBuilder';
|
|
|
5
5
|
import { Executor02BytecodeBuilder } from './Executor02BytecodeBuilder';
|
|
6
6
|
import { Executors, RouteExecutionType } from './types';
|
|
7
7
|
import { Executor03BytecodeBuilder } from './Executor03BytecodeBuilder';
|
|
8
|
+
import { WETHBytecodeBuilder, isSingleWrapRoute } from './WETHBytecodeBuilder';
|
|
8
9
|
|
|
9
10
|
export class ExecutorDetector {
|
|
10
11
|
private executor01BytecodeBuilder: ExecutorBytecodeBuilder;
|
|
11
12
|
private executor02BytecodeBuilder: ExecutorBytecodeBuilder;
|
|
12
13
|
private executor03BytecodeBuilder: ExecutorBytecodeBuilder;
|
|
14
|
+
private wethBytecodeBuilder: ExecutorBytecodeBuilder;
|
|
13
15
|
|
|
14
16
|
protected routeExecutionTypeToExecutorMap: Record<
|
|
15
17
|
SwapSide,
|
|
@@ -40,6 +42,8 @@ export class ExecutorDetector {
|
|
|
40
42
|
this.executor03BytecodeBuilder = new Executor03BytecodeBuilder(
|
|
41
43
|
this.dexHelper,
|
|
42
44
|
);
|
|
45
|
+
|
|
46
|
+
this.wethBytecodeBuilder = new WETHBytecodeBuilder(this.dexHelper);
|
|
43
47
|
}
|
|
44
48
|
|
|
45
49
|
protected getRouteExecutionType(priceRoute: OptimalRate): RouteExecutionType {
|
|
@@ -82,7 +86,15 @@ export class ExecutorDetector {
|
|
|
82
86
|
throw new Error('Route type is not supported yet');
|
|
83
87
|
}
|
|
84
88
|
|
|
89
|
+
detectSpecialExecutor(priceRoute: OptimalRate): Executors | null {
|
|
90
|
+
if (isSingleWrapRoute(priceRoute)) return Executors.WETH;
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
|
|
85
94
|
getExecutorByPriceRoute(priceRoute: OptimalRate): Executors {
|
|
95
|
+
const specialExecutor = this.detectSpecialExecutor(priceRoute);
|
|
96
|
+
if (specialExecutor) return specialExecutor;
|
|
97
|
+
|
|
86
98
|
const routeExecutionType = this.getRouteExecutionType(priceRoute);
|
|
87
99
|
const executorName =
|
|
88
100
|
this.routeExecutionTypeToExecutorMap[priceRoute.side][routeExecutionType];
|
|
@@ -110,6 +122,8 @@ export class ExecutorDetector {
|
|
|
110
122
|
return this.executor02BytecodeBuilder;
|
|
111
123
|
case Executors.THREE:
|
|
112
124
|
return this.executor03BytecodeBuilder;
|
|
125
|
+
case Executors.WETH:
|
|
126
|
+
return this.wethBytecodeBuilder;
|
|
113
127
|
default:
|
|
114
128
|
throw new Error(`${executorName} is not supported`);
|
|
115
129
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { DexExchangeBuildParam } from '../types';
|
|
2
|
+
import { OptimalRate, SwapSide } from '@paraswap/core';
|
|
3
|
+
import { isETHAddress } from '../utils';
|
|
4
|
+
import { DepositWithdrawReturn } from '../dex/weth/types';
|
|
5
|
+
import { WethConfig } from '../dex/weth/config';
|
|
6
|
+
import { Executors, Flag, SpecialDex } from './types';
|
|
7
|
+
import { ExecutorBytecodeBuilder } from './ExecutorBytecodeBuilder';
|
|
8
|
+
import { Network } from '../constants';
|
|
9
|
+
|
|
10
|
+
const SUPPORTED_NETWORKS = [
|
|
11
|
+
Network.MAINNET,
|
|
12
|
+
Network.AVALANCHE,
|
|
13
|
+
Network.BSC,
|
|
14
|
+
Network.BASE,
|
|
15
|
+
Network.POLYGON,
|
|
16
|
+
Network.OPTIMISM,
|
|
17
|
+
Network.ZKEVM,
|
|
18
|
+
];
|
|
19
|
+
const SUPPORTED_EXCHANGES = Object.keys(WethConfig);
|
|
20
|
+
|
|
21
|
+
export const isSingleWrapRoute = (priceRoute: OptimalRate): boolean => {
|
|
22
|
+
//note: FANTOM and ARBITRUM doesnt support fallback deposit case
|
|
23
|
+
|
|
24
|
+
const isSingleSwap =
|
|
25
|
+
priceRoute.bestRoute.length === 1 &&
|
|
26
|
+
priceRoute.bestRoute[0].swaps.length === 1 &&
|
|
27
|
+
priceRoute.bestRoute[0].swaps[0].swapExchanges.length === 1;
|
|
28
|
+
|
|
29
|
+
const { exchange } = priceRoute.bestRoute[0].swaps[0].swapExchanges[0];
|
|
30
|
+
|
|
31
|
+
const isWethExchange = SUPPORTED_EXCHANGES.includes(exchange);
|
|
32
|
+
const supportedNetwork = SUPPORTED_NETWORKS.includes(priceRoute.network);
|
|
33
|
+
|
|
34
|
+
const isWrap = isETHAddress(priceRoute.srcToken);
|
|
35
|
+
|
|
36
|
+
return supportedNetwork && isSingleSwap && isWethExchange && isWrap;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Class to build bytecode for WETH - simple optimisation for a single ETH->WETH Swap
|
|
41
|
+
*/
|
|
42
|
+
export class WETHBytecodeBuilder extends ExecutorBytecodeBuilder {
|
|
43
|
+
type = Executors.WETH;
|
|
44
|
+
|
|
45
|
+
public getAddress(): string {
|
|
46
|
+
return this.dexHelper.config.data.wrappedNativeTokenAddress;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
public buildByteCode(
|
|
50
|
+
priceRoute: OptimalRate,
|
|
51
|
+
exchangeParams: DexExchangeBuildParam[],
|
|
52
|
+
sender: string,
|
|
53
|
+
maybeWethCallData?: DepositWithdrawReturn,
|
|
54
|
+
): string {
|
|
55
|
+
return '0x';
|
|
56
|
+
}
|
|
57
|
+
}
|