@paraswap/dex-lib 4.8.34-uni-v3-rust.0 → 4.8.34

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 (321) hide show
  1. package/build/dex/fluid-dex/constants.d.ts +1 -0
  2. package/build/dex/fluid-dex/constants.js +2 -1
  3. package/build/dex/fluid-dex/constants.js.map +1 -1
  4. package/build/dex/fluid-dex/fluid-dex.js +4 -5
  5. package/build/dex/fluid-dex/fluid-dex.js.map +1 -1
  6. package/build/dex/fluid-dex/scripts/measure-calc-time.js +178 -0
  7. package/build/dex/fluid-dex/scripts/measure-calc-time.js.map +1 -0
  8. package/build/dex/fluid-dex/utils.d.ts +1 -2
  9. package/build/dex/fluid-dex/utils.js +10 -10
  10. package/build/dex/fluid-dex/utils.js.map +1 -1
  11. package/build/dex/idex.d.ts +1 -1
  12. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.d.ts +0 -2
  13. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js +0 -5
  14. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js.map +1 -1
  15. package/build/dex/pancakeswap-v3/pancakeswap-v3.d.ts +3 -6
  16. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +9 -85
  17. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
  18. package/build/dex/solidly-v3/solidly-v3-pool.d.ts +0 -3
  19. package/build/dex/solidly-v3/solidly-v3-pool.js +0 -8
  20. package/build/dex/solidly-v3/solidly-v3-pool.js.map +1 -1
  21. package/build/dex/solidly-v3/solidly-v3.d.ts +2 -5
  22. package/build/dex/solidly-v3/solidly-v3.js +8 -84
  23. package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
  24. package/build/dex/uniswap-v3/contract-math/native-bridge.d.ts +1 -52
  25. package/build/dex/uniswap-v3/contract-math/native-bridge.js +3 -27
  26. package/build/dex/uniswap-v3/contract-math/native-bridge.js.map +1 -1
  27. package/build/dex/uniswap-v3/scripts/measure-calc-time.js +110 -222
  28. package/build/dex/uniswap-v3/scripts/measure-calc-time.js.map +1 -1
  29. package/build/dex/uniswap-v3/types.d.ts +0 -1
  30. package/build/dex/uniswap-v3/types.js.map +1 -1
  31. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +0 -2
  32. package/build/dex/uniswap-v3/uniswap-v3-pool.js +0 -5
  33. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  34. package/build/dex/uniswap-v3/uniswap-v3.d.ts +3 -11
  35. package/build/dex/uniswap-v3/uniswap-v3.js +9 -86
  36. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  37. package/build/dex/uniswap-v4/api-go/compare-pricing.js +187 -0
  38. package/build/dex/uniswap-v4/api-go/compare-pricing.js.map +1 -0
  39. package/build/dex/uniswap-v4/api-go/compare-states.js +149 -0
  40. package/build/dex/uniswap-v4/api-go/compare-states.js.map +1 -0
  41. package/build/dex/uniswap-v4/api-go/fetch-pool-key.d.ts +0 -0
  42. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js +140 -0
  43. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js.map +1 -0
  44. package/build/dex/uniswap-v4/types.d.ts +0 -1
  45. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.d.ts +0 -2
  46. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.js +0 -3
  47. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.js.map +1 -1
  48. package/build/dex/uniswap-v4/uniswap-v4-pool.d.ts +0 -3
  49. package/build/dex/uniswap-v4/uniswap-v4-pool.js +0 -18
  50. package/build/dex/uniswap-v4/uniswap-v4-pool.js.map +1 -1
  51. package/build/dex/uniswap-v4/uniswap-v4.d.ts +1 -3
  52. package/build/dex/uniswap-v4/uniswap-v4.js +14 -74
  53. package/build/dex/uniswap-v4/uniswap-v4.js.map +1 -1
  54. package/build/pricing-helper.d.ts +1 -1
  55. package/build/pricing-helper.js +2 -2
  56. package/build/pricing-helper.js.map +1 -1
  57. package/build/tenderly-simulation.d.ts +221 -0
  58. package/build/tenderly-simulation.js +517 -0
  59. package/build/tenderly-simulation.js.map +1 -0
  60. package/package.json +1 -2
  61. package/build/abi/BProtocol.json +0 -1155
  62. package/build/abi/Jarvis.json +0 -1172
  63. package/build/abi/MStableAsset.json +0 -1545
  64. package/build/abi/OneInchLp.json +0 -1304
  65. package/build/abi/Onebit.json +0 -736
  66. package/build/abi/Shell.json +0 -1294
  67. package/build/abi/TraderJoeV2Router.json +0 -50
  68. package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
  69. package/build/abi/idle-dao/idle-cdo.json +0 -1245
  70. package/build/abi/infusion/InfusionFactory.json +0 -147
  71. package/build/abi/infusion/InfusionPair.json +0 -658
  72. package/build/abi/infusion/InfusionRouter.json +0 -442
  73. package/build/abi/maker-psm/pot.json +0 -322
  74. package/build/abi/maker-psm/psm.json +0 -243
  75. package/build/abi/maker-psm/vat.json +0 -363
  76. package/build/abi/nomiswap-v2/nomiswap-v2-pool.json +0 -773
  77. package/build/abi/quick-perps/fast-price-events.json +0 -70
  78. package/build/abi/quick-perps/fast-price-feed.json +0 -741
  79. package/build/abi/quick-perps/reader.json +0 -313
  80. package/build/abi/quick-perps/vault-price-feed.json +0 -323
  81. package/build/abi/quick-perps/vault.json +0 -1953
  82. package/build/abi/uniswap-v2/excalibur-pool.json +0 -881
  83. package/build/abi/uniswap-v2/mdex-factory.json +0 -759
  84. package/build/abi/wUSDM.json +0 -757
  85. package/build/abi/zrx.v2.json +0 -1967
  86. package/build/abi/zrx.v3.json +0 -3454
  87. package/build/abi/zrx.v4.json +0 -2193
  88. package/build/dex/OneInchLp.d.ts +0 -24
  89. package/build/dex/OneInchLp.js +0 -43
  90. package/build/dex/OneInchLp.js.map +0 -1
  91. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  92. package/build/dex/bProtocol/bProtocol.js +0 -56
  93. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  94. package/build/dex/bProtocol/types.d.ts +0 -11
  95. package/build/dex/bProtocol/types.js +0 -8
  96. package/build/dex/bProtocol/types.js.map +0 -1
  97. package/build/dex/ekubo/pools/base-pool.d.ts +0 -47
  98. package/build/dex/ekubo/pools/base-pool.js +0 -184
  99. package/build/dex/ekubo/pools/base-pool.js.map +0 -1
  100. package/build/dex/ekubo/pools/iface.d.ts +0 -46
  101. package/build/dex/ekubo/pools/iface.js +0 -75
  102. package/build/dex/ekubo/pools/iface.js.map +0 -1
  103. package/build/dex/ekubo/pools/math/price.d.ts +0 -7
  104. package/build/dex/ekubo/pools/math/price.js +0 -112
  105. package/build/dex/ekubo/pools/math/price.js.map +0 -1
  106. package/build/dex/ekubo/pools/oracle-pool.d.ts +0 -10
  107. package/build/dex/ekubo/pools/oracle-pool.js +0 -19
  108. package/build/dex/ekubo/pools/oracle-pool.js.map +0 -1
  109. package/build/dex/ekubo/pools/pool-utils.d.ts +0 -44
  110. package/build/dex/ekubo/pools/pool-utils.js +0 -240
  111. package/build/dex/ekubo/pools/pool-utils.js.map +0 -1
  112. package/build/dex/idle-dao/config.d.ts +0 -5
  113. package/build/dex/idle-dao/config.js +0 -24
  114. package/build/dex/idle-dao/config.js.map +0 -1
  115. package/build/dex/idle-dao/idle-dao.d.ts +0 -42
  116. package/build/dex/idle-dao/idle-dao.js +0 -279
  117. package/build/dex/idle-dao/idle-dao.js.map +0 -1
  118. package/build/dex/idle-dao/token_list.d.ts +0 -4
  119. package/build/dex/idle-dao/token_list.js +0 -289
  120. package/build/dex/idle-dao/token_list.js.map +0 -1
  121. package/build/dex/idle-dao/tokens.d.ts +0 -9
  122. package/build/dex/idle-dao/tokens.js +0 -68
  123. package/build/dex/idle-dao/tokens.js.map +0 -1
  124. package/build/dex/idle-dao/types.d.ts +0 -35
  125. package/build/dex/idle-dao/types.js +0 -11
  126. package/build/dex/idle-dao/types.js.map +0 -1
  127. package/build/dex/idle-dao/utils.d.ts +0 -8
  128. package/build/dex/idle-dao/utils.js +0 -149
  129. package/build/dex/idle-dao/utils.js.map +0 -1
  130. package/build/dex/infusion/config.d.ts +0 -3
  131. package/build/dex/infusion/config.js +0 -20
  132. package/build/dex/infusion/config.js.map +0 -1
  133. package/build/dex/infusion/infusion-stable-pool.d.ts +0 -4
  134. package/build/dex/infusion/infusion-stable-pool.js +0 -74
  135. package/build/dex/infusion/infusion-stable-pool.js.map +0 -1
  136. package/build/dex/infusion/infusion.d.ts +0 -51
  137. package/build/dex/infusion/infusion.js +0 -500
  138. package/build/dex/infusion/infusion.js.map +0 -1
  139. package/build/dex/infusion/types.d.ts +0 -45
  140. package/build/dex/infusion/types.js +0 -3
  141. package/build/dex/infusion/types.js.map +0 -1
  142. package/build/dex/infusion/utils/isStablePair.d.ts +0 -2
  143. package/build/dex/infusion/utils/isStablePair.js +0 -18
  144. package/build/dex/infusion/utils/isStablePair.js.map +0 -1
  145. package/build/dex/jarvis.d.ts +0 -56
  146. package/build/dex/jarvis.js +0 -163
  147. package/build/dex/jarvis.js.map +0 -1
  148. package/build/dex/mStable.d.ts +0 -44
  149. package/build/dex/mStable.js +0 -75
  150. package/build/dex/mStable.js.map +0 -1
  151. package/build/dex/maker-psm/config.d.ts +0 -11
  152. package/build/dex/maker-psm/config.js +0 -53
  153. package/build/dex/maker-psm/config.js.map +0 -1
  154. package/build/dex/maker-psm/maker-psm.d.ts +0 -103
  155. package/build/dex/maker-psm/maker-psm.js +0 -493
  156. package/build/dex/maker-psm/maker-psm.js.map +0 -1
  157. package/build/dex/maker-psm/types.d.ts +0 -39
  158. package/build/dex/maker-psm/types.js +0 -3
  159. package/build/dex/maker-psm/types.js.map +0 -1
  160. package/build/dex/onebit/onebit.d.ts +0 -16
  161. package/build/dex/onebit/onebit.js +0 -61
  162. package/build/dex/onebit/onebit.js.map +0 -1
  163. package/build/dex/onebit/types.d.ts +0 -14
  164. package/build/dex/onebit/types.js +0 -8
  165. package/build/dex/onebit/types.js.map +0 -1
  166. package/build/dex/pancakeswap-v3/scripts/measure-calc-time.js +0 -203
  167. package/build/dex/pancakeswap-v3/scripts/measure-calc-time.js.map +0 -1
  168. package/build/dex/quick-perps/config.d.ts +0 -11
  169. package/build/dex/quick-perps/config.js +0 -27
  170. package/build/dex/quick-perps/config.js.map +0 -1
  171. package/build/dex/quick-perps/fast-price-feed.d.ts +0 -26
  172. package/build/dex/quick-perps/fast-price-feed.js +0 -184
  173. package/build/dex/quick-perps/fast-price-feed.js.map +0 -1
  174. package/build/dex/quick-perps/pool.d.ts +0 -21
  175. package/build/dex/quick-perps/pool.js +0 -229
  176. package/build/dex/quick-perps/pool.js.map +0 -1
  177. package/build/dex/quick-perps/quick-perps.d.ts +0 -53
  178. package/build/dex/quick-perps/quick-perps.js +0 -247
  179. package/build/dex/quick-perps/quick-perps.js.map +0 -1
  180. package/build/dex/quick-perps/types.d.ts +0 -98
  181. package/build/dex/quick-perps/types.js +0 -3
  182. package/build/dex/quick-perps/types.js.map +0 -1
  183. package/build/dex/quick-perps/usdq.d.ts +0 -15
  184. package/build/dex/quick-perps/usdq.js +0 -62
  185. package/build/dex/quick-perps/usdq.js.map +0 -1
  186. package/build/dex/quick-perps/vault-price-feed.d.ts +0 -43
  187. package/build/dex/quick-perps/vault-price-feed.js +0 -203
  188. package/build/dex/quick-perps/vault-price-feed.js.map +0 -1
  189. package/build/dex/quick-perps/vault-utils.d.ts +0 -8
  190. package/build/dex/quick-perps/vault-utils.js +0 -42
  191. package/build/dex/quick-perps/vault-utils.js.map +0 -1
  192. package/build/dex/quick-perps/vault.d.ts +0 -46
  193. package/build/dex/quick-perps/vault.js +0 -182
  194. package/build/dex/quick-perps/vault.js.map +0 -1
  195. package/build/dex/se-vlr/config.d.ts +0 -3
  196. package/build/dex/se-vlr/config.js +0 -24
  197. package/build/dex/se-vlr/config.js.map +0 -1
  198. package/build/dex/se-vlr/se-vlr-pool.d.ts +0 -39
  199. package/build/dex/se-vlr/se-vlr-pool.js +0 -70
  200. package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
  201. package/build/dex/se-vlr/se-vlr.d.ts +0 -35
  202. package/build/dex/se-vlr/se-vlr.js +0 -131
  203. package/build/dex/se-vlr/se-vlr.js.map +0 -1
  204. package/build/dex/se-vlr/types.d.ts +0 -6
  205. package/build/dex/se-vlr/types.js +0 -3
  206. package/build/dex/se-vlr/types.js.map +0 -1
  207. package/build/dex/shell.d.ts +0 -25
  208. package/build/dex/shell.js +0 -41
  209. package/build/dex/shell.js.map +0 -1
  210. package/build/dex/solidly/forks-override/aerodrome.d.ts +0 -14
  211. package/build/dex/solidly/forks-override/aerodrome.js +0 -46
  212. package/build/dex/solidly/forks-override/aerodrome.js.map +0 -1
  213. package/build/dex/solidly/forks-override/chronos.d.ts +0 -23
  214. package/build/dex/solidly/forks-override/chronos.js +0 -141
  215. package/build/dex/solidly/forks-override/chronos.js.map +0 -1
  216. package/build/dex/solidly/forks-override/usdfi.d.ts +0 -8
  217. package/build/dex/solidly/forks-override/usdfi.js +0 -15
  218. package/build/dex/solidly/forks-override/usdfi.js.map +0 -1
  219. package/build/dex/solidly/forks-override/velocimeter.d.ts +0 -23
  220. package/build/dex/solidly/forks-override/velocimeter.js +0 -77
  221. package/build/dex/solidly/forks-override/velocimeter.js.map +0 -1
  222. package/build/dex/solidly-v3/contract-math/native-bridge.d.ts +0 -26
  223. package/build/dex/solidly-v3/contract-math/native-bridge.js +0 -96
  224. package/build/dex/solidly-v3/contract-math/native-bridge.js.map +0 -1
  225. package/build/dex/solidly-v3/scripts/measure-calc-time.js +0 -203
  226. package/build/dex/solidly-v3/scripts/measure-calc-time.js.map +0 -1
  227. package/build/dex/trader-joe-v2.d.ts +0 -40
  228. package/build/dex/trader-joe-v2.js +0 -74
  229. package/build/dex/trader-joe-v2.js.map +0 -1
  230. package/build/dex/uniswap-v2/dfyn.d.ts +0 -19
  231. package/build/dex/uniswap-v2/dfyn.js +0 -61
  232. package/build/dex/uniswap-v2/dfyn.js.map +0 -1
  233. package/build/dex/uniswap-v2/excalibur.d.ts +0 -24
  234. package/build/dex/uniswap-v2/excalibur.js +0 -47
  235. package/build/dex/uniswap-v2/excalibur.js.map +0 -1
  236. package/build/dex/uniswap-v2/mdex.d.ts +0 -24
  237. package/build/dex/uniswap-v2/mdex.js +0 -50
  238. package/build/dex/uniswap-v2/mdex.js.map +0 -1
  239. package/build/dex/uniswap-v2/nomiswap-v2.d.ts +0 -24
  240. package/build/dex/uniswap-v2/nomiswap-v2.js +0 -57
  241. package/build/dex/uniswap-v2/nomiswap-v2.js.map +0 -1
  242. package/build/dex/uniswap-v3/scripts/bench-all-dexes.js +0 -160
  243. package/build/dex/uniswap-v3/scripts/bench-all-dexes.js.map +0 -1
  244. package/build/dex/uniswap-v3/scripts/bench-e2e.d.ts +0 -1
  245. package/build/dex/uniswap-v3/scripts/bench-e2e.js +0 -85
  246. package/build/dex/uniswap-v3/scripts/bench-e2e.js.map +0 -1
  247. package/build/dex/uniswap-v3/scripts/bench-parallel.d.ts +0 -1
  248. package/build/dex/uniswap-v3/scripts/bench-parallel.js +0 -192
  249. package/build/dex/uniswap-v3/scripts/bench-parallel.js.map +0 -1
  250. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  251. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  252. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  253. package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -3
  254. package/build/dex/uniswap-v4/contract-math/Position.js +0 -10
  255. package/build/dex/uniswap-v4/contract-math/Position.js.map +0 -1
  256. package/build/dex/uniswap-v4/contract-math/native-bridge.d.ts +0 -40
  257. package/build/dex/uniswap-v4/contract-math/native-bridge.js +0 -74
  258. package/build/dex/uniswap-v4/contract-math/native-bridge.js.map +0 -1
  259. package/build/dex/uniswap-v4/scripts/test-rust-correctness.d.ts +0 -1
  260. package/build/dex/uniswap-v4/scripts/test-rust-correctness.js +0 -167
  261. package/build/dex/uniswap-v4/scripts/test-rust-correctness.js.map +0 -1
  262. package/build/dex/usual-bond/config.d.ts +0 -3
  263. package/build/dex/usual-bond/config.js +0 -13
  264. package/build/dex/usual-bond/config.js.map +0 -1
  265. package/build/dex/usual-bond/types.d.ts +0 -7
  266. package/build/dex/usual-bond/types.js +0 -3
  267. package/build/dex/usual-bond/types.js.map +0 -1
  268. package/build/dex/usual-bond/usual-bond.d.ts +0 -35
  269. package/build/dex/usual-bond/usual-bond.js +0 -176
  270. package/build/dex/usual-bond/usual-bond.js.map +0 -1
  271. package/build/dex/wusdm/config.d.ts +0 -3
  272. package/build/dex/wusdm/config.js +0 -43
  273. package/build/dex/wusdm/config.js.map +0 -1
  274. package/build/dex/wusdm/constants.d.ts +0 -2
  275. package/build/dex/wusdm/constants.js +0 -6
  276. package/build/dex/wusdm/constants.js.map +0 -1
  277. package/build/dex/wusdm/types.d.ts +0 -18
  278. package/build/dex/wusdm/types.js +0 -11
  279. package/build/dex/wusdm/types.js.map +0 -1
  280. package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
  281. package/build/dex/wusdm/wusdm-pool.js +0 -74
  282. package/build/dex/wusdm/wusdm-pool.js.map +0 -1
  283. package/build/dex/wusdm/wusdm.d.ts +0 -46
  284. package/build/dex/wusdm/wusdm.js +0 -243
  285. package/build/dex/wusdm/wusdm.js.map +0 -1
  286. package/build/dex/zerox/config.d.ts +0 -2
  287. package/build/dex/zerox/config.js +0 -33
  288. package/build/dex/zerox/config.js.map +0 -1
  289. package/build/dex/zerox/index.d.ts +0 -22
  290. package/build/dex/zerox/index.js +0 -225
  291. package/build/dex/zerox/index.js.map +0 -1
  292. package/build/dex/zerox/order.d.ts +0 -88
  293. package/build/dex/zerox/order.js +0 -53
  294. package/build/dex/zerox/order.js.map +0 -1
  295. package/build/dex/zerox/types.d.ts +0 -73
  296. package/build/dex/zerox/types.js +0 -21
  297. package/build/dex/zerox/types.js.map +0 -1
  298. package/native/Cargo.lock +0 -331
  299. package/native/Cargo.toml +0 -22
  300. package/native/build.rs +0 -5
  301. package/native/package-lock.json +0 -32
  302. package/native/package.json +0 -20
  303. package/native/src/config.rs +0 -73
  304. package/native/src/lib.rs +0 -528
  305. package/native/src/math/bit_math.rs +0 -177
  306. package/native/src/math/full_math.rs +0 -217
  307. package/native/src/math/liquidity_math.rs +0 -72
  308. package/native/src/math/mod.rs +0 -10
  309. package/native/src/math/oracle.rs +0 -493
  310. package/native/src/math/sqrt_price_math.rs +0 -272
  311. package/native/src/math/swap_math.rs +0 -306
  312. package/native/src/math/tick.rs +0 -239
  313. package/native/src/math/tick_bitmap.rs +0 -312
  314. package/native/src/math/tick_math.rs +0 -321
  315. package/native/src/math/unsafe_math.rs +0 -67
  316. package/native/src/pool_state.rs +0 -41
  317. package/native/src/query_outputs.rs +0 -379
  318. package/native/src/v4_query_outputs.rs +0 -255
  319. /package/build/dex/{pancakeswap-v3 → fluid-dex}/scripts/measure-calc-time.d.ts +0 -0
  320. /package/build/dex/{solidly-v3/scripts/measure-calc-time.d.ts → uniswap-v4/api-go/compare-pricing.d.ts} +0 -0
  321. /package/build/dex/{uniswap-v3/scripts/bench-all-dexes.d.ts → uniswap-v4/api-go/compare-states.d.ts} +0 -0
