@paraswap/dex-lib 3.4.0 → 3.4.1

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 (360) 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/README.md +3 -3
  5. package/abis.txt +92 -0
  6. package/build/abi/uniswap-v3/AlienBaseV3Router.abi.json +52 -0
  7. package/build/abi/{integral/relayer.json → wombat/pool.json} +587 -446
  8. package/build/config.js +0 -35
  9. package/build/config.js.map +1 -1
  10. package/build/constants.d.ts +0 -1
  11. package/build/constants.js +0 -1
  12. package/build/constants.js.map +1 -1
  13. package/build/dex/augustus-rfq.js +0 -1
  14. package/build/dex/augustus-rfq.js.map +1 -1
  15. package/build/dex/curve-v1/config.js +1 -57
  16. package/build/dex/curve-v1/config.js.map +1 -1
  17. package/build/dex/curve-v1-factory/config.js +1 -1
  18. package/build/dex/curve-v1-factory/config.js.map +1 -1
  19. package/build/dex/etherfi.js +1 -1
  20. package/build/dex/gmx/gmx.js.map +1 -1
  21. package/build/dex/index.js +0 -14
  22. package/build/dex/index.js.map +1 -1
  23. package/build/dex/nerve/config.js +0 -399
  24. package/build/dex/nerve/config.js.map +1 -1
  25. package/build/dex/paraswap-limit-orders/config.js +0 -7
  26. package/build/dex/paraswap-limit-orders/config.js.map +1 -1
  27. package/build/dex/quick-perps/quick-perps.js.map +1 -1
  28. package/build/dex/quickswap/config.js +0 -8
  29. package/build/dex/quickswap/config.js.map +1 -1
  30. package/build/dex/solidly/config.js +1 -27
  31. package/build/dex/solidly/config.js.map +1 -1
  32. package/build/dex/solidly/solidly.js +0 -2
  33. package/build/dex/solidly/solidly.js.map +1 -1
  34. package/build/dex/solidly-v3/scripts/check-event-pool-event.d.ts +1 -0
  35. package/build/dex/solidly-v3/scripts/check-event-pool-event.js +53 -0
  36. package/build/dex/solidly-v3/scripts/check-event-pool-event.js.map +1 -0
  37. package/build/dex/stable-pool/stable-pool.js +1 -8
  38. package/build/dex/stable-pool/stable-pool.js.map +1 -1
  39. package/build/dex/stable-pool.js +1 -8
  40. package/build/dex/stable-pool.js.map +1 -1
  41. package/build/dex/uniswap-v2/config.js +0 -152
  42. package/build/dex/uniswap-v2/config.js.map +1 -1
  43. package/build/dex/uniswap-v2/constants.js +0 -1
  44. package/build/dex/uniswap-v2/constants.js.map +1 -1
  45. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.d.ts +17 -0
  46. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js +64 -0
  47. package/build/dex/uniswap-v3/forks/alien-base-v3/alien-base-v3.js.map +1 -0
  48. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.d.ts +17 -0
  49. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js +79 -0
  50. package/build/dex/uniswap-v3/forks/alien-v3/alien-v3.js.map +1 -0
  51. package/build/dex/weth/config.js +0 -3
  52. package/build/dex/weth/config.js.map +1 -1
  53. package/build/dex/wsteth/wsteth.js.map +1 -1
  54. package/build/types.d.ts +0 -1
  55. package/package.json +1 -1
  56. package/src/config.ts +0 -39
  57. package/src/constants.ts +0 -1
  58. package/src/dex/augustus-rfq.ts +0 -1
  59. package/src/dex/curve-v1/config.ts +1 -57
  60. package/src/dex/curve-v1/curve-v1-e2e.test.ts +0 -51
  61. package/src/dex/curve-v1-factory/config.ts +1 -1
  62. package/src/dex/etherfi.ts +1 -1
  63. package/src/dex/gmx/gmx.ts +1 -4
  64. package/src/dex/index.ts +0 -14
  65. package/src/dex/nerve/config.ts +0 -400
  66. package/src/dex/nerve/nerve-e2e.test.ts +0 -507
  67. package/src/dex/nerve/nerve-events.test.ts +0 -268
  68. package/src/dex/paraswap-limit-orders/config.ts +0 -7
  69. package/src/dex/paraswap-limit-orders/paraswap-limit-orders-e2e.test.ts +2 -2
  70. package/src/dex/paraswap-limit-orders/paraswap-limit-orders-integration.test.ts +1 -1
  71. package/src/dex/quick-perps/quick-perps.ts +1 -4
  72. package/src/dex/quickswap/config.ts +0 -9
  73. package/src/dex/quickswap/quickswap-e2e.test.ts +0 -97
  74. package/src/dex/solidly/config.ts +1 -30
  75. package/src/dex/solidly/solidly-e2e.test.ts +0 -280
  76. package/src/dex/solidly/solidly-integration.test.ts +0 -135
  77. package/src/dex/solidly/solidly.ts +0 -2
  78. package/src/dex/stable-pool/stable-pool.ts +1 -8
  79. package/src/dex/uniswap-v2/config.ts +0 -185
  80. package/src/dex/uniswap-v2/constants.ts +0 -1
  81. package/src/dex/uniswap-v2/uniswap-v2-e2e-avalanche.test.ts +0 -272
  82. package/src/dex/uniswap-v2/uniswap-v2-e2e-base.test.ts +0 -6
  83. package/src/dex/uniswap-v2/uniswap-v2-e2e-bsc.test.ts +0 -325
  84. package/src/dex/uniswap-v2/uniswap-v2-e2e-mainnet.test.ts +0 -175
  85. package/src/dex/uniswap-v2/uniswap-v2-e2e-polygon.test.ts +0 -413
  86. package/src/dex/weth/config.ts +0 -3
  87. package/src/dex/wsteth/wsteth.ts +1 -4
  88. package/src/types.ts +0 -1
  89. package/tests/constants-e2e.ts +0 -21
  90. package/tests/generate-new-limit-order.ts +1 -1
  91. package/.idea/aws.xml +0 -17
  92. package/.idea/codeStyles/Project.xml +0 -19
  93. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  94. package/.idea/misc.xml +0 -6
  95. package/.idea/modules.xml +0 -8
  96. package/.idea/paraswap-dex-lib.iml +0 -9
  97. package/.idea/prettier.xml +0 -7
  98. package/.idea/vcs.xml +0 -6
  99. package/build/abi/AugustusV6.abi.json +0 -395
  100. package/build/abi/algebra/AlgebraPool.abi.json +0 -727
  101. package/build/abi/curve-v1/StableSwapFRXETH.json +0 -889
  102. package/build/abi/curve-v1/StableSwapWBETH.json +0 -1223
  103. package/build/abi/sushiswap-v3/QuoterV2.json +0 -267
  104. package/build/abi/sushiswap-v3/RouterProcessor3.json +0 -289
  105. package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +0 -193
  106. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +0 -285
  107. package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +0 -583
  108. package/build/abi/wBETH.json +0 -1527
  109. package/build/abi/woo-fi/WooFeeManager.abi.json +0 -318
  110. package/build/abi/woo-fi/WooPP.abi.json +0 -548
  111. package/build/abi/woo-fi/Wooracle.abi.json +0 -260
  112. package/build/dex/aave-v3/tokens/arbitrum.json +0 -50
  113. package/build/dex/aave-v3/tokens/avalanche.json +0 -74
  114. package/build/dex/aave-v3/tokens/fantom.json +0 -62
  115. package/build/dex/aave-v3/tokens/optimism.json +0 -50
  116. package/build/dex/aave-v3/tokens/polygon.json +0 -116
  117. package/build/dex/algebra/algebra-pool.d.ts +0 -114
  118. package/build/dex/algebra/algebra-pool.js +0 -448
  119. package/build/dex/algebra/algebra-pool.js.map +0 -1
  120. package/build/dex/balancer-v2/Gyro3Pool.d.ts +0 -43
  121. package/build/dex/balancer-v2/Gyro3Pool.js +0 -160
  122. package/build/dex/balancer-v2/Gyro3Pool.js.map +0 -1
  123. package/build/dex/balancer-v2/LinearMath.d.ts +0 -88
  124. package/build/dex/balancer-v2/LinearMath.js +0 -285
  125. package/build/dex/balancer-v2/LinearMath.js.map +0 -1
  126. package/build/dex/balancer-v2/LinearPool.d.ts +0 -81
  127. package/build/dex/balancer-v2/LinearPool.js +0 -444
  128. package/build/dex/balancer-v2/LinearPool.js.map +0 -1
  129. package/build/dex/balancer-v2/PhantomStablePool.d.ts +0 -90
  130. package/build/dex/balancer-v2/PhantomStablePool.js +0 -418
  131. package/build/dex/balancer-v2/PhantomStablePool.js.map +0 -1
  132. package/build/dex/balancer-v2/StableMath.d.ts +0 -9
  133. package/build/dex/balancer-v2/StableMath.js +0 -272
  134. package/build/dex/balancer-v2/StableMath.js.map +0 -1
  135. package/build/dex/balancer-v2/balancer-v2-pool.d.ts +0 -140
  136. package/build/dex/balancer-v2/balancer-v2-pool.js +0 -647
  137. package/build/dex/balancer-v2/balancer-v2-pool.js.map +0 -1
  138. package/build/dex/curve-v1/pools/frxETHpool.d.ts +0 -7
  139. package/build/dex/curve-v1/pools/frxETHpool.js +0 -27
  140. package/build/dex/curve-v1/pools/frxETHpool.js.map +0 -1
  141. package/build/dex/curve-v1/pools/wbETHpool.d.ts +0 -29
  142. package/build/dex/curve-v1/pools/wbETHpool.js +0 -408
  143. package/build/dex/curve-v1/pools/wbETHpool.js.map +0 -1
  144. package/build/dex/integral/config.d.ts +0 -4
  145. package/build/dex/integral/config.js +0 -18
  146. package/build/dex/integral/config.js.map +0 -1
  147. package/build/dex/integral/integral-pool.d.ts +0 -39
  148. package/build/dex/integral/integral-pool.js +0 -67
  149. package/build/dex/integral/integral-pool.js.map +0 -1
  150. package/build/dex/integral/integral.d.ts +0 -48
  151. package/build/dex/integral/integral.js +0 -402
  152. package/build/dex/integral/integral.js.map +0 -1
  153. package/build/dex/integral/types.d.ts +0 -25
  154. package/build/dex/integral/types.js +0 -9
  155. package/build/dex/integral/types.js.map +0 -1
  156. package/build/dex/lighter-v1/abi/erc20.json +0 -222
  157. package/build/dex/lighter-v1/abi/factory.json +0 -291
  158. package/build/dex/lighter-v1/abi/order_book.json +0 -594
  159. package/build/dex/lighter-v1/abi/order_book_helper.json +0 -176
  160. package/build/dex/lighter-v1/abi/router.json +0 -488
  161. package/build/dex/lighter-v1/config.d.ts +0 -4
  162. package/build/dex/lighter-v1/config.js +0 -17
  163. package/build/dex/lighter-v1/config.js.map +0 -1
  164. package/build/dex/lighter-v1/constants.d.ts +0 -2
  165. package/build/dex/lighter-v1/constants.js +0 -13
  166. package/build/dex/lighter-v1/constants.js.map +0 -1
  167. package/build/dex/lighter-v1/lighter-v1-pool.d.ts +0 -57
  168. package/build/dex/lighter-v1/lighter-v1-pool.js +0 -310
  169. package/build/dex/lighter-v1/lighter-v1-pool.js.map +0 -1
  170. package/build/dex/lighter-v1/lighter-v1.d.ts +0 -45
  171. package/build/dex/lighter-v1/lighter-v1.js +0 -331
  172. package/build/dex/lighter-v1/lighter-v1.js.map +0 -1
  173. package/build/dex/lighter-v1/types.d.ts +0 -40
  174. package/build/dex/lighter-v1/types.js +0 -3
  175. package/build/dex/lighter-v1/types.js.map +0 -1
  176. package/build/dex/pancakeswap-v3/types.d.ts +0 -14
  177. package/build/dex/pancakeswap-v3/types.js +0 -3
  178. package/build/dex/pancakeswap-v3/types.js.map +0 -1
  179. package/build/dex/quickswap/camelot-v3.d.ts +0 -6
  180. package/build/dex/quickswap/camelot-v3.js +0 -19
  181. package/build/dex/quickswap/camelot-v3.js.map +0 -1
  182. package/build/dex/quickswap/zyberswap-v3.d.ts +0 -6
  183. package/build/dex/quickswap/zyberswap-v3.js +0 -19
  184. package/build/dex/quickswap/zyberswap-v3.js.map +0 -1
  185. package/build/dex/quickswap-v3.d.ts +0 -21
  186. package/build/dex/quickswap-v3.js +0 -40
  187. package/build/dex/quickswap-v3.js.map +0 -1
  188. package/build/dex/ramses-v2/config.d.ts +0 -4
  189. package/build/dex/ramses-v2/config.js +0 -28
  190. package/build/dex/ramses-v2/config.js.map +0 -1
  191. package/build/dex/ramses-v2/constants.d.ts +0 -28
  192. package/build/dex/ramses-v2/constants.js +0 -35
  193. package/build/dex/ramses-v2/constants.js.map +0 -1
  194. package/build/dex/ramses-v2/contract-math/BitMath.d.ts +0 -4
  195. package/build/dex/ramses-v2/contract-math/BitMath.js +0 -93
  196. package/build/dex/ramses-v2/contract-math/BitMath.js.map +0 -1
  197. package/build/dex/ramses-v2/contract-math/FixedPoint128.d.ts +0 -3
  198. package/build/dex/ramses-v2/contract-math/FixedPoint128.js +0 -8
  199. package/build/dex/ramses-v2/contract-math/FixedPoint128.js.map +0 -1
  200. package/build/dex/ramses-v2/contract-math/FixedPoint96.d.ts +0 -4
  201. package/build/dex/ramses-v2/contract-math/FixedPoint96.js +0 -9
  202. package/build/dex/ramses-v2/contract-math/FixedPoint96.js.map +0 -1
  203. package/build/dex/ramses-v2/contract-math/FullMath.d.ts +0 -4
  204. package/build/dex/ramses-v2/contract-math/FullMath.js +0 -19
  205. package/build/dex/ramses-v2/contract-math/FullMath.js.map +0 -1
  206. package/build/dex/ramses-v2/contract-math/LiquidityMath.d.ts +0 -3
  207. package/build/dex/ramses-v2/contract-math/LiquidityMath.js +0 -22
  208. package/build/dex/ramses-v2/contract-math/LiquidityMath.js.map +0 -1
  209. package/build/dex/ramses-v2/contract-math/Oracle.d.ts +0 -10
  210. package/build/dex/ramses-v2/contract-math/Oracle.js +0 -133
  211. package/build/dex/ramses-v2/contract-math/Oracle.js.map +0 -1
  212. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.d.ts +0 -10
  213. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js +0 -91
  214. package/build/dex/ramses-v2/contract-math/SqrtPriceMath.js.map +0 -1
  215. package/build/dex/ramses-v2/contract-math/SwapMath.d.ts +0 -8
  216. package/build/dex/ramses-v2/contract-math/SwapMath.js +0 -70
  217. package/build/dex/ramses-v2/contract-math/SwapMath.js.map +0 -1
  218. package/build/dex/ramses-v2/contract-math/Tick.d.ts +0 -7
  219. package/build/dex/ramses-v2/contract-math/Tick.js +0 -45
  220. package/build/dex/ramses-v2/contract-math/Tick.js.map +0 -1
  221. package/build/dex/ramses-v2/contract-math/TickBitMap.d.ts +0 -8
  222. package/build/dex/ramses-v2/contract-math/TickBitMap.js +0 -87
  223. package/build/dex/ramses-v2/contract-math/TickBitMap.js.map +0 -1
  224. package/build/dex/ramses-v2/contract-math/TickMath.d.ts +0 -8
  225. package/build/dex/ramses-v2/contract-math/TickMath.js +0 -162
  226. package/build/dex/ramses-v2/contract-math/TickMath.js.map +0 -1
  227. package/build/dex/ramses-v2/contract-math/UnsafeMath.d.ts +0 -3
  228. package/build/dex/ramses-v2/contract-math/UnsafeMath.js +0 -10
  229. package/build/dex/ramses-v2/contract-math/UnsafeMath.js.map +0 -1
  230. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.d.ts +0 -18
  231. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js +0 -392
  232. package/build/dex/ramses-v2/contract-math/uniswap-v3-math.js.map +0 -1
  233. package/build/dex/ramses-v2/contract-math/utils.d.ts +0 -3
  234. package/build/dex/ramses-v2/contract-math/utils.js +0 -16
  235. package/build/dex/ramses-v2/contract-math/utils.js.map +0 -1
  236. package/build/dex/ramses-v2/ramses-v2-pool.d.ts +0 -42
  237. package/build/dex/ramses-v2/ramses-v2-pool.js +0 -307
  238. package/build/dex/ramses-v2/ramses-v2-pool.js.map +0 -1
  239. package/build/dex/ramses-v2/ramses-v2.d.ts +0 -61
  240. package/build/dex/ramses-v2/ramses-v2.js +0 -690
  241. package/build/dex/ramses-v2/ramses-v2.js.map +0 -1
  242. package/build/dex/ramses-v2/types.d.ts +0 -154
  243. package/build/dex/ramses-v2/types.js +0 -9
  244. package/build/dex/ramses-v2/types.js.map +0 -1
  245. package/build/dex/ramses-v2/utils.d.ts +0 -6
  246. package/build/dex/ramses-v2/utils.js +0 -71
  247. package/build/dex/ramses-v2/utils.js.map +0 -1
  248. package/build/dex/solidly/forks-override/fvm.d.ts +0 -20
  249. package/build/dex/solidly/forks-override/fvm.js +0 -42
  250. package/build/dex/solidly/forks-override/fvm.js.map +0 -1
  251. package/build/dex/sushiswap-v3/config.d.ts +0 -4
  252. package/build/dex/sushiswap-v3/config.js +0 -132
  253. package/build/dex/sushiswap-v3/config.js.map +0 -1
  254. package/build/dex/sushiswap-v3/constants.d.ts +0 -4
  255. package/build/dex/sushiswap-v3/constants.js +0 -32
  256. package/build/dex/sushiswap-v3/constants.js.map +0 -1
  257. package/build/dex/sushiswap-v3/sushiswap-v3-original.d.ts +0 -56
  258. package/build/dex/sushiswap-v3/sushiswap-v3-original.js +0 -598
  259. package/build/dex/sushiswap-v3/sushiswap-v3-original.js.map +0 -1
  260. package/build/dex/sushiswap-v3/sushiswap-v3-pool.d.ts +0 -1
  261. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js +0 -6
  262. package/build/dex/sushiswap-v3/sushiswap-v3-pool.js.map +0 -1
  263. package/build/dex/sushiswap-v3/sushiswap-v3.d.ts +0 -21
  264. package/build/dex/sushiswap-v3/sushiswap-v3.js +0 -58
  265. package/build/dex/sushiswap-v3/sushiswap-v3.js.map +0 -1
  266. package/build/dex/sushiswap-v3/token.d.ts +0 -6
  267. package/build/dex/sushiswap-v3/token.js +0 -23
  268. package/build/dex/sushiswap-v3/token.js.map +0 -1
  269. package/build/dex/sushiswap-v3/types.d.ts +0 -15
  270. package/build/dex/sushiswap-v3/types.js +0 -18
  271. package/build/dex/sushiswap-v3/types.js.map +0 -1
  272. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +0 -12
  273. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +0 -23
  274. package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +0 -1
  275. package/build/dex/woo-fi/config.d.ts +0 -4
  276. package/build/dex/woo-fi/config.js +0 -141
  277. package/build/dex/woo-fi/config.js.map +0 -1
  278. package/build/dex/woo-fi/constants.d.ts +0 -5
  279. package/build/dex/woo-fi/constants.js +0 -20
  280. package/build/dex/woo-fi/constants.js.map +0 -1
  281. package/build/dex/woo-fi/types.d.ts +0 -48
  282. package/build/dex/woo-fi/types.js +0 -3
  283. package/build/dex/woo-fi/types.js.map +0 -1
  284. package/build/dex/woo-fi/woo-fi-decimal-math.d.ts +0 -14
  285. package/build/dex/woo-fi/woo-fi-decimal-math.js +0 -42
  286. package/build/dex/woo-fi/woo-fi-decimal-math.js.map +0 -1
  287. package/build/dex/woo-fi/woo-fi-math.d.ts +0 -31
  288. package/build/dex/woo-fi/woo-fi-math.js +0 -300
  289. package/build/dex/woo-fi/woo-fi-math.js.map +0 -1
  290. package/build/dex/woo-fi/woo-fi.d.ts +0 -65
  291. package/build/dex/woo-fi/woo-fi.js +0 -480
  292. package/build/dex/woo-fi/woo-fi.js.map +0 -1
  293. package/build/executor/IExecutorBytecodeBuilder.d.ts +0 -6
  294. package/build/executor/IExecutorBytecodeBuilder.js +0 -3
  295. package/build/executor/IExecutorBytecodeBuilder.js.map +0 -1
  296. package/src/abi/AaveV1_lending_pool.json +0 -27
  297. package/src/abi/platypus/asset.json +0 -490
  298. package/src/abi/platypus/avax-pool.json +0 -820
  299. package/src/abi/platypus/oracle.json +0 -119
  300. package/src/abi/platypus/pool.json +0 -677
  301. package/src/abi/smardex/all/smardex-router.json +0 -648
  302. package/src/abi/smardex/layer-1/smardex-factory.json +0 -242
  303. package/src/abi/smardex/layer-1/smardex-pool.json +0 -506
  304. package/src/abi/smardex/layer-2/smardex-factory.json +0 -185
  305. package/src/abi/smardex/layer-2/smardex-pool.json +0 -578
  306. package/src/abi/swaap-v1/asset.json +0 -490
  307. package/src/abi/swaap-v1/oracle.json +0 -119
  308. package/src/abi/swaap-v1/pool.json +0 -1346
  309. package/src/dex/aave-v1/aave-v1-e2e.test.ts +0 -105
  310. package/src/dex/aave-v1/aave-v1-integration.test.ts +0 -100
  311. package/src/dex/aave-v1/aave-v1.ts +0 -261
  312. package/src/dex/aave-v1/config.ts +0 -22
  313. package/src/dex/aave-v1/tokens-mainnet.json +0 -134
  314. package/src/dex/aave-v1/tokens.ts +0 -58
  315. package/src/dex/aave-v1/types.ts +0 -24
  316. package/src/dex/platypus/asset.ts +0 -139
  317. package/src/dex/platypus/config.ts +0 -72
  318. package/src/dex/platypus/platypus-e2e.test.ts +0 -168
  319. package/src/dex/platypus/platypus-events.test.ts +0 -167
  320. package/src/dex/platypus/platypus-integration.test.ts +0 -256
  321. package/src/dex/platypus/platypus.ts +0 -639
  322. package/src/dex/platypus/pool-avax.ts +0 -92
  323. package/src/dex/platypus/pool-base.ts +0 -155
  324. package/src/dex/platypus/pool-pure.ts +0 -71
  325. package/src/dex/platypus/pool-subscriber.ts +0 -239
  326. package/src/dex/platypus/pool.ts +0 -99
  327. package/src/dex/platypus/types.ts +0 -104
  328. package/src/dex/quickswap/spiritswap-v3.ts +0 -19
  329. package/src/dex/smardex/config.ts +0 -67
  330. package/src/dex/smardex/constants.ts +0 -35
  331. package/src/dex/smardex/sdk/constants.ts +0 -10
  332. package/src/dex/smardex/sdk/core.ts +0 -832
  333. package/src/dex/smardex/sdk/errors.ts +0 -18
  334. package/src/dex/smardex/sdk/types.ts +0 -68
  335. package/src/dex/smardex/sdk/utils.ts +0 -156
  336. package/src/dex/smardex/smardex-e2e.test.ts +0 -275
  337. package/src/dex/smardex/smardex-event-pool.ts +0 -164
  338. package/src/dex/smardex/smardex-events.test.ts +0 -297
  339. package/src/dex/smardex/smardex-integration.test.ts +0 -258
  340. package/src/dex/smardex/smardex.ts +0 -770
  341. package/src/dex/smardex/types.ts +0 -69
  342. package/src/dex/solidly/forks-override/cone.ts +0 -67
  343. package/src/dex/solidly/forks-override/solisnek.ts +0 -10
  344. package/src/dex/swaap-v1/config.ts +0 -62
  345. package/src/dex/swaap-v1/constants.ts +0 -22
  346. package/src/dex/swaap-v1/libraries/ChainlinkUtils.ts +0 -152
  347. package/src/dex/swaap-v1/libraries/Const.ts +0 -29
  348. package/src/dex/swaap-v1/libraries/GeometricBrownianMotion.ts +0 -433
  349. package/src/dex/swaap-v1/libraries/LogExpMath.ts +0 -511
  350. package/src/dex/swaap-v1/libraries/MathMMM.ts +0 -717
  351. package/src/dex/swaap-v1/libraries/Num.ts +0 -184
  352. package/src/dex/swaap-v1/libraries/PoolQuotations.ts +0 -322
  353. package/src/dex/swaap-v1/libraries/Struct.ts +0 -66
  354. package/src/dex/swaap-v1/swaap-v1-e2e.test.ts +0 -75
  355. package/src/dex/swaap-v1/swaap-v1-events.test.ts +0 -138
  356. package/src/dex/swaap-v1/swaap-v1-integration.test.ts +0 -232
  357. package/src/dex/swaap-v1/swaap-v1-pool.ts +0 -919
  358. package/src/dex/swaap-v1/swaap-v1.ts +0 -668
  359. package/src/dex/swaap-v1/types.ts +0 -124
  360. package/src/dex/uniswap-v2/uniswap-v2-e2e-ropsten.test.ts +0 -481
