@paraswap/dex-lib 4.1.4 → 4.1.5-bal-v3-hooks.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 (302) 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/balancer-v3/directionalFeeHook.json +684 -0
  10. package/build/abi/{BalancerV2.json → balancer-v3/stableSurgeHook.json} +529 -732
  11. package/build/abi/integral/factory.json +333 -0
  12. package/build/abi/{angle-transmuter/ChainlinkEACAggregatorProxy.json → integral/oracle.json} +239 -247
  13. package/build/abi/{curve-v1/StableSwapUSDN.json → integral/pool.json} +487 -450
  14. package/build/abi/{RamsesV2Pool.abi.json → integral/relayer.json} +833 -851
  15. package/build/dex/aave-v1/aave-v1.d.ts +1 -2
  16. package/build/dex/aave-v1/aave-v1.js +0 -22
  17. package/build/dex/aave-v1/aave-v1.js.map +1 -1
  18. package/build/dex/bProtocol.d.ts +18 -0
  19. package/build/dex/bProtocol.js +39 -0
  20. package/build/dex/bProtocol.js.map +1 -0
  21. package/build/dex/balancer-v3/balancer-test-helpers.d.ts +5 -0
  22. package/build/dex/balancer-v3/balancer-test-helpers.js +122 -0
  23. package/build/dex/balancer-v3/balancer-test-helpers.js.map +1 -0
  24. package/build/dex/balancer-v3/balancer-v3-pool.d.ts +4 -1
  25. package/build/dex/balancer-v3/balancer-v3-pool.js +25 -13
  26. package/build/dex/balancer-v3/balancer-v3-pool.js.map +1 -1
  27. package/build/dex/balancer-v3/balancer-v3.d.ts +4 -0
  28. package/build/dex/balancer-v3/balancer-v3.js +29 -3
  29. package/build/dex/balancer-v3/balancer-v3.js.map +1 -1
  30. package/build/dex/balancer-v3/config.js +39 -0
  31. package/build/dex/balancer-v3/config.js.map +1 -1
  32. package/build/dex/balancer-v3/getOnChainState.d.ts +1 -2
  33. package/build/dex/balancer-v3/getOnChainState.js +0 -2
  34. package/build/dex/balancer-v3/getOnChainState.js.map +1 -1
  35. package/build/dex/balancer-v3/getPoolsApi.d.ts +2 -1
  36. package/build/dex/balancer-v3/getPoolsApi.js +17 -10
  37. package/build/dex/balancer-v3/getPoolsApi.js.map +1 -1
  38. package/build/dex/balancer-v3/getTopPoolsApi.d.ts +5 -1
  39. package/build/dex/balancer-v3/getTopPoolsApi.js +6 -3
  40. package/build/dex/balancer-v3/getTopPoolsApi.js.map +1 -1
  41. package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.d.ts +54 -0
  42. package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.js +139 -0
  43. package/build/dex/balancer-v3/hooks/balancer-hook-event-subscriber.js.map +1 -0
  44. package/build/dex/balancer-v3/hooks/directionalFeeHook.d.ts +26 -0
  45. package/build/dex/balancer-v3/hooks/directionalFeeHook.js +41 -0
  46. package/build/dex/balancer-v3/hooks/directionalFeeHook.js.map +1 -0
  47. package/build/dex/balancer-v3/hooks/loadHooksConfig.d.ts +2 -0
  48. package/build/dex/balancer-v3/hooks/loadHooksConfig.js +11 -0
  49. package/build/dex/balancer-v3/hooks/loadHooksConfig.js.map +1 -0
  50. package/build/dex/balancer-v3/hooks/stableSurgeHook.d.ts +40 -0
  51. package/build/dex/balancer-v3/hooks/stableSurgeHook.js +116 -0
  52. package/build/dex/balancer-v3/hooks/stableSurgeHook.js.map +1 -0
  53. package/build/dex/balancer-v3/types.d.ts +4 -1
  54. package/build/dex/bancor.d.ts +26 -0
  55. package/build/dex/bancor.js +58 -0
  56. package/build/dex/bancor.js.map +1 -0
  57. package/build/dex/compound.d.ts +18 -0
  58. package/build/dex/compound.js +46 -0
  59. package/build/dex/compound.js.map +1 -0
  60. package/build/dex/curve-v2.d.ts +58 -0
  61. package/build/dex/curve-v2.js +180 -0
  62. package/build/dex/curve-v2.js.map +1 -0
  63. package/build/dex/dodo-v1.d.ts +33 -0
  64. package/build/dex/dodo-v1.js +63 -0
  65. package/build/dex/dodo-v1.js.map +1 -0
  66. package/build/dex/fluid-dex/fluid-dex-generate-pool.d.ts +49 -0
  67. package/build/dex/fluid-dex/fluid-dex-generate-pool.js +104 -0
  68. package/build/dex/fluid-dex/fluid-dex-generate-pool.js.map +1 -0
  69. package/build/dex/integral/config.d.ts +4 -0
  70. package/build/dex/integral/config.js +20 -0
  71. package/build/dex/integral/config.js.map +1 -0
  72. package/build/dex/integral/context.d.ts +40 -0
  73. package/build/dex/integral/context.js +158 -0
  74. package/build/dex/integral/context.js.map +1 -0
  75. package/build/dex/integral/integral-factory.d.ts +24 -0
  76. package/build/dex/integral/integral-factory.js +95 -0
  77. package/build/dex/integral/integral-factory.js.map +1 -0
  78. package/build/dex/integral/integral-pool.d.ts +50 -0
  79. package/build/dex/integral/integral-pool.js +149 -0
  80. package/build/dex/integral/integral-pool.js.map +1 -0
  81. package/build/dex/integral/integral-pricing.d.ts +18 -0
  82. package/build/dex/integral/integral-pricing.js +114 -0
  83. package/build/dex/integral/integral-pricing.js.map +1 -0
  84. package/build/dex/integral/integral-relayer.d.ts +42 -0
  85. package/build/dex/integral/integral-relayer.js +192 -0
  86. package/build/dex/integral/integral-relayer.js.map +1 -0
  87. package/build/dex/integral/integral-token.d.ts +27 -0
  88. package/build/dex/integral/integral-token.js +59 -0
  89. package/build/dex/integral/integral-token.js.map +1 -0
  90. package/build/dex/{inception/inception-native.d.ts → integral/integral.d.ts} +19 -21
  91. package/build/dex/integral/integral.js +376 -0
  92. package/build/dex/integral/integral.js.map +1 -0
  93. package/build/dex/integral/types.d.ts +85 -0
  94. package/build/dex/integral/types.js +9 -0
  95. package/build/dex/integral/types.js.map +1 -0
  96. package/build/dex/integral/utils-e2e.d.ts +9 -0
  97. package/build/dex/integral/utils-e2e.js +131 -0
  98. package/build/dex/integral/utils-e2e.js.map +1 -0
  99. package/build/dex/integral/utils.d.ts +17 -0
  100. package/build/dex/integral/utils.js +94 -0
  101. package/build/dex/integral/utils.js.map +1 -0
  102. package/build/dex/jarvis.d.ts +1 -2
  103. package/build/dex/jarvis.js +0 -58
  104. package/build/dex/jarvis.js.map +1 -1
  105. package/build/dex/lido.d.ts +19 -0
  106. package/build/dex/lido.js +42 -0
  107. package/build/dex/lido.js.map +1 -0
  108. package/build/dex/onebit.d.ts +25 -0
  109. package/build/dex/onebit.js +42 -0
  110. package/build/dex/onebit.js.map +1 -0
  111. package/build/dex/platypus/platypus.d.ts +1 -2
  112. package/build/dex/platypus/platypus.js +0 -31
  113. package/build/dex/platypus/platypus.js.map +1 -1
  114. package/build/dex/smoothy.d.ts +26 -0
  115. package/build/dex/smoothy.js +48 -0
  116. package/build/dex/smoothy.js.map +1 -0
  117. package/build/dex/stable-pool.d.ts +28 -0
  118. package/build/dex/stable-pool.js +62 -0
  119. package/build/dex/stable-pool.js.map +1 -0
  120. package/build/dex/swaap-v1/swaap-v1.d.ts +1 -2
  121. package/build/dex/swaap-v1/swaap-v1.js +0 -10
  122. package/build/dex/swaap-v1/swaap-v1.js.map +1 -1
  123. package/build/dex/trader-joe-v2.1/optimizer.d.ts +2 -0
  124. package/build/dex/trader-joe-v2.1/optimizer.js +47 -0
  125. package/build/dex/trader-joe-v2.1/optimizer.js.map +1 -0
  126. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.d.ts +7 -0
  127. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js +20 -0
  128. package/build/dex/trader-joe-v2.1/trader-joe-v2.1-new.js.map +1 -0
  129. package/build/dex/trader-joe-v2.1.d.ts +43 -0
  130. package/build/dex/trader-joe-v2.1.js +79 -0
  131. package/build/dex/trader-joe-v2.1.js.map +1 -0
  132. package/build/dex/zerox/index.d.ts +26 -4
  133. package/build/dex/zerox/index.js +42 -50
  134. package/build/dex/zerox/index.js.map +1 -1
  135. package/build/dex/zerox/types.d.ts +0 -29
  136. package/build/dex/zerox/types.js +1 -8
  137. package/build/dex/zerox/types.js.map +1 -1
  138. package/package.json +1 -1
  139. package/scripts/run-dex-integration-v3.ts +4 -4
  140. package/src/abi/balancer-v3/directionalFeeHook.json +684 -0
  141. package/src/abi/balancer-v3/stableSurgeHook.json +976 -0
  142. package/src/dex/balancer-v3/balancer-hooks-events.test.ts +166 -0
  143. package/src/dex/balancer-v3/balancer-stableSurge.test.ts +110 -0
  144. package/src/dex/balancer-v3/balancer-test-helpers.ts +199 -0
  145. package/src/dex/balancer-v3/balancer-v3-e2e.test.ts +20 -0
  146. package/src/dex/balancer-v3/balancer-v3-integration.test.ts +2 -197
  147. package/src/dex/balancer-v3/balancer-v3-pool.ts +44 -13
  148. package/src/dex/balancer-v3/balancer-v3.ts +42 -1
  149. package/src/dex/balancer-v3/config.ts +39 -0
  150. package/src/dex/balancer-v3/getOnChainState.ts +1 -4
  151. package/src/dex/balancer-v3/getPoolsApi.ts +42 -23
  152. package/src/dex/balancer-v3/getTopPoolsApi.ts +13 -2
  153. package/src/dex/balancer-v3/hooks/balancer-hook-event-subscriber.ts +212 -0
  154. package/src/dex/balancer-v3/hooks/directionalFeeHook.ts +51 -0
  155. package/src/dex/balancer-v3/hooks/loadHooksConfig.ts +12 -0
  156. package/src/dex/balancer-v3/hooks/stableSurgeHook.ts +198 -0
  157. package/src/dex/balancer-v3/types.ts +4 -2
  158. package/tests/constants-e2e.ts +6 -1
  159. package/build/abi/Aave_GSM.json +0 -751
  160. package/build/abi/Balancer.json +0 -257
  161. package/build/abi/RamsesV2Quoter.abi.json +0 -274
  162. package/build/abi/USDM.json +0 -807
  163. package/build/abi/UniswapV2Router.json +0 -397
  164. package/build/abi/angle-transmuter/ChainlinkAccessControlledOffchainAggregator.json +0 -1246
  165. package/build/abi/curve-v1/CurveBUSDv2.abi.json +0 -1356
  166. package/build/abi/curve-v1/CurveTokenV1.json +0 -305
  167. package/build/abi/curve-v1/CurveTokenV2.json +0 -318
  168. package/build/abi/curve-v1/CurveV1StableNg.json +0 -1452
  169. package/build/abi/curve-v1/CurveV2Swap.json +0 -700
  170. package/build/abi/curve-v1/FactoryCryptoRegistry.json +0 -316
  171. package/build/abi/curve-v1/FactoryRegistry.json +0 -508
  172. package/build/abi/curve-v1/StableSwapAave.json +0 -1152
  173. package/build/abi/curve-v1/StableSwapBUSD.json +0 -814
  174. package/build/abi/curve-v1/StableSwapCompound.json +0 -814
  175. package/build/abi/curve-v1/StableSwapIDLE.json +0 -1253
  176. package/build/abi/curve-v1/StableSwapPax.json +0 -865
  177. package/build/abi/curve-v1/StableSwapSnow.json +0 -900
  178. package/build/abi/curve-v1/StableSwapUSDT.json +0 -814
  179. package/build/abi/curve-v1/StableSwapY.json +0 -814
  180. package/build/abi/inception/inception-ineth-pool.json +0 -1062
  181. package/build/abi/inception/inception-ineth.json +0 -609
  182. package/build/abi/inception/inception-ratio-feed.json +0 -329
  183. package/build/abi/inception/inception-vault.json +0 -991
  184. package/build/abi/kyberdmm/kyber-storage.abi.json +0 -824
  185. package/build/abi/kyberdmm.abi.json +0 -1148
  186. package/build/abi/maverick-v2/MaverickV2Quoter.json +0 -278
  187. package/build/abi/nerve/nerve-metapool.json +0 -790
  188. package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +0 -193
  189. package/build/abi/velodrome-slipstream/VelodromeSlipstreamQuoterV2.abi.json +0 -267
  190. package/build/dex/balancer-v1/balancer-pools.json +0 -33333
  191. package/build/dex/bebop/websocket-fetcher.d.ts +0 -35
  192. package/build/dex/bebop/websocket-fetcher.js +0 -87
  193. package/build/dex/bebop/websocket-fetcher.js.map +0 -1
  194. package/build/dex/idle-dao/idle-dao-pool.d.ts +0 -56
  195. package/build/dex/idle-dao/idle-dao-pool.js +0 -176
  196. package/build/dex/idle-dao/idle-dao-pool.js.map +0 -1
  197. package/build/dex/idle-dao/idle-dao-pooling-pool.d.ts +0 -16
  198. package/build/dex/idle-dao/idle-dao-pooling-pool.js +0 -57
  199. package/build/dex/idle-dao/idle-dao-pooling-pool.js.map +0 -1
  200. package/build/dex/idle-dao/scripts.d.ts +0 -9
  201. package/build/dex/idle-dao/scripts.js +0 -552
  202. package/build/dex/idle-dao/scripts.js.map +0 -1
  203. package/build/dex/inception/config.d.ts +0 -4
  204. package/build/dex/inception/config.js +0 -109
  205. package/build/dex/inception/config.js.map +0 -1
  206. package/build/dex/inception/inception-event-pool.d.ts +0 -16
  207. package/build/dex/inception/inception-event-pool.js +0 -51
  208. package/build/dex/inception/inception-event-pool.js.map +0 -1
  209. package/build/dex/inception/inception-native.js +0 -131
  210. package/build/dex/inception/inception-native.js.map +0 -1
  211. package/build/dex/inception/inception-pool.d.ts +0 -18
  212. package/build/dex/inception/inception-pool.js +0 -32
  213. package/build/dex/inception/inception-pool.js.map +0 -1
  214. package/build/dex/inception/inception-price-feed.d.ts +0 -19
  215. package/build/dex/inception/inception-price-feed.js +0 -51
  216. package/build/dex/inception/inception-price-feed.js.map +0 -1
  217. package/build/dex/inception/inception.d.ts +0 -43
  218. package/build/dex/inception/inception.js +0 -204
  219. package/build/dex/inception/inception.js.map +0 -1
  220. package/build/dex/inception/tokens.d.ts +0 -9
  221. package/build/dex/inception/tokens.js +0 -28
  222. package/build/dex/inception/tokens.js.map +0 -1
  223. package/build/dex/inception/types.d.ts +0 -22
  224. package/build/dex/inception/types.js +0 -3
  225. package/build/dex/inception/types.js.map +0 -1
  226. package/build/dex/inception/utils.d.ts +0 -6
  227. package/build/dex/inception/utils.js +0 -37
  228. package/build/dex/inception/utils.js.map +0 -1
  229. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-balancerv1-curvev1-eth-usdc-gusd.json +0 -16
  230. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +0 -16
  231. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +0 -16
  232. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +0 -16
  233. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-dai-usdc-eth.json +0 -16
  234. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-eth-usdc-dai.json +0 -16
  235. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +0 -16
  236. package/build/executor/fixtures/executor01/exchange-params/price-route-multiswap-sushiv3-usdt-usdc-dai.json +0 -16
  237. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-eth-usdc.json +0 -9
  238. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-usdc-eth.json +0 -9
  239. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-balancerv1-usdc-wbtc.json +0 -9
  240. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-eth-steth.json +0 -9
  241. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-steth-eth.json +0 -9
  242. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-curvev1-usdc-usdt.json +0 -9
  243. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-eth-usdc.json +0 -9
  244. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-usdc-eth.json +0 -9
  245. package/build/executor/fixtures/executor01/exchange-params/price-route-simpleSwap-univ3-usdc-usdt.json +0 -9
  246. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +0 -12
  247. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +0 -7
  248. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +0 -7
  249. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-dai-usdc-eth.json +0 -7
  250. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-eth-usdc-dai.json +0 -7
  251. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +0 -12
  252. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-simpleSwap-univ3-eth-usdc.json +0 -7
  253. package/build/executor/fixtures/executor01/maybe-weth-calldata/price-route-simpleSwap-univ3-usdc-eth.json +0 -7
  254. package/build/executor/fixtures/executor01/routes/price-route-multiswap-balancerv1-curvev1-eth-usdc-gusd.json +0 -78
  255. package/build/executor/fixtures/executor01/routes/price-route-multiswap-balancerv1-sushiv3-wbtc-eth-sushi.json +0 -81
  256. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-curvev1-eth-usdc-gusd.json +0 -78
  257. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-curvev1-gusd-usdc-eth.json +0 -78
  258. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-dai-usdc-eth.json +0 -81
  259. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-eth-usdc-dai.json +0 -81
  260. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-usdc-eth-wbtc.json +0 -81
  261. package/build/executor/fixtures/executor01/routes/price-route-multiswap-sushiv3-usdt-usdc-dai.json +0 -81
  262. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-eth-usdc.json +0 -64
  263. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-usdc-eth.json +0 -85
  264. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-balancerv1-usdc-wbtc.json +0 -64
  265. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-eth-steth.json +0 -52
  266. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-steth-eth.json +0 -52
  267. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-curvev1-usdc-usdt.json +0 -52
  268. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-eth-usdc.json +0 -55
  269. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-usdc-eth.json +0 -55
  270. package/build/executor/fixtures/executor01/routes/price-route-simpleSwap-univ3-usdc-usdt.json +0 -55
  271. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +0 -23
  272. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +0 -37
  273. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +0 -23
  274. package/build/executor/fixtures/executor02/exchange-params/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +0 -23
  275. package/build/executor/fixtures/executor02/exchange-params/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +0 -51
  276. package/build/executor/fixtures/executor02/exchange-params/price-route-multiswap-univ3-usdt-dai-eth.json +0 -58
  277. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +0 -23
  278. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +0 -23
  279. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +0 -9
  280. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +0 -16
  281. package/build/executor/fixtures/executor02/exchange-params/price-route-simpleSwap-univ3-curvev1-usdt-dai.json +0 -23
  282. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +0 -12
  283. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +0 -7
  284. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +0 -12
  285. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +0 -12
  286. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +0 -7
  287. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-multiswap-univ3-usdt-dai-eth.json +0 -7
  288. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +0 -7
  289. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +0 -7
  290. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +0 -7
  291. package/build/executor/fixtures/executor02/maybe-weth-calldata/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +0 -7
  292. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-balancerv1-sushiv3-univ3-bal-eth-sushi.json +0 -130
  293. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-maverickv1-sushiv3-univ3-eth-usdc-mav.json +0 -136
  294. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-univ3-sushiv3-sushi-eth-wbtc.json +0 -100
  295. package/build/executor/fixtures/executor02/routes/price-route-multiSwap-univ3-sushiv3-wbtc-eth-sushi.json +0 -100
  296. package/build/executor/fixtures/executor02/routes/price-route-multiswap-curvev1-univ3-dai-usdc-eth.json +0 -166
  297. package/build/executor/fixtures/executor02/routes/price-route-multiswap-univ3-usdt-dai-eth.json +0 -190
  298. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-balancerv1-eth-usdc.json +0 -114
  299. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-balancerv1-usdc-eth.json +0 -114
  300. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-univ3-eth-sushi.json +0 -55
  301. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-sushiv3-univ3-sushi-eth.json +0 -73
  302. package/build/executor/fixtures/executor02/routes/price-route-simpleSwap-univ3-curvev1-usdt-dai.json +0 -82
