@paraswap/dex-lib 3.11.8-stader.3 → 3.11.8

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 (269) hide show
  1. package/.vscode/launch.json +53 -0
  2. package/.vscode/settings.json +2 -0
  3. package/.vscode/tasks.json +15 -0
  4. package/build/abi/balancer-v3/batch-router.json +989 -0
  5. package/build/abi/balancer-v3/router.json +1792 -0
  6. package/build/abi/balancer-v3/vault-extension.json +2834 -0
  7. package/build/abi/{cables/CablesMainnetRFQ.json → inception/inception-ineth-pool.json} +489 -510
  8. package/build/abi/inception/inception-ratio-feed.json +329 -0
  9. package/build/abi/inception/inception-vault.json +991 -0
  10. package/build/abi/permit2.json +581 -0
  11. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +52 -0
  12. package/build/abi/usual-m-smart-m/usualM.abi.json +483 -0
  13. package/build/abi/usual-m-usd0/usualCollateralDao.abi.json +681 -0
  14. package/build/abi/{integral/relayer.json → wombat/pool.json} +474 -721
  15. package/build/dex/aave-v1/aave-v1.d.ts +2 -1
  16. package/build/dex/aave-v1/aave-v1.js +23 -0
  17. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  18. package/build/dex/aave-v2/tokens-avalanche.json +44 -0
  19. package/build/dex/aave-v2/tokens-mainnet.json +188 -0
  20. package/build/dex/aave-v2/tokens-polygon.json +44 -0
  21. package/build/dex/balancer-v3/abi/balancerBatchRouter.d.ts +729 -0
  22. package/build/dex/balancer-v3/abi/balancerBatchRouter.js +732 -0
  23. package/build/dex/balancer-v3/abi/balancerBatchRouter.js.map +1 -0
  24. package/build/dex/balancer-v3/abi/balancerRouter.d.ts +1406 -0
  25. package/build/dex/balancer-v3/abi/balancerRouter.js +1175 -0
  26. package/build/dex/balancer-v3/abi/balancerRouter.js.map +1 -0
  27. package/build/dex/balancer-v3/abi/vaultExtension.V3.d.ts +2081 -0
  28. package/build/dex/balancer-v3/abi/vaultExtension.V3.js +1851 -0
  29. package/build/dex/balancer-v3/abi/vaultExtension.V3.js.map +1 -0
  30. package/build/dex/balancer-v3/balancer-v3-pool.d.ts +80 -0
  31. package/build/dex/balancer-v3/balancer-v3-pool.js +461 -0
  32. package/build/dex/balancer-v3/balancer-v3-pool.js.map +1 -0
  33. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.d.ts +34 -0
  34. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.js +406 -0
  35. package/build/dex/balancer-v3/balancer-v3-sepolia-pools.js.map +1 -0
  36. package/build/dex/balancer-v3/balancer-v3.d.ts +57 -0
  37. package/build/dex/balancer-v3/balancer-v3.js +383 -0
  38. package/build/dex/balancer-v3/balancer-v3.js.map +1 -0
  39. package/build/dex/balancer-v3/config.d.ts +8 -0
  40. package/build/dex/balancer-v3/config.js +24 -0
  41. package/build/dex/balancer-v3/config.js.map +1 -0
  42. package/build/dex/balancer-v3/getGasCost.d.ts +2 -0
  43. package/build/dex/balancer-v3/getGasCost.js +41 -0
  44. package/build/dex/balancer-v3/getGasCost.js.map +1 -0
  45. package/build/dex/balancer-v3/getOnChainState.d.ts +10 -0
  46. package/build/dex/balancer-v3/getOnChainState.js +164 -0
  47. package/build/dex/balancer-v3/getOnChainState.js.map +1 -0
  48. package/build/dex/balancer-v3/getPoolsApi.d.ts +2 -0
  49. package/build/dex/balancer-v3/getPoolsApi.js +81 -0
  50. package/build/dex/balancer-v3/getPoolsApi.js.map +1 -0
  51. package/build/dex/balancer-v3/getTopPoolsApi.d.ts +13 -0
  52. package/build/dex/balancer-v3/getTopPoolsApi.js +62 -0
  53. package/build/dex/balancer-v3/getTopPoolsApi.js.map +1 -0
  54. package/build/dex/balancer-v3/optimizer.d.ts +2 -0
  55. package/build/dex/{trader-joe-v2.1 → balancer-v3}/optimizer.js +17 -16
  56. package/build/dex/balancer-v3/optimizer.js.map +1 -0
  57. package/build/dex/balancer-v3/stablePool.d.ts +7 -0
  58. package/build/dex/balancer-v3/stablePool.js +73 -0
  59. package/build/dex/balancer-v3/stablePool.js.map +1 -0
  60. package/build/dex/balancer-v3/types.d.ts +62 -0
  61. package/build/dex/balancer-v3/types.js +3 -0
  62. package/build/dex/balancer-v3/types.js.map +1 -0
  63. package/build/dex/balancer-v3/weightedPool.d.ts +1 -0
  64. package/build/dex/balancer-v3/weightedPool.js +6 -0
  65. package/build/dex/balancer-v3/weightedPool.js.map +1 -0
  66. package/build/dex/bebop/constants.d.ts +1 -1
  67. package/build/dex/bebop/constants.js +1 -1
  68. package/build/dex/inception/config.d.ts +4 -0
  69. package/build/dex/inception/config.js +109 -0
  70. package/build/dex/inception/config.js.map +1 -0
  71. package/build/dex/inception/inception-event-pool.d.ts +16 -0
  72. package/build/dex/inception/inception-event-pool.js +49 -0
  73. package/build/dex/inception/inception-event-pool.js.map +1 -0
  74. package/build/dex/inception/inception.d.ts +43 -0
  75. package/build/dex/inception/inception.js +180 -0
  76. package/build/dex/inception/inception.js.map +1 -0
  77. package/build/dex/inception/tokens.d.ts +9 -0
  78. package/build/dex/inception/tokens.js +28 -0
  79. package/build/dex/inception/tokens.js.map +1 -0
  80. package/build/dex/inception/types.d.ts +22 -0
  81. package/build/dex/inception/types.js +3 -0
  82. package/build/dex/inception/types.js.map +1 -0
  83. package/build/dex/inception/utils.d.ts +7 -0
  84. package/build/dex/inception/utils.js +58 -0
  85. package/build/dex/inception/utils.js.map +1 -0
  86. package/build/dex/index.js +0 -2
  87. package/build/dex/index.js.map +1 -1
  88. package/build/dex/jarvis.d.ts +2 -1
  89. package/build/dex/jarvis.js +58 -0
  90. package/build/dex/jarvis.js.map +1 -1
  91. package/build/dex/maker-psm/scripts/gem.abi.json +136 -0
  92. package/build/dex/maker-psm/scripts/validate-state.d.ts +0 -0
  93. package/build/dex/maker-psm/scripts/validate-state.js +185 -0
  94. package/build/dex/maker-psm/scripts/validate-state.js.map +1 -0
  95. package/build/dex/maker-psm/scripts/vat.abi.json +243 -0
  96. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.d.ts +1 -0
  97. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js +20 -0
  98. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js.map +1 -1
  99. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +4 -0
  100. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
  101. package/build/dex/platypus/platypus.d.ts +2 -1
  102. package/build/dex/platypus/platypus.js +45 -0
  103. package/build/dex/platypus/platypus.js.map +1 -1
  104. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +1 -0
  105. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +53 -0
  106. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +1 -0
  107. package/build/dex/stable-pool.js +1 -8
  108. package/build/dex/stable-pool.js.map +1 -1
  109. package/build/dex/swaap-v1/swaap-v1.d.ts +2 -1
  110. package/build/dex/swaap-v1/swaap-v1.js +14 -0
  111. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  112. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +17 -0
  113. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +64 -0
  114. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +1 -0
  115. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +17 -0
  116. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +79 -0
  117. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +1 -0
  118. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +1 -0
  119. package/build/dex/uniswap-v3/uniswap-v3-pool.js +20 -0
  120. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  121. package/build/dex/uniswap-v3/uniswap-v3-pricing.d.ts +4 -0
  122. package/build/dex/uniswap-v3/uniswap-v3-pricing.js +43 -0
  123. package/build/dex/uniswap-v3/uniswap-v3-pricing.js.map +1 -0
  124. package/build/dex/uniswap-v3/uniswap-v3-worker.d.ts +1 -0
  125. package/build/dex/uniswap-v3/uniswap-v3-worker.js +10 -0
  126. package/build/dex/uniswap-v3/uniswap-v3-worker.js.map +1 -0
  127. package/build/dex/uniswap-v3/uniswap-v3.js +5 -0
  128. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  129. package/build/dex/usual/types.d.ts +13 -0
  130. package/build/dex/usual/types.js +3 -0
  131. package/build/dex/usual/types.js.map +1 -0
  132. package/build/dex/usual/usual-bond.d.ts +18 -0
  133. package/build/dex/usual/usual-bond.js +52 -0
  134. package/build/dex/usual/usual-bond.js.map +1 -0
  135. package/build/dex/usual/usual-m-smart-m.d.ts +17 -0
  136. package/build/dex/usual/usual-m-smart-m.js +50 -0
  137. package/build/dex/usual/usual-m-smart-m.js.map +1 -0
  138. package/build/dex/usual/usual-m-usd0.d.ts +17 -0
  139. package/build/dex/usual/usual-m-usd0.js +51 -0
  140. package/build/dex/usual/usual-m-usd0.js.map +1 -0
  141. package/build/dex/usual/usual.d.ts +27 -0
  142. package/build/dex/usual/usual.js +125 -0
  143. package/build/dex/usual/usual.js.map +1 -0
  144. package/build/dex/usual-m-smart-m/config.d.ts +3 -0
  145. package/build/dex/usual-m-smart-m/config.js +13 -0
  146. package/build/dex/usual-m-smart-m/config.js.map +1 -0
  147. package/build/dex/usual-m-smart-m/types.d.ts +7 -0
  148. package/build/dex/usual-m-smart-m/types.js +3 -0
  149. package/build/dex/usual-m-smart-m/types.js.map +1 -0
  150. package/build/dex/usual-m-smart-m/usual-m-smart-m.d.ts +35 -0
  151. package/build/dex/usual-m-smart-m/usual-m-smart-m.js +161 -0
  152. package/build/dex/usual-m-smart-m/usual-m-smart-m.js.map +1 -0
  153. package/build/dex/{stader → usual-m-usd0}/config.d.ts +1 -1
  154. package/build/dex/usual-m-usd0/config.js +14 -0
  155. package/build/dex/usual-m-usd0/config.js.map +1 -0
  156. package/build/dex/usual-m-usd0/types.d.ts +8 -0
  157. package/build/dex/usual-m-usd0/types.js +3 -0
  158. package/build/dex/usual-m-usd0/types.js.map +1 -0
  159. package/build/dex/usual-m-usd0/usual-m-usd0.d.ts +35 -0
  160. package/build/dex/usual-m-usd0/usual-m-usd0.js +159 -0
  161. package/build/dex/usual-m-usd0/usual-m-usd0.js.map +1 -0
  162. package/build/dex/zerox/index.d.ts +4 -26
  163. package/build/dex/zerox/index.js +50 -42
  164. package/build/dex/zerox/index.js.map +1 -1
  165. package/build/dex/zerox/types.d.ts +29 -0
  166. package/build/dex/zerox/types.js +8 -1
  167. package/build/dex/zerox/types.js.map +1 -1
  168. package/package.json +1 -1
  169. package/src/dex/balancer-v3/balancer-v3-sepolia-pools.ts +404 -0
  170. package/src/dex/bebop/constants.ts +1 -1
  171. package/src/dex/index.ts +0 -2
  172. package/src/dex/pancakeswap-v3/pancakeswap-v3-pool.ts +30 -0
  173. package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +10 -0
  174. package/src/dex/uniswap-v3/uniswap-v3-pool.ts +30 -0
  175. package/src/dex/uniswap-v3/uniswap-v3.ts +11 -0
  176. package/tests/constants-e2e.ts +0 -5
  177. package/.idea/aws.xml +0 -17
  178. package/.idea/codeStyles/Project.xml +0 -19
  179. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  180. package/.idea/misc.xml +0 -6
  181. package/.idea/modules.xml +0 -8
  182. package/.idea/paraswap-dex-lib.iml +0 -9
  183. package/.idea/prettier.xml +0 -7
  184. package/.idea/vcs.xml +0 -6
  185. package/build/abi/SSPM.json +0 -829
  186. package/build/abi/StaderOracle.json +0 -2170
  187. package/build/abi/integral/factory.json +0 -333
  188. package/build/abi/integral/oracle.json +0 -501
  189. package/build/abi/integral/pool.json +0 -1041
  190. package/build/dex/cables/cables.d.ts +0 -59
  191. package/build/dex/cables/cables.js +0 -614
  192. package/build/dex/cables/cables.js.map +0 -1
  193. package/build/dex/cables/config.d.ts +0 -4
  194. package/build/dex/cables/config.js +0 -15
  195. package/build/dex/cables/config.js.map +0 -1
  196. package/build/dex/cables/constants.d.ts +0 -20
  197. package/build/dex/cables/constants.js +0 -24
  198. package/build/dex/cables/constants.js.map +0 -1
  199. package/build/dex/cables/rate-fetcher.d.ts +0 -34
  200. package/build/dex/cables/rate-fetcher.js +0 -106
  201. package/build/dex/cables/rate-fetcher.js.map +0 -1
  202. package/build/dex/cables/types.d.ts +0 -113
  203. package/build/dex/cables/types.js +0 -19
  204. package/build/dex/cables/types.js.map +0 -1
  205. package/build/dex/cables/validators.d.ts +0 -5
  206. package/build/dex/cables/validators.js +0 -49
  207. package/build/dex/cables/validators.js.map +0 -1
  208. package/build/dex/fluid-dex/fluid-dex-generate-pool.d.ts +0 -49
  209. package/build/dex/fluid-dex/fluid-dex-generate-pool.js +0 -104
  210. package/build/dex/fluid-dex/fluid-dex-generate-pool.js.map +0 -1
  211. package/build/dex/integral/config.d.ts +0 -4
  212. package/build/dex/integral/config.js +0 -20
  213. package/build/dex/integral/config.js.map +0 -1
  214. package/build/dex/integral/context.d.ts +0 -40
  215. package/build/dex/integral/context.js +0 -158
  216. package/build/dex/integral/context.js.map +0 -1
  217. package/build/dex/integral/integral-factory.d.ts +0 -24
  218. package/build/dex/integral/integral-factory.js +0 -95
  219. package/build/dex/integral/integral-factory.js.map +0 -1
  220. package/build/dex/integral/integral-pool.d.ts +0 -50
  221. package/build/dex/integral/integral-pool.js +0 -149
  222. package/build/dex/integral/integral-pool.js.map +0 -1
  223. package/build/dex/integral/integral-pricing.d.ts +0 -18
  224. package/build/dex/integral/integral-pricing.js +0 -114
  225. package/build/dex/integral/integral-pricing.js.map +0 -1
  226. package/build/dex/integral/integral-relayer.d.ts +0 -42
  227. package/build/dex/integral/integral-relayer.js +0 -192
  228. package/build/dex/integral/integral-relayer.js.map +0 -1
  229. package/build/dex/integral/integral-token.d.ts +0 -27
  230. package/build/dex/integral/integral-token.js +0 -59
  231. package/build/dex/integral/integral-token.js.map +0 -1
  232. package/build/dex/integral/integral.d.ts +0 -41
  233. package/build/dex/integral/integral.js +0 -376
  234. package/build/dex/integral/integral.js.map +0 -1
  235. package/build/dex/integral/types.d.ts +0 -85
  236. package/build/dex/integral/types.js +0 -9
  237. package/build/dex/integral/types.js.map +0 -1
  238. package/build/dex/integral/utils-e2e.d.ts +0 -9
  239. package/build/dex/integral/utils-e2e.js +0 -131
  240. package/build/dex/integral/utils-e2e.js.map +0 -1
  241. package/build/dex/integral/utils.d.ts +0 -17
  242. package/build/dex/integral/utils.js +0 -94
  243. package/build/dex/integral/utils.js.map +0 -1
  244. package/build/dex/stader/config.js +0 -14
  245. package/build/dex/stader/config.js.map +0 -1
  246. package/build/dex/stader/stader-pool.d.ts +0 -18
  247. package/build/dex/stader/stader-pool.js +0 -47
  248. package/build/dex/stader/stader-pool.js.map +0 -1
  249. package/build/dex/stader/stader.d.ts +0 -42
  250. package/build/dex/stader/stader.js +0 -141
  251. package/build/dex/stader/stader.js.map +0 -1
  252. package/build/dex/stader/types.d.ts +0 -13
  253. package/build/dex/stader/types.js +0 -8
  254. package/build/dex/stader/types.js.map +0 -1
  255. package/build/dex/stader/utils.d.ts +0 -4
  256. package/build/dex/stader/utils.js +0 -24
  257. package/build/dex/stader/utils.js.map +0 -1
  258. package/build/dex/trader-joe-v2.1/optimizer.d.ts +0 -2
  259. package/build/dex/trader-joe-v2.1/optimizer.js.map +0 -1
  260. package/src/abi/SSPM.json +0 -829
  261. package/src/abi/StaderOracle.json +0 -2170
  262. package/src/dex/stader/config.ts +0 -13
  263. package/src/dex/stader/stader-e2e.test.ts +0 -74
  264. package/src/dex/stader/stader-events.test.ts +0 -64
  265. package/src/dex/stader/stader-integration.test.ts +0 -210
  266. package/src/dex/stader/stader-pool.ts +0 -68
  267. package/src/dex/stader/stader.ts +0 -208
  268. package/src/dex/stader/types.ts +0 -16
  269. package/src/dex/stader/utils.ts +0 -34