@@ -1,321 +0,0 @@
1
- use ethnum::{I256, U256};
2
-
3
- pub const MIN_TICK: I256 = I256::new(-887272);
4
- pub const MAX_TICK: I256 = I256::new(887272);
5
- pub const MIN_SQRT_RATIO: U256 = U256::new(4295128739u128);
6
- // 1461446703485210103287273052203988822378723970342
7
- // = 0xFFFD8963EFD1FC6A506488495D951D5263988D26
8
- // hi_128 = 0xFFFD8963, lo_128 = 0xEFD1FC6A506488495D951D5263988D26
9
- pub const MAX_SQRT_RATIO: U256 =
10
- U256::from_words(0xFFFD8963, 0xEFD1FC6A506488495D951D5263988D26);
11
-
12
- // 2^160 - 1 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
13
- // hi_128 = 0xFFFFFFFF, lo_128 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
14
- const MASK_160: U256 = U256::from_words(0xFFFFFFFF, u128::MAX);
15
-
16
- /// Truncate to uint160 range.
17
- fn as_uint160(val: U256) -> U256 {
18
- val & MASK_160
19
- }
20
-
21
- /// Calculates sqrt(1.0001^tick) * 2^96.
22
- ///
23
- /// Panics if |tick| > MAX_TICK.
24
- pub fn get_sqrt_ratio_at_tick(tick: I256) -> U256 {
25
- let abs_tick: U256 = if tick < I256::ZERO {
26
- (-tick).as_u256()
27
- } else {
28
- tick.as_u256()
29
- };
30
-
31
- assert!(abs_tick <= MAX_TICK.as_u256(), "T");
32
-
33
- let mut ratio: U256 = if (abs_tick & U256::from(0x1u64)) != U256::ZERO {
34
- U256::new(0xfffcb933bd6fad37aa2d162d1a594001u128)
35
- } else {
36
- // 2^128
37
- U256::from_words(1, 0)
38
- };
39
-
40
- macro_rules! apply_tick_bit {
41
- ($bit:expr, $factor:expr) => {
42
- if (abs_tick & U256::from($bit as u64)) != U256::ZERO {
43
- ratio = (ratio * U256::new($factor)) >> 128;
44
- }
45
- };
46
- }
47
-
48
- apply_tick_bit!(0x2, 0xfff97272373d413259a46990580e213au128);
49
- apply_tick_bit!(0x4, 0xfff2e50f5f656932ef12357cf3c7fdccu128);
50
- apply_tick_bit!(0x8, 0xffe5caca7e10e4e61c3624eaa0941cd0u128);
51
- apply_tick_bit!(0x10, 0xffcb9843d60f6159c9db58835c926644u128);
52
- apply_tick_bit!(0x20, 0xff973b41fa98c081472e6896dfb254c0u128);
53
- apply_tick_bit!(0x40, 0xff2ea16466c96a3843ec78b326b52861u128);
54
- apply_tick_bit!(0x80, 0xfe5dee046a99a2a811c461f1969c3053u128);
55
- apply_tick_bit!(0x100, 0xfcbe86c7900a88aedcffc83b479aa3a4u128);
56
- apply_tick_bit!(0x200, 0xf987a7253ac413176f2b074cf7815e54u128);
57
- apply_tick_bit!(0x400, 0xf3392b0822b70005940c7a398e4b70f3u128);
58
- apply_tick_bit!(0x800, 0xe7159475a2c29b7443b29c7fa6e889d9u128);
59
- apply_tick_bit!(0x1000, 0xd097f3bdfd2022b8845ad8f792aa5825u128);
60
- apply_tick_bit!(0x2000, 0xa9f746462d870fdf8a65dc1f90e061e5u128);
61
- apply_tick_bit!(0x4000, 0x70d869a156d2a1b890bb3df62baf32f7u128);
62
- apply_tick_bit!(0x8000, 0x31be135f97d08fd981231505542fcfa6u128);
63
- apply_tick_bit!(0x10000, 0x9aa508b5b7a84e1c677de54f3e99bc9u128);
64
- apply_tick_bit!(0x20000, 0x5d6af8dedb81196699c329225ee604u128);
65
- apply_tick_bit!(0x40000, 0x2216e584f5fa1ea926041bedfe98u128);
66
- apply_tick_bit!(0x80000, 0x48a170391f7dc42444e8fa2u128);
67
-
68
- if tick > I256::ZERO {
69
- ratio = U256::MAX / ratio;
70
- }
71
-
72
- let remainder = ratio % (U256::ONE << 32);
73
- let extra = if remainder == U256::ZERO {
74
- U256::ZERO
75
- } else {
76
- U256::ONE
77
- };
78
- as_uint160((ratio >> 32) + extra)
79
- }
80
-
81
- /// Calculates the greatest tick value such that getSqrtRatioAtTick(tick) <= ratio.
82
- ///
83
- /// Panics if sqrtPriceX96 < MIN_SQRT_RATIO or sqrtPriceX96 >= MAX_SQRT_RATIO.
84
- pub fn get_tick_at_sqrt_ratio(sqrt_price_x96: U256) -> I256 {
85
- assert!(
86
- sqrt_price_x96 >= MIN_SQRT_RATIO && sqrt_price_x96 < MAX_SQRT_RATIO,
87
- "R"
88
- );
89
-
90
- let ratio = sqrt_price_x96 << 32;
91
-
92
- let mut r = ratio;
93
- let mut msb = U256::ZERO;
94
-
95
- // _gt helper inline
96
- let gt = |a: U256, b: U256| -> U256 {
97
- if a > b { U256::ONE } else { U256::ZERO }
98
- };
99
-
100
- let mut f: U256 =
101
- gt(r, U256::new(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFu128)) << 7;
102
- msb = msb | f;
103
- r = r >> f;
104
-
105
- f = gt(r, U256::from(0xFFFFFFFFFFFFFFFFu128)) << 6;
106
- msb = msb | f;
107
- r = r >> f;
108
-
109
- f = gt(r, U256::from(0xFFFFFFFFu64)) << 5;
110
- msb = msb | f;
111
- r = r >> f;
112
-
113
- f = gt(r, U256::from(0xFFFFu64)) << 4;
114
- msb = msb | f;
115
- r = r >> f;
116
-
117
- f = gt(r, U256::from(0xFFu64)) << 3;
118
- msb = msb | f;
119
- r = r >> f;
120
-
121
- f = gt(r, U256::from(0xFu64)) << 2;
122
- msb = msb | f;
123
- r = r >> f;
124
-
125
- f = gt(r, U256::from(0x3u64)) << 1;
126
- msb = msb | f;
127
- r = r >> f;
128
-
129
- f = gt(r, U256::ONE);
130
- msb = msb | f;
131
-
132
- if msb >= U256::from(128u64) {
133
- r = ratio >> (msb - U256::from(127u64));
134
- } else {
135
- r = ratio << (U256::from(127u64) - msb);
136
- }
137
-
138
- // log_2 is int256 in Solidity. (int256(msb) - 128) << 64
139
- let mut log_2: I256 = (msb.as_i256() - I256::from(128i32)) << 64u32;
140
-
141
- // 14 iterations of squaring
142
- macro_rules! log2_step {
143
- ($shift:expr) => {
144
- r = (r * r) >> 127;
145
- f = r >> 128;
146
- // f is 0 or 1 (unsigned), cast to signed for the OR into log_2
147
- log_2 = log_2 | ((f.as_i256()) << $shift as u32);
148
- r = r >> f;
149
- };
150
- }
151
-
152
- log2_step!(63);
153
- log2_step!(62);
154
- log2_step!(61);
155
- log2_step!(60);
156
- log2_step!(59);
157
- log2_step!(58);
158
- log2_step!(57);
159
- log2_step!(56);
160
- log2_step!(55);
161
- log2_step!(54);
162
- log2_step!(53);
163
- log2_step!(52);
164
- log2_step!(51);
165
-
166
- // Last iteration (no r >>= f after)
167
- r = (r * r) >> 127;
168
- f = r >> 128;
169
- log_2 = log_2 | ((f.as_i256()) << 50u32);
170
-
171
- // log_sqrt10001 = log_2 * 255738958999603826347141 (signed multiply)
172
- let log_sqrt10001: I256 = log_2 * I256::new(255738958999603826347141i128);
173
-
174
- // tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128)
175
- let tick_low_raw: I256 = (log_sqrt10001
176
- - I256::new(3402992956809132418596140100660247210i128))
177
- >> 128u32;
178
-
179
- // tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128)
180
- let tick_hi_raw: I256 = (log_sqrt10001
181
- + U256::new(291339464771989622907027621153398088495u128).as_i256())
182
- >> 128u32;
183
-
184
- let tick_low = as_int_n_24(tick_low_raw);
185
- let tick_hi = as_int_n_24(tick_hi_raw);
186
-
187
- if tick_low == tick_hi {
188
- tick_low
189
- } else if get_sqrt_ratio_at_tick(tick_hi) <= sqrt_price_x96 {
190
- tick_hi
191
- } else {
192
- tick_low
193
- }
194
- }
195
-
196
- /// Equivalent to BigInt.asIntN(24, x) -- truncate to 24 bits and sign-extend.
197
- fn as_int_n_24(x: I256) -> I256 {
198
- let mask_24 = I256::new((1i128 << 24) - 1);
199
- let truncated = x & mask_24;
200
- let sign_bit = I256::ONE << 23u32;
201
- if (truncated & sign_bit) != I256::ZERO {
202
- truncated | !mask_24
203
- } else {
204
- truncated
205
- }
206
- }
207
-
208
- #[cfg(test)]
209
- mod tests {
210
- use super::*;
211
-
212
- #[test]
213
- fn test_constants() {
214
- assert_eq!(MIN_TICK, I256::new(-887272));
215
- assert_eq!(MAX_TICK, I256::new(887272));
216
- assert_eq!(MIN_SQRT_RATIO, U256::from(4295128739u64));
217
- }
218
-
219
- #[test]
220
- fn test_max_sqrt_ratio() {
221
- let expected =
222
- U256::from_words(0xFFFD8963, 0xEFD1FC6A506488495D951D5263988D26);
223
- assert_eq!(MAX_SQRT_RATIO, expected);
224
- }
225
-
226
- #[test]
227
- fn test_get_sqrt_ratio_at_tick_min() {
228
- let result = get_sqrt_ratio_at_tick(MIN_TICK);
229
- assert_eq!(result, MIN_SQRT_RATIO);
230
- }
231
-
232
- #[test]
233
- fn test_get_sqrt_ratio_at_tick_max() {
234
- let result = get_sqrt_ratio_at_tick(MAX_TICK);
235
- assert_eq!(result, MAX_SQRT_RATIO);
236
- }
237
-
238
- #[test]
239
- fn test_get_sqrt_ratio_at_tick_zero() {
240
- let result = get_sqrt_ratio_at_tick(I256::ZERO);
241
- let q96 = U256::ONE << 96;
242
- assert_eq!(result, q96);
243
- }
244
-
245
- #[test]
246
- fn test_get_tick_at_sqrt_ratio_min() {
247
- let result = get_tick_at_sqrt_ratio(MIN_SQRT_RATIO);
248
- assert_eq!(result, MIN_TICK);
249
- }
250
-
251
- #[test]
252
- fn test_get_tick_at_sqrt_ratio_q96() {
253
- let q96 = U256::ONE << 96;
254
- let result = get_tick_at_sqrt_ratio(q96);
255
- assert_eq!(result, I256::ZERO);
256
- }
257
-
258
- #[test]
259
- fn test_roundtrip_positive_tick() {
260
- let tick = I256::from(100i32);
261
- let sqrt_ratio = get_sqrt_ratio_at_tick(tick);
262
- let computed_tick = get_tick_at_sqrt_ratio(sqrt_ratio);
263
- assert_eq!(computed_tick, tick);
264
- }
265
-
266
- #[test]
267
- fn test_roundtrip_negative_tick() {
268
- let tick = I256::from(-100i32);
269
- let sqrt_ratio = get_sqrt_ratio_at_tick(tick);
270
- let computed_tick = get_tick_at_sqrt_ratio(sqrt_ratio);
271
- assert_eq!(computed_tick, tick);
272
- }
273
-
274
- #[test]
275
- fn test_roundtrip_large_positive_tick() {
276
- let tick = I256::new(887270);
277
- let sqrt_ratio = get_sqrt_ratio_at_tick(tick);
278
- let computed_tick = get_tick_at_sqrt_ratio(sqrt_ratio);
279
- assert_eq!(computed_tick, tick);
280
- }
281
-
282
- #[test]
283
- fn test_roundtrip_large_negative_tick() {
284
- let tick = I256::new(-887270);
285
- let sqrt_ratio = get_sqrt_ratio_at_tick(tick);
286
- let computed_tick = get_tick_at_sqrt_ratio(sqrt_ratio);
287
- assert_eq!(computed_tick, tick);
288
- }
289
-
290
- #[test]
291
- #[should_panic(expected = "T")]
292
- fn test_get_sqrt_ratio_at_tick_too_large() {
293
- get_sqrt_ratio_at_tick(MAX_TICK + I256::ONE);
294
- }
295
-
296
- #[test]
297
- #[should_panic(expected = "T")]
298
- fn test_get_sqrt_ratio_at_tick_too_small() {
299
- get_sqrt_ratio_at_tick(MIN_TICK - I256::ONE);
300
- }
301
-
302
- #[test]
303
- #[should_panic(expected = "R")]
304
- fn test_get_tick_at_sqrt_ratio_too_small() {
305
- get_tick_at_sqrt_ratio(MIN_SQRT_RATIO - U256::ONE);
306
- }
307
-
308
- #[test]
309
- #[should_panic(expected = "R")]
310
- fn test_get_tick_at_sqrt_ratio_too_large() {
311
- get_tick_at_sqrt_ratio(MAX_SQRT_RATIO);
312
- }
313
-
314
- #[test]
315
- fn test_as_int_n_24() {
316
- assert_eq!(as_int_n_24(I256::from(100i32)), I256::from(100i32));
317
- assert_eq!(as_int_n_24(I256::from(-100i32)), I256::from(-100i32));
318
- assert_eq!(as_int_n_24(I256::new(887272)), I256::new(887272));
319
- assert_eq!(as_int_n_24(I256::new(-887272)), I256::new(-887272));
320
- }
321
- }
@@ -1,67 +0,0 @@
1
- use ethnum::U256;
2
-
3
- /// Divides x by y, rounding up. Does not check for division by zero.
4
- /// Equivalent to Solidity's `(x + y - 1) / y` with unchecked arithmetic.
5
- pub fn div_rounding_up(x: U256, y: U256) -> U256 {
6
- (x + y - U256::ONE) / y
7
- }
8
-
9
- #[cfg(test)]
10
- mod tests {
11
- use super::*;
12
-
13
- #[test]
14
- fn test_exact_division() {
15
- assert_eq!(
16
- div_rounding_up(U256::from(10u64), U256::from(5u64)),
17
- U256::from(2u64)
18
- );
19
- }
20
-
21
- #[test]
22
- fn test_rounds_up() {
23
- assert_eq!(
24
- div_rounding_up(U256::from(11u64), U256::from(5u64)),
25
- U256::from(3u64)
26
- );
27
- }
28
-
29
- #[test]
30
- fn test_one_divided_by_one() {
31
- assert_eq!(
32
- div_rounding_up(U256::ONE, U256::ONE),
33
- U256::ONE
34
- );
35
- }
36
-
37
- #[test]
38
- fn test_zero_numerator() {
39
- assert_eq!(
40
- div_rounding_up(U256::ZERO, U256::from(5u64)),
41
- U256::ZERO
42
- );
43
- }
44
-
45
- #[test]
46
- fn test_large_values() {
47
- let _x = U256::MAX;
48
- let _y = U256::from(2u64);
49
- // (MAX + 2 - 1) / 2 -- but MAX + 1 wraps to 0, so this is (0) / 2 = 0
50
- // Wait, U256 arithmetic here is NOT wrapping. Let's think:
51
- // x + y - 1 = MAX + 2 - 1 = MAX + 1 which overflows.
52
- // But in Solidity "UnsafeMath" this is unchecked. In our TS it uses BigInt (no overflow).
53
- // TS: (MAX + 2 - 1) / 2 = (MAX + 1) / 2 = 2^256 / 2 = 2^255.
54
- // But U256 can't represent 2^256. The TS BigInt can though.
55
- // Actually in the TS, x is already bounded to uint256 values that come from
56
- // other operations, so x + y - 1 wouldn't overflow in practice.
57
- // We skip this edge case test.
58
- }
59
-
60
- #[test]
61
- fn test_rounding_by_one() {
62
- assert_eq!(
63
- div_rounding_up(U256::from(1u64), U256::from(3u64)),
64
- U256::from(1u64)
65
- );
66
- }
67
- }
@@ -1,41 +0,0 @@
1
- use ethnum::{I256, U256};
2
- use std::collections::HashMap;
3
-
4
- use crate::config::MathVariant;
5
- use crate::math::oracle::OracleObservation;
6
- use crate::math::tick::TickInfo;
7
-
8
- /// Mirrors the TS PoolState type, containing all fields needed for pricing.
9
- /// balance0/balance1 are NOT included — they stay in JS.
10
- #[derive(Debug, Clone)]
11
- pub struct PoolState {
12
- pub block_timestamp: U256,
13
- pub tick_spacing: I256,
14
- pub fee: U256,
15
-
16
- // slot0
17
- pub sqrt_price_x96: U256,
18
- pub tick: I256,
19
- pub observation_index: u16,
20
- pub observation_cardinality: u16,
21
- pub observation_cardinality_next: u16,
22
- pub fee_protocol: U256,
23
-
24
- pub liquidity: U256,
25
- pub max_liquidity_per_tick: U256,
26
-
27
- pub tick_bitmap: HashMap<i16, U256>,
28
- pub ticks: HashMap<i32, TickInfo>,
29
- pub observations: HashMap<u16, OracleObservation>,
30
-
31
- pub start_tick_bitmap: I256,
32
- pub lowest_known_tick: I256,
33
- pub highest_known_tick: I256,
34
-
35
- /// Precomputed bitmap bounds for price queries.
36
- /// wordPos must be within [bitmap_range_lower, bitmap_range_upper] during pricing.
37
- pub bitmap_range_lower: i16,
38
- pub bitmap_range_upper: i16,
39
-
40
- pub variant: MathVariant,
41
- }