@paraswap/dex-lib 3.8.2 → 3.8.3-integral-dex

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 (403) hide show
  1. package/.vscode/launch.json +13 -0
  2. package/.vscode/settings.json +3 -0
  3. package/build/abi/AaveV1_lending_pool.json +27 -0
  4. package/build/abi/Uncompressor.json +250 -0
  5. package/build/abi/integral/factory.json +333 -0
  6. package/build/abi/integral/oracle.json +501 -0
  7. package/build/abi/integral/pool.json +1041 -0
  8. package/build/abi/integral/relayer.json +1536 -0
  9. package/build/abi/oswap/oswap.abi.json +452 -0
  10. package/build/abi/platypus/asset.json +490 -0
  11. package/build/abi/platypus/avax-pool.json +820 -0
  12. package/build/abi/platypus/oracle.json +119 -0
  13. package/build/abi/platypus/pool.json +677 -0
  14. package/build/abi/smardex/all/smardex-router.json +648 -0
  15. package/build/abi/smardex/layer-1/smardex-factory.json +242 -0
  16. package/build/abi/smardex/layer-1/smardex-pool.json +506 -0
  17. package/build/abi/smardex/layer-2/smardex-factory.json +185 -0
  18. package/build/abi/smardex/layer-2/smardex-pool.json +578 -0
  19. package/build/abi/swaap-v1/pool.json +1346 -0
  20. package/build/config.js +1 -1
  21. package/build/dex/aave-v1/aave-v1.d.ts +33 -0
  22. package/build/dex/aave-v1/aave-v1.js +158 -0
  23. package/build/dex/aave-v1/aave-v1.js.map +1 -0
  24. package/build/dex/aave-v1/config.d.ts +11 -0
  25. package/build/dex/aave-v1/config.js +20 -0
  26. package/build/dex/aave-v1/config.js.map +1 -0
  27. package/build/dex/aave-v1/tokens-mainnet.json +134 -0
  28. package/build/dex/aave-v1/tokens.d.ts +3 -0
  29. package/build/dex/aave-v1/tokens.js +50 -0
  30. package/build/dex/aave-v1/tokens.js.map +1 -0
  31. package/build/dex/aave-v1/types.d.ts +12 -0
  32. package/build/dex/aave-v1/types.js +3 -0
  33. package/build/dex/aave-v1/types.js.map +1 -0
  34. package/build/dex/bProtocol.d.ts +18 -0
  35. package/build/dex/bProtocol.js +39 -0
  36. package/build/dex/bProtocol.js.map +1 -0
  37. package/build/dex/bancor.d.ts +26 -0
  38. package/build/dex/bancor.js +58 -0
  39. package/build/dex/bancor.js.map +1 -0
  40. package/build/dex/compound.d.ts +18 -0
  41. package/build/dex/compound.js +46 -0
  42. package/build/dex/compound.js.map +1 -0
  43. package/build/dex/curve-v1-factory/config.js +10 -47
  44. package/build/dex/curve-v1-factory/config.js.map +1 -1
  45. package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +2 -2
  46. package/build/dex/curve-v1-factory/curve-v1-factory.js +36 -96
  47. package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
  48. package/build/dex/curve-v1-factory/price-handlers/functions/constants.js.map +1 -1
  49. package/build/dex/curve-v1-factory/price-handlers/functions/get_dx.js +1 -13
  50. package/build/dex/curve-v1-factory/price-handlers/functions/get_dx.js.map +1 -1
  51. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.d.ts +2 -2
  52. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.js +1 -1
  53. package/build/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.js.map +1 -1
  54. package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.js +1 -1
  55. package/build/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.js.map +1 -1
  56. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.d.ts +3 -4
  57. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.js +9 -24
  58. package/build/dex/curve-v1-factory/state-polling-pools/pool-polling-base.js.map +1 -1
  59. package/build/dex/curve-v1-factory/types.d.ts +4 -20
  60. package/build/dex/curve-v1-factory/types.js +3 -11
  61. package/build/dex/curve-v1-factory/types.js.map +1 -1
  62. package/build/dex/curve-v1-stable-ng/config.js +0 -18
  63. package/build/dex/curve-v1-stable-ng/config.js.map +1 -1
  64. package/build/dex/curve-v2.d.ts +58 -0
  65. package/build/dex/curve-v2.js +180 -0
  66. package/build/dex/curve-v2.js.map +1 -0
  67. package/build/dex/dodo-v1.d.ts +33 -0
  68. package/build/dex/dodo-v1.js +63 -0
  69. package/build/dex/dodo-v1.js.map +1 -0
  70. package/build/dex/etherfi/etherfi.d.ts +26 -0
  71. package/build/dex/etherfi/etherfi.js +96 -0
  72. package/build/dex/etherfi/etherfi.js.map +1 -0
  73. package/build/dex/index.js +21 -3
  74. package/build/dex/index.js.map +1 -1
  75. package/build/dex/integral/config.d.ts +4 -0
  76. package/build/dex/integral/config.js +20 -0
  77. package/build/dex/integral/config.js.map +1 -0
  78. package/build/dex/integral/context.d.ts +40 -0
  79. package/build/dex/integral/context.js +158 -0
  80. package/build/dex/integral/context.js.map +1 -0
  81. package/build/dex/integral/helpers.d.ts +17 -0
  82. package/build/dex/integral/helpers.js +157 -0
  83. package/build/dex/integral/helpers.js.map +1 -0
  84. package/build/dex/integral/integral-factory.d.ts +21 -0
  85. package/build/dex/integral/integral-factory.js +92 -0
  86. package/build/dex/integral/integral-factory.js.map +1 -0
  87. package/build/dex/integral/integral-pool.d.ts +46 -0
  88. package/build/dex/integral/integral-pool.js +143 -0
  89. package/build/dex/integral/integral-pool.js.map +1 -0
  90. package/build/dex/integral/integral-pricing.d.ts +18 -0
  91. package/build/dex/integral/integral-pricing.js +114 -0
  92. package/build/dex/integral/integral-pricing.js.map +1 -0
  93. package/build/dex/integral/integral-relayer.d.ts +39 -0
  94. package/build/dex/integral/integral-relayer.js +189 -0
  95. package/build/dex/integral/integral-relayer.js.map +1 -0
  96. package/build/dex/integral/integral-token.d.ts +24 -0
  97. package/build/dex/integral/integral-token.js +56 -0
  98. package/build/dex/integral/integral-token.js.map +1 -0
  99. package/build/dex/integral/integral.d.ts +41 -0
  100. package/build/dex/integral/integral.js +377 -0
  101. package/build/dex/integral/integral.js.map +1 -0
  102. package/build/dex/integral/types.d.ts +84 -0
  103. package/build/dex/integral/types.js +9 -0
  104. package/build/dex/integral/types.js.map +1 -0
  105. package/build/dex/integral/utils-e2e.d.ts +9 -0
  106. package/build/dex/integral/utils-e2e.js +131 -0
  107. package/build/dex/integral/utils-e2e.js.map +1 -0
  108. package/build/dex/integral/utils.d.ts +17 -0
  109. package/build/dex/integral/utils.js +94 -0
  110. package/build/dex/integral/utils.js.map +1 -0
  111. package/build/dex/lido.d.ts +19 -0
  112. package/build/dex/lido.js +42 -0
  113. package/build/dex/lido.js.map +1 -0
  114. package/build/dex/onebit.d.ts +25 -0
  115. package/build/dex/onebit.js +42 -0
  116. package/build/dex/onebit.js.map +1 -0
  117. package/build/dex/oswap/config.d.ts +5 -0
  118. package/build/dex/oswap/config.js +31 -0
  119. package/build/dex/oswap/config.js.map +1 -0
  120. package/build/dex/oswap/oswap-pool.d.ts +51 -0
  121. package/build/dex/oswap/oswap-pool.js +150 -0
  122. package/build/dex/oswap/oswap-pool.js.map +1 -0
  123. package/build/dex/oswap/oswap.d.ts +46 -0
  124. package/build/dex/oswap/oswap.js +266 -0
  125. package/build/dex/oswap/oswap.js.map +1 -0
  126. package/build/dex/oswap/types.d.ts +20 -0
  127. package/build/dex/oswap/types.js +3 -0
  128. package/build/dex/oswap/types.js.map +1 -0
  129. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +0 -3
  130. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
  131. package/build/dex/platypus/asset.d.ts +14 -0
  132. package/build/dex/platypus/asset.js +97 -0
  133. package/build/dex/platypus/asset.js.map +1 -0
  134. package/build/dex/platypus/config.d.ts +11 -0
  135. package/build/dex/platypus/config.js +69 -0
  136. package/build/dex/platypus/config.js.map +1 -0
  137. package/build/dex/platypus/platypus.d.ts +62 -0
  138. package/build/dex/platypus/platypus.js +442 -0
  139. package/build/dex/platypus/platypus.js.map +1 -0
  140. package/build/dex/platypus/pool-avax.d.ts +8 -0
  141. package/build/dex/platypus/pool-avax.js +54 -0
  142. package/build/dex/platypus/pool-avax.js.map +1 -0
  143. package/build/dex/platypus/pool-base.d.ts +19 -0
  144. package/build/dex/platypus/pool-base.js +86 -0
  145. package/build/dex/platypus/pool-base.js.map +1 -0
  146. package/build/dex/platypus/pool-pure.d.ts +8 -0
  147. package/build/dex/platypus/pool-pure.js +37 -0
  148. package/build/dex/platypus/pool-pure.js.map +1 -0
  149. package/build/dex/platypus/pool-subscriber.d.ts +14 -0
  150. package/build/dex/platypus/pool-subscriber.js +167 -0
  151. package/build/dex/platypus/pool-subscriber.js.map +1 -0
  152. package/build/dex/platypus/pool.d.ts +8 -0
  153. package/build/dex/platypus/pool.js +58 -0
  154. package/build/dex/platypus/pool.js.map +1 -0
  155. package/build/dex/platypus/types.d.ts +92 -0
  156. package/build/dex/platypus/types.js +10 -0
  157. package/build/dex/platypus/types.js.map +1 -0
  158. package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
  159. package/build/dex/quickswap/spiritswap-v3.js +19 -0
  160. package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
  161. package/build/dex/sdai/config.d.ts +11 -0
  162. package/build/dex/sdai/config.js +21 -0
  163. package/build/dex/sdai/config.js.map +1 -0
  164. package/build/dex/sdai/constants.d.ts +2 -0
  165. package/build/dex/sdai/constants.js +6 -0
  166. package/build/dex/sdai/constants.js.map +1 -0
  167. package/build/dex/sdai/scripts/validate-state.d.ts +1 -0
  168. package/build/dex/sdai/scripts/validate-state.js +102 -0
  169. package/build/dex/sdai/scripts/validate-state.js.map +1 -0
  170. package/build/dex/sdai/sdai-pool.d.ts +16 -0
  171. package/build/dex/sdai/sdai-pool.js +85 -0
  172. package/build/dex/sdai/sdai-pool.js.map +1 -0
  173. package/build/dex/sdai/sdai.d.ts +51 -0
  174. package/build/dex/sdai/sdai.js +172 -0
  175. package/build/dex/sdai/sdai.js.map +1 -0
  176. package/build/dex/sdai/types.d.ts +21 -0
  177. package/build/dex/sdai/types.js +11 -0
  178. package/build/dex/sdai/types.js.map +1 -0
  179. package/build/dex/sdai/utils.d.ts +4 -0
  180. package/build/dex/sdai/utils.js +39 -0
  181. package/build/dex/sdai/utils.js.map +1 -0
  182. package/build/dex/smardex/config.d.ts +4 -0
  183. package/build/dex/smardex/config.js +64 -0
  184. package/build/dex/smardex/config.js.map +1 -0
  185. package/build/dex/smardex/constants.d.ts +18 -0
  186. package/build/dex/smardex/constants.js +33 -0
  187. package/build/dex/smardex/constants.js.map +1 -0
  188. package/build/dex/smardex/sdk/constants.d.ts +6 -0
  189. package/build/dex/smardex/sdk/constants.js +13 -0
  190. package/build/dex/smardex/sdk/constants.js.map +1 -0
  191. package/build/dex/smardex/sdk/core.d.ts +113 -0
  192. package/build/dex/smardex/sdk/core.js +499 -0
  193. package/build/dex/smardex/sdk/core.js.map +1 -0
  194. package/build/dex/smardex/sdk/errors.d.ts +15 -0
  195. package/build/dex/smardex/sdk/errors.js +22 -0
  196. package/build/dex/smardex/sdk/errors.js.map +1 -0
  197. package/build/dex/smardex/sdk/types.d.ts +62 -0
  198. package/build/dex/smardex/sdk/types.js +3 -0
  199. package/build/dex/smardex/sdk/types.js.map +1 -0
  200. package/build/dex/smardex/sdk/utils.d.ts +44 -0
  201. package/build/dex/smardex/sdk/utils.js +133 -0
  202. package/build/dex/smardex/sdk/utils.js.map +1 -0
  203. package/build/dex/smardex/smardex-event-pool.d.ts +28 -0
  204. package/build/dex/smardex/smardex-event-pool.js +119 -0
  205. package/build/dex/smardex/smardex-event-pool.js.map +1 -0
  206. package/build/dex/smardex/smardex.d.ts +65 -0
  207. package/build/dex/smardex/smardex.js +519 -0
  208. package/build/dex/smardex/smardex.js.map +1 -0
  209. package/build/dex/smardex/types.d.ts +55 -0
  210. package/build/dex/smardex/types.js +3 -0
  211. package/build/dex/smardex/types.js.map +1 -0
  212. package/build/dex/smoothy.d.ts +26 -0
  213. package/build/dex/smoothy.js +48 -0
  214. package/build/dex/smoothy.js.map +1 -0
  215. package/build/dex/solidly/forks-override/cone.d.ts +22 -0
  216. package/build/dex/solidly/forks-override/cone.js +53 -0
  217. package/build/dex/solidly/forks-override/cone.js.map +1 -0
  218. package/build/dex/solidly/forks-override/solisnek.d.ts +8 -0
  219. package/build/dex/solidly/forks-override/solisnek.js +15 -0
  220. package/build/dex/solidly/forks-override/solisnek.js.map +1 -0
  221. package/build/dex/stable-pool.d.ts +28 -0
  222. package/build/dex/stable-pool.js +62 -0
  223. package/build/dex/stable-pool.js.map +1 -0
  224. package/build/dex/swaap-v1/config.d.ts +17 -0
  225. package/build/dex/swaap-v1/config.js +56 -0
  226. package/build/dex/swaap-v1/config.js.map +1 -0
  227. package/build/dex/swaap-v1/constants.d.ts +6 -0
  228. package/build/dex/swaap-v1/constants.js +17 -0
  229. package/build/dex/swaap-v1/constants.js.map +1 -0
  230. package/build/dex/swaap-v1/libraries/ChainlinkUtils.d.ts +25 -0
  231. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js +62 -0
  232. package/build/dex/swaap-v1/libraries/ChainlinkUtils.js.map +1 -0
  233. package/build/dex/swaap-v1/libraries/Const.d.ts +18 -0
  234. package/build/dex/swaap-v1/libraries/Const.js +26 -0
  235. package/build/dex/swaap-v1/libraries/Const.js.map +1 -0
  236. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.d.ts +77 -0
  237. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js +316 -0
  238. package/build/dex/swaap-v1/libraries/GeometricBrownianMotion.js.map +1 -0
  239. package/build/dex/swaap-v1/libraries/LogExpMath.d.ts +75 -0
  240. package/build/dex/swaap-v1/libraries/LogExpMath.js +418 -0
  241. package/build/dex/swaap-v1/libraries/LogExpMath.js.map +1 -0
  242. package/build/dex/swaap-v1/libraries/MathMMM.d.ts +185 -0
  243. package/build/dex/swaap-v1/libraries/MathMMM.js +453 -0
  244. package/build/dex/swaap-v1/libraries/MathMMM.js.map +1 -0
  245. package/build/dex/swaap-v1/libraries/Num.d.ts +31 -0
  246. package/build/dex/swaap-v1/libraries/Num.js +167 -0
  247. package/build/dex/swaap-v1/libraries/Num.js.map +1 -0
  248. package/build/dex/swaap-v1/libraries/PoolQuotations.d.ts +23 -0
  249. package/build/dex/swaap-v1/libraries/PoolQuotations.js +131 -0
  250. package/build/dex/swaap-v1/libraries/PoolQuotations.js.map +1 -0
  251. package/build/dex/swaap-v1/libraries/Struct.d.ts +56 -0
  252. package/build/dex/swaap-v1/libraries/Struct.js +3 -0
  253. package/build/dex/swaap-v1/libraries/Struct.js.map +1 -0
  254. package/build/dex/swaap-v1/swaap-v1-pool.d.ts +45 -0
  255. package/build/dex/swaap-v1/swaap-v1-pool.js +656 -0
  256. package/build/dex/swaap-v1/swaap-v1-pool.js.map +1 -0
  257. package/build/dex/swaap-v1/swaap-v1.d.ts +61 -0
  258. package/build/dex/swaap-v1/swaap-v1.js +369 -0
  259. package/build/dex/swaap-v1/swaap-v1.js.map +1 -0
  260. package/build/dex/swaap-v1/types.d.ts +106 -0
  261. package/build/dex/swaap-v1/types.js +9 -0
  262. package/build/dex/swaap-v1/types.js.map +1 -0
  263. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  264. package/build/dex/trader-joe-v2.1.js +79 -0
  265. package/build/dex/trader-joe-v2.1.js.map +1 -0
  266. package/build/dex/uniswap-v3/contract-math/Oracle.js +4 -4
  267. package/build/dex/uniswap-v3/contract-math/Oracle.js.map +1 -1
  268. package/build/executor/compressor/Compressor.d.ts +23 -0
  269. package/build/executor/compressor/Compressor.js +144 -0
  270. package/build/executor/compressor/Compressor.js.map +1 -0
  271. package/build/executor/compressor/compress.d.ts +17 -0
  272. package/build/executor/compressor/compress.js +187 -0
  273. package/build/executor/compressor/compress.js.map +1 -0
  274. package/build/executor/compressor/compress_functions/addressSubstitution.d.ts +6 -0
  275. package/build/executor/compressor/compress_functions/addressSubstitution.js +29 -0
  276. package/build/executor/compressor/compress_functions/addressSubstitution.js.map +1 -0
  277. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.d.ts +10 -0
  278. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js +40 -0
  279. package/build/executor/compressor/compress_functions/addressSubstitutionFromObject.js.map +1 -0
  280. package/build/executor/compressor/compress_functions/byteSubstitution.d.ts +11 -0
  281. package/build/executor/compressor/compress_functions/byteSubstitution.js +64 -0
  282. package/build/executor/compressor/compress_functions/byteSubstitution.js.map +1 -0
  283. package/build/executor/compressor/compress_functions/ffSubstitution.d.ts +7 -0
  284. package/build/executor/compressor/compress_functions/ffSubstitution.js +54 -0
  285. package/build/executor/compressor/compress_functions/ffSubstitution.js.map +1 -0
  286. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.d.ts +8 -0
  287. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js +67 -0
  288. package/build/executor/compressor/compress_functions/findLongestAndSubstitute.js.map +1 -0
  289. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.d.ts +8 -0
  290. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js +61 -0
  291. package/build/executor/compressor/compress_functions/findLongestAndSubstitute_old.js.map +1 -0
  292. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.d.ts +6 -0
  293. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js +37 -0
  294. package/build/executor/compressor/compress_functions/reverseAddressSubstitution.js.map +1 -0
  295. package/build/executor/compressor/compress_functions/searchUnusedBytes.d.ts +9 -0
  296. package/build/executor/compressor/compress_functions/searchUnusedBytes.js +33 -0
  297. package/build/executor/compressor/compress_functions/searchUnusedBytes.js.map +1 -0
  298. package/build/executor/compressor/fetchSaved.d.ts +0 -0
  299. package/build/executor/compressor/fetchSaved.js +17 -0
  300. package/build/executor/compressor/fetchSaved.js.map +1 -0
  301. package/build/executor/compressor/utils/computeCostL2.d.ts +2 -0
  302. package/build/executor/compressor/utils/computeCostL2.js +14 -0
  303. package/build/executor/compressor/utils/computeCostL2.js.map +1 -0
  304. package/build/executor/compressor/utils/findLongestDuplicatedString.d.ts +2 -0
  305. package/build/executor/compressor/utils/findLongestDuplicatedString.js +30 -0
  306. package/build/executor/compressor/utils/findLongestDuplicatedString.js.map +1 -0
  307. package/build/executor/compressor/utils/getAllIndexes.d.ts +2 -0
  308. package/build/executor/compressor/utils/getAllIndexes.js +12 -0
  309. package/build/executor/compressor/utils/getAllIndexes.js.map +1 -0
  310. package/build/executor/compressor/utils/getByteForAddress.d.ts +2 -0
  311. package/build/executor/compressor/utils/getByteForAddress.js +14 -0
  312. package/build/executor/compressor/utils/getByteForAddress.js.map +1 -0
  313. package/build/executor/compressor/utils/intTo2Bytes.d.ts +2 -0
  314. package/build/executor/compressor/utils/intTo2Bytes.js +14 -0
  315. package/build/executor/compressor/utils/intTo2Bytes.js.map +1 -0
  316. package/build/executor/compressor/utils/intTo3Bytes.d.ts +2 -0
  317. package/build/executor/compressor/utils/intTo3Bytes.js +18 -0
  318. package/build/executor/compressor/utils/intTo3Bytes.js.map +1 -0
  319. package/build/executor/compressor/utils/intToByte.d.ts +2 -0
  320. package/build/executor/compressor/utils/intToByte.js +10 -0
  321. package/build/executor/compressor/utils/intToByte.js.map +1 -0
  322. package/build/generic-swap-transaction-builder.js +3 -1
  323. package/build/generic-swap-transaction-builder.js.map +1 -1
  324. package/build/router/simpleswap.js +3 -1
  325. package/build/router/simpleswap.js.map +1 -1
  326. package/package.json +2 -2
  327. package/src/abi/BProtocol.json +1155 -0
  328. package/src/abi/Jarvis.json +1172 -0
  329. package/src/abi/MStableAsset.json +1545 -0
  330. package/src/abi/OneInchLp.json +1304 -0
  331. package/src/abi/Onebit.json +736 -0
  332. package/src/abi/Shell.json +1294 -0
  333. package/src/abi/TraderJoeV2Router.json +50 -0
  334. package/src/abi/integral/factory.json +333 -0
  335. package/src/abi/integral/oracle.json +501 -0
  336. package/src/abi/integral/pool.json +1041 -0
  337. package/src/abi/integral/relayer.json +1536 -0
  338. package/src/abi/zrx.v2.json +1967 -0
  339. package/src/abi/zrx.v3.json +3454 -0
  340. package/src/abi/zrx.v4.json +2193 -0
  341. package/src/config.ts +1 -1
  342. package/src/dex/OneInchLp.ts +84 -0
  343. package/src/dex/bProtocol/bProtocol-e2e.test.ts +93 -0
  344. package/src/dex/bProtocol/bProtocol.ts +108 -0
  345. package/src/dex/bProtocol/types.ts +13 -0
  346. package/src/dex/curve-v1-factory/config.ts +10 -47
  347. package/src/dex/curve-v1-factory/curve-v1-factory-e2e.test.ts +16 -92
  348. package/src/dex/curve-v1-factory/curve-v1-factory-integration.test.ts +5 -125
  349. package/src/dex/curve-v1-factory/curve-v1-factory.ts +45 -137
  350. package/src/dex/curve-v1-factory/price-handlers/functions/constants.ts +2 -0
  351. package/src/dex/curve-v1-factory/price-handlers/functions/get_dx.ts +1 -24
  352. package/src/dex/curve-v1-factory/state-polling-pools/custom-pool-polling.ts +2 -3
  353. package/src/dex/curve-v1-factory/state-polling-pools/factory-pool-polling.ts +0 -1
  354. package/src/dex/curve-v1-factory/state-polling-pools/pool-polling-base.ts +10 -31
  355. package/src/dex/curve-v1-factory/types.ts +6 -22
  356. package/src/dex/curve-v1-stable-ng/config.ts +0 -18
  357. package/src/dex/curve-v1-stable-ng/curve-v1-stable-ng-e2e.test.ts +0 -17
  358. package/src/dex/index.ts +20 -3
  359. package/src/dex/integral/config.ts +20 -0
  360. package/src/dex/integral/context.ts +287 -0
  361. package/src/dex/integral/integral-e2e.test.ts +86 -0
  362. package/src/dex/integral/integral-events.test.ts +412 -0
  363. package/src/dex/integral/integral-factory.ts +146 -0
  364. package/src/dex/integral/integral-integration.test.ts +221 -0
  365. package/src/dex/integral/integral-pool.ts +198 -0
  366. package/src/dex/integral/integral-pricing.ts +190 -0
  367. package/src/dex/integral/integral-relayer.ts +285 -0
  368. package/src/dex/integral/integral-token.ts +95 -0
  369. package/src/dex/integral/integral.ts +523 -0
  370. package/src/dex/integral/test-artifacts/configs.json +1 -0
  371. package/src/dex/integral/test-artifacts/logs.json +1 -0
  372. package/src/dex/integral/test-artifacts/states.json +1 -0
  373. package/src/dex/integral/types.ts +88 -0
  374. package/src/dex/integral/utils-e2e.ts +194 -0
  375. package/src/dex/integral/utils.ts +146 -0
  376. package/src/dex/jarvis.ts +262 -0
  377. package/src/dex/mStable.ts +147 -0
  378. package/src/dex/onebit/onebit.ts +113 -0
  379. package/src/dex/onebit/types.ts +17 -0
  380. package/src/dex/paraswap-limit-orders/paraswap-limit-orders-e2e.test.ts +68 -152
  381. package/src/dex/paraswap-limit-orders/paraswap-limit-orders.ts +0 -3
  382. package/src/dex/shell.ts +84 -0
  383. package/src/dex/trader-joe-v2.ts +148 -0
  384. package/src/dex/uniswap-v3/contract-math/Oracle.ts +5 -4
  385. package/src/dex/zerox/config.ts +31 -0
  386. package/src/dex/zerox/index.ts +328 -0
  387. package/src/dex/zerox/order.ts +62 -0
  388. package/src/dex/zerox/types.ts +82 -0
  389. package/src/dex/zerox/zerox-e2e.test.ts +110 -0
  390. package/src/generic-swap-transaction-builder.ts +3 -1
  391. package/src/router/simpleswap.ts +3 -1
  392. package/tests/constants-e2e.ts +2 -2
  393. package/tests/utils-e2e.ts +0 -2
  394. package/.idea/aws.xml +0 -17
  395. package/.idea/codeStyles/Project.xml +0 -19
  396. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  397. package/.idea/misc.xml +0 -6
  398. package/.idea/modules.xml +0 -8
  399. package/.idea/paraswap-dex-lib.iml +0 -9
  400. package/.idea/prettier.xml +0 -7
  401. package/.idea/vcs.xml +0 -6
  402. package/src/abi/curve-v1-factory/CurveV1Router.abi.json +0 -331
  403. package/src/dex/curve-v1-factory/optimizer.ts +0 -61
