@paraswap/dex-lib 4.8.37-native-dex-math.1 → 4.8.37

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 (305) hide show
  1. package/build/abi/pancakeswap-infinity/cl-pool-manager.json +80 -0
  2. package/build/dex/aave-gsm/config.js +2 -2
  3. package/build/dex/fluid-dex/scripts/measure-calc-time.js +178 -0
  4. package/build/dex/fluid-dex/scripts/measure-calc-time.js.map +1 -0
  5. package/build/dex/idex.d.ts +1 -1
  6. package/build/dex/index.js +2 -0
  7. package/build/dex/index.js.map +1 -1
  8. package/build/dex/{infusion → pancakeswap-infinity}/config.d.ts +2 -2
  9. package/build/dex/pancakeswap-infinity/config.js +14 -0
  10. package/build/dex/pancakeswap-infinity/config.js.map +1 -0
  11. package/build/dex/pancakeswap-infinity/encoder.d.ts +4 -0
  12. package/build/dex/pancakeswap-infinity/encoder.js +218 -0
  13. package/build/dex/pancakeswap-infinity/encoder.js.map +1 -0
  14. package/build/dex/pancakeswap-infinity/pancakeswap-infinity.d.ts +21 -0
  15. package/build/dex/pancakeswap-infinity/pancakeswap-infinity.js +102 -0
  16. package/build/dex/pancakeswap-infinity/pancakeswap-infinity.js.map +1 -0
  17. package/build/dex/pancakeswap-infinity/subgraph.d.ts +7 -0
  18. package/build/dex/pancakeswap-infinity/subgraph.js +64 -0
  19. package/build/dex/pancakeswap-infinity/subgraph.js.map +1 -0
  20. package/build/dex/pancakeswap-infinity/types.d.ts +39 -0
  21. package/build/dex/pancakeswap-infinity/types.js.map +1 -0
  22. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.d.ts +0 -2
  23. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js +0 -5
  24. package/build/dex/pancakeswap-v3/pancakeswap-v3-pool.js.map +1 -1
  25. package/build/dex/pancakeswap-v3/pancakeswap-v3.d.ts +3 -6
  26. package/build/dex/pancakeswap-v3/pancakeswap-v3.js +9 -85
  27. package/build/dex/pancakeswap-v3/pancakeswap-v3.js.map +1 -1
  28. package/build/dex/solidly-v3/solidly-v3-pool.d.ts +0 -3
  29. package/build/dex/solidly-v3/solidly-v3-pool.js +0 -8
  30. package/build/dex/solidly-v3/solidly-v3-pool.js.map +1 -1
  31. package/build/dex/solidly-v3/solidly-v3.d.ts +2 -5
  32. package/build/dex/solidly-v3/solidly-v3.js +8 -84
  33. package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
  34. package/build/dex/uniswap-v3/scripts/measure-calc-time.js +110 -222
  35. package/build/dex/uniswap-v3/scripts/measure-calc-time.js.map +1 -1
  36. package/build/dex/uniswap-v3/types.d.ts +0 -1
  37. package/build/dex/uniswap-v3/types.js.map +1 -1
  38. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +0 -2
  39. package/build/dex/uniswap-v3/uniswap-v3-pool.js +0 -5
  40. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  41. package/build/dex/uniswap-v3/uniswap-v3.d.ts +3 -11
  42. package/build/dex/uniswap-v3/uniswap-v3.js +9 -86
  43. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  44. package/build/dex/uniswap-v4/api-go/compare-pricing.d.ts +1 -0
  45. package/build/dex/uniswap-v4/api-go/compare-pricing.js +187 -0
  46. package/build/dex/uniswap-v4/api-go/compare-pricing.js.map +1 -0
  47. package/build/dex/uniswap-v4/api-go/compare-states.d.ts +1 -0
  48. package/build/dex/uniswap-v4/api-go/compare-states.js +149 -0
  49. package/build/dex/uniswap-v4/api-go/compare-states.js.map +1 -0
  50. package/build/dex/uniswap-v4/api-go/fetch-pool-key.d.ts +0 -0
  51. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js +140 -0
  52. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js.map +1 -0
  53. package/build/dex/uniswap-v4/types.d.ts +0 -1
  54. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.d.ts +0 -2
  55. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.js +0 -3
  56. package/build/dex/uniswap-v4/uniswap-v4-pool-manager.js.map +1 -1
  57. package/build/dex/uniswap-v4/uniswap-v4-pool.d.ts +0 -3
  58. package/build/dex/uniswap-v4/uniswap-v4-pool.js +0 -18
  59. package/build/dex/uniswap-v4/uniswap-v4-pool.js.map +1 -1
  60. package/build/dex/uniswap-v4/uniswap-v4.d.ts +1 -3
  61. package/build/dex/uniswap-v4/uniswap-v4.js +14 -74
  62. package/build/dex/uniswap-v4/uniswap-v4.js.map +1 -1
  63. package/build/pricing-helper.d.ts +1 -1
  64. package/build/pricing-helper.js +2 -2
  65. package/build/pricing-helper.js.map +1 -1
  66. package/package.json +3 -3
  67. package/build/abi/BProtocol.json +0 -1155
  68. package/build/abi/Jarvis.json +0 -1172
  69. package/build/abi/MStableAsset.json +0 -1545
  70. package/build/abi/OneInchLp.json +0 -1304
  71. package/build/abi/Onebit.json +0 -736
  72. package/build/abi/Shell.json +0 -1294
  73. package/build/abi/TraderJoeV2Router.json +0 -50
  74. package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
  75. package/build/abi/idle-dao/idle-cdo.json +0 -1245
  76. package/build/abi/infusion/InfusionFactory.json +0 -147
  77. package/build/abi/infusion/InfusionPair.json +0 -658
  78. package/build/abi/infusion/InfusionRouter.json +0 -442
  79. package/build/abi/maker-psm/pot.json +0 -322
  80. package/build/abi/maker-psm/psm.json +0 -243
  81. package/build/abi/maker-psm/vat.json +0 -363
  82. package/build/abi/nomiswap-v2/nomiswap-v2-pool.json +0 -773
  83. package/build/abi/quick-perps/fast-price-events.json +0 -70
  84. package/build/abi/quick-perps/fast-price-feed.json +0 -741
  85. package/build/abi/quick-perps/reader.json +0 -313
  86. package/build/abi/quick-perps/vault-price-feed.json +0 -323
  87. package/build/abi/quick-perps/vault.json +0 -1953
  88. package/build/abi/uniswap-v2/excalibur-pool.json +0 -881
  89. package/build/abi/uniswap-v2/mdex-factory.json +0 -759
  90. package/build/abi/wUSDM.json +0 -757
  91. package/build/abi/zrx.v2.json +0 -1967
  92. package/build/abi/zrx.v3.json +0 -3454
  93. package/build/abi/zrx.v4.json +0 -2193
  94. package/build/dex/OneInchLp.d.ts +0 -24
  95. package/build/dex/OneInchLp.js +0 -43
  96. package/build/dex/OneInchLp.js.map +0 -1
  97. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  98. package/build/dex/bProtocol/bProtocol.js +0 -56
  99. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  100. package/build/dex/bProtocol/types.d.ts +0 -11
  101. package/build/dex/bProtocol/types.js +0 -8
  102. package/build/dex/bProtocol/types.js.map +0 -1
  103. package/build/dex/ekubo/pools/base-pool.d.ts +0 -47
  104. package/build/dex/ekubo/pools/base-pool.js +0 -184
  105. package/build/dex/ekubo/pools/base-pool.js.map +0 -1
  106. package/build/dex/ekubo/pools/iface.d.ts +0 -46
  107. package/build/dex/ekubo/pools/iface.js +0 -75
  108. package/build/dex/ekubo/pools/iface.js.map +0 -1
  109. package/build/dex/ekubo/pools/math/price.d.ts +0 -7
  110. package/build/dex/ekubo/pools/math/price.js +0 -112
  111. package/build/dex/ekubo/pools/math/price.js.map +0 -1
  112. package/build/dex/ekubo/pools/oracle-pool.d.ts +0 -10
  113. package/build/dex/ekubo/pools/oracle-pool.js +0 -19
  114. package/build/dex/ekubo/pools/oracle-pool.js.map +0 -1
  115. package/build/dex/ekubo/pools/pool-utils.d.ts +0 -44
  116. package/build/dex/ekubo/pools/pool-utils.js +0 -240
  117. package/build/dex/ekubo/pools/pool-utils.js.map +0 -1
  118. package/build/dex/idle-dao/config.d.ts +0 -5
  119. package/build/dex/idle-dao/config.js +0 -24
  120. package/build/dex/idle-dao/config.js.map +0 -1
  121. package/build/dex/idle-dao/idle-dao.d.ts +0 -42
  122. package/build/dex/idle-dao/idle-dao.js +0 -279
  123. package/build/dex/idle-dao/idle-dao.js.map +0 -1
  124. package/build/dex/idle-dao/token_list.d.ts +0 -4
  125. package/build/dex/idle-dao/token_list.js +0 -289
  126. package/build/dex/idle-dao/token_list.js.map +0 -1
  127. package/build/dex/idle-dao/tokens.d.ts +0 -9
  128. package/build/dex/idle-dao/tokens.js +0 -68
  129. package/build/dex/idle-dao/tokens.js.map +0 -1
  130. package/build/dex/idle-dao/types.d.ts +0 -35
  131. package/build/dex/idle-dao/types.js +0 -11
  132. package/build/dex/idle-dao/types.js.map +0 -1
  133. package/build/dex/idle-dao/utils.d.ts +0 -8
  134. package/build/dex/idle-dao/utils.js +0 -149
  135. package/build/dex/idle-dao/utils.js.map +0 -1
  136. package/build/dex/infusion/config.js +0 -20
  137. package/build/dex/infusion/config.js.map +0 -1
  138. package/build/dex/infusion/infusion-stable-pool.d.ts +0 -4
  139. package/build/dex/infusion/infusion-stable-pool.js +0 -74
  140. package/build/dex/infusion/infusion-stable-pool.js.map +0 -1
  141. package/build/dex/infusion/infusion.d.ts +0 -51
  142. package/build/dex/infusion/infusion.js +0 -500
  143. package/build/dex/infusion/infusion.js.map +0 -1
  144. package/build/dex/infusion/types.d.ts +0 -45
  145. package/build/dex/infusion/types.js.map +0 -1
  146. package/build/dex/infusion/utils/isStablePair.d.ts +0 -2
  147. package/build/dex/infusion/utils/isStablePair.js +0 -18
  148. package/build/dex/infusion/utils/isStablePair.js.map +0 -1
  149. package/build/dex/jarvis.d.ts +0 -56
  150. package/build/dex/jarvis.js +0 -163
  151. package/build/dex/jarvis.js.map +0 -1
  152. package/build/dex/mStable.d.ts +0 -44
  153. package/build/dex/mStable.js +0 -75
  154. package/build/dex/mStable.js.map +0 -1
  155. package/build/dex/maker-psm/config.d.ts +0 -11
  156. package/build/dex/maker-psm/config.js +0 -53
  157. package/build/dex/maker-psm/config.js.map +0 -1
  158. package/build/dex/maker-psm/maker-psm.d.ts +0 -103
  159. package/build/dex/maker-psm/maker-psm.js +0 -493
  160. package/build/dex/maker-psm/maker-psm.js.map +0 -1
  161. package/build/dex/maker-psm/types.d.ts +0 -39
  162. package/build/dex/maker-psm/types.js +0 -3
  163. package/build/dex/maker-psm/types.js.map +0 -1
  164. package/build/dex/onebit/onebit.d.ts +0 -16
  165. package/build/dex/onebit/onebit.js +0 -61
  166. package/build/dex/onebit/onebit.js.map +0 -1
  167. package/build/dex/onebit/types.d.ts +0 -14
  168. package/build/dex/onebit/types.js +0 -8
  169. package/build/dex/onebit/types.js.map +0 -1
  170. package/build/dex/quick-perps/config.d.ts +0 -11
  171. package/build/dex/quick-perps/config.js +0 -27
  172. package/build/dex/quick-perps/config.js.map +0 -1
  173. package/build/dex/quick-perps/fast-price-feed.d.ts +0 -26
  174. package/build/dex/quick-perps/fast-price-feed.js +0 -184
  175. package/build/dex/quick-perps/fast-price-feed.js.map +0 -1
  176. package/build/dex/quick-perps/pool.d.ts +0 -21
  177. package/build/dex/quick-perps/pool.js +0 -229
  178. package/build/dex/quick-perps/pool.js.map +0 -1
  179. package/build/dex/quick-perps/quick-perps.d.ts +0 -53
  180. package/build/dex/quick-perps/quick-perps.js +0 -247
  181. package/build/dex/quick-perps/quick-perps.js.map +0 -1
  182. package/build/dex/quick-perps/types.d.ts +0 -98
  183. package/build/dex/quick-perps/types.js +0 -3
  184. package/build/dex/quick-perps/types.js.map +0 -1
  185. package/build/dex/quick-perps/usdq.d.ts +0 -15
  186. package/build/dex/quick-perps/usdq.js +0 -62
  187. package/build/dex/quick-perps/usdq.js.map +0 -1
  188. package/build/dex/quick-perps/vault-price-feed.d.ts +0 -43
  189. package/build/dex/quick-perps/vault-price-feed.js +0 -203
  190. package/build/dex/quick-perps/vault-price-feed.js.map +0 -1
  191. package/build/dex/quick-perps/vault-utils.d.ts +0 -8
  192. package/build/dex/quick-perps/vault-utils.js +0 -42
  193. package/build/dex/quick-perps/vault-utils.js.map +0 -1
  194. package/build/dex/quick-perps/vault.d.ts +0 -46
  195. package/build/dex/quick-perps/vault.js +0 -182
  196. package/build/dex/quick-perps/vault.js.map +0 -1
  197. package/build/dex/se-vlr/config.d.ts +0 -3
  198. package/build/dex/se-vlr/config.js +0 -24
  199. package/build/dex/se-vlr/config.js.map +0 -1
  200. package/build/dex/se-vlr/se-vlr-pool.d.ts +0 -39
  201. package/build/dex/se-vlr/se-vlr-pool.js +0 -70
  202. package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
  203. package/build/dex/se-vlr/se-vlr.d.ts +0 -35
  204. package/build/dex/se-vlr/se-vlr.js +0 -131
  205. package/build/dex/se-vlr/se-vlr.js.map +0 -1
  206. package/build/dex/se-vlr/types.d.ts +0 -6
  207. package/build/dex/se-vlr/types.js +0 -3
  208. package/build/dex/se-vlr/types.js.map +0 -1
  209. package/build/dex/shell.d.ts +0 -25
  210. package/build/dex/shell.js +0 -41
  211. package/build/dex/shell.js.map +0 -1
  212. package/build/dex/solidly/forks-override/aerodrome.d.ts +0 -14
  213. package/build/dex/solidly/forks-override/aerodrome.js +0 -46
  214. package/build/dex/solidly/forks-override/aerodrome.js.map +0 -1
  215. package/build/dex/solidly/forks-override/chronos.d.ts +0 -23
  216. package/build/dex/solidly/forks-override/chronos.js +0 -141
  217. package/build/dex/solidly/forks-override/chronos.js.map +0 -1
  218. package/build/dex/solidly/forks-override/usdfi.d.ts +0 -8
  219. package/build/dex/solidly/forks-override/usdfi.js +0 -15
  220. package/build/dex/solidly/forks-override/usdfi.js.map +0 -1
  221. package/build/dex/solidly/forks-override/velocimeter.d.ts +0 -23
  222. package/build/dex/solidly/forks-override/velocimeter.js +0 -77
  223. package/build/dex/solidly/forks-override/velocimeter.js.map +0 -1
  224. package/build/dex/trader-joe-v2.d.ts +0 -40
  225. package/build/dex/trader-joe-v2.js +0 -74
  226. package/build/dex/trader-joe-v2.js.map +0 -1
  227. package/build/dex/uniswap-v2/dfyn.d.ts +0 -19
  228. package/build/dex/uniswap-v2/dfyn.js +0 -61
  229. package/build/dex/uniswap-v2/dfyn.js.map +0 -1
  230. package/build/dex/uniswap-v2/excalibur.d.ts +0 -24
  231. package/build/dex/uniswap-v2/excalibur.js +0 -47
  232. package/build/dex/uniswap-v2/excalibur.js.map +0 -1
  233. package/build/dex/uniswap-v2/mdex.d.ts +0 -24
  234. package/build/dex/uniswap-v2/mdex.js +0 -50
  235. package/build/dex/uniswap-v2/mdex.js.map +0 -1
  236. package/build/dex/uniswap-v2/nomiswap-v2.d.ts +0 -24
  237. package/build/dex/uniswap-v2/nomiswap-v2.js +0 -57
  238. package/build/dex/uniswap-v2/nomiswap-v2.js.map +0 -1
  239. package/build/dex/uniswap-v3/scripts/bench-all-dexes.js +0 -160
  240. package/build/dex/uniswap-v3/scripts/bench-all-dexes.js.map +0 -1
  241. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  242. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  243. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  244. package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -3
  245. package/build/dex/uniswap-v4/contract-math/Position.js +0 -10
  246. package/build/dex/uniswap-v4/contract-math/Position.js.map +0 -1
  247. package/build/dex/usual-bond/config.d.ts +0 -3
  248. package/build/dex/usual-bond/config.js +0 -13
  249. package/build/dex/usual-bond/config.js.map +0 -1
  250. package/build/dex/usual-bond/types.d.ts +0 -7
  251. package/build/dex/usual-bond/types.js +0 -3
  252. package/build/dex/usual-bond/types.js.map +0 -1
  253. package/build/dex/usual-bond/usual-bond.d.ts +0 -35
  254. package/build/dex/usual-bond/usual-bond.js +0 -176
  255. package/build/dex/usual-bond/usual-bond.js.map +0 -1
  256. package/build/dex/wusdm/config.d.ts +0 -3
  257. package/build/dex/wusdm/config.js +0 -43
  258. package/build/dex/wusdm/config.js.map +0 -1
  259. package/build/dex/wusdm/constants.d.ts +0 -2
  260. package/build/dex/wusdm/constants.js +0 -6
  261. package/build/dex/wusdm/constants.js.map +0 -1
  262. package/build/dex/wusdm/types.d.ts +0 -18
  263. package/build/dex/wusdm/types.js +0 -11
  264. package/build/dex/wusdm/types.js.map +0 -1
  265. package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
  266. package/build/dex/wusdm/wusdm-pool.js +0 -74
  267. package/build/dex/wusdm/wusdm-pool.js.map +0 -1
  268. package/build/dex/wusdm/wusdm.d.ts +0 -46
  269. package/build/dex/wusdm/wusdm.js +0 -243
  270. package/build/dex/wusdm/wusdm.js.map +0 -1
  271. package/build/dex/zerox/config.d.ts +0 -2
  272. package/build/dex/zerox/config.js +0 -33
  273. package/build/dex/zerox/config.js.map +0 -1
  274. package/build/dex/zerox/index.d.ts +0 -22
  275. package/build/dex/zerox/index.js +0 -225
  276. package/build/dex/zerox/index.js.map +0 -1
  277. package/build/dex/zerox/order.d.ts +0 -88
  278. package/build/dex/zerox/order.js +0 -53
  279. package/build/dex/zerox/order.js.map +0 -1
  280. package/build/dex/zerox/types.d.ts +0 -73
  281. package/build/dex/zerox/types.js +0 -21
  282. package/build/dex/zerox/types.js.map +0 -1
  283. package/native/Cargo.lock +0 -331
  284. package/native/Cargo.toml +0 -22
  285. package/native/build.rs +0 -5
  286. package/native/package-lock.json +0 -32
  287. package/native/package.json +0 -20
  288. package/native/src/config.rs +0 -73
  289. package/native/src/lib.rs +0 -528
  290. package/native/src/math/bit_math.rs +0 -177
  291. package/native/src/math/full_math.rs +0 -217
  292. package/native/src/math/liquidity_math.rs +0 -72
  293. package/native/src/math/mod.rs +0 -10
  294. package/native/src/math/oracle.rs +0 -493
  295. package/native/src/math/sqrt_price_math.rs +0 -272
  296. package/native/src/math/swap_math.rs +0 -306
  297. package/native/src/math/tick.rs +0 -239
  298. package/native/src/math/tick_bitmap.rs +0 -312
  299. package/native/src/math/tick_math.rs +0 -321
  300. package/native/src/math/unsafe_math.rs +0 -67
  301. package/native/src/pool_state.rs +0 -41
  302. package/native/src/query_outputs.rs +0 -379
  303. package/native/src/v4_query_outputs.rs +0 -255
  304. /package/build/dex/{uniswap-v3/scripts/bench-all-dexes.d.ts → fluid-dex/scripts/measure-calc-time.d.ts} +0 -0
  305. /package/build/dex/{infusion → pancakeswap-infinity}/types.js +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
- }