@paraswap/dex-lib 2.48.2 → 2.48.4-etherfi.0
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/build/abi/algebra/AlgebraPool.abi.json +724 -724
- package/build/abi/etherfi/eETHPool.json +9 -0
- package/build/abi/etherfi/weETH.json +20 -0
- package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +191 -191
- package/build/abi/wombat/pool.json +1289 -0
- package/build/dex/algebra/algebra-pool.d.ts +37 -105
- package/build/dex/algebra/algebra-pool.js +322 -434
- package/build/dex/etherfi.d.ts +26 -0
- package/build/dex/etherfi.js +82 -0
- package/build/dex/etherfi.js.map +1 -0
- package/build/dex/index.js +2 -0
- package/build/dex/index.js.map +1 -1
- package/build/dex/solidly-v3/contract-math/Tick.js.map +1 -1
- package/build/dex/solidly-v3/contract-math/uniswap-v3-math.js +4 -4
- package/build/dex/solidly-v3/contract-math/uniswap-v3-math.js.map +1 -1
- package/build/dex/uniswap-v2/rebase-tokens.json +7 -0
- package/build/dex/uniswap-v3/config.js +20 -1
- package/build/dex/uniswap-v3/config.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.js +1 -0
- package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
- package/build/dex-helper/Cache.d.ts +31 -0
- package/build/dex-helper/Cache.js +106 -0
- package/build/dex-helper/Cache.js.map +1 -0
- package/build/dex-helper/RedisWrapper.d.ts +37 -0
- package/build/dex-helper/RedisWrapper.js +165 -0
- package/build/dex-helper/RedisWrapper.js.map +1 -0
- package/package.json +1 -1
- package/src/abi/etherfi/eETHPool.json +9 -0
- package/src/abi/etherfi/weETH.json +20 -0
- package/src/dex/etherfi.ts +144 -0
- package/src/dex/index.ts +2 -0
- package/src/dex/solidly-v3/contract-math/Tick.ts +1 -4
- package/src/dex/solidly-v3/contract-math/uniswap-v3-math.ts +6 -14
- package/src/dex/solidly-v3/solidly-v3-events.test.ts +9 -7
- package/src/dex/uniswap-v3/config.ts +22 -1
- package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +25 -0
- package/src/dex/uniswap-v3/uniswap-v3-integration.test.ts +147 -0
- package/src/dex/uniswap-v3/uniswap-v3.ts +1 -0
- package/.idea/aws.xml +0 -17
- package/.idea/codeStyles/Project.xml +0 -19
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/paraswap-dex-lib.iml +0 -9
- package/.idea/prettier.xml +0 -7
- package/.idea/vcs.xml +0 -6
- package/build/abi/AugustusV6.abi.json +0 -395
- package/build/abi/curve-v1/StableSwapFRXETH.json +0 -889
- package/build/abi/curve-v1/StableSwapWBETH.json +0 -1223
- package/build/abi/sushiswap-v3/QuoterV2.json +0 -267
- package/build/abi/sushiswap-v3/RouterProcessor3.json +0 -289
- package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +0 -285
- package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +0 -583
- package/build/abi/wBETH.json +0 -1527
- package/build/abi/woo-fi/WooFeeManager.abi.json +0 -318
- package/build/abi/woo-fi/WooPP.abi.json +0 -548
- package/build/abi/woo-fi/Wooracle.abi.json +0 -260
- package/build/dex/aave-v3/tokens/arbitrum.json +0 -50
- package/build/dex/aave-v3/tokens/avalanche.json +0 -74
- package/build/dex/aave-v3/tokens/fantom.json +0 -62
- package/build/dex/aave-v3/tokens/optimism.json +0 -50
- package/build/dex/aave-v3/tokens/polygon.json +0 -116
- package/build/dex/balancer-v2/Gyro3Pool.d.ts +0 -43
- package/build/dex/balancer-v2/Gyro3Pool.js +0 -160
- package/build/dex/balancer-v2/Gyro3Pool.js.map +0 -1
- package/build/dex/balancer-v2/LinearMath.d.ts +0 -88
- package/build/dex/balancer-v2/LinearMath.js +0 -285
- package/build/dex/balancer-v2/LinearMath.js.map +0 -1
- package/build/dex/balancer-v2/LinearPool.d.ts +0 -81
- package/build/dex/balancer-v2/LinearPool.js +0 -444
- package/build/dex/balancer-v2/LinearPool.js.map +0 -1
- package/build/dex/balancer-v2/PhantomStablePool.d.ts +0 -90
- package/build/dex/balancer-v2/PhantomStablePool.js +0 -418
- package/build/dex/balancer-v2/PhantomStablePool.js.map +0 -1
- package/build/dex/balancer-v2/StableMath.d.ts +0 -9
- package/build/dex/balancer-v2/StableMath.js +0 -272
- package/build/dex/balancer-v2/StableMath.js.map +0 -1
- package/build/dex/balancer-v2/balancer-v2-pool.d.ts +0 -140
- package/build/dex/balancer-v2/balancer-v2-pool.js +0 -647
- package/build/dex/balancer-v2/balancer-v2-pool.js.map +0 -1
- package/build/dex/curve-v1/pools/frxETHpool.d.ts +0 -7
- package/build/dex/curve-v1/pools/frxETHpool.js +0 -27
- package/build/dex/curve-v1/pools/frxETHpool.js.map +0 -1
- package/build/dex/curve-v1/pools/wbETHpool.d.ts +0 -29
- package/build/dex/curve-v1/pools/wbETHpool.js +0 -408
- package/build/dex/curve-v1/pools/wbETHpool.js.map +0 -1
- package/build/dex/lighter-v1/abi/erc20.json +0 -222
- package/build/dex/lighter-v1/abi/factory.json +0 -291
- package/build/dex/lighter-v1/abi/order_book.json +0 -594
- package/build/dex/lighter-v1/abi/order_book_helper.json +0 -176
- package/build/dex/lighter-v1/abi/router.json +0 -488
- package/build/dex/lighter-v1/config.d.ts +0 -4
- package/build/dex/lighter-v1/config.js +0 -17
- package/build/dex/lighter-v1/config.js.map +0 -1
- package/build/dex/lighter-v1/constants.d.ts +0 -2
- package/build/dex/lighter-v1/constants.js +0 -13
- package/build/dex/lighter-v1/constants.js.map +0 -1
- package/build/dex/lighter-v1/lighter-v1-pool.d.ts +0 -57
- package/build/dex/lighter-v1/lighter-v1-pool.js +0 -310
- package/build/dex/lighter-v1/lighter-v1-pool.js.map +0 -1
- package/build/dex/lighter-v1/lighter-v1.d.ts +0 -45
- package/build/dex/lighter-v1/lighter-v1.js +0 -331
- package/build/dex/lighter-v1/lighter-v1.js.map +0 -1
- package/build/dex/lighter-v1/types.d.ts +0 -40
- package/build/dex/lighter-v1/types.js +0 -3
- package/build/dex/lighter-v1/types.js.map +0 -1
- package/build/dex/pancakeswap-v3/types.d.ts +0 -14
- package/build/dex/pancakeswap-v3/types.js +0 -3
- package/build/dex/pancakeswap-v3/types.js.map +0 -1
- package/build/dex/quickswap-v3.d.ts +0 -21
- package/build/dex/quickswap-v3.js +0 -40
- package/build/dex/quickswap-v3.js.map +0 -1
- package/build/dex/ramses-v2/config.d.ts +0 -4
- package/build/dex/ramses-v2/config.js +0 -28
- package/build/dex/ramses-v2/config.js.map +0 -1
- package/build/dex/ramses-v2/constants.d.ts +0 -28
- package/build/dex/ramses-v2/constants.js +0 -35
- package/build/dex/ramses-v2/constants.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/BitMath.d.ts +0 -4
- package/build/dex/ramses-v2/contract-math/BitMath.js +0 -93
- package/build/dex/ramses-v2/contract-math/BitMath.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +0 -3
- package/build/dex/ramses-v2/contract-math/FixedPoint128.js +0 -8
- package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +0 -4
- package/build/dex/ramses-v2/contract-math/FixedPoint96.js +0 -9
- package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/FullMath.d.ts +0 -4
- package/build/dex/ramses-v2/contract-math/FullMath.js +0 -19
- package/build/dex/ramses-v2/contract-math/FullMath.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +0 -3
- package/build/dex/ramses-v2/contract-math/LiquidityMath.js +0 -22
- package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/Oracle.d.ts +0 -10
- package/build/dex/ramses-v2/contract-math/Oracle.js +0 -133
- package/build/dex/ramses-v2/contract-math/Oracle.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +0 -10
- package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +0 -91
- package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +0 -8
- package/build/dex/ramses-v2/contract-math/SwapMath.js +0 -70
- package/build/dex/ramses-v2/contract-math/SwapMath.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/Tick.d.ts +0 -7
- package/build/dex/ramses-v2/contract-math/Tick.js +0 -45
- package/build/dex/ramses-v2/contract-math/Tick.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +0 -8
- package/build/dex/ramses-v2/contract-math/TickBitMap.js +0 -87
- package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/TickMath.d.ts +0 -8
- package/build/dex/ramses-v2/contract-math/TickMath.js +0 -162
- package/build/dex/ramses-v2/contract-math/TickMath.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +0 -3
- package/build/dex/ramses-v2/contract-math/UnsafeMath.js +0 -10
- package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +0 -18
- package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +0 -392
- package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +0 -1
- package/build/dex/ramses-v2/contract-math/utils.d.ts +0 -3
- package/build/dex/ramses-v2/contract-math/utils.js +0 -16
- package/build/dex/ramses-v2/contract-math/utils.js.map +0 -1
- package/build/dex/ramses-v2/ramses-v2-pool.d.ts +0 -42
- package/build/dex/ramses-v2/ramses-v2-pool.js +0 -307
- package/build/dex/ramses-v2/ramses-v2-pool.js.map +0 -1
- package/build/dex/ramses-v2/ramses-v2.d.ts +0 -61
- package/build/dex/ramses-v2/ramses-v2.js +0 -690
- package/build/dex/ramses-v2/ramses-v2.js.map +0 -1
- package/build/dex/ramses-v2/types.d.ts +0 -154
- package/build/dex/ramses-v2/types.js +0 -9
- package/build/dex/ramses-v2/types.js.map +0 -1
- package/build/dex/ramses-v2/utils.d.ts +0 -6
- package/build/dex/ramses-v2/utils.js +0 -71
- package/build/dex/ramses-v2/utils.js.map +0 -1
- package/build/dex/solidly/forks-override/fvm.d.ts +0 -20
- package/build/dex/solidly/forks-override/fvm.js +0 -42
- package/build/dex/solidly/forks-override/fvm.js.map +0 -1
- package/build/dex/sushiswap-v3/config.d.ts +0 -4
- package/build/dex/sushiswap-v3/config.js +0 -132
- package/build/dex/sushiswap-v3/config.js.map +0 -1
- package/build/dex/sushiswap-v3/constants.d.ts +0 -4
- package/build/dex/sushiswap-v3/constants.js +0 -32
- package/build/dex/sushiswap-v3/constants.js.map +0 -1
- package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +0 -56
- package/build/dex/sushiswap-v3/sushiswap-v3-original.js +0 -598
- package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +0 -1
- package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +0 -1
- package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +0 -6
- package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +0 -1
- package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +0 -21
- package/build/dex/sushiswap-v3/sushiswap-v3.js +0 -58
- package/build/dex/sushiswap-v3/sushiswap-v3.js.map +0 -1
- package/build/dex/sushiswap-v3/token.d.ts +0 -6
- package/build/dex/sushiswap-v3/token.js +0 -23
- package/build/dex/sushiswap-v3/token.js.map +0 -1
- package/build/dex/sushiswap-v3/types.d.ts +0 -15
- package/build/dex/sushiswap-v3/types.js +0 -18
- package/build/dex/sushiswap-v3/types.js.map +0 -1
- package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +0 -12
- package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +0 -23
- package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +0 -1
- package/build/dex/woo-fi/config.d.ts +0 -4
- package/build/dex/woo-fi/config.js +0 -141
- package/build/dex/woo-fi/config.js.map +0 -1
- package/build/dex/woo-fi/constants.d.ts +0 -5
- package/build/dex/woo-fi/constants.js +0 -20
- package/build/dex/woo-fi/constants.js.map +0 -1
- package/build/dex/woo-fi/types.d.ts +0 -48
- package/build/dex/woo-fi/types.js +0 -3
- package/build/dex/woo-fi/types.js.map +0 -1
- package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +0 -14
- package/build/dex/woo-fi/woo-fi-decimal-math.js +0 -42
- package/build/dex/woo-fi/woo-fi-decimal-math.js.map +0 -1
- package/build/dex/woo-fi/woo-fi-math.d.ts +0 -31
- package/build/dex/woo-fi/woo-fi-math.js +0 -300
- package/build/dex/woo-fi/woo-fi-math.js.map +0 -1
- package/build/dex/woo-fi/woo-fi.d.ts +0 -65
- package/build/dex/woo-fi/woo-fi.js +0 -480
- package/build/dex/woo-fi/woo-fi.js.map +0 -1
- package/build/executor/Executor01BytecodeBuilder.d.ts +0 -77
- package/build/executor/Executor01BytecodeBuilder.js +0 -359
- package/build/executor/Executor01BytecodeBuilder.js.map +0 -1
- package/build/executor/Executor02BytecodeBuilder.d.ts +0 -12
- package/build/executor/Executor02BytecodeBuilder.js +0 -14
- package/build/executor/Executor02BytecodeBuilder.js.map +0 -1
- package/build/executor/ExecutorDetector.d.ts +0 -28
- package/build/executor/ExecutorDetector.js +0 -89
- package/build/executor/ExecutorDetector.js.map +0 -1
- package/build/executor/IExecutorBytecodeBuilder.d.ts +0 -6
- package/build/executor/IExecutorBytecodeBuilder.js +0 -3
- package/build/executor/IExecutorBytecodeBuilder.js.map +0 -1
- package/build/generic-swap-transaction-builder.d.ts +0 -39
- package/build/generic-swap-transaction-builder.js +0 -156
- package/build/generic-swap-transaction-builder.js.map +0 -1
|
@@ -1,359 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Executor01BytecodeBuilder = void 0;
|
|
7
|
-
const ethers_1 = require("ethers");
|
|
8
|
-
const utils_1 = require("../utils");
|
|
9
|
-
const erc20_json_1 = __importDefault(require("../abi/erc20.json"));
|
|
10
|
-
const abi_1 = require("@ethersproject/abi");
|
|
11
|
-
const { utils: { hexlify, hexDataLength, hexConcat, hexZeroPad, solidityPack }, } = ethers_1.ethers;
|
|
12
|
-
const EXECUTOR_01_FUNCTION_CALL_DATA_TYPES = [
|
|
13
|
-
'bytes20',
|
|
14
|
-
'bytes4',
|
|
15
|
-
'bytes2',
|
|
16
|
-
'bytes2',
|
|
17
|
-
'bytes2',
|
|
18
|
-
'bytes2',
|
|
19
|
-
'bytes28',
|
|
20
|
-
'bytes', // dex calldata (bytes)
|
|
21
|
-
];
|
|
22
|
-
const APPROVE_CALLDATA_DEST_TOKEN_POS = 68;
|
|
23
|
-
const WRAP_UNWRAP_FROM_AMOUNT_POS = 4;
|
|
24
|
-
const BYTES_28_LENGTH = 28;
|
|
25
|
-
const BYTES_64_LENGTH = 64;
|
|
26
|
-
const ZEROS_12_BYTES = hexZeroPad(hexlify(0), 12);
|
|
27
|
-
const ZEROS_28_BYTES = hexZeroPad(hexlify(0), 28);
|
|
28
|
-
const ZEROS_32_BYTES = hexZeroPad(hexlify(0), 32);
|
|
29
|
-
var SpecialDex;
|
|
30
|
-
(function (SpecialDex) {
|
|
31
|
-
SpecialDex[SpecialDex["DEFAULT"] = 0] = "DEFAULT";
|
|
32
|
-
// SWAP_ON_BALANCER_V2 = 1, // swapOnBalancerV2
|
|
33
|
-
// SWAP_ON_MAKER_PSM = 2, // swapOnMakerPSM
|
|
34
|
-
// SWAP_ON_SWAAP_V2 = 3, // swapOnSwaapV2
|
|
35
|
-
SpecialDex[SpecialDex["SEND_NATIVE"] = 4] = "SEND_NATIVE";
|
|
36
|
-
})(SpecialDex || (SpecialDex = {}));
|
|
37
|
-
var Flag;
|
|
38
|
-
(function (Flag) {
|
|
39
|
-
Flag[Flag["FIFTEEN"] = 15] = "FIFTEEN";
|
|
40
|
-
Flag[Flag["ELEVEN"] = 11] = "ELEVEN";
|
|
41
|
-
Flag[Flag["NINE"] = 9] = "NINE";
|
|
42
|
-
Flag[Flag["EIGHT"] = 8] = "EIGHT";
|
|
43
|
-
Flag[Flag["SEVEN"] = 7] = "SEVEN";
|
|
44
|
-
Flag[Flag["FIVE"] = 5] = "FIVE";
|
|
45
|
-
Flag[Flag["FOUR"] = 4] = "FOUR";
|
|
46
|
-
Flag[Flag["THREE"] = 3] = "THREE";
|
|
47
|
-
Flag[Flag["ZERO"] = 0] = "ZERO";
|
|
48
|
-
})(Flag || (Flag = {}));
|
|
49
|
-
/**
|
|
50
|
-
* Class to build bytecode for Executor01 (simpleSwap + multiSwap with 100% amounts on each path)
|
|
51
|
-
*/
|
|
52
|
-
class Executor01BytecodeBuilder {
|
|
53
|
-
constructor(dexHelper) {
|
|
54
|
-
this.dexHelper = dexHelper;
|
|
55
|
-
this.erc20Interface = new abi_1.Interface(erc20_json_1.default);
|
|
56
|
-
}
|
|
57
|
-
buildDexCallData(swap, exchangeParam, flag) {
|
|
58
|
-
const dontCheckBalanceAfterSwap = flag % 3 === 0;
|
|
59
|
-
const checkDestTokenBalanceAfterSwap = flag % 3 === 2;
|
|
60
|
-
const insertFromAmount = flag % 4 === 3;
|
|
61
|
-
let { exchangeData } = exchangeParam;
|
|
62
|
-
let destTokenPos = 0;
|
|
63
|
-
if (checkDestTokenBalanceAfterSwap && !dontCheckBalanceAfterSwap) {
|
|
64
|
-
const destTokenAddr = (0, utils_1.isETHAddress)(swap.destToken)
|
|
65
|
-
? this.dexHelper.config.data.wrappedNativeTokenAddress.toLowerCase()
|
|
66
|
-
: swap.destToken.toLowerCase();
|
|
67
|
-
if (!exchangeParam.dexFuncHasDestToken) {
|
|
68
|
-
exchangeData = hexConcat([exchangeData, ZEROS_28_BYTES, destTokenAddr]);
|
|
69
|
-
}
|
|
70
|
-
const destTokenAddrIndex = exchangeData
|
|
71
|
-
.replace('0x', '')
|
|
72
|
-
.indexOf(destTokenAddr.replace('0x', ''));
|
|
73
|
-
destTokenPos = (destTokenAddrIndex - 24) / 2;
|
|
74
|
-
}
|
|
75
|
-
let fromAmountPos = 0;
|
|
76
|
-
if (insertFromAmount) {
|
|
77
|
-
const fromAmount = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint256'], [swap.swapExchanges[0].srcAmount]);
|
|
78
|
-
const fromAmountIndex = exchangeData
|
|
79
|
-
.replace('0x', '')
|
|
80
|
-
.indexOf(fromAmount.replace('0x', ''));
|
|
81
|
-
fromAmountPos = fromAmountIndex / 2;
|
|
82
|
-
}
|
|
83
|
-
return solidityPack(EXECUTOR_01_FUNCTION_CALL_DATA_TYPES, [
|
|
84
|
-
exchangeParam.targetExchange,
|
|
85
|
-
hexZeroPad(hexlify(hexDataLength(exchangeData) + BYTES_28_LENGTH), 4),
|
|
86
|
-
hexZeroPad(hexlify(fromAmountPos), 2),
|
|
87
|
-
hexZeroPad(hexlify(destTokenPos), 2),
|
|
88
|
-
hexZeroPad(hexlify(SpecialDex.DEFAULT), 2),
|
|
89
|
-
hexZeroPad(hexlify(flag), 2),
|
|
90
|
-
ZEROS_28_BYTES,
|
|
91
|
-
exchangeData, // dex calldata
|
|
92
|
-
]);
|
|
93
|
-
}
|
|
94
|
-
buildApproveCallData(approveCalldata, tokenAddr, amount, flag) {
|
|
95
|
-
const insertFromAmount = flag % 4 === 3;
|
|
96
|
-
const checkSrcTokenBalance = flag % 3 === 2;
|
|
97
|
-
let fromAmountPos = 0;
|
|
98
|
-
if (insertFromAmount) {
|
|
99
|
-
const fromAmount = ethers_1.ethers.utils.defaultAbiCoder.encode(['uint256'], [amount]);
|
|
100
|
-
const fromAmountIndex = approveCalldata
|
|
101
|
-
.replace('0x', '')
|
|
102
|
-
.indexOf(fromAmount.replace('0x', ''));
|
|
103
|
-
fromAmountPos = fromAmountIndex / 2;
|
|
104
|
-
}
|
|
105
|
-
if (checkSrcTokenBalance) {
|
|
106
|
-
approveCalldata = hexConcat([approveCalldata, ZEROS_12_BYTES, tokenAddr]);
|
|
107
|
-
}
|
|
108
|
-
return solidityPack(EXECUTOR_01_FUNCTION_CALL_DATA_TYPES, [
|
|
109
|
-
tokenAddr,
|
|
110
|
-
hexZeroPad(hexlify(hexDataLength(approveCalldata) + BYTES_28_LENGTH), 4),
|
|
111
|
-
hexZeroPad(hexlify(fromAmountPos), 2),
|
|
112
|
-
hexZeroPad(hexlify(APPROVE_CALLDATA_DEST_TOKEN_POS), 2),
|
|
113
|
-
hexZeroPad(hexlify(SpecialDex.DEFAULT), 2),
|
|
114
|
-
hexZeroPad(hexlify(flag), 2),
|
|
115
|
-
ZEROS_28_BYTES,
|
|
116
|
-
approveCalldata, // approve calldata
|
|
117
|
-
]);
|
|
118
|
-
}
|
|
119
|
-
buildWrapEthCallData(depositCallData, flag) {
|
|
120
|
-
return solidityPack(EXECUTOR_01_FUNCTION_CALL_DATA_TYPES, [
|
|
121
|
-
this.dexHelper.config.data.wrappedNativeTokenAddress,
|
|
122
|
-
hexZeroPad(hexlify(hexDataLength(depositCallData) + BYTES_28_LENGTH), 4),
|
|
123
|
-
hexZeroPad(hexlify(WRAP_UNWRAP_FROM_AMOUNT_POS), 2),
|
|
124
|
-
hexZeroPad(hexlify(0), 2),
|
|
125
|
-
hexZeroPad(hexlify(SpecialDex.DEFAULT), 2),
|
|
126
|
-
hexZeroPad(hexlify(flag), 2),
|
|
127
|
-
ZEROS_28_BYTES,
|
|
128
|
-
depositCallData, // wrap calldata
|
|
129
|
-
]);
|
|
130
|
-
}
|
|
131
|
-
buildUnwrapEthCallData(withdrawCallData) {
|
|
132
|
-
return solidityPack(EXECUTOR_01_FUNCTION_CALL_DATA_TYPES, [
|
|
133
|
-
this.dexHelper.config.data.wrappedNativeTokenAddress,
|
|
134
|
-
hexZeroPad(hexlify(hexDataLength(withdrawCallData) + BYTES_28_LENGTH), 4),
|
|
135
|
-
hexZeroPad(hexlify(WRAP_UNWRAP_FROM_AMOUNT_POS), 2),
|
|
136
|
-
hexZeroPad(hexlify(0), 2),
|
|
137
|
-
hexZeroPad(hexlify(SpecialDex.DEFAULT), 2),
|
|
138
|
-
hexZeroPad(hexlify(Flag.SEVEN), 2),
|
|
139
|
-
ZEROS_28_BYTES,
|
|
140
|
-
withdrawCallData, // unwrap calldata
|
|
141
|
-
]);
|
|
142
|
-
}
|
|
143
|
-
buildTransferCallData(transferCallData, tokenAddr) {
|
|
144
|
-
return solidityPack(EXECUTOR_01_FUNCTION_CALL_DATA_TYPES, [
|
|
145
|
-
tokenAddr,
|
|
146
|
-
hexZeroPad(hexlify(hexDataLength(transferCallData) + BYTES_28_LENGTH), 4),
|
|
147
|
-
hexZeroPad(hexlify(36), 2),
|
|
148
|
-
hexZeroPad(hexlify(0), 2),
|
|
149
|
-
hexZeroPad(hexlify(SpecialDex.DEFAULT), 2),
|
|
150
|
-
hexZeroPad(hexlify(Flag.THREE), 2),
|
|
151
|
-
ZEROS_28_BYTES,
|
|
152
|
-
transferCallData, // unwrap calldata
|
|
153
|
-
]);
|
|
154
|
-
}
|
|
155
|
-
buildFinalSpecialFlagCalldata() {
|
|
156
|
-
return solidityPack(['bytes20', 'bytes4', 'bytes2', 'bytes2', 'bytes2', 'bytes2', 'bytes32'], [
|
|
157
|
-
this.dexHelper.config.data.augustusV6Address,
|
|
158
|
-
hexZeroPad(hexlify(28 + 4), 4),
|
|
159
|
-
hexZeroPad(hexlify(0), 2),
|
|
160
|
-
hexZeroPad(hexlify(0), 2),
|
|
161
|
-
hexZeroPad(hexlify(SpecialDex.SEND_NATIVE), 2),
|
|
162
|
-
hexZeroPad(hexlify(9), 2),
|
|
163
|
-
ZEROS_32_BYTES, // bytes28(0) + bytes4(0)
|
|
164
|
-
]);
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Executor01 Flags:
|
|
168
|
-
* switch (flag % 4):
|
|
169
|
-
* case 0: don't instert fromAmount
|
|
170
|
-
* case 1: sendEth equal to fromAmount
|
|
171
|
-
* case 2: sendEth equal to fromAmount + insert fromAmount
|
|
172
|
-
* case 3: insert fromAmount
|
|
173
|
-
|
|
174
|
-
* switch (flag % 3):
|
|
175
|
-
* case 0: don't check balance after swap
|
|
176
|
-
* case 1: check eth balance after swap
|
|
177
|
-
* case 2: check desTtoken balance after swap
|
|
178
|
-
*/
|
|
179
|
-
buildSimpleSwapFlags(priceRoute, exchangeParam, index, maybeWethCallData) {
|
|
180
|
-
const { srcToken, destToken } = priceRoute.bestRoute[0].swaps[index];
|
|
181
|
-
const isEthSrc = (0, utils_1.isETHAddress)(srcToken);
|
|
182
|
-
const isEthDest = (0, utils_1.isETHAddress)(destToken);
|
|
183
|
-
const { dexFuncHasRecipient, needWrapNative } = exchangeParam;
|
|
184
|
-
const needWrap = needWrapNative && isEthSrc && maybeWethCallData?.deposit;
|
|
185
|
-
const needUnwrap = needWrapNative && isEthDest && maybeWethCallData?.withdraw;
|
|
186
|
-
let dexFlag = Flag.ZERO; // (flag 0 mod 4) = case 0: don't insert fromAmount, (flag 0 mod 3) = case 0: don't check balance after swap
|
|
187
|
-
let approveFlag = Flag.ZERO; // (flag 0 mod 4) = case 0: don't insert fromAmount, (flag 0 mod 3) = case 0: don't check balance after swap
|
|
188
|
-
if (isEthSrc && !needWrap) {
|
|
189
|
-
dexFlag = Flag.FIVE; // (flag 5 mod 4) = case 1: sendEth equal to fromAmount, (flag 5 mod 3) = case 2: check "srcToken" balance after swap
|
|
190
|
-
}
|
|
191
|
-
else if (isEthDest && !needUnwrap) {
|
|
192
|
-
dexFlag = Flag.FOUR; // (flag 4 mod 4) = case 0: don't insert fromAmount, (flag 4 mod 3) = case 1: check eth balance after swap
|
|
193
|
-
}
|
|
194
|
-
else if (!dexFuncHasRecipient || (isEthDest && needUnwrap)) {
|
|
195
|
-
dexFlag = Flag.EIGHT; // (flag 8 mod 4) = case 0: don't insert fromAmount, (flag 8 mod 3) = case 2: check "srcToken" balance after swap
|
|
196
|
-
}
|
|
197
|
-
return {
|
|
198
|
-
dexFlag,
|
|
199
|
-
approveFlag,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Executor01 Flags:
|
|
204
|
-
* switch (flag % 4):
|
|
205
|
-
* case 0: don't instert fromAmount
|
|
206
|
-
* case 1: sendEth equal to fromAmount
|
|
207
|
-
* case 2: sendEth equal to fromAmount + insert fromAmount
|
|
208
|
-
* case 3: insert fromAmount
|
|
209
|
-
|
|
210
|
-
* switch (flag % 3):
|
|
211
|
-
* case 0: don't check balance after swap
|
|
212
|
-
* case 1: check eth balance after swap
|
|
213
|
-
* case 2: check desTtoken balance after swap
|
|
214
|
-
*/
|
|
215
|
-
buildMultiSwapFlags(priceRoute, exchangeParam, index, maybeWethCallData) {
|
|
216
|
-
const swap = priceRoute.bestRoute[0].swaps[index];
|
|
217
|
-
const { srcToken, destToken } = swap;
|
|
218
|
-
const isFirstSwap = index === 0;
|
|
219
|
-
const { dexFuncHasRecipient, needWrapNative } = exchangeParam;
|
|
220
|
-
const isEthSrc = (0, utils_1.isETHAddress)(srcToken);
|
|
221
|
-
const isEthDest = (0, utils_1.isETHAddress)(destToken);
|
|
222
|
-
const needWrap = needWrapNative && isEthSrc && maybeWethCallData?.deposit;
|
|
223
|
-
const needUnwrap = needWrapNative && isEthDest && maybeWethCallData?.withdraw;
|
|
224
|
-
let dexFlag = Flag.ZERO; // (flag 0 mod 4) = case 0: don't insert fromAmount, (flag 0 mod 3) = case 0: don't check balance after swap
|
|
225
|
-
let approveFlag = Flag.ZERO; // (flag 0 mod 4) = case 0: don't insert fromAmount, (flag 0 mod 3) = case 0: don't check balance after swap
|
|
226
|
-
if (isFirstSwap) {
|
|
227
|
-
if (isEthSrc && !needWrap) {
|
|
228
|
-
dexFlag = Flag.FIVE; // (flag 5 mod 4) = case 1: sendEth equal to fromAmount, (flag 5 mod 3) = case 2: check "srcToken" balance after swap
|
|
229
|
-
}
|
|
230
|
-
else if (isEthSrc && needWrap) {
|
|
231
|
-
dexFlag = Flag.ZERO; // (flag 0 mod 4) = case 0: don't insert fromAmount, (flag 0 mod 3) = case 0: don't check balance after swap
|
|
232
|
-
approveFlag = Flag.ZERO;
|
|
233
|
-
}
|
|
234
|
-
else if (!isEthSrc && !isEthDest) {
|
|
235
|
-
dexFlag = Flag.EIGHT; // (flag 8 mod 4) = case 0: don't insert fromAmount, (flag 8 mod 3) = case 2: check "srcToken" balance after swap
|
|
236
|
-
}
|
|
237
|
-
else if (isEthDest && needUnwrap) {
|
|
238
|
-
dexFlag = Flag.EIGHT; // (flag 8 mod 4) = case 0: don't insert fromAmount, (flag 8 mod 3) = case 2: check "srcToken" balance after swap
|
|
239
|
-
approveFlag = Flag.EIGHT; // (flag 8 mod 4) = case 0: don't insert fromAmount, (flag 8 mod 3) = case 2: check "srcToken" balance after swap
|
|
240
|
-
}
|
|
241
|
-
else if (isEthDest && !needUnwrap) {
|
|
242
|
-
dexFlag = Flag.FOUR; // (flag 4 mod 4) = case 0: don't insert fromAmount, (flag 4 mod 3) = case 1: check eth balance after swap
|
|
243
|
-
}
|
|
244
|
-
else if (!dexFuncHasRecipient) {
|
|
245
|
-
dexFlag = Flag.EIGHT; // (flag 8 mod 4) = case 0: don't insert fromAmount, (flag 8 mod 3) = case 2: check "srcToken" balance after swap
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
if (isEthSrc && !needWrap) {
|
|
250
|
-
dexFlag = Flag.FIVE; // (flag 5 mod 4) = case 1: sendEth equal to fromAmount, (flag 5 mod 3) = case 2: check "srcToken" balance after swap
|
|
251
|
-
}
|
|
252
|
-
else if (isEthSrc && needWrap) {
|
|
253
|
-
dexFlag = Flag.FIFTEEN; // (flag 15 mod 4) = case 3: insert fromAmount, (flag 15 mod 3) = case 0: don't check balance after swap
|
|
254
|
-
approveFlag = Flag.FIFTEEN; // (flag 15 mod 4) = case 3: insert fromAmount, (flag 15 mod 3) = case 0: don't check balance after swap
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
dexFlag = Flag.ELEVEN; // (flag 11 mod 4) = case 3: insert fromAmount, (flag 11 mod 3) = case 2: check "srcToken" balance after swap
|
|
258
|
-
approveFlag = Flag.ELEVEN; // (flag 11 mod 4) = case 3: insert fromAmount, (flag 11 mod 3) = case 2: check "srcToken" balance after swap
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return {
|
|
262
|
-
dexFlag,
|
|
263
|
-
approveFlag,
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
buildFlags(priceRoute, exchangeDataList, maybeWethCallData) {
|
|
267
|
-
const isMultiSwap = priceRoute.bestRoute[0].swaps.length > 1;
|
|
268
|
-
const buildFlagsMethod = isMultiSwap
|
|
269
|
-
? this.buildMultiSwapFlags.bind(this)
|
|
270
|
-
: this.buildSimpleSwapFlags.bind(this);
|
|
271
|
-
const flags = exchangeDataList.reduce((acc, exchangeParam, index) => {
|
|
272
|
-
const { dexFlag, approveFlag } = buildFlagsMethod(priceRoute, exchangeParam, index, maybeWethCallData);
|
|
273
|
-
acc.dexes.push(dexFlag);
|
|
274
|
-
acc.approves.push(approveFlag);
|
|
275
|
-
return acc;
|
|
276
|
-
}, { dexes: [], approves: [] });
|
|
277
|
-
return {
|
|
278
|
-
...flags,
|
|
279
|
-
wrap: (0, utils_1.isETHAddress)(priceRoute.srcToken) && maybeWethCallData?.deposit
|
|
280
|
-
? Flag.NINE
|
|
281
|
-
: Flag.SEVEN,
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
buildSingleSwapCallData(priceRoute, exchangeParams, index, flags, maybeWethCallData) {
|
|
285
|
-
let swapCallData = '';
|
|
286
|
-
const swap = priceRoute.bestRoute[0].swaps[index];
|
|
287
|
-
const curExchangeParam = exchangeParams[index];
|
|
288
|
-
const srcAmount = swap.swapExchanges[0].srcAmount;
|
|
289
|
-
const dexCallData = this.buildDexCallData(swap, curExchangeParam, flags.dexes[index]);
|
|
290
|
-
swapCallData = hexConcat([dexCallData]);
|
|
291
|
-
if (!(0, utils_1.isETHAddress)(swap.srcToken) ||
|
|
292
|
-
((0, utils_1.isETHAddress)(swap.srcToken) && index !== 0)) {
|
|
293
|
-
const approve = this.erc20Interface.encodeFunctionData('approve', [
|
|
294
|
-
curExchangeParam.targetExchange,
|
|
295
|
-
srcAmount,
|
|
296
|
-
]);
|
|
297
|
-
const approveCallData = this.buildApproveCallData(approve, (0, utils_1.isETHAddress)(swap.srcToken) && index !== 0
|
|
298
|
-
? this.dexHelper.config.data.wrappedNativeTokenAddress
|
|
299
|
-
: swap.srcToken, srcAmount, flags.approves[index]);
|
|
300
|
-
swapCallData = hexConcat([approveCallData, swapCallData]);
|
|
301
|
-
}
|
|
302
|
-
if (curExchangeParam.needWrapNative && maybeWethCallData) {
|
|
303
|
-
if (maybeWethCallData.deposit && (0, utils_1.isETHAddress)(swap.srcToken)) {
|
|
304
|
-
const prevExchangeParam = exchangeParams[index - 1];
|
|
305
|
-
if (!prevExchangeParam ||
|
|
306
|
-
(prevExchangeParam && !prevExchangeParam.needWrapNative)) {
|
|
307
|
-
const approveWethCalldata = this.buildApproveCallData(this.erc20Interface.encodeFunctionData('approve', [
|
|
308
|
-
curExchangeParam.targetExchange,
|
|
309
|
-
swap.swapExchanges[0].srcAmount,
|
|
310
|
-
]), this.dexHelper.config.data.wrappedNativeTokenAddress, srcAmount, flags.approves[index]);
|
|
311
|
-
const depositCallData = this.buildWrapEthCallData(maybeWethCallData.deposit.calldata, Flag.NINE);
|
|
312
|
-
swapCallData = hexConcat([
|
|
313
|
-
approveWethCalldata,
|
|
314
|
-
depositCallData,
|
|
315
|
-
swapCallData,
|
|
316
|
-
]);
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
if (maybeWethCallData.withdraw && (0, utils_1.isETHAddress)(priceRoute.destToken)) {
|
|
320
|
-
const nextExchangeParam = exchangeParams[index + 1];
|
|
321
|
-
if (!nextExchangeParam ||
|
|
322
|
-
(nextExchangeParam && !nextExchangeParam.needWrapNative)) {
|
|
323
|
-
const withdrawCallData = this.buildUnwrapEthCallData(maybeWethCallData.withdraw.calldata);
|
|
324
|
-
swapCallData = hexConcat([swapCallData, withdrawCallData]);
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
return swapCallData;
|
|
329
|
-
}
|
|
330
|
-
buildByteCode(priceRoute, exchangeDataList, maybeWethCallData) {
|
|
331
|
-
const flags = this.buildFlags(priceRoute, exchangeDataList, maybeWethCallData);
|
|
332
|
-
let swapsCalldata = exchangeDataList.reduce((acc, exchangeParams, index) => hexConcat([
|
|
333
|
-
acc,
|
|
334
|
-
this.buildSingleSwapCallData(priceRoute, exchangeDataList, index, flags, maybeWethCallData),
|
|
335
|
-
]), '0x');
|
|
336
|
-
if (!exchangeDataList[exchangeDataList.length - 1].dexFuncHasRecipient &&
|
|
337
|
-
!(0, utils_1.isETHAddress)(priceRoute.destToken)) {
|
|
338
|
-
const transferCallData = this.buildTransferCallData(this.erc20Interface.encodeFunctionData('transfer', [
|
|
339
|
-
this.dexHelper.config.data.augustusV6Address,
|
|
340
|
-
priceRoute.destAmount,
|
|
341
|
-
]), priceRoute.destToken);
|
|
342
|
-
swapsCalldata = hexConcat([swapsCalldata, transferCallData]);
|
|
343
|
-
}
|
|
344
|
-
if ((maybeWethCallData?.withdraw && (0, utils_1.isETHAddress)(priceRoute.destToken)) ||
|
|
345
|
-
(!exchangeDataList[exchangeDataList.length - 1].dexFuncHasRecipient &&
|
|
346
|
-
(0, utils_1.isETHAddress)(priceRoute.destToken))) {
|
|
347
|
-
const finalSpecialFlagCalldata = this.buildFinalSpecialFlagCalldata();
|
|
348
|
-
swapsCalldata = hexConcat([swapsCalldata, finalSpecialFlagCalldata]);
|
|
349
|
-
}
|
|
350
|
-
return solidityPack(['bytes32', 'bytes', 'bytes'], [
|
|
351
|
-
hexZeroPad(hexlify(32), 32),
|
|
352
|
-
hexZeroPad(hexlify(hexDataLength(swapsCalldata) + BYTES_64_LENGTH), // 64 bytes = bytes12(0) + msg.sender
|
|
353
|
-
32),
|
|
354
|
-
swapsCalldata,
|
|
355
|
-
]);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
exports.Executor01BytecodeBuilder = Executor01BytecodeBuilder;
|
|
359
|
-
//# sourceMappingURL=Executor01BytecodeBuilder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Executor01BytecodeBuilder.js","sourceRoot":"","sources":["../../src/executor/Executor01BytecodeBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { IExecutorBytecodeBuilder } from './IExecutorBytecodeBuilder';
|
|
2
|
-
import { OptimalRate } from '@paraswap/core';
|
|
3
|
-
import { DexExchangeParam } from '../types';
|
|
4
|
-
import { DepositWithdrawReturn } from '../dex/weth/types';
|
|
5
|
-
import { IDexHelper } from '../dex-helper';
|
|
6
|
-
/**
|
|
7
|
-
* Future class to build bytecode for Executor02
|
|
8
|
-
*/
|
|
9
|
-
export declare class Executor02BytecodeBuilder implements IExecutorBytecodeBuilder {
|
|
10
|
-
constructor(dexHelper: IDexHelper);
|
|
11
|
-
buildByteCode(priceRoute: OptimalRate, exchangeDataList: DexExchangeParam[], maybeWethCallData?: DepositWithdrawReturn): string;
|
|
12
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Executor02BytecodeBuilder = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Future class to build bytecode for Executor02
|
|
6
|
-
*/
|
|
7
|
-
class Executor02BytecodeBuilder {
|
|
8
|
-
constructor(dexHelper) { }
|
|
9
|
-
buildByteCode(priceRoute, exchangeDataList, maybeWethCallData) {
|
|
10
|
-
return '';
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.Executor02BytecodeBuilder = Executor02BytecodeBuilder;
|
|
14
|
-
//# sourceMappingURL=Executor02BytecodeBuilder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Executor02BytecodeBuilder.js","sourceRoot":"","sources":["../../src/executor/Executor02BytecodeBuilder.ts"],"names":[],"mappings":";;;AAMA;;GAEG;AACH,MAAa,yBAAyB;IACpC,YAAY,SAAqB,IAAG,CAAC;IAErC,aAAa,CACX,UAAuB,EACvB,gBAAoC,EACpC,iBAAyC;QAEzC,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAVD,8DAUC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { IDexHelper } from '../dex-helper';
|
|
2
|
-
import { Address, OptimalRate } from '@paraswap/core';
|
|
3
|
-
import { IExecutorBytecodeBuilder } from './IExecutorBytecodeBuilder';
|
|
4
|
-
export declare enum Executors {
|
|
5
|
-
ONE = "Executor01"
|
|
6
|
-
}
|
|
7
|
-
declare enum RouteExecutionType {
|
|
8
|
-
SINGLE_STEP = 0,
|
|
9
|
-
HORIZONTAL_SEQUENCE = 1
|
|
10
|
-
}
|
|
11
|
-
export declare class ExecutorDetector {
|
|
12
|
-
protected dexHelper: IDexHelper;
|
|
13
|
-
private executor01BytecodeBuilder;
|
|
14
|
-
protected routeExecutionTypeToExecutorMap: {
|
|
15
|
-
0: Executors;
|
|
16
|
-
1: Executors;
|
|
17
|
-
};
|
|
18
|
-
constructor(dexHelper: IDexHelper);
|
|
19
|
-
/**
|
|
20
|
-
* The method supports only simpleSwap and multiSwap with 100% token percent on each path (Executor01)
|
|
21
|
-
* @param priceRoute
|
|
22
|
-
*/
|
|
23
|
-
protected getRouteExecutionType(priceRoute: OptimalRate): RouteExecutionType;
|
|
24
|
-
getExecutorByPriceRoute(priceRoute: OptimalRate): Executors;
|
|
25
|
-
getAddress(executorName: Executors): Address;
|
|
26
|
-
getBytecodeBuilder(executorName: Executors): IExecutorBytecodeBuilder;
|
|
27
|
-
}
|
|
28
|
-
export {};
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ExecutorDetector = exports.Executors = void 0;
|
|
4
|
-
const Executor01BytecodeBuilder_1 = require("./Executor01BytecodeBuilder");
|
|
5
|
-
// import { Executor02BytecodeBuilder } from './Executor02BytecodeBuilder';
|
|
6
|
-
var Executors;
|
|
7
|
-
(function (Executors) {
|
|
8
|
-
Executors["ONE"] = "Executor01";
|
|
9
|
-
// TWO = 'Executor02',
|
|
10
|
-
})(Executors = exports.Executors || (exports.Executors = {}));
|
|
11
|
-
var RouteExecutionType;
|
|
12
|
-
(function (RouteExecutionType) {
|
|
13
|
-
RouteExecutionType[RouteExecutionType["SINGLE_STEP"] = 0] = "SINGLE_STEP";
|
|
14
|
-
RouteExecutionType[RouteExecutionType["HORIZONTAL_SEQUENCE"] = 1] = "HORIZONTAL_SEQUENCE";
|
|
15
|
-
// VERTICAL_BRANCH = 3, // megaSwap
|
|
16
|
-
// VERTICAL_BRANCH_HORIZONTAL_SEQUENCE = 4, // megaSwap
|
|
17
|
-
// NESTED_VERTICAL_BRANCH_HORIZONTAL_SEQUENCE = 5, // megaSwap
|
|
18
|
-
})(RouteExecutionType || (RouteExecutionType = {}));
|
|
19
|
-
class ExecutorDetector {
|
|
20
|
-
constructor(dexHelper) {
|
|
21
|
-
this.dexHelper = dexHelper;
|
|
22
|
-
// private executor02BytecodeBuilder: IExecutorBytecodeBuilder;
|
|
23
|
-
this.routeExecutionTypeToExecutorMap = {
|
|
24
|
-
[RouteExecutionType.SINGLE_STEP]: Executors.ONE,
|
|
25
|
-
[RouteExecutionType.HORIZONTAL_SEQUENCE]: Executors.ONE,
|
|
26
|
-
// [RouteExecutionType.VERTICAL_BRANCH]: Executors.TWO,
|
|
27
|
-
// [RouteExecutionType.VERTICAL_BRANCH_HORIZONTAL_SEQUENCE]: Executors.TWO,
|
|
28
|
-
// [RouteExecutionType.NESTED_VERTICAL_BRANCH_HORIZONTAL_SEQUENCE]:
|
|
29
|
-
// Executors.TWO,
|
|
30
|
-
};
|
|
31
|
-
this.executor01BytecodeBuilder = new Executor01BytecodeBuilder_1.Executor01BytecodeBuilder(this.dexHelper);
|
|
32
|
-
// this.executor02BytecodeBuilder = new Executor02BytecodeBuilder(this.dexHelper);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* The method supports only simpleSwap and multiSwap with 100% token percent on each path (Executor01)
|
|
36
|
-
* @param priceRoute
|
|
37
|
-
*/
|
|
38
|
-
getRouteExecutionType(priceRoute) {
|
|
39
|
-
if (priceRoute.bestRoute.length === 1 &&
|
|
40
|
-
priceRoute.bestRoute[0].percent === 100 &&
|
|
41
|
-
priceRoute.bestRoute[0].swaps.length === 1) {
|
|
42
|
-
return RouteExecutionType.SINGLE_STEP;
|
|
43
|
-
}
|
|
44
|
-
else if (priceRoute.bestRoute.length === 1 &&
|
|
45
|
-
priceRoute.bestRoute[0].percent === 100 &&
|
|
46
|
-
priceRoute.bestRoute[0].swaps.length > 1) {
|
|
47
|
-
let has100PercentOnEachPath = true;
|
|
48
|
-
priceRoute.bestRoute[0].swaps.map(swap => {
|
|
49
|
-
swap.swapExchanges.map(se => {
|
|
50
|
-
if (se.percent !== 100) {
|
|
51
|
-
has100PercentOnEachPath = false;
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
if (has100PercentOnEachPath) {
|
|
56
|
-
return RouteExecutionType.HORIZONTAL_SEQUENCE;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
throw new Error('Route type is not supported yet');
|
|
60
|
-
}
|
|
61
|
-
getExecutorByPriceRoute(priceRoute) {
|
|
62
|
-
const routeExecutionType = this.getRouteExecutionType(priceRoute);
|
|
63
|
-
const executorName = this.routeExecutionTypeToExecutorMap[routeExecutionType];
|
|
64
|
-
if (executorName) {
|
|
65
|
-
return executorName;
|
|
66
|
-
}
|
|
67
|
-
throw new Error(`${executorName} is not implemented`);
|
|
68
|
-
}
|
|
69
|
-
getAddress(executorName) {
|
|
70
|
-
if (!Object.values(Executors).includes(executorName)) {
|
|
71
|
-
throw new Error(`${executorName} is not supported`);
|
|
72
|
-
}
|
|
73
|
-
return this.dexHelper.config.data.executorsAddresses[executorName];
|
|
74
|
-
}
|
|
75
|
-
getBytecodeBuilder(executorName) {
|
|
76
|
-
if (!Object.values(Executors).includes(executorName)) {
|
|
77
|
-
throw new Error(`${executorName} is not supported`);
|
|
78
|
-
}
|
|
79
|
-
if (executorName === Executors.ONE || true) {
|
|
80
|
-
// for now always return Executor01
|
|
81
|
-
return this.executor01BytecodeBuilder;
|
|
82
|
-
}
|
|
83
|
-
// else (executorName === Executors.TWO) {
|
|
84
|
-
// return this.executor02BytecodeBuilder;
|
|
85
|
-
// }
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
exports.ExecutorDetector = ExecutorDetector;
|
|
89
|
-
//# sourceMappingURL=ExecutorDetector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutorDetector.js","sourceRoot":"","sources":["../../src/executor/ExecutorDetector.ts"],"names":[],"mappings":";;;AAGA,2EAAwE;AACxE,2EAA2E;AAE3E,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,+BAAkB,CAAA;IAClB,sBAAsB;AACxB,CAAC,EAHW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAGpB;AAED,IAAK,kBAMJ;AAND,WAAK,kBAAkB;IACrB,yEAAe,CAAA;IACf,yFAAuB,CAAA;IACvB,mCAAmC;IACnC,uDAAuD;IACvD,8DAA8D;AAChE,CAAC,EANI,kBAAkB,KAAlB,kBAAkB,QAMtB;AAED,MAAa,gBAAgB;IAa3B,YAAsB,SAAqB;QAArB,cAAS,GAAT,SAAS,CAAY;QAX3C,+DAA+D;QAErD,oCAA+B,GAAG;YAC1C,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,GAAG;YAC/C,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,GAAG;YACvD,uDAAuD;YACvD,2EAA2E;YAC3E,mEAAmE;YACnE,mBAAmB;SACpB,CAAC;QAGA,IAAI,CAAC,yBAAyB,GAAG,IAAI,qDAAyB,CAC5D,IAAI,CAAC,SAAS,CACf,CAAC;QACF,kFAAkF;IACpF,CAAC;IACD;;;OAGG;IACO,qBAAqB,CAAC,UAAuB;QACrD,IACE,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACjC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG;YACvC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAC1C;YACA,OAAO,kBAAkB,CAAC,WAAW,CAAC;SACvC;aAAM,IACL,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACjC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG;YACvC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EACxC;YACA,IAAI,uBAAuB,GAAG,IAAI,CAAC;YACnC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAC1B,IAAI,EAAE,CAAC,OAAO,KAAK,GAAG,EAAE;wBACtB,uBAAuB,GAAG,KAAK,CAAC;qBACjC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,uBAAuB,EAAE;gBAC3B,OAAO,kBAAkB,CAAC,mBAAmB,CAAC;aAC/C;SACF;QAED,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,uBAAuB,CAAC,UAAuB;QAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,YAAY,GAChB,IAAI,CAAC,+BAA+B,CAAC,kBAAkB,CAAC,CAAC;QAE3D,IAAI,YAAY,EAAE;YAChB,OAAO,YAAY,CAAC;SACrB;QAED,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,qBAAqB,CAAC,CAAC;IACxD,CAAC;IAED,UAAU,CAAC,YAAuB;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YACpD,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,mBAAmB,CAAC,CAAC;SACrD;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAmB,CAAC,YAAY,CAAC,CAAC;IACtE,CAAC;IAED,kBAAkB,CAAC,YAAuB;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YACpD,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,mBAAmB,CAAC,CAAC;SACrD;QAED,IAAI,YAAY,KAAK,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE;YAC1C,mCAAmC;YACnC,OAAO,IAAI,CAAC,yBAAyB,CAAC;SACvC;QACD,0CAA0C;QAC1C,2CAA2C;QAC3C,IAAI;IACN,CAAC;CACF;AArFD,4CAqFC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { OptimalRate } from '@paraswap/core';
|
|
2
|
-
import { DexExchangeParam } from '../types';
|
|
3
|
-
import { DepositWithdrawReturn } from '../dex/weth/types';
|
|
4
|
-
export interface IExecutorBytecodeBuilder {
|
|
5
|
-
buildByteCode(priceRoute: OptimalRate, exchangeDataList: DexExchangeParam[], maybeWethCallData?: DepositWithdrawReturn): string;
|
|
6
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"IExecutorBytecodeBuilder.js","sourceRoot":"","sources":["../../src/executor/IExecutorBytecodeBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { Address, OptimalRate, TxObject } from './types';
|
|
2
|
-
import { SwapSide } from './constants';
|
|
3
|
-
import { AbiCoder, Interface } from '@ethersproject/abi';
|
|
4
|
-
import { DexAdapterService } from './dex';
|
|
5
|
-
import { ExecutorDetector, Executors } from './executor/ExecutorDetector';
|
|
6
|
-
import { IExecutorBytecodeBuilder } from './executor/IExecutorBytecodeBuilder';
|
|
7
|
-
export declare class GenericSwapTransactionBuilder {
|
|
8
|
-
protected dexAdapterService: DexAdapterService;
|
|
9
|
-
protected wExchangeNetworkToKey: Record<number, string>;
|
|
10
|
-
augustusV6Interface: Interface;
|
|
11
|
-
erc20Interface: Interface;
|
|
12
|
-
abiCoder: AbiCoder;
|
|
13
|
-
executorDetector: ExecutorDetector;
|
|
14
|
-
constructor(dexAdapterService: DexAdapterService, wExchangeNetworkToKey?: Record<number, string>);
|
|
15
|
-
protected getDepositWithdrawWethCallData(srcAmountWeth: bigint, destAmountWeth: bigint, side: SwapSide): import("./dex/weth/types").DepositWithdrawReturn | undefined;
|
|
16
|
-
protected buildFees(referrerAddress: string | undefined, partnerAddress: string, partnerFeePercent: string, takeSurplus: boolean, side: SwapSide): [string, string];
|
|
17
|
-
protected buildCalls(priceRoute: OptimalRate, minMaxAmount: string, executorName: Executors, bytecodeBuilder: IExecutorBytecodeBuilder): Promise<string>;
|
|
18
|
-
protected _build(priceRoute: OptimalRate, minMaxAmount: string, userAddress: Address, referrerAddress: Address | undefined, partnerAddress: Address, partnerFeePercent: string, takeSurplus: boolean, beneficiary: Address, permit: string, deadline: string, uuid: string): Promise<{
|
|
19
|
-
encoder: (...params: any[]) => string;
|
|
20
|
-
params: (string | string[])[];
|
|
21
|
-
}>;
|
|
22
|
-
build({ priceRoute, minMaxAmount, userAddress, referrerAddress, partnerAddress, partnerFeePercent, takeSurplus, gasPrice, maxFeePerGas, maxPriorityFeePerGas, permit, deadline, uuid, beneficiary, onlyParams, }: {
|
|
23
|
-
priceRoute: OptimalRate;
|
|
24
|
-
minMaxAmount: string;
|
|
25
|
-
userAddress: Address;
|
|
26
|
-
referrerAddress?: Address;
|
|
27
|
-
partnerAddress: Address;
|
|
28
|
-
partnerFeePercent: string;
|
|
29
|
-
takeSurplus?: boolean;
|
|
30
|
-
gasPrice?: string;
|
|
31
|
-
maxFeePerGas?: string;
|
|
32
|
-
maxPriorityFeePerGas?: string;
|
|
33
|
-
permit?: string;
|
|
34
|
-
deadline: string;
|
|
35
|
-
uuid: string;
|
|
36
|
-
beneficiary?: Address;
|
|
37
|
-
onlyParams?: boolean;
|
|
38
|
-
}): Promise<TxObject>;
|
|
39
|
-
}
|