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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/build/dex/balancer-v2/balancer-v2.d.ts +0 -1
  2. package/build/dex/balancer-v2/balancer-v2.js +0 -4
  3. package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
  4. package/build/dex/bebop/bebop.d.ts +0 -1
  5. package/build/dex/bebop/bebop.js +0 -8
  6. package/build/dex/bebop/bebop.js.map +1 -1
  7. package/build/dex/cables/cables.d.ts +0 -1
  8. package/build/dex/cables/cables.js +0 -3
  9. package/build/dex/cables/cables.js.map +1 -1
  10. package/build/dex/curve-v1/curve-v1.d.ts +0 -1
  11. package/build/dex/curve-v1/curve-v1.js +0 -4
  12. package/build/dex/curve-v1/curve-v1.js.map +1 -1
  13. package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +0 -1
  14. package/build/dex/curve-v1-factory/curve-v1-factory.js +0 -4
  15. package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
  16. package/build/dex/curve-v2/curve-v2.d.ts +0 -1
  17. package/build/dex/curve-v2/curve-v2.js +0 -4
  18. package/build/dex/curve-v2/curve-v2.js.map +1 -1
  19. package/build/dex/hashflow/hashflow.d.ts +0 -1
  20. package/build/dex/hashflow/hashflow.js +0 -5
  21. package/build/dex/hashflow/hashflow.js.map +1 -1
  22. package/build/dex/idex.d.ts +1 -2
  23. package/build/dex/lite-psm/lite-psm.d.ts +0 -1
  24. package/build/dex/lite-psm/lite-psm.js +0 -3
  25. package/build/dex/lite-psm/lite-psm.js.map +1 -1
  26. package/build/dex/native/native.d.ts +0 -1
  27. package/build/dex/native/native.js +0 -6
  28. package/build/dex/native/native.js.map +1 -1
  29. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.d.ts +0 -1
  30. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +0 -5
  31. package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
  32. package/build/dex/solidly-v3/solidly-v3.d.ts +0 -1
  33. package/build/dex/solidly-v3/solidly-v3.js +0 -4
  34. package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
  35. package/build/dex/uniswap-v3/contract-math/native-bridge.d.ts +15 -0
  36. package/build/dex/uniswap-v3/contract-math/native-bridge.js +71 -0
  37. package/build/dex/uniswap-v3/contract-math/native-bridge.js.map +1 -0
  38. package/build/dex/uniswap-v3/scripts/measure-calc-time.js +222 -110
  39. package/build/dex/uniswap-v3/scripts/measure-calc-time.js.map +1 -1
  40. package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +3 -0
  41. package/build/dex/uniswap-v3/uniswap-v3-pool.js +6 -0
  42. package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
  43. package/build/dex/uniswap-v3/uniswap-v3.d.ts +8 -4
  44. package/build/dex/uniswap-v3/uniswap-v3.js +8 -9
  45. package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
  46. package/build/dex/uniswap-v4/api-go/compare-pricing.d.ts +1 -0
  47. package/build/dex/uniswap-v4/api-go/compare-pricing.js +187 -0
  48. package/build/dex/uniswap-v4/api-go/compare-pricing.js.map +1 -0
  49. package/build/dex/uniswap-v4/api-go/compare-states.d.ts +1 -0
  50. package/build/dex/uniswap-v4/api-go/compare-states.js +149 -0
  51. package/build/dex/uniswap-v4/api-go/compare-states.js.map +1 -0
  52. package/build/dex/uniswap-v4/api-go/fetch-pool-key.d.ts +0 -0
  53. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js +140 -0
  54. package/build/dex/uniswap-v4/api-go/fetch-pool-key.js.map +1 -0
  55. package/build/implementations/local-paraswap-sdk.js +9 -4
  56. package/build/implementations/local-paraswap-sdk.js.map +1 -1
  57. package/build/pricing-helper.d.ts +1 -1
  58. package/build/pricing-helper.js +2 -2
  59. package/build/pricing-helper.js.map +1 -1
  60. package/build/tenderly-simulation.d.ts +221 -0
  61. package/build/tenderly-simulation.js +517 -0
  62. package/build/tenderly-simulation.js.map +1 -0
  63. package/native/Cargo.lock +279 -0
  64. package/native/Cargo.toml +21 -0
  65. package/native/build.rs +5 -0
  66. package/native/package-lock.json +32 -0
  67. package/native/package.json +20 -0
  68. package/native/src/config.rs +40 -0
  69. package/native/src/lib.rs +216 -0
  70. package/native/src/math/bit_math.rs +177 -0
  71. package/native/src/math/full_math.rs +217 -0
  72. package/native/src/math/liquidity_math.rs +72 -0
  73. package/native/src/math/mod.rs +10 -0
  74. package/native/src/math/oracle.rs +493 -0
  75. package/native/src/math/sqrt_price_math.rs +272 -0
  76. package/native/src/math/swap_math.rs +306 -0
  77. package/native/src/math/tick.rs +239 -0
  78. package/native/src/math/tick_bitmap.rs +292 -0
  79. package/native/src/math/tick_math.rs +321 -0
  80. package/native/src/math/unsafe_math.rs +67 -0
  81. package/native/src/pool_state.rs +36 -0
  82. package/native/src/query_outputs.rs +379 -0
  83. package/package.json +2 -1
  84. package/build/abi/BProtocol.json +0 -1155
  85. package/build/abi/Jarvis.json +0 -1172
  86. package/build/abi/MStableAsset.json +0 -1545
  87. package/build/abi/OneInchLp.json +0 -1304
  88. package/build/abi/Onebit.json +0 -736
  89. package/build/abi/Shell.json +0 -1294
  90. package/build/abi/TraderJoeV2Router.json +0 -50
  91. package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
  92. package/build/abi/idle-dao/idle-cdo.json +0 -1245
  93. package/build/abi/infusion/InfusionFactory.json +0 -147
  94. package/build/abi/infusion/InfusionPair.json +0 -658
  95. package/build/abi/infusion/InfusionRouter.json +0 -442
  96. package/build/abi/maker-psm/pot.json +0 -322
  97. package/build/abi/maker-psm/psm.json +0 -243
  98. package/build/abi/maker-psm/vat.json +0 -363
  99. package/build/abi/nomiswap-v2/nomiswap-v2-pool.json +0 -773
  100. package/build/abi/quick-perps/fast-price-events.json +0 -70
  101. package/build/abi/quick-perps/fast-price-feed.json +0 -741
  102. package/build/abi/quick-perps/reader.json +0 -313
  103. package/build/abi/quick-perps/vault-price-feed.json +0 -323
  104. package/build/abi/quick-perps/vault.json +0 -1953
  105. package/build/abi/uniswap-v2/excalibur-pool.json +0 -881
  106. package/build/abi/uniswap-v2/mdex-factory.json +0 -759
  107. package/build/abi/wUSDM.json +0 -757
  108. package/build/abi/zrx.v2.json +0 -1967
  109. package/build/abi/zrx.v3.json +0 -3454
  110. package/build/abi/zrx.v4.json +0 -2193
  111. package/build/dex/OneInchLp.d.ts +0 -24
  112. package/build/dex/OneInchLp.js +0 -43
  113. package/build/dex/OneInchLp.js.map +0 -1
  114. package/build/dex/bProtocol/bProtocol.d.ts +0 -15
  115. package/build/dex/bProtocol/bProtocol.js +0 -56
  116. package/build/dex/bProtocol/bProtocol.js.map +0 -1
  117. package/build/dex/bProtocol/types.d.ts +0 -11
  118. package/build/dex/bProtocol/types.js +0 -8
  119. package/build/dex/bProtocol/types.js.map +0 -1
  120. package/build/dex/ekubo/pools/base-pool.d.ts +0 -47
  121. package/build/dex/ekubo/pools/base-pool.js +0 -184
  122. package/build/dex/ekubo/pools/base-pool.js.map +0 -1
  123. package/build/dex/ekubo/pools/iface.d.ts +0 -46
  124. package/build/dex/ekubo/pools/iface.js +0 -75
  125. package/build/dex/ekubo/pools/iface.js.map +0 -1
  126. package/build/dex/ekubo/pools/math/price.d.ts +0 -7
  127. package/build/dex/ekubo/pools/math/price.js +0 -112
  128. package/build/dex/ekubo/pools/math/price.js.map +0 -1
  129. package/build/dex/ekubo/pools/oracle-pool.d.ts +0 -10
  130. package/build/dex/ekubo/pools/oracle-pool.js +0 -19
  131. package/build/dex/ekubo/pools/oracle-pool.js.map +0 -1
  132. package/build/dex/ekubo/pools/pool-utils.d.ts +0 -44
  133. package/build/dex/ekubo/pools/pool-utils.js +0 -240
  134. package/build/dex/ekubo/pools/pool-utils.js.map +0 -1
  135. package/build/dex/idle-dao/config.d.ts +0 -5
  136. package/build/dex/idle-dao/config.js +0 -24
  137. package/build/dex/idle-dao/config.js.map +0 -1
  138. package/build/dex/idle-dao/idle-dao.d.ts +0 -42
  139. package/build/dex/idle-dao/idle-dao.js +0 -279
  140. package/build/dex/idle-dao/idle-dao.js.map +0 -1
  141. package/build/dex/idle-dao/token_list.d.ts +0 -4
  142. package/build/dex/idle-dao/token_list.js +0 -289
  143. package/build/dex/idle-dao/token_list.js.map +0 -1
  144. package/build/dex/idle-dao/tokens.d.ts +0 -9
  145. package/build/dex/idle-dao/tokens.js +0 -68
  146. package/build/dex/idle-dao/tokens.js.map +0 -1
  147. package/build/dex/idle-dao/types.d.ts +0 -35
  148. package/build/dex/idle-dao/types.js +0 -11
  149. package/build/dex/idle-dao/types.js.map +0 -1
  150. package/build/dex/idle-dao/utils.d.ts +0 -8
  151. package/build/dex/idle-dao/utils.js +0 -149
  152. package/build/dex/idle-dao/utils.js.map +0 -1
  153. package/build/dex/infusion/config.d.ts +0 -3
  154. package/build/dex/infusion/config.js +0 -20
  155. package/build/dex/infusion/config.js.map +0 -1
  156. package/build/dex/infusion/infusion-stable-pool.d.ts +0 -4
  157. package/build/dex/infusion/infusion-stable-pool.js +0 -74
  158. package/build/dex/infusion/infusion-stable-pool.js.map +0 -1
  159. package/build/dex/infusion/infusion.d.ts +0 -51
  160. package/build/dex/infusion/infusion.js +0 -500
  161. package/build/dex/infusion/infusion.js.map +0 -1
  162. package/build/dex/infusion/types.d.ts +0 -45
  163. package/build/dex/infusion/types.js +0 -3
  164. package/build/dex/infusion/types.js.map +0 -1
  165. package/build/dex/infusion/utils/isStablePair.d.ts +0 -2
  166. package/build/dex/infusion/utils/isStablePair.js +0 -18
  167. package/build/dex/infusion/utils/isStablePair.js.map +0 -1
  168. package/build/dex/jarvis.d.ts +0 -56
  169. package/build/dex/jarvis.js +0 -163
  170. package/build/dex/jarvis.js.map +0 -1
  171. package/build/dex/mStable.d.ts +0 -44
  172. package/build/dex/mStable.js +0 -75
  173. package/build/dex/mStable.js.map +0 -1
  174. package/build/dex/maker-psm/config.d.ts +0 -11
  175. package/build/dex/maker-psm/config.js +0 -53
  176. package/build/dex/maker-psm/config.js.map +0 -1
  177. package/build/dex/maker-psm/maker-psm.d.ts +0 -103
  178. package/build/dex/maker-psm/maker-psm.js +0 -493
  179. package/build/dex/maker-psm/maker-psm.js.map +0 -1
  180. package/build/dex/maker-psm/types.d.ts +0 -39
  181. package/build/dex/maker-psm/types.js +0 -3
  182. package/build/dex/maker-psm/types.js.map +0 -1
  183. package/build/dex/onebit/onebit.d.ts +0 -16
  184. package/build/dex/onebit/onebit.js +0 -61
  185. package/build/dex/onebit/onebit.js.map +0 -1
  186. package/build/dex/onebit/types.d.ts +0 -14
  187. package/build/dex/onebit/types.js +0 -8
  188. package/build/dex/onebit/types.js.map +0 -1
  189. package/build/dex/quick-perps/config.d.ts +0 -11
  190. package/build/dex/quick-perps/config.js +0 -27
  191. package/build/dex/quick-perps/config.js.map +0 -1
  192. package/build/dex/quick-perps/fast-price-feed.d.ts +0 -26
  193. package/build/dex/quick-perps/fast-price-feed.js +0 -184
  194. package/build/dex/quick-perps/fast-price-feed.js.map +0 -1
  195. package/build/dex/quick-perps/pool.d.ts +0 -21
  196. package/build/dex/quick-perps/pool.js +0 -229
  197. package/build/dex/quick-perps/pool.js.map +0 -1
  198. package/build/dex/quick-perps/quick-perps.d.ts +0 -53
  199. package/build/dex/quick-perps/quick-perps.js +0 -247
  200. package/build/dex/quick-perps/quick-perps.js.map +0 -1
  201. package/build/dex/quick-perps/types.d.ts +0 -98
  202. package/build/dex/quick-perps/types.js +0 -3
  203. package/build/dex/quick-perps/types.js.map +0 -1
  204. package/build/dex/quick-perps/usdq.d.ts +0 -15
  205. package/build/dex/quick-perps/usdq.js +0 -62
  206. package/build/dex/quick-perps/usdq.js.map +0 -1
  207. package/build/dex/quick-perps/vault-price-feed.d.ts +0 -43
  208. package/build/dex/quick-perps/vault-price-feed.js +0 -203
  209. package/build/dex/quick-perps/vault-price-feed.js.map +0 -1
  210. package/build/dex/quick-perps/vault-utils.d.ts +0 -8
  211. package/build/dex/quick-perps/vault-utils.js +0 -42
  212. package/build/dex/quick-perps/vault-utils.js.map +0 -1
  213. package/build/dex/quick-perps/vault.d.ts +0 -46
  214. package/build/dex/quick-perps/vault.js +0 -182
  215. package/build/dex/quick-perps/vault.js.map +0 -1
  216. package/build/dex/se-vlr/config.d.ts +0 -3
  217. package/build/dex/se-vlr/config.js +0 -24
  218. package/build/dex/se-vlr/config.js.map +0 -1
  219. package/build/dex/se-vlr/se-vlr-pool.d.ts +0 -39
  220. package/build/dex/se-vlr/se-vlr-pool.js +0 -70
  221. package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
  222. package/build/dex/se-vlr/se-vlr.d.ts +0 -35
  223. package/build/dex/se-vlr/se-vlr.js +0 -131
  224. package/build/dex/se-vlr/se-vlr.js.map +0 -1
  225. package/build/dex/se-vlr/types.d.ts +0 -6
  226. package/build/dex/se-vlr/types.js +0 -3
  227. package/build/dex/se-vlr/types.js.map +0 -1
  228. package/build/dex/shell.d.ts +0 -25
  229. package/build/dex/shell.js +0 -41
  230. package/build/dex/shell.js.map +0 -1
  231. package/build/dex/solidly/forks-override/aerodrome.d.ts +0 -14
  232. package/build/dex/solidly/forks-override/aerodrome.js +0 -46
  233. package/build/dex/solidly/forks-override/aerodrome.js.map +0 -1
  234. package/build/dex/solidly/forks-override/chronos.d.ts +0 -23
  235. package/build/dex/solidly/forks-override/chronos.js +0 -141
  236. package/build/dex/solidly/forks-override/chronos.js.map +0 -1
  237. package/build/dex/solidly/forks-override/usdfi.d.ts +0 -8
  238. package/build/dex/solidly/forks-override/usdfi.js +0 -15
  239. package/build/dex/solidly/forks-override/usdfi.js.map +0 -1
  240. package/build/dex/solidly/forks-override/velocimeter.d.ts +0 -23
  241. package/build/dex/solidly/forks-override/velocimeter.js +0 -77
  242. package/build/dex/solidly/forks-override/velocimeter.js.map +0 -1
  243. package/build/dex/trader-joe-v2.d.ts +0 -40
  244. package/build/dex/trader-joe-v2.js +0 -74
  245. package/build/dex/trader-joe-v2.js.map +0 -1
  246. package/build/dex/uniswap-v2/dfyn.d.ts +0 -19
  247. package/build/dex/uniswap-v2/dfyn.js +0 -61
  248. package/build/dex/uniswap-v2/dfyn.js.map +0 -1
  249. package/build/dex/uniswap-v2/excalibur.d.ts +0 -24
  250. package/build/dex/uniswap-v2/excalibur.js +0 -47
  251. package/build/dex/uniswap-v2/excalibur.js.map +0 -1
  252. package/build/dex/uniswap-v2/mdex.d.ts +0 -24
  253. package/build/dex/uniswap-v2/mdex.js +0 -50
  254. package/build/dex/uniswap-v2/mdex.js.map +0 -1
  255. package/build/dex/uniswap-v2/nomiswap-v2.d.ts +0 -24
  256. package/build/dex/uniswap-v2/nomiswap-v2.js +0 -57
  257. package/build/dex/uniswap-v2/nomiswap-v2.js.map +0 -1
  258. package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
  259. package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
  260. package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
  261. package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -3
  262. package/build/dex/uniswap-v4/contract-math/Position.js +0 -10
  263. package/build/dex/uniswap-v4/contract-math/Position.js.map +0 -1
  264. package/build/dex/usual-bond/config.d.ts +0 -3
  265. package/build/dex/usual-bond/config.js +0 -13
  266. package/build/dex/usual-bond/config.js.map +0 -1
  267. package/build/dex/usual-bond/types.d.ts +0 -7
  268. package/build/dex/usual-bond/types.js +0 -3
  269. package/build/dex/usual-bond/types.js.map +0 -1
  270. package/build/dex/usual-bond/usual-bond.d.ts +0 -35
  271. package/build/dex/usual-bond/usual-bond.js +0 -176
  272. package/build/dex/usual-bond/usual-bond.js.map +0 -1
  273. package/build/dex/wusdm/config.d.ts +0 -3
  274. package/build/dex/wusdm/config.js +0 -43
  275. package/build/dex/wusdm/config.js.map +0 -1
  276. package/build/dex/wusdm/constants.d.ts +0 -2
  277. package/build/dex/wusdm/constants.js +0 -6
  278. package/build/dex/wusdm/constants.js.map +0 -1
  279. package/build/dex/wusdm/types.d.ts +0 -18
  280. package/build/dex/wusdm/types.js +0 -11
  281. package/build/dex/wusdm/types.js.map +0 -1
  282. package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
  283. package/build/dex/wusdm/wusdm-pool.js +0 -74
  284. package/build/dex/wusdm/wusdm-pool.js.map +0 -1
  285. package/build/dex/wusdm/wusdm.d.ts +0 -46
  286. package/build/dex/wusdm/wusdm.js +0 -243
  287. package/build/dex/wusdm/wusdm.js.map +0 -1
  288. package/build/dex/zerox/config.d.ts +0 -2
  289. package/build/dex/zerox/config.js +0 -33
  290. package/build/dex/zerox/config.js.map +0 -1
  291. package/build/dex/zerox/index.d.ts +0 -22
  292. package/build/dex/zerox/index.js +0 -225
  293. package/build/dex/zerox/index.js.map +0 -1
  294. package/build/dex/zerox/order.d.ts +0 -88
  295. package/build/dex/zerox/order.js +0 -53
  296. package/build/dex/zerox/order.js.map +0 -1
  297. package/build/dex/zerox/types.d.ts +0 -73
  298. package/build/dex/zerox/types.js +0 -21
  299. package/build/dex/zerox/types.js.map +0 -1