@@ -0,0 +1,194 @@
1
+ import _ from 'lodash';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { Log, BlockHeader, Address } from '../../types';
5
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
6
+ import { Provider } from '@ethersproject/providers';
7
+ import { DeepReadonly } from 'ts-essentials';
8
+
9
+ const pathRoot = path.join(__dirname, './test-artifacts/');
10
+ const configPath = './configs.json';
11
+ const absConfigPath = path.join(pathRoot, configPath);
12
+ let configs: { [k: string]: any } = {};
13
+ if (fs.existsSync(absConfigPath)) configs = require(absConfigPath);
14
+
15
+ const statePath = './states.json';
16
+ const absStatePath = path.join(pathRoot, statePath);
17
+ let states: { [k: string]: any } = {};
18
+ if (fs.existsSync(absStatePath)) states = require(absStatePath);
19
+
20
+ const logPath = './logs.json';
21
+ const absLogPath = path.join(pathRoot, logPath);
22
+ let logs: { [k: string]: BlockInfo } = {};
23
+ if (fs.existsSync(absLogPath)) logs = require(absLogPath);
24
+
25
+ const bigintify = (val: string) => BigInt(val);
26
+ const stringify = (val: bigint) => val.toString();
27
+
28
+ interface BlockInfo {
29
+ logs: Log[];
30
+ blockHeaders: { [blockNumber: number]: BlockHeader };
31
+ }
32
+
33
+ export async function updateEventSubscriber<SubscriberState>(
34
+ eventSubscriber: StatefulEventSubscriber<SubscriberState>,
35
+ subscribedAddress: Address[],
36
+ fetchState: (blocknumber: number) => Promise<SubscriberState>,
37
+ blockNumber: number,
38
+ cacheKey: string,
39
+ provider: Provider,
40
+ ) {
41
+ // Get state of the subscriber block before the event was released
42
+ let poolState = getSavedState(blockNumber - 1, cacheKey);
43
+ if (!poolState) {
44
+ poolState = await fetchState(blockNumber - 1);
45
+ saveState(blockNumber - 1, cacheKey, poolState);
46
+ }
47
+
48
+ // Set subscriber state before the event block
49
+ eventSubscriber.setState(
50
+ poolState as DeepReadonly<SubscriberState>,
51
+ blockNumber - 1,
52
+ );
53
+ eventSubscriber.isTracking = () => true;
54
+
55
+ // Get logs and blockHeader of the block when the event was emitted
56
+ let blockInfo = getSavedBlockInfo(blockNumber, cacheKey);
57
+ if (!blockInfo) {
58
+ const logs = (
59
+ await Promise.all(
60
+ subscribedAddress.map(address =>
61
+ provider.getLogs({
62
+ fromBlock: blockNumber,
63
+ toBlock: blockNumber,
64
+ address,
65
+ }),
66
+ ),
67
+ )
68
+ )
69
+ .flat()
70
+ .sort((a, b) => a.logIndex - b.logIndex);
71
+
72
+ blockInfo = {
73
+ logs,
74
+ blockHeaders: {
75
+ [blockNumber]: <BlockHeader>(
76
+ (<unknown>await provider.getBlock(blockNumber))
77
+ ),
78
+ },
79
+ };
80
+ saveBlockInfo(blockNumber, cacheKey, blockInfo);
81
+ }
82
+
83
+ // Update subscriber with event logs
84
+ await eventSubscriber.update(blockInfo.logs, blockInfo.blockHeaders);
85
+ }
86
+
87
+ export async function checkEventSubscriber<SubscriberState>(
88
+ eventSubscriber: StatefulEventSubscriber<SubscriberState>,
89
+ fetchState: (blocknumber: number) => Promise<SubscriberState>,
90
+ blockNumber: number,
91
+ cacheKey: string,
92
+ stateCompare?: (
93
+ state: SubscriberState,
94
+ expectedState: SubscriberState,
95
+ ) => void,
96
+ ) {
97
+ // Get the expected state of the subscriber after the event
98
+ let expectedNewPoolState = getSavedState(blockNumber, cacheKey);
99
+ if (!expectedNewPoolState) {
100
+ expectedNewPoolState = await fetchState(blockNumber);
101
+ saveState(blockNumber, cacheKey, expectedNewPoolState);
102
+ }
103
+
104
+ // Get the updated state of the subscriber
105
+ const newPoolState = eventSubscriber.getState(blockNumber);
106
+
107
+ // Expect the updated state to be same as the expected state
108
+ if (stateCompare) {
109
+ expect(newPoolState).not.toBeNull();
110
+ stateCompare(
111
+ newPoolState as SubscriberState,
112
+ expectedNewPoolState as SubscriberState,
113
+ );
114
+ } else {
115
+ expect(newPoolState).toEqual(expectedNewPoolState);
116
+ }
117
+ }
118
+
119
+ export function deepTypecast<T>(
120
+ obj: any,
121
+ checker: (val: any) => boolean,
122
+ caster: (val: T) => any,
123
+ ): any {
124
+ return _.forEach(obj, (val: any, key: any, obj: any) => {
125
+ obj[key] = checker(val)
126
+ ? caster(val)
127
+ : _.isObject(val)
128
+ ? deepTypecast(val, checker, caster)
129
+ : val;
130
+ });
131
+ }
132
+
133
+ export function getSavedConfig<Config>(
134
+ blockNumber: number,
135
+ cacheKey: string,
136
+ ): Config | undefined {
137
+ const _config = configs[`${cacheKey}_${blockNumber}`];
138
+ if (_config) {
139
+ const checker = (obj: any) => _.isString(obj) && obj.includes('bi@');
140
+ const caster = (obj: string) => bigintify(obj.slice(3));
141
+ return deepTypecast<string>(_.cloneDeep(_config), checker, caster);
142
+ }
143
+ return undefined;
144
+ }
145
+
146
+ export function saveConfig<Config>(
147
+ blockNumber: number,
148
+ cacheKey: string,
149
+ config: Config,
150
+ ) {
151
+ const checker = (obj: any) => typeof obj === 'bigint';
152
+ const caster = (obj: bigint) => 'bi@'.concat(stringify(obj));
153
+ const _config = deepTypecast<bigint>(_.cloneDeep(config), checker, caster);
154
+ configs[`${cacheKey}_${blockNumber}`] = _config;
155
+ fs.writeFileSync(absConfigPath, JSON.stringify(configs, null, 2));
156
+ }
157
+
158
+ export function getSavedState<SubscriberState>(
159
+ blockNumber: number,
160
+ cacheKey: string,
161
+ ): SubscriberState | undefined {
162
+ const _state = states[`${cacheKey}_${blockNumber}`];
163
+ if (_state) {
164
+ const checker = (obj: any) => _.isString(obj) && obj.includes('bi@');
165
+ const caster = (obj: string) => bigintify(obj.slice(3));
166
+ return deepTypecast<string>(_.cloneDeep(_state), checker, caster);
167
+ }
168
+ return undefined;
169
+ }
170
+
171
+ function saveState<SubscriberState>(
172
+ blockNumber: number,
173
+ cacheKey: string,
174
+ state: SubscriberState,
175
+ ) {
176
+ const checker = (obj: any) => typeof obj === 'bigint';
177
+ const caster = (obj: bigint) => 'bi@'.concat(stringify(obj));
178
+ const _state = deepTypecast<bigint>(_.cloneDeep(state), checker, caster);
179
+ states[`${cacheKey}_${blockNumber}`] = _state;
180
+ fs.writeFileSync(absStatePath, JSON.stringify(states, null, 2));
181
+ }
182
+
183
+ function getSavedBlockInfo(blockNumber: number, cacheKey: string): BlockInfo {
184
+ return logs[`${cacheKey}_${blockNumber}`];
185
+ }
186
+
187
+ function saveBlockInfo(
188
+ blockNumber: number,
189
+ cacheKey: string,
190
+ blockInfo: BlockInfo,
191
+ ) {
192
+ logs[`${cacheKey}_${blockNumber}`] = blockInfo;
193
+ fs.writeFileSync(absLogPath, JSON.stringify(logs, null, 2));
194
+ }
@@ -0,0 +1,146 @@
1
+ import _ from 'lodash';
2
+ import { BytesLike } from 'ethers';
3
+ import { generalDecoder } from '../../lib/decoders';
4
+ import { MultiResult } from '../../lib/multi-wrapper';
5
+ import { Address } from '@paraswap/core';
6
+ import { _require } from '../../utils';
7
+ import { FullMath } from '../uniswap-v3/contract-math/FullMath';
8
+ import { Oracle } from '../uniswap-v3/contract-math/Oracle';
9
+ import { TickMath } from '../uniswap-v3/contract-math/TickMath';
10
+ import { PoolState as UniswapPoolState } from '../uniswap-v3/types';
11
+ import { IntegralContext } from './context';
12
+ import { PoolStates, RelayerPoolState } from './types';
13
+
14
+ export function ceil_div(a: bigint, b: bigint) {
15
+ const c = a / b;
16
+ if (a != b * c) {
17
+ return c + 1n;
18
+ } else {
19
+ return c;
20
+ }
21
+ }
22
+
23
+ export const uint32ToNumber = (
24
+ result: MultiResult<BytesLike> | BytesLike,
25
+ ): number => {
26
+ return generalDecoder(result, ['uint32'], 0, value =>
27
+ parseInt(value[0].toString(), 10),
28
+ );
29
+ };
30
+
31
+ export function sortTokens(srcAddress: Address, destAddress: Address) {
32
+ return [srcAddress, destAddress].sort((a, b) => (a < b ? -1 : 1));
33
+ }
34
+
35
+ export function getDecimalsConverter(
36
+ decimals0: number,
37
+ decimals1: number,
38
+ inverted: boolean,
39
+ ) {
40
+ return (
41
+ 10n **
42
+ (18n + BigInt(inverted ? decimals1 - decimals0 : decimals0 - decimals1))
43
+ );
44
+ }
45
+
46
+ export function getPrice(states: PoolStates, inverted: boolean) {
47
+ const { base, pricing, relayer } = states;
48
+ const decimalsConverter = getDecimalsConverter(
49
+ base.decimals0,
50
+ base.decimals1,
51
+ false,
52
+ );
53
+ const spotPrice = getSpotPrice(pricing, decimalsConverter);
54
+ const averagePrice = getAveragePrice(relayer, pricing, decimalsConverter);
55
+ if (inverted) {
56
+ return 10n ** 36n / (spotPrice > averagePrice ? spotPrice : averagePrice);
57
+ } else {
58
+ return spotPrice < averagePrice ? spotPrice : averagePrice;
59
+ }
60
+ }
61
+
62
+ export function getSpotPrice(
63
+ pricing: UniswapPoolState,
64
+ decimalsConverter: bigint,
65
+ ) {
66
+ const sqrtPriceX96 = pricing.slot0.sqrtPriceX96;
67
+ const priceX128 = FullMath.mulDiv(sqrtPriceX96, sqrtPriceX96, 2n ** 64n);
68
+ return FullMath.mulDiv(priceX128, decimalsConverter, 2n ** 128n);
69
+ }
70
+
71
+ export function getAveragePrice(
72
+ relayer: RelayerPoolState,
73
+ pricing: UniswapPoolState,
74
+ decimalsConverter: bigint,
75
+ ) {
76
+ _require(relayer.twapInterval > 0, 'Twap Interval not set');
77
+ const secondsAgo = BigInt(relayer.twapInterval);
78
+ const secondsAgos = [secondsAgo, 0n];
79
+ const tickCumulatives = getTickCumulatives(pricing, secondsAgos);
80
+
81
+ const delta = tickCumulatives[1] - tickCumulatives[0];
82
+ let arithmeticMeanTick = delta / secondsAgo;
83
+ if (delta < 0 && delta % secondsAgo != 0n) {
84
+ --arithmeticMeanTick;
85
+ }
86
+
87
+ const sqrtRatioX96 = TickMath.getSqrtRatioAtTick(arithmeticMeanTick);
88
+ const ratioX128 = FullMath.mulDiv(sqrtRatioX96, sqrtRatioX96, 2n ** 64n);
89
+ return FullMath.mulDiv(ratioX128, decimalsConverter, 2n ** 128n);
90
+ }
91
+
92
+ export function getTickCumulatives(
93
+ poolState: UniswapPoolState,
94
+ secondsAgos: bigint[],
95
+ ) {
96
+ const { tickCumulatives } = secondsAgos.reduce(
97
+ (memo, secondsAgo, i) => {
98
+ [memo.tickCumulatives[i], memo.secondsPerLiquidityCumulativeX128s[i]] =
99
+ Oracle.observeSingle(
100
+ poolState,
101
+ BigInt.asUintN(32, poolState.blockTimestamp),
102
+ secondsAgo,
103
+ poolState.slot0.tick,
104
+ poolState.slot0.observationIndex,
105
+ poolState.liquidity,
106
+ poolState.slot0.observationCardinality,
107
+ );
108
+ return memo;
109
+ },
110
+ {
111
+ tickCumulatives: Array<bigint>(secondsAgos.length),
112
+ secondsPerLiquidityCumulativeX128s: Array<bigint>(secondsAgos.length),
113
+ },
114
+ );
115
+
116
+ return tickCumulatives;
117
+ }
118
+
119
+ export function isInverted(tokenIn: Address, tokenOut: Address) {
120
+ const [, token1] =
121
+ tokenIn.toLowerCase() < tokenOut.toLowerCase()
122
+ ? [tokenIn, tokenOut]
123
+ : [tokenOut, tokenIn];
124
+ return tokenIn === token1;
125
+ }
126
+
127
+ export function getPoolIdentifier(
128
+ dexKey: string,
129
+ srcAddress: Address,
130
+ destAddress: Address,
131
+ ) {
132
+ const tokenAddresses = sortTokens(
133
+ srcAddress.toLowerCase(),
134
+ destAddress.toLowerCase(),
135
+ ).join('_');
136
+ return `${dexKey}_${tokenAddresses}`;
137
+ }
138
+
139
+ export function getPoolBackReferencedFrom(
140
+ context: IntegralContext,
141
+ poolAddress: Address,
142
+ ) {
143
+ return Object.entries(context.pools).find(
144
+ ([, pool]) => pool.base?.poolAddress === poolAddress,
145
+ );
146
+ }
@@ -0,0 +1,262 @@
1
+ import { Interface, JsonFragment } from '@ethersproject/abi';
2
+ import { NULL_ADDRESS, SwapSide } from '../constants';
3
+ import {
4
+ AdapterExchangeParam,
5
+ Address,
6
+ DexExchangeParam,
7
+ NumberAsString,
8
+ SimpleExchangeParam,
9
+ } from '../types';
10
+ import { IDexTxBuilder } from './idex';
11
+ import { SimpleExchange } from './simple-exchange';
12
+ import JarvisABI from '../abi/Jarvis.json';
13
+ import Web3 from 'web3';
14
+ import { IDexHelper } from '../dex-helper';
15
+ import { extractReturnAmountPosition } from '../executor/utils';
16
+
17
+ const THIRTY_MINUTES = 60 * 30;
18
+
19
+ export type JarvisData = {
20
+ derivatives: string;
21
+ destDerivatives?: string;
22
+ pools: string[];
23
+ fee: string;
24
+ method: JarvisFunctions;
25
+ router: Address;
26
+ };
27
+
28
+ type JarvisMintParam = [
29
+ derivative: string,
30
+ minNumTokens: string,
31
+ collateralAmount: string,
32
+ feePercentage: string,
33
+ expiration: string,
34
+ recipient: string,
35
+ ];
36
+
37
+ type JarvisRedeemParam = [
38
+ derivative: string,
39
+ numTokens: string,
40
+ minCollateral: string,
41
+ feePercentage: string,
42
+ expiration: string,
43
+ recipient: string,
44
+ ];
45
+
46
+ type JarvisExchangeParam = [
47
+ derivative: string,
48
+ destPool: string,
49
+ destDerivative: string,
50
+ numTokens: string,
51
+ minDestNumTokens: string,
52
+ feePercentage: string,
53
+ expiration: string,
54
+ recipient: string,
55
+ ];
56
+
57
+ type JarvisParam = JarvisExchangeParam | JarvisMintParam | JarvisRedeemParam;
58
+
59
+ enum JarvisFunctions {
60
+ mint = 'mint',
61
+ redeem = 'redeem',
62
+ exchange = 'exchange',
63
+ }
64
+
65
+ export class Jarvis
66
+ extends SimpleExchange
67
+ implements IDexTxBuilder<JarvisData, JarvisParam>
68
+ {
69
+ static dexKeys = ['jarvis'];
70
+ poolInterface: Interface;
71
+ needWrapNative = false;
72
+
73
+ constructor(dexHelper: IDexHelper) {
74
+ super(dexHelper, 'jarvis');
75
+ this.poolInterface = new Interface(JarvisABI as JsonFragment[]);
76
+ }
77
+
78
+ getAdapterParam(
79
+ srcToken: string,
80
+ destToken: string,
81
+ srcAmount: string,
82
+ destAmount: string,
83
+ data: JarvisData,
84
+ side: SwapSide,
85
+ ): AdapterExchangeParam {
86
+ const { method } = data;
87
+ const type = [
88
+ JarvisFunctions.mint,
89
+ JarvisFunctions.redeem,
90
+ JarvisFunctions.exchange,
91
+ ].indexOf(method);
92
+
93
+ if (type === undefined) {
94
+ throw new Error(
95
+ `Jarvis: Invalid OpType ${method}, Should be one of ['mint', 'exchange', 'redeem']`,
96
+ );
97
+ }
98
+
99
+ const payload = this.abiCoder.encodeParameter(
100
+ {
101
+ ParentStruct: {
102
+ opType: 'uint',
103
+ derivatives: 'address',
104
+ destDerivatives: 'address',
105
+ fee: 'uint128',
106
+ destPool: 'address',
107
+ expiration: 'uint128',
108
+ },
109
+ },
110
+ {
111
+ opType: type,
112
+ derivatives: data.derivatives,
113
+ destDerivatives: data.destDerivatives || NULL_ADDRESS,
114
+ fee: data.fee,
115
+ destPool: data.pools[1] || NULL_ADDRESS,
116
+ expiration: (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0),
117
+ },
118
+ );
119
+
120
+ return {
121
+ targetExchange: data.pools[0],
122
+ payload,
123
+ networkFee: '0',
124
+ };
125
+ }
126
+
127
+ async getSimpleParam(
128
+ srcToken: string,
129
+ destToken: string,
130
+ srcAmount: string,
131
+ destAmount: string,
132
+ data: JarvisData,
133
+ side: SwapSide,
134
+ ): Promise<SimpleExchangeParam> {
135
+ const swapFunction = data.method;
136
+ const timestamp = (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0);
137
+ let swapFunctionParams: JarvisParam;
138
+ switch (swapFunction) {
139
+ case JarvisFunctions.mint:
140
+ swapFunctionParams = [
141
+ data.derivatives,
142
+ destAmount,
143
+ srcAmount,
144
+ data.fee,
145
+ timestamp,
146
+ this.augustusAddress,
147
+ ];
148
+ break;
149
+ case JarvisFunctions.redeem:
150
+ swapFunctionParams = [
151
+ data.derivatives,
152
+ srcAmount,
153
+ destAmount,
154
+ data.fee,
155
+ timestamp,
156
+ this.augustusAddress,
157
+ ];
158
+ break;
159
+ case JarvisFunctions.exchange:
160
+ swapFunctionParams = [
161
+ data.derivatives,
162
+ data.pools[1],
163
+ data.destDerivatives!,
164
+ srcAmount,
165
+ destAmount,
166
+ data.fee,
167
+ timestamp,
168
+ this.augustusAddress,
169
+ ];
170
+ break;
171
+ default:
172
+ throw new Error(`Unknown function ${swapFunction}`);
173
+ }
174
+
175
+ const swapData = this.poolInterface.encodeFunctionData(swapFunction, [
176
+ swapFunctionParams,
177
+ ]);
178
+
179
+ return this.buildSimpleParamWithoutWETHConversion(
180
+ srcToken,
181
+ srcAmount,
182
+ destToken,
183
+ destAmount,
184
+ swapData,
185
+ data.pools[0],
186
+ );
187
+ }
188
+
189
+ getDexParam(
190
+ srcToken: Address,
191
+ destToken: Address,
192
+ srcAmount: NumberAsString,
193
+ destAmount: NumberAsString,
194
+ recipient: Address,
195
+ data: JarvisData,
196
+ side: SwapSide,
197
+ ): DexExchangeParam {
198
+ const swapFunction = data.method;
199
+ const timestamp = (Date.now() / 1000 + THIRTY_MINUTES).toFixed(0);
200
+ let swapFunctionParams: JarvisParam;
201
+ let outputName: string;
202
+
203
+ switch (swapFunction) {
204
+ case JarvisFunctions.mint:
205
+ swapFunctionParams = [
206
+ data.derivatives,
207
+ destAmount,
208
+ srcAmount,
209
+ data.fee,
210
+ timestamp,
211
+ recipient,
212
+ ];
213
+ outputName = 'syntheticTokensMinted';
214
+ break;
215
+ case JarvisFunctions.redeem:
216
+ swapFunctionParams = [
217
+ data.derivatives,
218
+ srcAmount,
219
+ destAmount,
220
+ data.fee,
221
+ timestamp,
222
+ recipient,
223
+ ];
224
+ outputName = 'collateralRedeemed';
225
+ break;
226
+ case JarvisFunctions.exchange:
227
+ swapFunctionParams = [
228
+ data.derivatives,
229
+ data.pools[1],
230
+ data.destDerivatives!,
231
+ srcAmount,
232
+ destAmount,
233
+ data.fee,
234
+ timestamp,
235
+ recipient,
236
+ ];
237
+ outputName = 'destNumTokensMinted';
238
+ break;
239
+ default:
240
+ throw new Error(`Unknown function ${swapFunction}`);
241
+ }
242
+
243
+ const swapData = this.poolInterface.encodeFunctionData(swapFunction, [
244
+ swapFunctionParams,
245
+ ]);
246
+
247
+ return {
248
+ needWrapNative: this.needWrapNative,
249
+ dexFuncHasRecipient: true,
250
+ exchangeData: swapData,
251
+ targetExchange: data.pools[0],
252
+ returnAmountPos:
253
+ side === SwapSide.SELL
254
+ ? extractReturnAmountPosition(
255
+ this.poolInterface,
256
+ swapFunction,
257
+ outputName,
258
+ )
259
+ : undefined,
260
+ };
261
+ }
262
+ }