@@ -0,0 +1,383 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.BalancerV3 = void 0;
30
+ const constants_1 = require("../../constants");
31
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
32
+ const utils_1 = require("../../utils");
33
+ const simple_exchange_1 = require("../simple-exchange");
34
+ const config_1 = require("./config");
35
+ const balancer_v3_pool_1 = require("./balancer-v3-pool");
36
+ const balancer_maths_1 = require("@balancer-labs/balancer-maths");
37
+ const abi_1 = require("@ethersproject/abi");
38
+ const utils_2 = require("../../executor/utils");
39
+ const getTopPoolsApi_1 = require("./getTopPoolsApi");
40
+ const router_json_1 = __importDefault(require("../../abi/balancer-v3/router.json"));
41
+ const batch_router_json_1 = __importDefault(require("../../abi/balancer-v3/batch-router.json"));
42
+ const getGasCost_1 = require("./getGasCost");
43
+ const MAX_UINT256 = '115792089237316195423570985008687907853269984665640564039457584007913129639935';
44
+ const POOL_UPDATE_TTL = 5 * 60; // 5mins
45
+ const RATE_UPDATE_TTL = 30 * 60; // 30mins
46
+ class BalancerV3 extends simple_exchange_1.SimpleExchange {
47
+ constructor(network, dexKey, dexHelper) {
48
+ super(dexHelper, dexKey);
49
+ this.network = network;
50
+ this.dexKey = dexKey;
51
+ this.dexHelper = dexHelper;
52
+ this.hasConstantPriceLargeAmounts = false;
53
+ // Vault can handle native
54
+ this.needWrapNative = false;
55
+ this.isFeeOnTransferSupported = false;
56
+ this.logger = dexHelper.getLogger(dexKey);
57
+ this.eventPools = new balancer_v3_pool_1.BalancerV3EventPool(dexKey, network, dexHelper, this.logger);
58
+ this.balancerRouter = new abi_1.Interface(router_json_1.default);
59
+ this.balancerBatchRouter = new abi_1.Interface(batch_router_json_1.default);
60
+ }
61
+ // Initialize pricing is called once in the start of
62
+ // pricing service. It is intended to setup the integration
63
+ // for pricing requests. It is optional for a DEX to
64
+ // implement this function
65
+ async initializePricing(blockNumber) {
66
+ await this.eventPools.initialize(blockNumber);
67
+ // This will periodically query API and add any new pools to pool state
68
+ if (!this.updateNewPoolsTimer) {
69
+ this.updateNewPoolsTimer = setInterval(async () => {
70
+ try {
71
+ await this.updatePoolState();
72
+ }
73
+ catch (e) {
74
+ this.logger.error(`${this.dexKey}: Failed to update pool state:`, e);
75
+ }
76
+ }, POOL_UPDATE_TTL * 1000);
77
+ }
78
+ // This will periodically refresh tokenRates with onchain state
79
+ if (!this.updateRatesTimer) {
80
+ this.updateRatesTimer = setInterval(async () => {
81
+ try {
82
+ await this.updateStatePoolRates();
83
+ }
84
+ catch (e) {
85
+ this.logger.error(`${this.dexKey}: Failed to update pool rates:`, e);
86
+ }
87
+ }, RATE_UPDATE_TTL * 1000);
88
+ }
89
+ }
90
+ getAdapters(side) {
91
+ return null;
92
+ }
93
+ // Returns list of pool identifiers that can be used
94
+ // for a given swap. poolIdentifiers must be unique
95
+ // across DEXes. It is recommended to use
96
+ // ${dexKey}_${poolAddress} as a poolIdentifier
97
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
98
+ const _from = this.dexHelper.config.wrapETH(srcToken);
99
+ const _to = this.dexHelper.config.wrapETH(destToken);
100
+ const poolState = this.eventPools.getState(blockNumber);
101
+ if (poolState === null)
102
+ return [];
103
+ return this.findPoolAddressesWithTokens(poolState, _from.address.toLowerCase(), _to.address.toLowerCase());
104
+ }
105
+ findPoolAddressesWithTokens(pools, tokenA, tokenB) {
106
+ return Object.entries(pools)
107
+ .filter(([, poolState]) => {
108
+ return this.hasTokens(poolState, [tokenA, tokenB]);
109
+ })
110
+ .map(([address]) => address);
111
+ }
112
+ /**
113
+ * Filter pools that have tokens from/to and are in limitPool list
114
+ * @param pools
115
+ * @param from
116
+ * @param to
117
+ * @param limitPools
118
+ * @returns Array of PoolState
119
+ */
120
+ filterPools(pools, from, to, limitPools) {
121
+ return Object.entries(pools)
122
+ .filter(([address, poolState]) => {
123
+ const hasRequiredTokens = this.hasTokens(poolState, [from, to]);
124
+ const isAllowedPool = !limitPools || limitPools.includes(address);
125
+ return hasRequiredTokens && isAllowedPool;
126
+ })
127
+ .map(([_, poolState]) => poolState);
128
+ }
129
+ hasTokens(pool, tokens) {
130
+ return tokens.every(token => pool.tokens.includes(token) || pool.tokensUnderlying.includes(token));
131
+ }
132
+ // Returns pool prices for amounts.
133
+ // If limitPools is defined only pools in limitPools
134
+ // should be used. If limitPools is undefined then
135
+ // any pools can be used.
136
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
137
+ try {
138
+ const _from = this.dexHelper.config.wrapETH(srcToken);
139
+ const _to = this.dexHelper.config.wrapETH(destToken);
140
+ if (_from.address === _to.address) {
141
+ return null;
142
+ }
143
+ // This is used to get block timestamp which is needed to calculate Amp if it is updating
144
+ const block = await this.dexHelper.provider.getBlock(blockNumber);
145
+ // get up to date pools and state
146
+ const allPoolState = this.eventPools.getState(blockNumber);
147
+ if (allPoolState === null) {
148
+ this.logger.error(`getState returned null`);
149
+ return null;
150
+ }
151
+ // filter for pools with tokens and to only use limit pools
152
+ const allowedPools = this.filterPools(allPoolState, _from.address.toLowerCase(), _to.address.toLowerCase(), limitPools);
153
+ if (!allowedPools.length)
154
+ return null;
155
+ const swapKind = side === constants_1.SwapSide.SELL ? balancer_maths_1.SwapKind.GivenIn : balancer_maths_1.SwapKind.GivenOut;
156
+ const tokenIn = _from.address;
157
+ const tokenOut = _to.address;
158
+ // Gets the single unit amount based off token decimals, e.g. for USDC its 1e6
159
+ const unitAmount = (0, utils_1.getBigIntPow)((side === constants_1.SwapSide.SELL ? _from : _to).decimals);
160
+ const poolPrices = [];
161
+ // For each pool we calculate swap result using balancer maths
162
+ for (let i = 0; i < allowedPools.length; i++) {
163
+ const pool = {
164
+ ...allowedPools[i],
165
+ };
166
+ const tokenInInfo = this.eventPools.getTokenInfo(pool, tokenIn);
167
+ const tokenOutInfo = this.eventPools.getTokenInfo(pool, tokenOut);
168
+ if (!tokenInInfo || !tokenOutInfo) {
169
+ continue;
170
+ }
171
+ const steps = this.eventPools.getSteps(pool, tokenInInfo, tokenOutInfo);
172
+ try {
173
+ // This is the max amount the pool can swap
174
+ const maxSwapAmount = this.eventPools.getMaxSwapAmount(pool, tokenInInfo, tokenOutInfo, swapKind);
175
+ let unit = 0n;
176
+ if (unitAmount < maxSwapAmount)
177
+ unit = this.eventPools.getSwapResult(steps, unitAmount, swapKind, block.timestamp);
178
+ const poolExchangePrice = {
179
+ prices: new Array(amounts.length).fill(0n),
180
+ unit,
181
+ data: {
182
+ steps: steps,
183
+ },
184
+ exchange: this.dexKey,
185
+ gasCost: (0, getGasCost_1.getGasCost)(steps),
186
+ poolAddresses: [pool.poolAddress],
187
+ poolIdentifier: `${this.dexKey}_${pool.poolAddress}`,
188
+ };
189
+ for (let j = 0; j < amounts.length; j++) {
190
+ if (amounts[j] < maxSwapAmount) {
191
+ // Uses balancer maths to calculate swap
192
+ poolExchangePrice.prices[j] = this.eventPools.getSwapResult(steps, amounts[j], swapKind, block.timestamp);
193
+ }
194
+ }
195
+ poolPrices.push(poolExchangePrice);
196
+ }
197
+ catch (err) {
198
+ this.logger.error(`error fetching prices for pool: ${pool.poolAddress}`);
199
+ this.logger.error(err);
200
+ }
201
+ }
202
+ return poolPrices;
203
+ }
204
+ catch (err) { }
205
+ return null;
206
+ }
207
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
208
+ getCalldataGasCost(poolPrices) {
209
+ // TODO: update if there is any payload in getAdapterParam
210
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
211
+ }
212
+ // Not used for V6
213
+ getAdapterParam() {
214
+ return {
215
+ targetExchange: '0x',
216
+ payload: '0x',
217
+ networkFee: '0',
218
+ };
219
+ }
220
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side) {
221
+ if (side === constants_1.SwapSide.SELL) {
222
+ return this.getExactInParam(srcToken, destToken, srcAmount, data);
223
+ }
224
+ else {
225
+ return this.getExactOutParam(srcToken, destToken, destAmount, data);
226
+ }
227
+ }
228
+ getExactInParam(srcToken, destToken, srcAmount, data) {
229
+ if (data.steps.length === 1) {
230
+ const exchangeData = this.balancerRouter.encodeFunctionData('swapSingleTokenExactIn', [
231
+ data.steps[0].pool,
232
+ this.dexHelper.config.wrapETH(srcToken),
233
+ this.dexHelper.config.wrapETH(destToken),
234
+ srcAmount,
235
+ '0',
236
+ MAX_UINT256,
237
+ (0, utils_1.isETHAddress)(srcToken) || (0, utils_1.isETHAddress)(destToken),
238
+ '0x',
239
+ ]);
240
+ return {
241
+ permit2Approval: true,
242
+ needWrapNative: this.needWrapNative,
243
+ dexFuncHasRecipient: false,
244
+ exchangeData,
245
+ // This router handles single swaps
246
+ targetExchange: config_1.BalancerV3Config.BalancerV3[this.network].balancerRouterAddress,
247
+ returnAmountPos: (0, utils_2.extractReturnAmountPosition)(this.balancerRouter, 'swapSingleTokenExactIn'),
248
+ };
249
+ }
250
+ else {
251
+ // for each step:
252
+ // if tokenIn == pool router uses removeLiquidity SINGLE_TOKEN_EXACT_IN
253
+ // if tokenOut == pool router uses addLiquidity UNBALANCED
254
+ const exchangeData = this.balancerBatchRouter.encodeFunctionData('swapExactIn', [
255
+ [
256
+ {
257
+ tokenIn: srcToken,
258
+ steps: data.steps.map(step => ({
259
+ pool: step.pool,
260
+ tokenOut: step.swapInput.tokenOut,
261
+ isBuffer: step.isBuffer,
262
+ })),
263
+ exactAmountIn: srcAmount,
264
+ minAmountOut: '0', // This should be limit for min amount out. Assume this is set elsewhere via Paraswap contract.
265
+ },
266
+ ],
267
+ MAX_UINT256,
268
+ (0, utils_1.isETHAddress)(srcToken) || (0, utils_1.isETHAddress)(destToken),
269
+ '0x',
270
+ ]);
271
+ return {
272
+ permit2Approval: true,
273
+ needWrapNative: this.needWrapNative,
274
+ dexFuncHasRecipient: false,
275
+ exchangeData,
276
+ // This router handles batch swaps
277
+ targetExchange: config_1.BalancerV3Config.BalancerV3[this.network].balancerBatchRouterAddress,
278
+ returnAmountPos: undefined,
279
+ };
280
+ }
281
+ }
282
+ getExactOutParam(srcToken, destToken, destAmount, data) {
283
+ if (data.steps.length === 1) {
284
+ const exchangeData = this.balancerRouter.encodeFunctionData('swapSingleTokenExactOut', [
285
+ data.steps[0].pool,
286
+ this.dexHelper.config.wrapETH(srcToken),
287
+ this.dexHelper.config.wrapETH(destToken),
288
+ destAmount,
289
+ MAX_UINT256,
290
+ MAX_UINT256,
291
+ (0, utils_1.isETHAddress)(srcToken) || (0, utils_1.isETHAddress)(destToken),
292
+ '0x',
293
+ ]);
294
+ return {
295
+ permit2Approval: true,
296
+ needWrapNative: this.needWrapNative,
297
+ dexFuncHasRecipient: false,
298
+ exchangeData,
299
+ // Single swaps are submitted via Balancer Router
300
+ targetExchange: config_1.BalancerV3Config.BalancerV3[this.network].balancerRouterAddress,
301
+ returnAmountPos: undefined,
302
+ };
303
+ }
304
+ else {
305
+ // for each step:
306
+ // if tokenIn == pool use removeLiquidity SINGLE_TOKEN_EXACT_OUT
307
+ // if tokenOut == pool use addLiquidity SINGLE_TOKEN_EXACT_OUT
308
+ const exchangeData = this.balancerBatchRouter.encodeFunctionData('swapExactOut', [
309
+ [
310
+ {
311
+ tokenIn: srcToken,
312
+ steps: data.steps.map(step => ({
313
+ pool: step.pool,
314
+ tokenOut: step.swapInput.tokenOut,
315
+ isBuffer: step.isBuffer,
316
+ })),
317
+ exactAmountOut: destAmount,
318
+ maxAmountIn: MAX_UINT256, // This should be limit for min amount out. Assume this is set elsewhere via Paraswap contract.
319
+ },
320
+ ],
321
+ MAX_UINT256,
322
+ (0, utils_1.isETHAddress)(srcToken) || (0, utils_1.isETHAddress)(destToken),
323
+ '0x',
324
+ ]);
325
+ return {
326
+ permit2Approval: true,
327
+ needWrapNative: this.needWrapNative,
328
+ dexFuncHasRecipient: false,
329
+ exchangeData,
330
+ // This router handles batch swaps
331
+ targetExchange: config_1.BalancerV3Config.BalancerV3[this.network].balancerBatchRouterAddress,
332
+ returnAmountPos: undefined,
333
+ };
334
+ }
335
+ }
336
+ /**
337
+ * Uses multicall to get onchain token rate for each pool then updates pool state
338
+ */
339
+ async updateStatePoolRates() {
340
+ await this.eventPools.updateStatePoolRates();
341
+ }
342
+ // This is called once before getTopPoolsForToken is
343
+ // called for multiple tokens. This can be helpful to
344
+ // update common state required for calculating
345
+ // getTopPoolsForToken. It is optional for a DEX
346
+ // to implement this
347
+ async updatePoolState() {
348
+ await this.eventPools.updateStatePools();
349
+ }
350
+ // Returns list of top pools based on liquidity. Max
351
+ // limit number pools should be returned.
352
+ async getTopPoolsForToken(tokenAddress, count) {
353
+ const poolsWithToken = Object.entries(this.eventPools.getStaleState() || {})
354
+ .filter(([, poolState]) => {
355
+ return this.hasTokens(poolState, [tokenAddress]);
356
+ })
357
+ .map(([address]) => address);
358
+ const topPools = await (0, getTopPoolsApi_1.getTopPoolsApi)(this.network, poolsWithToken, count);
359
+ return topPools.map(pool => {
360
+ return {
361
+ exchange: this.dexKey,
362
+ address: pool.address,
363
+ liquidityUSD: parseFloat(pool.dynamicData.totalLiquidity),
364
+ connectorTokens: pool.poolTokens.filter(t => t.address !== tokenAddress),
365
+ };
366
+ });
367
+ }
368
+ releaseResources() {
369
+ if (this.updateNewPoolsTimer) {
370
+ clearInterval(this.updateNewPoolsTimer);
371
+ this.updateNewPoolsTimer = undefined;
372
+ this.logger.info(`${this.dexKey}: cleared updateNewPoolsTimer before shutting down`);
373
+ }
374
+ if (this.updateRatesTimer) {
375
+ clearInterval(this.updateRatesTimer);
376
+ this.updateRatesTimer = undefined;
377
+ this.logger.info(`${this.dexKey}: cleared updateRatesTimer before shutting down`);
378
+ }
379
+ }
380
+ }
381
+ exports.BalancerV3 = BalancerV3;
382
+ BalancerV3.dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.BalancerV3Config);
383
+ //# sourceMappingURL=balancer-v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balancer-v3.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/balancer-v3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap } from '../../types';
3
+ export declare enum SUPPORTED_POOLS {
4
+ WEIGHTED = "WEIGHTED",
5
+ STABLE = "STABLE"
6
+ }
7
+ export declare const apiUrl = "https://test-api-v3.balancer.fi/";
8
+ export declare const BalancerV3Config: DexConfigMap<DexParams>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BalancerV3Config = exports.apiUrl = exports.SUPPORTED_POOLS = void 0;
4
+ const constants_1 = require("../../constants");
5
+ // These map to the Balancer API poolType. Only Balancer supported pools will be added
6
+ var SUPPORTED_POOLS;
7
+ (function (SUPPORTED_POOLS) {
8
+ SUPPORTED_POOLS["WEIGHTED"] = "WEIGHTED";
9
+ SUPPORTED_POOLS["STABLE"] = "STABLE";
10
+ })(SUPPORTED_POOLS = exports.SUPPORTED_POOLS || (exports.SUPPORTED_POOLS = {}));
11
+ // Balancer API - aggregatorSpecific query serves all useful static pool data
12
+ exports.apiUrl = 'https://test-api-v3.balancer.fi/';
13
+ // TODO Full config added after V3 release
14
+ exports.BalancerV3Config = {
15
+ BalancerV3: {
16
+ [constants_1.Network.SEPOLIA]: {
17
+ vaultAddress: '0xBC582d2628FcD404254a1e12CB714967Ce428915',
18
+ apiNetworkName: 'SEPOLIA',
19
+ balancerRouterAddress: '0x4D2aA7a3CD7F8dA6feF37578A1881cD63Fd3715E',
20
+ balancerBatchRouterAddress: '0x4232e5EEaA16Bcf483d93BEA469296B4EeF22503',
21
+ },
22
+ },
23
+ };
24
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/config.ts"],"names":[],"mappings":";;;AAEA,+CAAoD;AAEpD,sFAAsF;AACtF,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;AACnB,CAAC,EAHW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAG1B;AAED,6EAA6E;AAChE,QAAA,MAAM,GAAG,kCAAkC,CAAC;AAEzD,0CAA0C;AAC7B,QAAA,gBAAgB,GAA4B;IACvD,UAAU,EAAE;QACV,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,YAAY,EAAE,4CAA4C;YAC1D,cAAc,EAAE,SAAS;YACzB,qBAAqB,EAAE,4CAA4C;YACnE,0BAA0B,EAAE,4CAA4C;SACzE;KACF;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Step } from './types';
2
+ export declare function getGasCost(steps: Step[]): number;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGasCost = void 0;
4
+ const stablePool_1 = require("./stablePool");
5
+ const weightedPool_1 = require("./weightedPool");
6
+ // https://sepolia.etherscan.io/tx/0x8c2c5ec7fc2855ed2ffab3467ee434f4e374e0ecf791e8d2b93c8d74e3f5b1fe
7
+ // 0x7ec61d6dcf0ea412327c30f013e60578c0ff4d83c334a95fb3a68739860e6f59
8
+ // 0xb45331fe60091bdf4ba4c201b7fdfefc1ca8087fa1b6bc28877ef84d167809f4
9
+ const FULL_BOOSTED_SWAP_GAS_COST = 283070;
10
+ // 0xb47bcae19ba4693d18f2148073d0d469ff59223e90d6f75eb25e06b0063f1556
11
+ // 0x4730b0c1dce820f14747698446865364b98d96d3ed926e8e74bbead6482b8f8b
12
+ const PARTIAL_BOOSTED_SWAP_GAS_COST = 259815;
13
+ // 0xef9037f992645a9ecf26ddbdf65690a71acbffce2cc68445c869bb9707cb706a
14
+ // 0x77aa06350df079a077147f1051b10e0612542eb3aff3ae1b3d4004341cb64690
15
+ const BUFFER_WRAP_UNWRAP_GAS_COST = 155921;
16
+ function getGasCost(steps) {
17
+ if (steps.length === 2) {
18
+ // Partial boosted/buffer swap:
19
+ // token[wrap]wrappedToken[swap]wrappedToken or
20
+ // wrappedToken[swap]wrappedToken[unwrap]token
21
+ return PARTIAL_BOOSTED_SWAP_GAS_COST;
22
+ }
23
+ else if (steps.length === 3) {
24
+ // Full boosted/buffer swap: token[wrap]wrappedToken[swap]wrappedToken[unwrap]token
25
+ return FULL_BOOSTED_SWAP_GAS_COST;
26
+ }
27
+ else {
28
+ switch (steps[0].poolState.poolType) {
29
+ case 'WEIGHTED':
30
+ return weightedPool_1.WEIGHTED_GAS_COST;
31
+ case 'STABLE':
32
+ return stablePool_1.STABLE_GAS_COST;
33
+ case 'BUFFER':
34
+ return BUFFER_WRAP_UNWRAP_GAS_COST;
35
+ default:
36
+ return weightedPool_1.WEIGHTED_GAS_COST;
37
+ }
38
+ }
39
+ }
40
+ exports.getGasCost = getGasCost;
41
+ //# sourceMappingURL=getGasCost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getGasCost.js","sourceRoot":"","sources":["../../../src/dex/balancer-v3/getGasCost.ts"],"names":[],"mappings":";;;AAAA,6CAA+C;AAE/C,iDAAmD;AAEnD,qGAAqG;AACrG,qEAAqE;AACrE,qEAAqE;AACrE,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,qEAAqE;AACrE,qEAAqE;AACrE,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAC7C,qEAAqE;AACrE,qEAAqE;AACrE,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAE3C,SAAgB,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,+BAA+B;QAC/B,+CAA+C;QAC/C,8CAA8C;QAC9C,OAAO,6BAA6B,CAAC;KACtC;SAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,mFAAmF;QACnF,OAAO,0BAA0B,CAAC;KACnC;SAAM;QACL,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;YACnC,KAAK,UAAU;gBACb,OAAO,gCAAiB,CAAC;YAC3B,KAAK,QAAQ;gBACX,OAAO,4BAAe,CAAC;YACzB,KAAK,QAAQ;gBACX,OAAO,2BAA2B,CAAC;YACrC;gBACE,OAAO,gCAAiB,CAAC;SAC5B;KACF;AACH,CAAC;AArBD,gCAqBC"}
@@ -0,0 +1,10 @@
1
+ import { ImmutablePoolStateMap, PoolStateMap } from './types';
2
+ import { Interface, Result } from '@ethersproject/abi';
3
+ import { IDexHelper } from '../../dex-helper';
4
+ export declare function decodeThrowError(contractInterface: Interface, functionName: string, resultEntry: {
5
+ success: boolean;
6
+ returnData: any;
7
+ }, poolAddress: string): Result;
8
+ export declare function getOnChainState(network: number, immutablePoolStateMap: ImmutablePoolStateMap, dexHelper: IDexHelper, interfaces: {
9
+ [name: string]: Interface;
10
+ }, blockNumber?: number): Promise<PoolStateMap>;