@@ -1,717 +0,0 @@
1
- import { Const } from './Const';
2
- import { Num } from './Num';
3
- import { LogExpMath } from './LogExpMath';
4
- import * as Struct from './Struct';
5
- import { GeometricBrownianMotion } from './GeometricBrownianMotion';
6
- import { ChainLinkData } from '../types';
7
-
8
- export class MathMMM {
9
- /**********************************************************************************************
10
- // calcSpotPrice //
11
- // sP = spotPrice //
12
- // bI = tokenBalanceIn ( bI * w0 ) //
13
- // bO = tokenBalanceOut sP = ------------------------ //
14
- // wI = tokenWeightIn ( bO * wI ) * ( 1 - sF ) //
15
- // wO = tokenWeightOut //
16
- // sF = swapFee //
17
- **********************************************************************************************/
18
- static calcSpotPrice(
19
- tokenBalanceIn: bigint,
20
- tokenWeightIn: bigint,
21
- tokenBalanceOut: bigint,
22
- tokenWeightOut: bigint,
23
- swapFee: bigint,
24
- ): bigint {
25
- let numer = Num.mul(tokenBalanceIn, tokenWeightOut);
26
- let denom = Num.mul(
27
- Num.mul(tokenBalanceOut, tokenWeightIn),
28
- Const.ONE - swapFee,
29
- );
30
- return Num.div(numer, denom);
31
- }
32
-
33
- /**********************************************************************************************
34
- // calcOutGivenIn //
35
- // aO = tokenAmountOut //
36
- // bO = tokenBalanceOut //
37
- // bI = tokenBalanceIn / / bI \ (wI / wO) \ //
38
- // aI = tokenAmountIn aO = bO * | 1 - | -------------------------- | ^ | //
39
- // wI = tokenWeightIn \ \ ( bI + ( aI * ( 1 - sF )) / / //
40
- // wO = tokenWeightOut //
41
- // sF = swapFee //
42
- **********************************************************************************************/
43
- static calcOutGivenIn(
44
- tokenBalanceIn: bigint,
45
- tokenWeightIn: bigint,
46
- tokenBalanceOut: bigint,
47
- tokenWeightOut: bigint,
48
- tokenAmountIn: bigint,
49
- swapFee: bigint,
50
- ): bigint {
51
- const weightRatio = Num.div(tokenWeightIn, tokenWeightOut);
52
- let adjustedIn = Const.ONE - swapFee;
53
- adjustedIn = Num.mul(tokenAmountIn, adjustedIn);
54
- const y = Num.div(tokenBalanceIn, tokenBalanceIn + adjustedIn);
55
- const foo = Num.pow(y, weightRatio);
56
- const bar = Const.ONE - foo;
57
- const tokenAmountOut = Num.mul(tokenBalanceOut, bar);
58
- return tokenAmountOut;
59
- }
60
-
61
- /**********************************************************************************************
62
- // calcInGivenOut //
63
- // aI = tokenAmountIn //
64
- // bO = tokenBalanceOut / / bO \ (wO / wI) \ //
65
- // bI = tokenBalanceIn bI * | | ------------ | ^ - 1 | //
66
- // aO = tokenAmountOut aI = \ \ ( bO - aO ) / / //
67
- // wI = tokenWeightIn -------------------------------------------- //
68
- // wO = tokenWeightOut ( 1 - sF ) //
69
- // sF = swapFee //
70
- **********************************************************************************************/
71
- static calcInGivenOut(
72
- tokenBalanceIn: bigint,
73
- tokenWeightIn: bigint,
74
- tokenBalanceOut: bigint,
75
- tokenWeightOut: bigint,
76
- tokenAmountOut: bigint,
77
- swapFee: bigint,
78
- ): bigint {
79
- const weightRatio = Num.div(tokenWeightOut, tokenWeightIn);
80
- const diff = tokenBalanceOut - tokenAmountOut;
81
- const y = Num.div(tokenBalanceOut, diff);
82
- let foo = Num.pow(y, weightRatio);
83
- foo = foo - Const.ONE;
84
- let tokenAmountIn = Const.ONE - swapFee;
85
- tokenAmountIn = Num.div(Num.mul(tokenBalanceIn, foo), tokenAmountIn);
86
- return tokenAmountIn;
87
- }
88
-
89
- /**
90
- * @notice Computes the amount of tokenIn needed in order to receive a given amount of tokenOut
91
- * @dev A spread is applied as soon as entering a "shortage of tokenOut" phase
92
- * cf whitepaper: https://www.swaap.finance/whitepaper.pdf
93
- * @param tokenGlobalIn The pool global information on tokenIn
94
- * @param tokenGlobalOut The pool global information on tokenOut
95
- * @param relativePrice The price of tokenOut in tokenIn terms
96
- * @param swapParameters Amount of token out and swap fee
97
- * @param gbmParameters The GBM forecast parameters (Z, horizon)
98
- * @param hpParameters The parameters for historical prices retrieval
99
- * @return swapResult The swap result (amount in, spread and tax base in)
100
- */
101
- static calcInGivenOutMMM(
102
- tokenGlobalIn: Struct.TokenGlobal,
103
- tokenGlobalOut: Struct.TokenGlobal,
104
- relativePrice: bigint,
105
- swapParameters: Struct.SwapParameters,
106
- gbmParameters: Struct.GBMParameters,
107
- hpParameters: Struct.HistoricalPricesParameters,
108
- historicalPricesIn: ChainLinkData,
109
- historicalPricesOut: ChainLinkData,
110
- currentTimestamp: bigint,
111
- ): Struct.SwapResult {
112
- // determines the balance of tokenOut at equilibrium (cf definitions)
113
- const balanceOutAtEquilibrium = MathMMM.getTokenBalanceAtEquilibrium(
114
- tokenGlobalOut.info.balance,
115
- tokenGlobalOut.info.weight,
116
- tokenGlobalIn.info.balance,
117
- tokenGlobalIn.info.weight,
118
- Num.div(Const.ONE, relativePrice),
119
- );
120
-
121
- // from abundance of tokenOut to abundance of tokenOut --> no spread
122
- if (
123
- tokenGlobalOut.info.balance > balanceOutAtEquilibrium &&
124
- swapParameters.amount <
125
- tokenGlobalOut.info.balance - balanceOutAtEquilibrium
126
- ) {
127
- return {
128
- amount: MathMMM._calcInGivenOutMMMAbundance(
129
- tokenGlobalIn,
130
- tokenGlobalOut,
131
- // relativePrice,
132
- swapParameters.amount,
133
- swapParameters.fee,
134
- // swapParameters.fallbackSpread,
135
- // currentTimestamp,
136
- ),
137
- spread: 0n,
138
- taxBaseIn: 0n,
139
- };
140
- }
141
-
142
- {
143
- const gbmEstimation = GeometricBrownianMotion.getParametersEstimation(
144
- tokenGlobalIn.latestRound,
145
- tokenGlobalOut.latestRound,
146
- hpParameters,
147
- historicalPricesIn,
148
- historicalPricesOut,
149
- );
150
-
151
- const [adjustedTokenOutWeight, spread] = MathMMM.getMMMWeight(
152
- true,
153
- swapParameters.fallbackSpread,
154
- tokenGlobalOut.info.weight,
155
- gbmEstimation,
156
- gbmParameters,
157
- );
158
-
159
- if (tokenGlobalOut.info.balance <= balanceOutAtEquilibrium) {
160
- // shortage to shortage
161
- return {
162
- amount: MathMMM.calcInGivenOut(
163
- tokenGlobalIn.info.balance,
164
- tokenGlobalIn.info.weight,
165
- tokenGlobalOut.info.balance,
166
- adjustedTokenOutWeight,
167
- swapParameters.amount,
168
- swapParameters.fee,
169
- ),
170
- spread: spread,
171
- taxBaseIn: swapParameters.amount,
172
- };
173
- } else {
174
- // abundance to shortage
175
- const [amount, taxBaseIn] = MathMMM._calcInGivenOutMMMMixed(
176
- tokenGlobalIn,
177
- tokenGlobalOut,
178
- swapParameters,
179
- relativePrice,
180
- adjustedTokenOutWeight,
181
- balanceOutAtEquilibrium,
182
- currentTimestamp,
183
- );
184
- return {
185
- amount: amount,
186
- spread: spread,
187
- taxBaseIn: taxBaseIn,
188
- };
189
- }
190
- }
191
- }
192
-
193
- /**
194
- * @notice Implements 'calcInGivenOutMMM' in the case of abundance of tokenOut
195
- * @dev Two cases to consider:
196
- * 1) amount of tokenIn won't drive the pool from abundance of tokenOut to shortage ==> 1 pricing (no spread)
197
- * 2) amount of tokenIn will drive the pool from abundance of tokenOut to shortage ==> 2 pricing, one for each phase
198
- * @param tokenGlobalIn The pool global information on tokenIn
199
- * @param tokenGlobalOut The pool global information on tokenOut
200
- * @param swapParameters The parameters of the swap
201
- * @param relativePrice The price of tokenOut in tokenIn terms
202
- * @param adjustedTokenWeightOut The spread-augmented tokenOut's weight
203
- * @return tokenAmountIn The total amount of tokenIn needed for the swap
204
- * @return taxBaseIn The amount of tokenIn swapped when in shortage of tokenOut
205
- */
206
- static _calcInGivenOutMMMMixed(
207
- tokenGlobalIn: Struct.TokenGlobal,
208
- tokenGlobalOut: Struct.TokenGlobal,
209
- swapParameters: Struct.SwapParameters,
210
- relativePrice: bigint,
211
- adjustedTokenWeightOut: bigint,
212
- balanceOutAtEquilibrium: bigint,
213
- currentTimestamp: bigint,
214
- ): [bigint, bigint] {
215
- const tokenOutBuyAmountForEquilibrium =
216
- tokenGlobalOut.info.balance - balanceOutAtEquilibrium;
217
-
218
- // 'abundance of tokenOut' phase --> no spread
219
- const tokenAmountInPart1 = MathMMM._calcInGivenOutMMMAbundance(
220
- tokenGlobalIn,
221
- tokenGlobalOut,
222
- // relativePrice,
223
- tokenOutBuyAmountForEquilibrium,
224
- swapParameters.fee,
225
- // swapParameters.fallbackSpread,
226
- //currentTimestamp,
227
- );
228
-
229
- // 'shortage of tokenOut phase' --> apply spread
230
- const tokenAmountInPart2 = MathMMM.calcInGivenOut(
231
- tokenGlobalIn.info.balance + tokenAmountInPart1,
232
- tokenGlobalIn.info.weight,
233
- tokenGlobalOut.info.balance - tokenOutBuyAmountForEquilibrium,
234
- adjustedTokenWeightOut,
235
- swapParameters.amount - tokenOutBuyAmountForEquilibrium, // tokenAmountOut > tokenOutBuyAmountForEquilibrium
236
- swapParameters.fee,
237
- );
238
-
239
- return [
240
- Num.add(tokenAmountInPart1, tokenAmountInPart2),
241
- tokenAmountInPart2,
242
- ];
243
- }
244
-
245
- /**
246
- * @notice Implements calcOutGivenInMMM in the case of abundance of tokenOut
247
- * @dev A spread is applied as soon as entering a "shortage of tokenOut" phase
248
- * cf whitepaper: https://www.swaap.finance/whitepaper.pdf
249
- * @param tokenGlobalIn The pool global information on tokenIn
250
- * @param tokenGlobalOut The pool global information on tokenOut
251
- * @param relativePrice The price of tokenOut in tokenIn terms
252
- * @param tokenAmountOut The amount of tokenOut that will be received
253
- * @param baseFee The base fee
254
- * @param fallbackSpread The default spread in case the it couldn't be calculated using oracle prices
255
- * @return tokenAmountIn The amount of tokenIn needed for the swap
256
- */
257
- static _calcInGivenOutMMMAbundance(
258
- tokenGlobalIn: Struct.TokenGlobal,
259
- tokenGlobalOut: Struct.TokenGlobal,
260
- // relativePrice: bigint,
261
- tokenAmountOut: bigint,
262
- baseFee: bigint,
263
- // fallbackSpread: bigint,
264
- // currentTimestamp: bigint,
265
- ): bigint {
266
- const adaptiveFees = baseFee; /*MathMMM.getAdaptiveFees(
267
- tokenGlobalIn,
268
- Num.mul(tokenAmountOut, relativePrice),
269
- tokenGlobalOut,
270
- tokenAmountOut,
271
- relativePrice,
272
- baseFee,
273
- fallbackSpread,
274
- currentTimestamp,
275
- );*/
276
- return MathMMM.calcInGivenOut(
277
- tokenGlobalIn.info.balance,
278
- tokenGlobalIn.info.weight,
279
- tokenGlobalOut.info.balance,
280
- tokenGlobalOut.info.weight,
281
- tokenAmountOut,
282
- adaptiveFees,
283
- );
284
- }
285
-
286
- /**
287
- * @notice Computes the net value of a given tokenIn amount in tokenOut terms
288
- * @dev A spread is applied as soon as entering a "shortage of tokenOut" phase
289
- * cf whitepaper: https://www.swaap.finance/whitepaper.pdf
290
- * @param tokenGlobalIn The pool global information on tokenIn
291
- * @param tokenGlobalOut The pool global information on tokenOut
292
- * @param relativePrice The price of tokenOut in tokenIn terms
293
- * @param swapParameters Amount of token in and swap fee
294
- * @param gbmParameters The GBM forecast parameters (Z, horizon)
295
- * @param hpParameters The parameters for historical prices retrieval
296
- * @return swapResult The swap result (amount out, spread and tax base in)
297
- */
298
- static calcOutGivenInMMM(
299
- tokenGlobalIn: Struct.TokenGlobal,
300
- tokenGlobalOut: Struct.TokenGlobal,
301
- relativePrice: bigint,
302
- swapParameters: Struct.SwapParameters,
303
- gbmParameters: Struct.GBMParameters,
304
- hpParameters: Struct.HistoricalPricesParameters,
305
- historicalPricesIn: ChainLinkData,
306
- historicalPricesOut: ChainLinkData,
307
- currentTimestamp: bigint,
308
- ): Struct.SwapResult {
309
- // determines the balance of tokenIn at equilibrium (cf definitions)
310
- const balanceInAtEquilibrium = MathMMM.getTokenBalanceAtEquilibrium(
311
- tokenGlobalIn.info.balance,
312
- tokenGlobalIn.info.weight,
313
- tokenGlobalOut.info.balance,
314
- tokenGlobalOut.info.weight,
315
- relativePrice,
316
- );
317
-
318
- // from abundance of tokenOut to abundance of tokenOut --> no spread
319
- {
320
- if (
321
- tokenGlobalIn.info.balance < balanceInAtEquilibrium &&
322
- swapParameters.amount <
323
- balanceInAtEquilibrium - tokenGlobalIn.info.balance
324
- ) {
325
- return {
326
- amount: MathMMM._calcOutGivenInMMMAbundance(
327
- tokenGlobalIn,
328
- tokenGlobalOut,
329
- relativePrice,
330
- swapParameters.amount,
331
- swapParameters.fee,
332
- swapParameters.fallbackSpread,
333
- currentTimestamp,
334
- ),
335
- spread: 0n,
336
- taxBaseIn: 0n,
337
- };
338
- }
339
- }
340
-
341
- {
342
- const gbmEstimation = GeometricBrownianMotion.getParametersEstimation(
343
- tokenGlobalIn.latestRound,
344
- tokenGlobalOut.latestRound,
345
- hpParameters,
346
- historicalPricesIn,
347
- historicalPricesOut,
348
- );
349
-
350
- const [adjustedTokenOutWeight, spread] = MathMMM.getMMMWeight(
351
- true,
352
- swapParameters.fallbackSpread,
353
- tokenGlobalOut.info.weight,
354
- gbmEstimation,
355
- gbmParameters,
356
- );
357
-
358
- if (tokenGlobalIn.info.balance >= balanceInAtEquilibrium) {
359
- // shortage to shortage
360
- return {
361
- amount: MathMMM.calcOutGivenIn(
362
- tokenGlobalIn.info.balance,
363
- tokenGlobalIn.info.weight,
364
- tokenGlobalOut.info.balance,
365
- adjustedTokenOutWeight,
366
- swapParameters.amount,
367
- swapParameters.fee,
368
- ),
369
- spread: spread,
370
- taxBaseIn: swapParameters.amount,
371
- };
372
- } else {
373
- // abundance to shortage
374
- const [amount, taxBaseIn] = MathMMM._calcOutGivenInMMMMixed(
375
- tokenGlobalIn,
376
- tokenGlobalOut,
377
- swapParameters,
378
- relativePrice,
379
- adjustedTokenOutWeight,
380
- balanceInAtEquilibrium,
381
- currentTimestamp,
382
- );
383
- return {
384
- amount: amount,
385
- spread: spread,
386
- taxBaseIn: taxBaseIn,
387
- };
388
- }
389
- }
390
- }
391
-
392
- /**
393
- * @notice Implements 'calcOutGivenInMMM' in the case of mixed regime of tokenOut (abundance then shortage)
394
- * @param tokenGlobalIn The pool global information on tokenIn
395
- * @param tokenGlobalOut The pool global information on tokenOut
396
- * @param swapParameters The parameters of the swap
397
- * @param relativePrice The price of tokenOut in tokenIn terms
398
- * @param adjustedTokenWeightOut The spread-augmented tokenOut's weight
399
- * @param balanceInAtEquilibrium TokenIn balance at equilibrium
400
- * @return tokenAmountOut The total amount of token out
401
- * @return taxBaseIn The amount of tokenIn swapped when in shortage of tokenOut
402
- */
403
- static _calcOutGivenInMMMMixed(
404
- tokenGlobalIn: Struct.TokenGlobal,
405
- tokenGlobalOut: Struct.TokenGlobal,
406
- swapParameters: Struct.SwapParameters,
407
- relativePrice: bigint,
408
- adjustedTokenWeightOut: bigint,
409
- balanceInAtEquilibrium: bigint,
410
- currentTimestamp: bigint,
411
- ): [bigint, bigint] {
412
- const tokenInSellAmountForEquilibrium =
413
- balanceInAtEquilibrium - tokenGlobalIn.info.balance;
414
- const taxBaseIn = swapParameters.amount - tokenInSellAmountForEquilibrium;
415
-
416
- // 'abundance of tokenOut' phase --> no spread
417
- const tokenAmountOutPart1 = MathMMM._calcOutGivenInMMMAbundance(
418
- tokenGlobalIn,
419
- tokenGlobalOut,
420
- relativePrice,
421
- tokenInSellAmountForEquilibrium,
422
- swapParameters.fee,
423
- swapParameters.fallbackSpread,
424
- currentTimestamp,
425
- );
426
-
427
- // 'shortage of tokenOut phase' --> apply spread
428
- const tokenAmountOutPart2 = MathMMM.calcOutGivenIn(
429
- Num.add(tokenGlobalIn.info.balance, tokenInSellAmountForEquilibrium),
430
- tokenGlobalIn.info.weight,
431
- Num.sub(tokenGlobalOut.info.balance, tokenAmountOutPart1),
432
- adjustedTokenWeightOut,
433
- taxBaseIn, // tokenAmountIn > tokenInSellAmountForEquilibrium
434
- swapParameters.fee,
435
- );
436
-
437
- return [Num.add(tokenAmountOutPart1, tokenAmountOutPart2), taxBaseIn];
438
- }
439
-
440
- /**
441
- * @notice Implements calcOutGivenInMMM in the case of abundance of tokenOut
442
- * @dev A spread is applied as soon as entering a "shortage of tokenOut" phase
443
- * cf whitepaper: https://www.swaap.finance/whitepaper.pdf
444
- * @param tokenGlobalIn The pool global information on tokenIn
445
- * @param tokenGlobalOut The pool global information on tokenOut
446
- * @param relativePrice The price of tokenOut in tokenIn terms
447
- * @param tokenAmountIn The amount of tokenIn that will be swaped
448
- * @param baseFee The base fee
449
- * @param fallbackSpread The default spread in case the it couldn't be calculated using oracle prices
450
- * @return tokenAmountOut The tokenAmountOut when the tokenOut is in abundance
451
- */
452
- static _calcOutGivenInMMMAbundance(
453
- tokenGlobalIn: Struct.TokenGlobal,
454
- tokenGlobalOut: Struct.TokenGlobal,
455
- relativePrice: bigint,
456
- tokenAmountIn: bigint,
457
- baseFee: bigint,
458
- fallbackSpread: bigint,
459
- currentTimestamp: bigint,
460
- ): bigint {
461
- const adaptiveFees = baseFee; /*MathMMM.getAdaptiveFees(
462
- tokenGlobalIn,
463
- tokenAmountIn,
464
- tokenGlobalOut,
465
- Num.div(tokenAmountIn, relativePrice),
466
- relativePrice,
467
- baseFee,
468
- fallbackSpread,
469
- currentTimestamp,
470
- );*/
471
- return MathMMM.calcOutGivenIn(
472
- tokenGlobalIn.info.balance,
473
- tokenGlobalIn.info.weight,
474
- tokenGlobalOut.info.balance,
475
- tokenGlobalOut.info.weight,
476
- tokenAmountIn,
477
- adaptiveFees,
478
- );
479
- }
480
-
481
- /**
482
- * @notice Computes the log spread factor
483
- * @dev We define it as the log of the p-quantile of a GBM process (log-normal distribution),
484
- * which is given by the following:
485
- * mean * horizon + z * sqrt(2 * variance * horizon)
486
- * where z = ierf(2p - 1), with ierf being the inverse error function.
487
- * GBM: https://en.wikipedia.org/wiki/Geometric_Brownian_motion
488
- * Log-normal distribution: https://en.wikipedia.org/wiki/Log-normal_distribution
489
- * erf: https://en.wikipedia.org/wiki/Error_function
490
- * @param mean The percentage drift
491
- * @param variance The percentage volatility
492
- * @param horizon The GBM forecast horizon parameter
493
- * @param z The GBM forecast z parameter
494
- * @return x The log spread factor
495
- */
496
- static getLogSpreadFactor(
497
- mean: bigint,
498
- variance: bigint,
499
- horizon: bigint,
500
- z: bigint,
501
- ): bigint {
502
- if (mean == 0n && variance == 0n) {
503
- return 0n;
504
- }
505
-
506
- if (mean < 0) {
507
- mean = -Num.mul(-mean, horizon);
508
- } else {
509
- mean = Num.mul(mean, horizon);
510
- }
511
-
512
- let diffusion = 0n;
513
- if (variance > 0) {
514
- diffusion = Num.mul(
515
- z,
516
- LogExpMath.pow(Num.mul(variance, 2n * horizon), Const.ONE / 2n),
517
- );
518
- }
519
- return diffusion + mean;
520
- }
521
-
522
- /**
523
- * @notice Apply to the tokenWeight a 'spread' factor
524
- * @dev The spread factor is defined as the maximum between:
525
- a) the expected relative tokenOut increase in tokenIn terms
526
- b) 1
527
- * The function multiplies the tokenWeight by the spread factor if
528
- * the token is in shortage, or divides it by the spread factor if it is in abundance
529
- * @param shortage true when the token is in shortage, false if in abundance
530
- * @param fallbackSpread The default spread in case the it couldn't be calculated using oracle prices
531
- * @param tokenWeight The token's weight
532
- * @param gbmEstimation The GBM's 2 first moments estimation
533
- * @param gbmParameters The GBM forecast parameters (Z, horizon)
534
- * @return adjustedWeight The adjusted weight based on spread
535
- * @return spread The spread
536
- */
537
- static getMMMWeight(
538
- shortage: boolean,
539
- fallbackSpread: bigint,
540
- tokenWeight: bigint,
541
- gbmEstimation: Struct.GBMEstimation,
542
- gbmParameters: Struct.GBMParameters,
543
- ): [adjustedWeight: bigint, spread: bigint] {
544
- if (!gbmEstimation.success) {
545
- if (shortage) {
546
- return [
547
- Num.mul(tokenWeight, Const.ONE + fallbackSpread),
548
- fallbackSpread,
549
- ];
550
- } else {
551
- return [
552
- Num.div(tokenWeight, Const.ONE + fallbackSpread),
553
- fallbackSpread,
554
- ];
555
- }
556
- }
557
-
558
- if (gbmParameters.horizon == 0n) {
559
- return [tokenWeight, 0n];
560
- }
561
-
562
- const logSpreadFactor = MathMMM.getLogSpreadFactor(
563
- gbmEstimation.mean,
564
- gbmEstimation.variance,
565
- gbmParameters.horizon,
566
- gbmParameters.z,
567
- );
568
- if (logSpreadFactor <= 0) {
569
- return [tokenWeight, 0n];
570
- }
571
- const spreadFactor = LogExpMath.exp(logSpreadFactor);
572
- // if spread < 1 --> rounding error --> set to 1
573
- if (spreadFactor <= Const.ONE) {
574
- return [tokenWeight, 0n];
575
- }
576
-
577
- let spread = spreadFactor - Const.ONE;
578
-
579
- if (shortage) {
580
- return [Num.mul(tokenWeight, spreadFactor), spread];
581
- } else {
582
- return [Num.div(tokenWeight, spreadFactor), spread];
583
- }
584
- }
585
-
586
- /**
587
- * @notice Computes the fee amount that will ensure we maintain the pool's value, according to oracle prices.
588
- * @dev We apply this fee regime only if Out-In price increased in the same block as now.
589
- * @param tokenGlobalIn The pool global information on tokenIn
590
- * @param tokenAmountIn The swap desired amount for tokenIn
591
- * @param tokenGlobalOut The pool global information on tokenOut
592
- * @param tokenAmountOut The swap desired amount for tokenOut
593
- * @param relativePrice The price of tokenOut in tokenIn terms
594
- * @param baseFee The base fee amount
595
- * @param fallbackSpread The default spread in case the it couldn't be calculated using oracle prices
596
- * @return alpha The potentially augmented fee amount
597
- */
598
- /* static getAdaptiveFees(
599
- tokenGlobalIn: Struct.TokenGlobal,
600
- tokenAmountIn: bigint,
601
- tokenGlobalOut: Struct.TokenGlobal,
602
- tokenAmountOut: bigint,
603
- relativePrice: bigint,
604
- baseFee: bigint,
605
- fallbackSpread: bigint,
606
- currentTimestamp: bigint,
607
- ): bigint {
608
- let blockTimestamp = currentTimestamp;
609
-
610
- // we only consider same block as last price update
611
- if (
612
- blockTimestamp != tokenGlobalIn.latestRound.timestamp &&
613
- blockTimestamp != tokenGlobalOut.latestRound.timestamp
614
- ) {
615
- // no additional fees
616
- return baseFee;
617
- }
618
- let recentPriceUpperBound = ChainlinkUtils.getMaxRelativePriceInLastBlock(
619
- tokenGlobalIn.latestRound,
620
- tokenGlobalIn.info.decimals,
621
- tokenGlobalOut.latestRound,
622
- tokenGlobalOut.info.decimals,
623
- // historicalPricesIn,
624
- // historicalPricesOut
625
- );
626
- if (recentPriceUpperBound == 0n) {
627
- // we were not able to retrieve the previous price
628
- return fallbackSpread;
629
- } else if (recentPriceUpperBound <= relativePrice) {
630
- // no additional fees
631
- return baseFee;
632
- }
633
-
634
- return (
635
- // additional fees indexed on price increase and imbalance
636
- Num.min(
637
- Const.ONE,
638
- baseFee +
639
- MathMMM.calcAdaptiveFeeGivenInAndOut(
640
- tokenGlobalIn.info.balance,
641
- tokenAmountIn,
642
- tokenGlobalIn.info.weight,
643
- tokenGlobalOut.info.balance,
644
- tokenAmountOut,
645
- tokenGlobalOut.info.weight,
646
- ),
647
- )
648
- );
649
- }
650
- */
651
-
652
- /**
653
- * @notice Computes the balance of token1 the pool must have in order to have token1/token2 at equilibrium
654
- * while satisfying the pricing curve prod^k balance_k^w_k = K
655
- * @dev We only rely on the following equations:
656
- * a) priceTokenOutOutInTokenIn = balance_in / balance_out * w_out / w_in
657
- * b) tokenBalanceOut = (K / prod_k!=in balance_k^w_k)^(1/w_out) = (localInvariant / balance_in^w_in)^(1/w_out)
658
- * with localInvariant = balance_in^w_in * balance_out^w_out which can be computed with only In/Out
659
- * @param tokenBalance1 The balance of token1 initially
660
- * @param tokenWeight1 The weight of token1
661
- * @param tokenBalance2 The balance of token2 initially
662
- * @param tokenWeight2 The weight of token2
663
- * @param relativePrice The price of tokenOut in tokenIn terms
664
- * @return balance1AtEquilibrium The balance of token1 in order to have a token1/token2 at equilibrium
665
- */
666
- static getTokenBalanceAtEquilibrium(
667
- tokenBalance1: bigint,
668
- tokenWeight1: bigint,
669
- tokenBalance2: bigint,
670
- tokenWeight2: bigint,
671
- relativePrice: bigint,
672
- ): bigint {
673
- const weightSum = tokenWeight1 + tokenWeight2;
674
- // relativePrice * weight1/weight2
675
- let foo = Num.mul(relativePrice, Num.div(tokenWeight1, tokenWeight2));
676
- // relativePrice * balance2 * (weight1/weight2)
677
- foo = Num.mul(foo, tokenBalance2);
678
-
679
- const balance1AtEquilibrium = Num.mul(
680
- LogExpMath.pow(foo, Num.div(tokenWeight2, weightSum)),
681
- LogExpMath.pow(tokenBalance1, Num.div(tokenWeight1, weightSum)),
682
- );
683
-
684
- return balance1AtEquilibrium;
685
- }
686
-
687
- /**
688
- * @notice Computes the fee needed to maintain the pool's value constant
689
- * @dev We use oracle to evaluate pool's value
690
- * @param tokenBalanceIn The balance of tokenIn initially
691
- * @param tokenAmountIn The amount of tokenIn to be added
692
- * @param tokenWeightIn The weight of tokenIn
693
- * @param tokenBalanceOut The balance of tokenOut initially
694
- * @param tokenAmountOut The amount of tokenOut to be removed from the pool
695
- * @param tokenWeightOut The weight of tokenOut
696
- * @return adaptiveFee The computed adaptive fee to be added to the base fees
697
- */
698
- static calcAdaptiveFeeGivenInAndOut(
699
- tokenBalanceIn: bigint,
700
- tokenAmountIn: bigint,
701
- tokenWeightIn: bigint,
702
- tokenBalanceOut: bigint,
703
- tokenAmountOut: bigint,
704
- tokenWeightOut: bigint,
705
- ): bigint {
706
- const weightRatio = Num.div(tokenWeightOut, tokenWeightIn);
707
- const y = Num.div(tokenBalanceOut, tokenBalanceOut - tokenAmountOut);
708
- const foo = Num.mul(tokenBalanceIn, Num.pow(y, weightRatio));
709
-
710
- const afterSwapTokenInBalance = tokenBalanceIn + tokenAmountIn;
711
-
712
- if (foo > afterSwapTokenInBalance) {
713
- return 0n;
714
- }
715
- return Num.div(afterSwapTokenInBalance - foo, tokenAmountIn);
716
- }
717
- }