@@ -0,0 +1,212 @@
1
+ import {
2
+ EventFragment,
3
+ Fragment,
4
+ FunctionFragment,
5
+ Interface,
6
+ } from '@ethersproject/abi';
7
+ import _ from 'lodash';
8
+ import { DeepReadonly } from 'ts-essentials';
9
+ import { Log, Logger } from '../../../types';
10
+ import { catchParseLogError } from '../../../utils';
11
+ import { StatefulEventSubscriber } from '../../../stateful-event-subscriber';
12
+ import { IDexHelper } from '../../../dex-helper/idex-helper';
13
+ import { loadHooksConfig } from './loadHooksConfig';
14
+ import {
15
+ DirectionalFee,
16
+ DirectionalFeeConfig,
17
+ DirectionalFeeHookState,
18
+ getDirectionalFeeHookState,
19
+ } from './directionalFeeHook';
20
+ import directionalFeeHookAbi from '../../../abi/balancer-v3/directionalFeeHook.json';
21
+ import {
22
+ getStableSurgeHookState,
23
+ maxSurgeFeePercentageChangedEvent,
24
+ StableSurge,
25
+ StableSurgeConfig,
26
+ StableSurgeHookState,
27
+ thresholdSurgePercentageChangedEvent,
28
+ } from './stableSurgeHook';
29
+ import stableSurgeHookAbi from '../../../abi/balancer-v3/stableSurgeHook.json';
30
+
31
+ // Add each supported hook state here
32
+ export type HookState = DirectionalFeeHookState | StableSurgeHookState;
33
+
34
+ export type HookStateMap = {
35
+ [address: string]: HookState;
36
+ };
37
+
38
+ export type HookConfig = DirectionalFeeConfig | StableSurgeConfig;
39
+
40
+ export type HooksConfigMap = {
41
+ [hookAddress: string]: HookConfig;
42
+ };
43
+
44
+ /**
45
+ * This will handle events/state for each supported hook contract. State is used during swap calculations.
46
+ * Each hook should have its own implementation file for state typing, fetching state and handling events.
47
+ */
48
+ export class BalancerEventHook extends StatefulEventSubscriber<HookStateMap> {
49
+ handlers: {
50
+ [event: string]: (
51
+ event: any,
52
+ state: DeepReadonly<HookStateMap>,
53
+ log: Readonly<Log>,
54
+ logger: Logger,
55
+ ) => DeepReadonly<HookStateMap> | null;
56
+ } = {};
57
+
58
+ interfaces: Interface[];
59
+ logDecoder: (log: Log) => any;
60
+
61
+ addressesSubscribed: string[];
62
+
63
+ hooksConfigMap: HooksConfigMap;
64
+
65
+ constructor(
66
+ readonly parentName: string,
67
+ protected network: number,
68
+ protected dexHelper: IDexHelper,
69
+ logger: Logger,
70
+ ) {
71
+ super(parentName, 'Balancer_Hooks', dexHelper, logger);
72
+
73
+ // Load supported hooks from config file
74
+ this.hooksConfigMap = loadHooksConfig(network);
75
+
76
+ // Add each hook ABI here
77
+ this.interfaces = [
78
+ new Interface(directionalFeeHookAbi),
79
+ new Interface(stableSurgeHookAbi),
80
+ ];
81
+ this.logDecoder = (log: Log) =>
82
+ this.combineInterfaces(this.interfaces).parseLog(log);
83
+
84
+ // Subscribe to all hooks
85
+ this.addressesSubscribed = Object.keys(this.hooksConfigMap);
86
+
87
+ // StableSurgeHook events
88
+ this.handlers['ThresholdSurgePercentageChanged'] =
89
+ thresholdSurgePercentageChangedEvent.bind(this);
90
+ this.handlers['MaxSurgeFeePercentageChanged'] =
91
+ maxSurgeFeePercentageChangedEvent.bind(this);
92
+ }
93
+
94
+ /**
95
+ * The function is called every time any of the subscribed
96
+ * addresses release log. The function accepts the current
97
+ * state, updates the state according to the log, and returns
98
+ * the updated state.
99
+ * @param state - Current state of event subscriber
100
+ * @param log - Log released by one of the subscribed addresses
101
+ * @returns Updates state of the event subscriber after the log
102
+ */
103
+ protected processLog(
104
+ state: DeepReadonly<HookStateMap>,
105
+ log: Readonly<Log>,
106
+ ): DeepReadonly<HookStateMap> | null {
107
+ try {
108
+ const event = this.logDecoder(log);
109
+ if (event.name in this.handlers) {
110
+ return this.handlers[event.name](event, state, log, this.logger);
111
+ }
112
+ } catch (e) {
113
+ catchParseLogError(e, this.logger);
114
+ }
115
+
116
+ return null;
117
+ }
118
+
119
+ /**
120
+ * The function generates state using on-chain calls. This
121
+ * function is called to regenerate state if the event based
122
+ * system fails to fetch events and the local state is no
123
+ * more correct.
124
+ * @param blockNumber - Blocknumber for which the state should
125
+ * should be generated
126
+ * @returns state of the event subscriber at blocknumber
127
+ */
128
+ async generateState(
129
+ blockNumber: number,
130
+ ): Promise<DeepReadonly<HookStateMap>> {
131
+ // Only hooks that are supported will be called
132
+ const hookState: HookStateMap = {};
133
+
134
+ await Promise.all(
135
+ Object.keys(this.hooksConfigMap).map(async hookAddress => {
136
+ const hookConfig = this.hooksConfigMap[hookAddress];
137
+ if (hookConfig.type === DirectionalFee.type) {
138
+ hookState[hookAddress] = await getDirectionalFeeHookState();
139
+ } else if (hookConfig.type === StableSurge.type) {
140
+ hookState[hookAddress] = await getStableSurgeHookState(
141
+ this.interfaces[1],
142
+ hookAddress,
143
+ hookConfig.factory,
144
+ this.dexHelper,
145
+ blockNumber,
146
+ );
147
+ }
148
+ }),
149
+ );
150
+
151
+ return hookState;
152
+ }
153
+
154
+ async updateHookState() {
155
+ // Not all hooks need updated, only ones with settings/state that can't be handled by events
156
+ const blockNumber = await this.dexHelper.provider.getBlockNumber();
157
+ const currentState =
158
+ (_.cloneDeep(this.getStaleState()) as HookStateMap) || {};
159
+
160
+ await Promise.all(
161
+ Object.keys(this.hooksConfigMap).map(async hookAddress => {
162
+ const hookConfig = this.hooksConfigMap[hookAddress];
163
+ // StableSurge can have new registered pools with associated hook state
164
+ if (hookConfig.type === StableSurge.type) {
165
+ currentState[hookAddress] = await getStableSurgeHookState(
166
+ this.interfaces[1],
167
+ hookAddress,
168
+ hookConfig.factory,
169
+ this.dexHelper,
170
+ blockNumber,
171
+ );
172
+ }
173
+ }),
174
+ );
175
+
176
+ this.setState(currentState, blockNumber);
177
+ }
178
+
179
+ combineInterfaces = (interfaces: Interface[]): Interface => {
180
+ // Use a Map to store unique fragments, keyed by their string representation
181
+ const uniqueFragments = new Map<string, Fragment>();
182
+
183
+ interfaces.forEach((interfaceInstance: Interface) => {
184
+ interfaceInstance.fragments.forEach((fragment: Fragment) => {
185
+ let key: string;
186
+
187
+ if (fragment instanceof FunctionFragment) {
188
+ // For functions, use the signature as the key
189
+ // This includes name and parameter types
190
+ key = fragment.format();
191
+ } else if (fragment instanceof EventFragment) {
192
+ // For events, use the signature as the key
193
+ key = fragment.format();
194
+ } else {
195
+ // For other fragment types (like errors), use their string representation
196
+ key = fragment.toString();
197
+ }
198
+
199
+ // Only add if we haven't seen this signature before
200
+ if (!uniqueFragments.has(key)) {
201
+ uniqueFragments.set(key, fragment);
202
+ }
203
+ });
204
+ });
205
+
206
+ // Convert the Map values back to an array
207
+ const dedupedFragments = Array.from(uniqueFragments.values());
208
+
209
+ // Create a new interface with the deduped fragments
210
+ return new Interface(dedupedFragments);
211
+ };
212
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Each supported hook should implement its own version of this file making it easy to retrieve required onchain state.
3
+ */
4
+ import _ from 'lodash';
5
+ import { Log } from '../../../types';
6
+ import { DeepReadonly } from 'ts-essentials';
7
+ import { HookStateMap } from './balancer-hook-event-subscriber';
8
+
9
+ export const DirectionalFee = {
10
+ type: 'DirectionalFee' as const,
11
+ };
12
+
13
+ export type DirectionalFeeConfig = {
14
+ type: typeof DirectionalFee.type;
15
+ address: string;
16
+ };
17
+
18
+ export type DirectionalFeeHookState = {
19
+ test: string; // Note - this is just a dummy example as this specific test hook doesn't have any required state but is used to prove concept
20
+ };
21
+
22
+ /**
23
+ * Retrieve any initial hook state required.
24
+ * @returns
25
+ */
26
+ export async function getDirectionalFeeHookState(): Promise<DirectionalFeeHookState> {
27
+ // Note - for other hooks this function would retrieve any initial state using onchain calls
28
+ return { test: 'initial' };
29
+ }
30
+
31
+ /**
32
+ * Handles the event emitted when a new hook is registered.
33
+ * @param event
34
+ * @param state
35
+ * @param log
36
+ * @returns
37
+ */
38
+ export function exitFeeHookExampleRegisteredEvent(
39
+ event: any,
40
+ state: DeepReadonly<HookStateMap>,
41
+ log: Readonly<Log>,
42
+ ): DeepReadonly<HookStateMap> | null {
43
+ // Note - This is a non-important event but demos the use case. Other hooks would implement this for any state changes required for swap maths.
44
+ const hookAddress = event.args.hooksContract.toLowerCase();
45
+ if (!state[hookAddress]) {
46
+ return null;
47
+ }
48
+ const newState = _.cloneDeep(state) as HookStateMap;
49
+ newState[hookAddress] = { test: event.args.pool };
50
+ return newState;
51
+ }
@@ -0,0 +1,12 @@
1
+ import { BalancerV3Config } from './../config';
2
+ import { HooksConfigMap } from './balancer-hook-event-subscriber';
3
+
4
+ export function loadHooksConfig(network: number): HooksConfigMap {
5
+ const hooks = BalancerV3Config.BalancerV3[network].hooks;
6
+
7
+ if (!hooks) return {};
8
+
9
+ return Object.fromEntries(
10
+ hooks.map(hook => [hook.address.toLowerCase(), hook]),
11
+ );
12
+ }
@@ -0,0 +1,198 @@
1
+ import _ from 'lodash';
2
+ import { Log } from '../../../types';
3
+ import { DeepReadonly } from 'ts-essentials';
4
+ import { HookStateMap } from './balancer-hook-event-subscriber';
5
+ import { Interface } from '@ethersproject/abi';
6
+ import { Contract } from 'ethers';
7
+ import { IDexHelper } from '../../../dex-helper';
8
+ import { callData, decodeThrowError } from '../getOnChainState';
9
+ import { Logger } from 'log4js';
10
+
11
+ export const StableSurge = {
12
+ type: 'StableSurge' as const,
13
+ };
14
+
15
+ export type StableSurgeConfig = {
16
+ type: typeof StableSurge.type;
17
+ factory: string;
18
+ address: string;
19
+ };
20
+
21
+ export type StableSurgePoolSetting = {
22
+ surgeThresholdPercentage?: bigint;
23
+ maxSurgeFeePercentage?: bigint;
24
+ };
25
+
26
+ export type StableSurgeHookState = Record<string, StableSurgePoolSetting>;
27
+
28
+ /**
29
+ * Retrieve any initial hook state required.
30
+ * @returns
31
+ */
32
+ export async function getStableSurgeHookState(
33
+ hookInterface: Interface,
34
+ hookAddress: string,
35
+ factoryAddress: string,
36
+ dexHelper: IDexHelper,
37
+ blockNumber: number,
38
+ ): Promise<StableSurgeHookState> {
39
+ // Find all pools with hook
40
+ const resolverContract = new Contract(
41
+ factoryAddress,
42
+ ['function getPools() external view returns (address[])'],
43
+ dexHelper.provider,
44
+ );
45
+ const pools = (await resolverContract.callStatic.getPools({
46
+ blockTag: blockNumber,
47
+ })) as string[];
48
+ const surgeThresholdCallData: callData[] = pools.flatMap(pool => {
49
+ return [
50
+ {
51
+ target: hookAddress,
52
+ callData: hookInterface.encodeFunctionData(
53
+ 'getSurgeThresholdPercentage',
54
+ [pool],
55
+ ),
56
+ },
57
+ {
58
+ target: hookAddress,
59
+ callData: hookInterface.encodeFunctionData('getMaxSurgeFeePercentage', [
60
+ pool,
61
+ ]),
62
+ },
63
+ ];
64
+ });
65
+
66
+ // 500 is an arbitrary number chosen based on the blockGasLimit
67
+ const slicedMultiCallData = _.chunk(surgeThresholdCallData, 500);
68
+
69
+ const multicallDataResult = (
70
+ await Promise.all(
71
+ slicedMultiCallData.map(async _multiCallData =>
72
+ dexHelper.multiContract.methods
73
+ .tryAggregate(false, _multiCallData)
74
+ .call({}, blockNumber),
75
+ ),
76
+ )
77
+ ).flat();
78
+
79
+ return mapPoolsToDecodedData(hookInterface, pools, multicallDataResult);
80
+ }
81
+
82
+ function mapPoolsToDecodedData(
83
+ hookInterface: Interface,
84
+ pools: string[],
85
+ data: any[],
86
+ ): StableSurgeHookState {
87
+ return pools.reduce((acc, pool, index) => {
88
+ const dataIndex = index * 2;
89
+
90
+ // Ensure we have enough data
91
+ if (dataIndex + 1 >= data.length) {
92
+ throw new Error(`Insufficient data for pool ${pool}`);
93
+ }
94
+
95
+ // Decode the corresponding data pairs
96
+ const decodedX = decodeThrowError(
97
+ hookInterface,
98
+ 'getSurgeThresholdPercentage',
99
+ data[dataIndex],
100
+ pool,
101
+ );
102
+ const decodedY = decodeThrowError(
103
+ hookInterface,
104
+ 'getMaxSurgeFeePercentage',
105
+ data[dataIndex + 1],
106
+ pool,
107
+ );
108
+ // Add to accumulator
109
+ acc[pool.toLowerCase()] = {
110
+ surgeThresholdPercentage: decodedX[0].toBigInt(),
111
+ maxSurgeFeePercentage: decodedY[0].toBigInt(),
112
+ };
113
+
114
+ return acc;
115
+ }, {} as StableSurgeHookState);
116
+ }
117
+
118
+ /**
119
+ * Handles the event emitted when threshold surge percentage changed.
120
+ * @param event
121
+ * @param state
122
+ * @param log
123
+ * @returns
124
+ */
125
+ export function thresholdSurgePercentageChangedEvent(
126
+ event: any,
127
+ state: DeepReadonly<HookStateMap>,
128
+ log: Readonly<Log>,
129
+ logger: Logger,
130
+ ): DeepReadonly<HookStateMap> | null {
131
+ // ThresholdSurgePercentageChanged(pool, newSurgeThresholdPercentage)
132
+ const hookAddress = log.address.toLowerCase();
133
+
134
+ if (!state[hookAddress]) {
135
+ logger.info(`State for hook ${hookAddress} was not found...`);
136
+ return state;
137
+ }
138
+
139
+ const newState = _.cloneDeep(state) as HookStateMap;
140
+
141
+ if (
142
+ newState[hookAddress] &&
143
+ !(newState[hookAddress] as StableSurgeHookState)[
144
+ event.args.pool.toLowerCase()
145
+ ]
146
+ ) {
147
+ (newState[hookAddress] as StableSurgeHookState)[
148
+ event.args.pool.toLowerCase()
149
+ ] = {
150
+ surgeThresholdPercentage: BigInt(event.args.newSurgeThresholdPercentage),
151
+ };
152
+ } else {
153
+ (newState[hookAddress] as StableSurgeHookState)[
154
+ event.args.pool.toLowerCase()
155
+ ].surgeThresholdPercentage = BigInt(event.args.newSurgeThresholdPercentage);
156
+ }
157
+
158
+ return newState;
159
+ }
160
+
161
+ /**
162
+ * Handles the event emitted when max surge fee percentage changed.
163
+ * @param event
164
+ * @param state
165
+ * @param log
166
+ * @returns
167
+ */
168
+ export function maxSurgeFeePercentageChangedEvent(
169
+ event: any,
170
+ state: DeepReadonly<HookStateMap>,
171
+ log: Readonly<Log>,
172
+ ): DeepReadonly<HookStateMap> | null {
173
+ // MaxSurgeFeePercentageChanged(pool, newMaxSurgeFeePercentage)
174
+ const hookAddress = log.address.toLowerCase();
175
+ if (!state[hookAddress]) {
176
+ return null;
177
+ }
178
+ const newState = _.cloneDeep(state) as HookStateMap;
179
+
180
+ if (
181
+ newState[hookAddress] &&
182
+ !(newState[hookAddress] as StableSurgeHookState)[
183
+ event.args.pool.toLowerCase() as string
184
+ ]
185
+ ) {
186
+ (newState[hookAddress] as StableSurgeHookState)[
187
+ event.args.pool.toLowerCase()
188
+ ] = {
189
+ maxSurgeFeePercentage: BigInt(event.args.newMaxSurgeFeePercentage),
190
+ };
191
+ } else {
192
+ (newState[hookAddress] as StableSurgeHookState)[
193
+ event.args.pool.toLowerCase()
194
+ ].maxSurgeFeePercentage = BigInt(event.args.newMaxSurgeFeePercentage);
195
+ }
196
+
197
+ return newState;
198
+ }
@@ -1,5 +1,6 @@
1
1
  import { BufferState } from '@balancer-labs/balancer-maths';
2
2
  import { Address } from '../../types';
3
+ import { HookConfig } from './hooks/balancer-hook-event-subscriber';
3
4
 
4
5
  // Immutable data types available on all pools (Available from API)
5
6
  export type CommonImmutablePoolState = {
@@ -12,7 +13,9 @@ export type CommonImmutablePoolState = {
12
13
  weights: bigint[];
13
14
  // TODO re-introduce this once added to API
14
15
  // scalingFactors: bigint[];
16
+ hookAddress: string | undefined;
15
17
  hookType: string | undefined;
18
+ supportsUnbalancedLiquidity: boolean;
16
19
  };
17
20
 
18
21
  // Mutable data types available on all pools (Available via onchain calls/events)
@@ -26,8 +29,6 @@ export interface CommonMutableState {
26
29
  isPoolPaused: boolean;
27
30
  // TODO remove this once API provides it
28
31
  scalingFactors: bigint[];
29
- // TODO remove this once API provides it
30
- hasHook: boolean;
31
32
  }
32
33
 
33
34
  type CommonPoolState = CommonImmutablePoolState & CommonMutableState;
@@ -76,6 +77,7 @@ export type DexParams = {
76
77
  // https://github.com/balancer/balancer-v3-monorepo/blob/main/pkg/interfaces/contracts/vault/IRouter.sol
77
78
  balancerRouterAddress: string;
78
79
  balancerBatchRouterAddress: string;
80
+ hooks?: HookConfig[];
79
81
  };
80
82
 
81
83
  export type TokenInfo = {
@@ -1694,6 +1694,10 @@ export const Tokens: {
1694
1694
  address: '0xC768c589647798a6EE01A91FdE98EF2ed046DBD6',
1695
1695
  decimals: 6,
1696
1696
  },
1697
+ waBasGHO: {
1698
+ address: '0x88b1Cd4b430D95b406E382C3cDBaE54697a0286E',
1699
+ decimals: 18,
1700
+ },
1697
1701
  aaveUSDC: {
1698
1702
  address: '0x4e65fe4dba92790696d040ac24aa414708f5c0ab',
1699
1703
  decimals: 6,
@@ -2145,7 +2149,7 @@ export const Holders: {
2145
2149
  DOG: '0xbe3ab8a87730684ef1e476064c2e43c3e982f8e8',
2146
2150
  stataUSDC: '0x88Cac91ADDE2208039A227B373C2A692C0700547',
2147
2151
  aaveUSDC: '0x5DE3c5BE52D7aDbdC3aEFe2eA061A2ECE0C7d766',
2148
- waBasUSDC: '0xC768c589647798a6EE01A91FdE98EF2ed046DBD6',
2152
+ waBasUSDC: '0x450C01300B83bE379113256038b4Dd3b45d23B5e',
2149
2153
  USDM: '0x426c4966fC76Bf782A663203c023578B744e4C5E',
2150
2154
  crvUSD: '0xBbAbDB1385deA5285113581A7024d6DC04131101',
2151
2155
  cbETH: '0x50e011dD1e2b4906F1534623cD134B30422bb11E',
@@ -2156,6 +2160,7 @@ export const Holders: {
2156
2160
  waBaswstETH: '0x854B004700885A61107B458f11eCC169A019b764',
2157
2161
  sUSDS: '0xC9716E991396AA933Fa7A481003a5953bcBabC17',
2158
2162
  smUSDC: '0x88457F47c9BEC8379eB90d8dC3592F79084e555d',
2163
+ waBasGHO: '0x450C01300B83bE379113256038b4Dd3b45d23B5e',
2159
2164
  },
2160
2165
  [Network.SEPOLIA]: {
2161
2166
  bal: '0xDb4ff41B4C1222c2b1869A67Be115070688989a2',