@paraswap/dex-lib 2.45.0 → 2.45.1-core.2.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.
Files changed (210) hide show
  1. package/.idea/aws.xml +17 -0
  2. package/.idea/codeStyles/Project.xml +19 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/misc.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/paraswap-dex-lib.iml +9 -0
  7. package/.idea/prettier.xml +7 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/build/abi/AugustusV6.abi.json +395 -0
  10. package/build/abi/algebra/AlgebraPool.abi.json +724 -724
  11. package/build/abi/curve-v1/StableSwapFRXETH.json +889 -0
  12. package/build/abi/curve-v1/StableSwapWBETH.json +1223 -0
  13. package/build/abi/sushiswap-v3/QuoterV2.json +267 -0
  14. package/build/abi/sushiswap-v3/RouterProcessor3.json +289 -0
  15. package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +191 -191
  16. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +285 -0
  17. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +583 -0
  18. package/build/abi/wBETH.json +1527 -0
  19. package/build/abi/woo-fi/WooFeeManager.abi.json +318 -0
  20. package/build/abi/woo-fi/WooPP.abi.json +548 -0
  21. package/build/abi/woo-fi/Wooracle.abi.json +260 -0
  22. package/build/dex/aave-v3/tokens/arbitrum.json +50 -0
  23. package/build/dex/aave-v3/tokens/avalanche.json +74 -0
  24. package/build/dex/aave-v3/tokens/fantom.json +62 -0
  25. package/build/dex/aave-v3/tokens/optimism.json +50 -0
  26. package/build/dex/aave-v3/tokens/polygon.json +116 -0
  27. package/build/dex/algebra/algebra-pool.d.ts +105 -37
  28. package/build/dex/algebra/algebra-pool.js +434 -322
  29. package/build/dex/balancer-v2/Gyro3Pool.d.ts +43 -0
  30. package/build/dex/balancer-v2/Gyro3Pool.js +160 -0
  31. package/build/dex/balancer-v2/Gyro3Pool.js.map +1 -0
  32. package/build/dex/balancer-v2/LinearMath.d.ts +88 -0
  33. package/build/dex/balancer-v2/LinearMath.js +285 -0
  34. package/build/dex/balancer-v2/LinearMath.js.map +1 -0
  35. package/build/dex/balancer-v2/LinearPool.d.ts +81 -0
  36. package/build/dex/balancer-v2/LinearPool.js +444 -0
  37. package/build/dex/balancer-v2/LinearPool.js.map +1 -0
  38. package/build/dex/balancer-v2/PhantomStablePool.d.ts +90 -0
  39. package/build/dex/balancer-v2/PhantomStablePool.js +418 -0
  40. package/build/dex/balancer-v2/PhantomStablePool.js.map +1 -0
  41. package/build/dex/balancer-v2/StableMath.d.ts +9 -0
  42. package/build/dex/balancer-v2/StableMath.js +272 -0
  43. package/build/dex/balancer-v2/StableMath.js.map +1 -0
  44. package/build/dex/balancer-v2/balancer-v2-pool.d.ts +140 -0
  45. package/build/dex/balancer-v2/balancer-v2-pool.js +647 -0
  46. package/build/dex/balancer-v2/balancer-v2-pool.js.map +1 -0
  47. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.d.ts +33 -0
  48. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.js +128 -0
  49. package/build/dex/balancer-v2/pools/gyro/Gyro3Pool.js.map +1 -0
  50. package/build/dex/balancer-v2/pools/gyro/GyroEPool.d.ts +34 -0
  51. package/build/dex/balancer-v2/pools/gyro/GyroEPool.js +151 -0
  52. package/build/dex/balancer-v2/pools/gyro/GyroEPool.js.map +1 -0
  53. package/build/dex/curve-v1/pools/frxETHpool.d.ts +7 -0
  54. package/build/dex/curve-v1/pools/frxETHpool.js +27 -0
  55. package/build/dex/curve-v1/pools/frxETHpool.js.map +1 -0
  56. package/build/dex/curve-v1/pools/wbETHpool.d.ts +29 -0
  57. package/build/dex/curve-v1/pools/wbETHpool.js +408 -0
  58. package/build/dex/curve-v1/pools/wbETHpool.js.map +1 -0
  59. package/build/dex/lighter-v1/abi/erc20.json +222 -0
  60. package/build/dex/lighter-v1/abi/factory.json +291 -0
  61. package/build/dex/lighter-v1/abi/order_book.json +594 -0
  62. package/build/dex/lighter-v1/abi/order_book_helper.json +176 -0
  63. package/build/dex/lighter-v1/abi/router.json +488 -0
  64. package/build/dex/lighter-v1/config.d.ts +4 -0
  65. package/build/dex/lighter-v1/config.js +17 -0
  66. package/build/dex/lighter-v1/config.js.map +1 -0
  67. package/build/dex/lighter-v1/constants.d.ts +2 -0
  68. package/build/dex/lighter-v1/constants.js +13 -0
  69. package/build/dex/lighter-v1/constants.js.map +1 -0
  70. package/build/dex/lighter-v1/lighter-v1-pool.d.ts +57 -0
  71. package/build/dex/lighter-v1/lighter-v1-pool.js +310 -0
  72. package/build/dex/lighter-v1/lighter-v1-pool.js.map +1 -0
  73. package/build/dex/lighter-v1/lighter-v1.d.ts +45 -0
  74. package/build/dex/lighter-v1/lighter-v1.js +331 -0
  75. package/build/dex/lighter-v1/lighter-v1.js.map +1 -0
  76. package/build/dex/lighter-v1/types.d.ts +40 -0
  77. package/build/dex/lighter-v1/types.js +3 -0
  78. package/build/dex/lighter-v1/types.js.map +1 -0
  79. package/build/dex/pancakeswap-v3/types.d.ts +14 -0
  80. package/build/dex/pancakeswap-v3/types.js +3 -0
  81. package/build/dex/pancakeswap-v3/types.js.map +1 -0
  82. package/build/dex/quickswap-v3.d.ts +21 -0
  83. package/build/dex/quickswap-v3.js +40 -0
  84. package/build/dex/quickswap-v3.js.map +1 -0
  85. package/build/dex/ramses-v2/config.d.ts +4 -0
  86. package/build/dex/ramses-v2/config.js +28 -0
  87. package/build/dex/ramses-v2/config.js.map +1 -0
  88. package/build/dex/ramses-v2/constants.d.ts +28 -0
  89. package/build/dex/ramses-v2/constants.js +35 -0
  90. package/build/dex/ramses-v2/constants.js.map +1 -0
  91. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +4 -0
  92. package/build/dex/ramses-v2/contract-math/BitMath.js +93 -0
  93. package/build/dex/ramses-v2/contract-math/BitMath.js.map +1 -0
  94. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +3 -0
  95. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +8 -0
  96. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +1 -0
  97. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +4 -0
  98. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +9 -0
  99. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +1 -0
  100. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +4 -0
  101. package/build/dex/ramses-v2/contract-math/FullMath.js +19 -0
  102. package/build/dex/ramses-v2/contract-math/FullMath.js.map +1 -0
  103. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +3 -0
  104. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +22 -0
  105. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +1 -0
  106. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +10 -0
  107. package/build/dex/ramses-v2/contract-math/Oracle.js +133 -0
  108. package/build/dex/ramses-v2/contract-math/Oracle.js.map +1 -0
  109. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +10 -0
  110. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +91 -0
  111. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +1 -0
  112. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +8 -0
  113. package/build/dex/ramses-v2/contract-math/SwapMath.js +70 -0
  114. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +1 -0
  115. package/build/dex/ramses-v2/contract-math/Tick.d.ts +7 -0
  116. package/build/dex/ramses-v2/contract-math/Tick.js +45 -0
  117. package/build/dex/ramses-v2/contract-math/Tick.js.map +1 -0
  118. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +8 -0
  119. package/build/dex/ramses-v2/contract-math/TickBitMap.js +87 -0
  120. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +1 -0
  121. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +8 -0
  122. package/build/dex/ramses-v2/contract-math/TickMath.js +162 -0
  123. package/build/dex/ramses-v2/contract-math/TickMath.js.map +1 -0
  124. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +3 -0
  125. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +10 -0
  126. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +1 -0
  127. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +18 -0
  128. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +392 -0
  129. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +1 -0
  130. package/build/dex/ramses-v2/contract-math/utils.d.ts +3 -0
  131. package/build/dex/ramses-v2/contract-math/utils.js +16 -0
  132. package/build/dex/ramses-v2/contract-math/utils.js.map +1 -0
  133. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +42 -0
  134. package/build/dex/ramses-v2/ramses-v2-pool.js +307 -0
  135. package/build/dex/ramses-v2/ramses-v2-pool.js.map +1 -0
  136. package/build/dex/ramses-v2/ramses-v2.d.ts +61 -0
  137. package/build/dex/ramses-v2/ramses-v2.js +690 -0
  138. package/build/dex/ramses-v2/ramses-v2.js.map +1 -0
  139. package/build/dex/ramses-v2/types.d.ts +154 -0
  140. package/build/dex/ramses-v2/types.js +9 -0
  141. package/build/dex/ramses-v2/types.js.map +1 -0
  142. package/build/dex/ramses-v2/utils.d.ts +6 -0
  143. package/build/dex/ramses-v2/utils.js +71 -0
  144. package/build/dex/ramses-v2/utils.js.map +1 -0
  145. package/build/dex/solidly/forks-override/fvm.d.ts +20 -0
  146. package/build/dex/solidly/forks-override/fvm.js +42 -0
  147. package/build/dex/solidly/forks-override/fvm.js.map +1 -0
  148. package/build/dex/sushiswap-v3/config.d.ts +4 -0
  149. package/build/dex/sushiswap-v3/config.js +132 -0
  150. package/build/dex/sushiswap-v3/config.js.map +1 -0
  151. package/build/dex/sushiswap-v3/constants.d.ts +4 -0
  152. package/build/dex/sushiswap-v3/constants.js +32 -0
  153. package/build/dex/sushiswap-v3/constants.js.map +1 -0
  154. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +56 -0
  155. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +598 -0
  156. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +1 -0
  157. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +1 -0
  158. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +6 -0
  159. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +1 -0
  160. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +21 -0
  161. package/build/dex/sushiswap-v3/sushiswap-v3.js +58 -0
  162. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +1 -0
  163. package/build/dex/sushiswap-v3/token.d.ts +6 -0
  164. package/build/dex/sushiswap-v3/token.js +23 -0
  165. package/build/dex/sushiswap-v3/token.js.map +1 -0
  166. package/build/dex/sushiswap-v3/types.d.ts +15 -0
  167. package/build/dex/sushiswap-v3/types.js +18 -0
  168. package/build/dex/sushiswap-v3/types.js.map +1 -0
  169. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +12 -0
  170. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +23 -0
  171. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +1 -0
  172. package/build/dex/woo-fi/config.d.ts +4 -0
  173. package/build/dex/woo-fi/config.js +141 -0
  174. package/build/dex/woo-fi/config.js.map +1 -0
  175. package/build/dex/woo-fi/constants.d.ts +5 -0
  176. package/build/dex/woo-fi/constants.js +20 -0
  177. package/build/dex/woo-fi/constants.js.map +1 -0
  178. package/build/dex/woo-fi/types.d.ts +48 -0
  179. package/build/dex/woo-fi/types.js +3 -0
  180. package/build/dex/woo-fi/types.js.map +1 -0
  181. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +14 -0
  182. package/build/dex/woo-fi/woo-fi-decimal-math.js +42 -0
  183. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +1 -0
  184. package/build/dex/woo-fi/woo-fi-math.d.ts +31 -0
  185. package/build/dex/woo-fi/woo-fi-math.js +300 -0
  186. package/build/dex/woo-fi/woo-fi-math.js.map +1 -0
  187. package/build/dex/woo-fi/woo-fi.d.ts +65 -0
  188. package/build/dex/woo-fi/woo-fi.js +480 -0
  189. package/build/dex/woo-fi/woo-fi.js.map +1 -0
  190. package/build/executor/Executor01BytecodeBuilder.d.ts +77 -0
  191. package/build/executor/Executor01BytecodeBuilder.js +359 -0
  192. package/build/executor/Executor01BytecodeBuilder.js.map +1 -0
  193. package/build/executor/Executor02BytecodeBuilder.d.ts +12 -0
  194. package/build/executor/Executor02BytecodeBuilder.js +14 -0
  195. package/build/executor/Executor02BytecodeBuilder.js.map +1 -0
  196. package/build/executor/ExecutorDetector.d.ts +28 -0
  197. package/build/executor/ExecutorDetector.js +89 -0
  198. package/build/executor/ExecutorDetector.js.map +1 -0
  199. package/build/executor/IExecutorBytecodeBuilder.d.ts +6 -0
  200. package/build/executor/IExecutorBytecodeBuilder.js +3 -0
  201. package/build/executor/IExecutorBytecodeBuilder.js.map +1 -0
  202. package/build/generic-swap-transaction-builder.d.ts +39 -0
  203. package/build/generic-swap-transaction-builder.js +156 -0
  204. package/build/generic-swap-transaction-builder.js.map +1 -0
  205. package/build/implementations/local-paraswap-sdk.js +2 -0
  206. package/build/implementations/local-paraswap-sdk.js.map +1 -1
  207. package/package.json +2 -2
  208. package/src/implementations/local-paraswap-sdk.ts +2 -0
  209. package/build/abi/wombat/pool.json +0 -1289
  210. package/build/dex/uniswap-v2/rebase-tokens.json +0 -7
@@ -0,0 +1,359 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Executor01BytecodeBuilder.js","sourceRoot":"","sources":["../../src/executor/Executor01BytecodeBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
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
+ }
@@ -0,0 +1,14 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,28 @@
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 {};
@@ -0,0 +1,89 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExecutorDetector.js","sourceRoot":"","sources":["../../src/executor/ExecutorDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
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
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IExecutorBytecodeBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IExecutorBytecodeBuilder.js","sourceRoot":"","sources":["../../src/executor/IExecutorBytecodeBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
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
+ }