@@ -0,0 +1,279 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "aho-corasick"
7
+ version = "1.1.4"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
10
+ dependencies = [
11
+ "memchr",
12
+ ]
13
+
14
+ [[package]]
15
+ name = "bitflags"
16
+ version = "2.11.0"
17
+ source = "registry+https://github.com/rust-lang/crates.io-index"
18
+ checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
19
+
20
+ [[package]]
21
+ name = "cfg-if"
22
+ version = "1.0.4"
23
+ source = "registry+https://github.com/rust-lang/crates.io-index"
24
+ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
25
+
26
+ [[package]]
27
+ name = "convert_case"
28
+ version = "0.6.0"
29
+ source = "registry+https://github.com/rust-lang/crates.io-index"
30
+ checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
31
+ dependencies = [
32
+ "unicode-segmentation",
33
+ ]
34
+
35
+ [[package]]
36
+ name = "ctor"
37
+ version = "0.2.9"
38
+ source = "registry+https://github.com/rust-lang/crates.io-index"
39
+ checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501"
40
+ dependencies = [
41
+ "quote",
42
+ "syn",
43
+ ]
44
+
45
+ [[package]]
46
+ name = "ethnum"
47
+ version = "1.5.2"
48
+ source = "registry+https://github.com/rust-lang/crates.io-index"
49
+ checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b"
50
+
51
+ [[package]]
52
+ name = "itoa"
53
+ version = "1.0.18"
54
+ source = "registry+https://github.com/rust-lang/crates.io-index"
55
+ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
56
+
57
+ [[package]]
58
+ name = "libloading"
59
+ version = "0.8.9"
60
+ source = "registry+https://github.com/rust-lang/crates.io-index"
61
+ checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
62
+ dependencies = [
63
+ "cfg-if",
64
+ "windows-link",
65
+ ]
66
+
67
+ [[package]]
68
+ name = "memchr"
69
+ version = "2.8.0"
70
+ source = "registry+https://github.com/rust-lang/crates.io-index"
71
+ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
72
+
73
+ [[package]]
74
+ name = "napi"
75
+ version = "2.16.17"
76
+ source = "registry+https://github.com/rust-lang/crates.io-index"
77
+ checksum = "55740c4ae1d8696773c78fdafd5d0e5fe9bc9f1b071c7ba493ba5c413a9184f3"
78
+ dependencies = [
79
+ "bitflags",
80
+ "ctor",
81
+ "napi-derive",
82
+ "napi-sys",
83
+ "once_cell",
84
+ "serde",
85
+ "serde_json",
86
+ ]
87
+
88
+ [[package]]
89
+ name = "napi-build"
90
+ version = "2.3.1"
91
+ source = "registry+https://github.com/rust-lang/crates.io-index"
92
+ checksum = "d376940fd5b723c6893cd1ee3f33abbfd86acb1cd1ec079f3ab04a2a3bc4d3b1"
93
+
94
+ [[package]]
95
+ name = "napi-derive"
96
+ version = "2.16.13"
97
+ source = "registry+https://github.com/rust-lang/crates.io-index"
98
+ checksum = "7cbe2585d8ac223f7d34f13701434b9d5f4eb9c332cccce8dee57ea18ab8ab0c"
99
+ dependencies = [
100
+ "cfg-if",
101
+ "convert_case",
102
+ "napi-derive-backend",
103
+ "proc-macro2",
104
+ "quote",
105
+ "syn",
106
+ ]
107
+
108
+ [[package]]
109
+ name = "napi-derive-backend"
110
+ version = "1.0.75"
111
+ source = "registry+https://github.com/rust-lang/crates.io-index"
112
+ checksum = "1639aaa9eeb76e91c6ae66da8ce3e89e921cd3885e99ec85f4abacae72fc91bf"
113
+ dependencies = [
114
+ "convert_case",
115
+ "once_cell",
116
+ "proc-macro2",
117
+ "quote",
118
+ "regex",
119
+ "semver",
120
+ "syn",
121
+ ]
122
+
123
+ [[package]]
124
+ name = "napi-sys"
125
+ version = "2.4.0"
126
+ source = "registry+https://github.com/rust-lang/crates.io-index"
127
+ checksum = "427802e8ec3a734331fec1035594a210ce1ff4dc5bc1950530920ab717964ea3"
128
+ dependencies = [
129
+ "libloading",
130
+ ]
131
+
132
+ [[package]]
133
+ name = "once_cell"
134
+ version = "1.21.4"
135
+ source = "registry+https://github.com/rust-lang/crates.io-index"
136
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
137
+
138
+ [[package]]
139
+ name = "proc-macro2"
140
+ version = "1.0.106"
141
+ source = "registry+https://github.com/rust-lang/crates.io-index"
142
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
143
+ dependencies = [
144
+ "unicode-ident",
145
+ ]
146
+
147
+ [[package]]
148
+ name = "quote"
149
+ version = "1.0.45"
150
+ source = "registry+https://github.com/rust-lang/crates.io-index"
151
+ checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
152
+ dependencies = [
153
+ "proc-macro2",
154
+ ]
155
+
156
+ [[package]]
157
+ name = "regex"
158
+ version = "1.12.3"
159
+ source = "registry+https://github.com/rust-lang/crates.io-index"
160
+ checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
161
+ dependencies = [
162
+ "aho-corasick",
163
+ "memchr",
164
+ "regex-automata",
165
+ "regex-syntax",
166
+ ]
167
+
168
+ [[package]]
169
+ name = "regex-automata"
170
+ version = "0.4.14"
171
+ source = "registry+https://github.com/rust-lang/crates.io-index"
172
+ checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
173
+ dependencies = [
174
+ "aho-corasick",
175
+ "memchr",
176
+ "regex-syntax",
177
+ ]
178
+
179
+ [[package]]
180
+ name = "regex-syntax"
181
+ version = "0.8.10"
182
+ source = "registry+https://github.com/rust-lang/crates.io-index"
183
+ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
184
+
185
+ [[package]]
186
+ name = "semver"
187
+ version = "1.0.27"
188
+ source = "registry+https://github.com/rust-lang/crates.io-index"
189
+ checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
190
+
191
+ [[package]]
192
+ name = "serde"
193
+ version = "1.0.228"
194
+ source = "registry+https://github.com/rust-lang/crates.io-index"
195
+ checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
196
+ dependencies = [
197
+ "serde_core",
198
+ "serde_derive",
199
+ ]
200
+
201
+ [[package]]
202
+ name = "serde_core"
203
+ version = "1.0.228"
204
+ source = "registry+https://github.com/rust-lang/crates.io-index"
205
+ checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
206
+ dependencies = [
207
+ "serde_derive",
208
+ ]
209
+
210
+ [[package]]
211
+ name = "serde_derive"
212
+ version = "1.0.228"
213
+ source = "registry+https://github.com/rust-lang/crates.io-index"
214
+ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
215
+ dependencies = [
216
+ "proc-macro2",
217
+ "quote",
218
+ "syn",
219
+ ]
220
+
221
+ [[package]]
222
+ name = "serde_json"
223
+ version = "1.0.149"
224
+ source = "registry+https://github.com/rust-lang/crates.io-index"
225
+ checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
226
+ dependencies = [
227
+ "itoa",
228
+ "memchr",
229
+ "serde",
230
+ "serde_core",
231
+ "zmij",
232
+ ]
233
+
234
+ [[package]]
235
+ name = "syn"
236
+ version = "2.0.117"
237
+ source = "registry+https://github.com/rust-lang/crates.io-index"
238
+ checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
239
+ dependencies = [
240
+ "proc-macro2",
241
+ "quote",
242
+ "unicode-ident",
243
+ ]
244
+
245
+ [[package]]
246
+ name = "unicode-ident"
247
+ version = "1.0.24"
248
+ source = "registry+https://github.com/rust-lang/crates.io-index"
249
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
250
+
251
+ [[package]]
252
+ name = "unicode-segmentation"
253
+ version = "1.13.2"
254
+ source = "registry+https://github.com/rust-lang/crates.io-index"
255
+ checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
256
+
257
+ [[package]]
258
+ name = "v3-math-native"
259
+ version = "0.1.0"
260
+ dependencies = [
261
+ "ethnum",
262
+ "napi",
263
+ "napi-build",
264
+ "napi-derive",
265
+ "serde",
266
+ "serde_json",
267
+ ]
268
+
269
+ [[package]]
270
+ name = "windows-link"
271
+ version = "0.2.1"
272
+ source = "registry+https://github.com/rust-lang/crates.io-index"
273
+ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
274
+
275
+ [[package]]
276
+ name = "zmij"
277
+ version = "1.0.21"
278
+ source = "registry+https://github.com/rust-lang/crates.io-index"
279
+ checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
@@ -0,0 +1,21 @@
1
+ [package]
2
+ name = "v3-math-native"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+
6
+ [lib]
7
+ crate-type = ["cdylib"]
8
+
9
+ [dependencies]
10
+ napi = { version = "2", features = ["napi6", "serde-json"] }
11
+ napi-derive = "2"
12
+ ethnum = "1"
13
+ serde = { version = "1", features = ["derive"] }
14
+ serde_json = "1"
15
+
16
+ [build-dependencies]
17
+ napi-build = "2"
18
+
19
+ [profile.release]
20
+ lto = true
21
+ strip = "symbols"
@@ -0,0 +1,5 @@
1
+ extern crate napi_build;
2
+
3
+ fn main() {
4
+ napi_build::setup();
5
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@paraswap/v3-math-native",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "@paraswap/v3-math-native",
9
+ "version": "0.1.0",
10
+ "devDependencies": {
11
+ "@napi-rs/cli": "^2.18.0"
12
+ }
13
+ },
14
+ "node_modules/@napi-rs/cli": {
15
+ "version": "2.18.4",
16
+ "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.18.4.tgz",
17
+ "integrity": "sha512-SgJeA4df9DE2iAEpr3M2H0OKl/yjtg1BnRI5/JyowS71tUWhrfSu2LT0V3vlHET+g1hBVlrO60PmEXwUEKp8Mg==",
18
+ "dev": true,
19
+ "license": "MIT",
20
+ "bin": {
21
+ "napi": "scripts/index.js"
22
+ },
23
+ "engines": {
24
+ "node": ">= 10"
25
+ },
26
+ "funding": {
27
+ "type": "github",
28
+ "url": "https://github.com/sponsors/Brooooooklyn"
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@paraswap/v3-math-native",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "main": "index.js",
6
+ "types": "index.d.ts",
7
+ "napi": {
8
+ "name": "v3-math-native",
9
+ "triples": {
10
+ "defaults": true
11
+ }
12
+ },
13
+ "scripts": {
14
+ "build": "napi build --platform --release",
15
+ "build:debug": "napi build --platform"
16
+ },
17
+ "devDependencies": {
18
+ "@napi-rs/cli": "^2.18.0"
19
+ }
20
+ }
@@ -0,0 +1,40 @@
1
+ /// Configures math variant differences between Uniswap V3 forks.
2
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
3
+ pub enum MathVariant {
4
+ /// Standard Uniswap V3: feeProtocol is 4-bit (% 16 / >> 4)
5
+ UniswapV3,
6
+ /// PancakeSwap V3: feeProtocol is 16-bit (% 65536 / >> 16), protocol_fee = feeAmount * fp / 10000
7
+ PancakeSwapV3,
8
+ /// Solidly V3: No oracle, fee from slot0.fee directly
9
+ SolidlyV3,
10
+ }
11
+
12
+ impl MathVariant {
13
+ pub fn from_str(s: &str) -> Self {
14
+ match s {
15
+ "pancakeswap_v3" => MathVariant::PancakeSwapV3,
16
+ "solidly_v3" => MathVariant::SolidlyV3,
17
+ _ => MathVariant::UniswapV3,
18
+ }
19
+ }
20
+
21
+ /// Extract the fee protocol value for the given swap direction.
22
+ pub fn fee_protocol(&self, fee_protocol_raw: ethnum::U256, zero_for_one: bool) -> ethnum::U256 {
23
+ match self {
24
+ MathVariant::UniswapV3 | MathVariant::SolidlyV3 => {
25
+ if zero_for_one {
26
+ fee_protocol_raw % ethnum::U256::from(16u32)
27
+ } else {
28
+ fee_protocol_raw >> 4
29
+ }
30
+ }
31
+ MathVariant::PancakeSwapV3 => {
32
+ if zero_for_one {
33
+ fee_protocol_raw % ethnum::U256::from(65536u32)
34
+ } else {
35
+ fee_protocol_raw >> 16
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,216 @@
1
+ pub mod config;
2
+ pub mod math;
3
+ pub mod pool_state;
4
+ pub mod query_outputs;
5
+
6
+ use ethnum::{I256, U256};
7
+ use napi::bindgen_prelude::*;
8
+ use napi_derive::napi;
9
+ use std::collections::HashMap;
10
+
11
+ use config::MathVariant;
12
+ use math::oracle::OracleObservation;
13
+ use math::tick::TickInfo;
14
+ use pool_state::PoolState;
15
+
16
+ // ---- NAPI type definitions for JS interop ----
17
+
18
+ #[napi(object)]
19
+ pub struct JsTickEntry {
20
+ pub key: i32,
21
+ pub liquidity_gross: BigInt,
22
+ pub liquidity_net: BigInt,
23
+ }
24
+
25
+ #[napi(object)]
26
+ pub struct JsBitmapEntry {
27
+ pub key: i32,
28
+ pub value: BigInt,
29
+ }
30
+
31
+ #[napi(object)]
32
+ pub struct JsObservationEntry {
33
+ pub key: i32,
34
+ pub block_timestamp: BigInt,
35
+ pub tick_cumulative: BigInt,
36
+ pub seconds_per_liquidity_cumulative_x128: BigInt,
37
+ pub initialized: bool,
38
+ }
39
+
40
+ #[napi(object)]
41
+ pub struct JsPoolStateInit {
42
+ pub variant: String,
43
+ pub block_timestamp: BigInt,
44
+ pub tick_spacing: BigInt,
45
+ pub fee: BigInt,
46
+ pub sqrt_price_x96: BigInt,
47
+ pub tick: BigInt,
48
+ pub observation_index: i32,
49
+ pub observation_cardinality: i32,
50
+ pub observation_cardinality_next: i32,
51
+ pub fee_protocol: BigInt,
52
+ pub liquidity: BigInt,
53
+ pub max_liquidity_per_tick: BigInt,
54
+ pub start_tick_bitmap: BigInt,
55
+ pub lowest_known_tick: BigInt,
56
+ pub highest_known_tick: BigInt,
57
+ pub tick_bitmap: Vec<JsBitmapEntry>,
58
+ pub ticks: Vec<JsTickEntry>,
59
+ pub observations: Vec<JsObservationEntry>,
60
+ }
61
+
62
+ #[napi(object)]
63
+ pub struct JsOutputResult {
64
+ pub outputs: Vec<BigInt>,
65
+ pub tick_counts: Vec<i32>,
66
+ }
67
+
68
+ // ---- Conversion helpers ----
69
+ // napi::bindgen_prelude::BigInt stores { sign_bit: bool, words: Vec<u64> }
70
+ // words are little-endian u64 limbs.
71
+
72
+ fn bigint_to_u256(bi: &BigInt) -> U256 {
73
+ let words = &bi.words;
74
+ let low = words.first().copied().unwrap_or(0) as u128
75
+ | (words.get(1).copied().unwrap_or(0) as u128) << 64;
76
+ let high = words.get(2).copied().unwrap_or(0) as u128
77
+ | (words.get(3).copied().unwrap_or(0) as u128) << 64;
78
+ U256::from_words(high, low)
79
+ }
80
+
81
+ fn bigint_to_i256(bi: &BigInt) -> I256 {
82
+ let u = bigint_to_u256(bi);
83
+ let val = u.as_i256();
84
+ if bi.sign_bit {
85
+ -val
86
+ } else {
87
+ val
88
+ }
89
+ }
90
+
91
+ fn u256_to_bigint(val: U256) -> BigInt {
92
+ let (high, low) = val.into_words();
93
+ let mut words = vec![
94
+ low as u64,
95
+ (low >> 64) as u64,
96
+ high as u64,
97
+ (high >> 64) as u64,
98
+ ];
99
+ // Trim trailing zeros for cleaner representation
100
+ while words.len() > 1 && *words.last().unwrap() == 0 {
101
+ words.pop();
102
+ }
103
+ BigInt {
104
+ sign_bit: false,
105
+ words,
106
+ }
107
+ }
108
+
109
+ // ---- The main NAPI class ----
110
+
111
+ #[napi]
112
+ pub struct RustPoolHandle {
113
+ state: PoolState,
114
+ }
115
+
116
+ #[napi]
117
+ impl RustPoolHandle {
118
+ /// Create a new Rust-owned pool state from JS data.
119
+ #[napi(factory)]
120
+ pub fn create(init: JsPoolStateInit) -> Result<Self> {
121
+ let variant = MathVariant::from_str(&init.variant);
122
+
123
+ let mut tick_bitmap = HashMap::with_capacity(init.tick_bitmap.len());
124
+ for entry in &init.tick_bitmap {
125
+ tick_bitmap.insert(entry.key as i16, bigint_to_u256(&entry.value));
126
+ }
127
+
128
+ let mut ticks = HashMap::with_capacity(init.ticks.len());
129
+ for entry in &init.ticks {
130
+ ticks.insert(
131
+ entry.key,
132
+ TickInfo {
133
+ liquidity_gross: bigint_to_u256(&entry.liquidity_gross),
134
+ liquidity_net: bigint_to_i256(&entry.liquidity_net),
135
+ initialized: true,
136
+ },
137
+ );
138
+ }
139
+
140
+ let mut observations = HashMap::with_capacity(init.observations.len());
141
+ for entry in &init.observations {
142
+ observations.insert(
143
+ entry.key as u16,
144
+ OracleObservation {
145
+ block_timestamp: bigint_to_u256(&entry.block_timestamp),
146
+ tick_cumulative: bigint_to_i256(&entry.tick_cumulative),
147
+ seconds_per_liquidity_cumulative_x128: bigint_to_u256(
148
+ &entry.seconds_per_liquidity_cumulative_x128,
149
+ ),
150
+ initialized: entry.initialized,
151
+ },
152
+ );
153
+ }
154
+
155
+ Ok(Self {
156
+ state: PoolState {
157
+ block_timestamp: bigint_to_u256(&init.block_timestamp),
158
+ tick_spacing: bigint_to_i256(&init.tick_spacing),
159
+ fee: bigint_to_u256(&init.fee),
160
+ sqrt_price_x96: bigint_to_u256(&init.sqrt_price_x96),
161
+ tick: bigint_to_i256(&init.tick),
162
+ observation_index: init.observation_index as u16,
163
+ observation_cardinality: init.observation_cardinality as u16,
164
+ observation_cardinality_next: init.observation_cardinality_next as u16,
165
+ fee_protocol: bigint_to_u256(&init.fee_protocol),
166
+ liquidity: bigint_to_u256(&init.liquidity),
167
+ max_liquidity_per_tick: bigint_to_u256(&init.max_liquidity_per_tick),
168
+ tick_bitmap,
169
+ ticks,
170
+ observations,
171
+ start_tick_bitmap: bigint_to_i256(&init.start_tick_bitmap),
172
+ lowest_known_tick: bigint_to_i256(&init.lowest_known_tick),
173
+ highest_known_tick: bigint_to_i256(&init.highest_known_tick),
174
+ variant,
175
+ },
176
+ })
177
+ }
178
+
179
+ /// HOT PATH: Price N amounts in one call.
180
+ /// side: 0 = SELL, 1 = BUY
181
+ #[napi]
182
+ pub fn query_outputs(
183
+ &self,
184
+ amounts: Vec<BigInt>,
185
+ zero_for_one: bool,
186
+ side: u8,
187
+ ) -> Result<JsOutputResult> {
188
+ let amounts_u256: Vec<U256> = amounts.iter().map(|a| bigint_to_u256(a)).collect();
189
+
190
+ let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
191
+ query_outputs::query_outputs(&self.state, &amounts_u256, zero_for_one, side)
192
+ }));
193
+
194
+ match result {
195
+ Ok(output) => {
196
+ let outputs: Vec<BigInt> =
197
+ output.outputs.iter().map(|v| u256_to_bigint(*v)).collect();
198
+
199
+ Ok(JsOutputResult {
200
+ outputs,
201
+ tick_counts: output.tick_counts,
202
+ })
203
+ }
204
+ Err(panic_info) => {
205
+ let msg = if let Some(s) = panic_info.downcast_ref::<&str>() {
206
+ s.to_string()
207
+ } else if let Some(s) = panic_info.downcast_ref::<String>() {
208
+ s.clone()
209
+ } else {
210
+ "Unknown panic in query_outputs".to_string()
211
+ };
212
+ Err(Error::new(Status::GenericFailure, msg))
213
+ }
214
+ }
215
+ }
216
+ }