@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.
- package/build/dex/balancer-v2/balancer-v2.d.ts +0 -1
- package/build/dex/balancer-v2/balancer-v2.js +0 -4
- package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
- package/build/dex/bebop/bebop.d.ts +0 -1
- package/build/dex/bebop/bebop.js +0 -8
- package/build/dex/bebop/bebop.js.map +1 -1
- package/build/dex/cables/cables.d.ts +0 -1
- package/build/dex/cables/cables.js +0 -3
- package/build/dex/cables/cables.js.map +1 -1
- package/build/dex/curve-v1/curve-v1.d.ts +0 -1
- package/build/dex/curve-v1/curve-v1.js +0 -4
- package/build/dex/curve-v1/curve-v1.js.map +1 -1
- package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +0 -1
- package/build/dex/curve-v1-factory/curve-v1-factory.js +0 -4
- package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
- package/build/dex/curve-v2/curve-v2.d.ts +0 -1
- package/build/dex/curve-v2/curve-v2.js +0 -4
- package/build/dex/curve-v2/curve-v2.js.map +1 -1
- package/build/dex/hashflow/hashflow.d.ts +0 -1
- package/build/dex/hashflow/hashflow.js +0 -5
- package/build/dex/hashflow/hashflow.js.map +1 -1
- package/build/dex/idex.d.ts +1 -2
- package/build/dex/lite-psm/lite-psm.d.ts +0 -1
- package/build/dex/lite-psm/lite-psm.js +0 -3
- package/build/dex/lite-psm/lite-psm.js.map +1 -1
- package/build/dex/native/native.d.ts +0 -1
- package/build/dex/native/native.js +0 -6
- package/build/dex/native/native.js.map +1 -1
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.d.ts +0 -1
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js +0 -5
- package/build/dex/paraswap-limit-orders/paraswap-limit-orders.js.map +1 -1
- package/build/dex/solidly-v3/solidly-v3.d.ts +0 -1
- package/build/dex/solidly-v3/solidly-v3.js +0 -4
- package/build/dex/solidly-v3/solidly-v3.js.map +1 -1
- package/build/dex/uniswap-v3/contract-math/native-bridge.d.ts +15 -0
- package/build/dex/uniswap-v3/contract-math/native-bridge.js +71 -0
- package/build/dex/uniswap-v3/contract-math/native-bridge.js.map +1 -0
- package/build/dex/uniswap-v3/scripts/measure-calc-time.js +222 -110
- package/build/dex/uniswap-v3/scripts/measure-calc-time.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +3 -0
- package/build/dex/uniswap-v3/uniswap-v3-pool.js +6 -0
- package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.d.ts +8 -4
- package/build/dex/uniswap-v3/uniswap-v3.js +8 -9
- package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
- package/build/dex/uniswap-v4/api-go/compare-pricing.d.ts +1 -0
- package/build/dex/uniswap-v4/api-go/compare-pricing.js +187 -0
- package/build/dex/uniswap-v4/api-go/compare-pricing.js.map +1 -0
- package/build/dex/uniswap-v4/api-go/compare-states.d.ts +1 -0
- package/build/dex/uniswap-v4/api-go/compare-states.js +149 -0
- package/build/dex/uniswap-v4/api-go/compare-states.js.map +1 -0
- package/build/dex/uniswap-v4/api-go/fetch-pool-key.d.ts +0 -0
- package/build/dex/uniswap-v4/api-go/fetch-pool-key.js +140 -0
- package/build/dex/uniswap-v4/api-go/fetch-pool-key.js.map +1 -0
- package/build/implementations/local-paraswap-sdk.js +9 -4
- package/build/implementations/local-paraswap-sdk.js.map +1 -1
- package/build/pricing-helper.d.ts +1 -1
- package/build/pricing-helper.js +2 -2
- package/build/pricing-helper.js.map +1 -1
- package/build/tenderly-simulation.d.ts +221 -0
- package/build/tenderly-simulation.js +517 -0
- package/build/tenderly-simulation.js.map +1 -0
- package/native/Cargo.lock +279 -0
- package/native/Cargo.toml +21 -0
- package/native/build.rs +5 -0
- package/native/package-lock.json +32 -0
- package/native/package.json +20 -0
- package/native/src/config.rs +40 -0
- package/native/src/lib.rs +216 -0
- package/native/src/math/bit_math.rs +177 -0
- package/native/src/math/full_math.rs +217 -0
- package/native/src/math/liquidity_math.rs +72 -0
- package/native/src/math/mod.rs +10 -0
- package/native/src/math/oracle.rs +493 -0
- package/native/src/math/sqrt_price_math.rs +272 -0
- package/native/src/math/swap_math.rs +306 -0
- package/native/src/math/tick.rs +239 -0
- package/native/src/math/tick_bitmap.rs +292 -0
- package/native/src/math/tick_math.rs +321 -0
- package/native/src/math/unsafe_math.rs +67 -0
- package/native/src/pool_state.rs +36 -0
- package/native/src/query_outputs.rs +379 -0
- package/package.json +2 -1
- package/build/abi/BProtocol.json +0 -1155
- package/build/abi/Jarvis.json +0 -1172
- package/build/abi/MStableAsset.json +0 -1545
- package/build/abi/OneInchLp.json +0 -1304
- package/build/abi/Onebit.json +0 -736
- package/build/abi/Shell.json +0 -1294
- package/build/abi/TraderJoeV2Router.json +0 -50
- package/build/abi/idle-dao/idle-cdo-factory.json +0 -38
- package/build/abi/idle-dao/idle-cdo.json +0 -1245
- package/build/abi/infusion/InfusionFactory.json +0 -147
- package/build/abi/infusion/InfusionPair.json +0 -658
- package/build/abi/infusion/InfusionRouter.json +0 -442
- package/build/abi/maker-psm/pot.json +0 -322
- package/build/abi/maker-psm/psm.json +0 -243
- package/build/abi/maker-psm/vat.json +0 -363
- package/build/abi/nomiswap-v2/nomiswap-v2-pool.json +0 -773
- package/build/abi/quick-perps/fast-price-events.json +0 -70
- package/build/abi/quick-perps/fast-price-feed.json +0 -741
- package/build/abi/quick-perps/reader.json +0 -313
- package/build/abi/quick-perps/vault-price-feed.json +0 -323
- package/build/abi/quick-perps/vault.json +0 -1953
- package/build/abi/uniswap-v2/excalibur-pool.json +0 -881
- package/build/abi/uniswap-v2/mdex-factory.json +0 -759
- package/build/abi/wUSDM.json +0 -757
- package/build/abi/zrx.v2.json +0 -1967
- package/build/abi/zrx.v3.json +0 -3454
- package/build/abi/zrx.v4.json +0 -2193
- package/build/dex/OneInchLp.d.ts +0 -24
- package/build/dex/OneInchLp.js +0 -43
- package/build/dex/OneInchLp.js.map +0 -1
- package/build/dex/bProtocol/bProtocol.d.ts +0 -15
- package/build/dex/bProtocol/bProtocol.js +0 -56
- package/build/dex/bProtocol/bProtocol.js.map +0 -1
- package/build/dex/bProtocol/types.d.ts +0 -11
- package/build/dex/bProtocol/types.js +0 -8
- package/build/dex/bProtocol/types.js.map +0 -1
- package/build/dex/ekubo/pools/base-pool.d.ts +0 -47
- package/build/dex/ekubo/pools/base-pool.js +0 -184
- package/build/dex/ekubo/pools/base-pool.js.map +0 -1
- package/build/dex/ekubo/pools/iface.d.ts +0 -46
- package/build/dex/ekubo/pools/iface.js +0 -75
- package/build/dex/ekubo/pools/iface.js.map +0 -1
- package/build/dex/ekubo/pools/math/price.d.ts +0 -7
- package/build/dex/ekubo/pools/math/price.js +0 -112
- package/build/dex/ekubo/pools/math/price.js.map +0 -1
- package/build/dex/ekubo/pools/oracle-pool.d.ts +0 -10
- package/build/dex/ekubo/pools/oracle-pool.js +0 -19
- package/build/dex/ekubo/pools/oracle-pool.js.map +0 -1
- package/build/dex/ekubo/pools/pool-utils.d.ts +0 -44
- package/build/dex/ekubo/pools/pool-utils.js +0 -240
- package/build/dex/ekubo/pools/pool-utils.js.map +0 -1
- package/build/dex/idle-dao/config.d.ts +0 -5
- package/build/dex/idle-dao/config.js +0 -24
- package/build/dex/idle-dao/config.js.map +0 -1
- package/build/dex/idle-dao/idle-dao.d.ts +0 -42
- package/build/dex/idle-dao/idle-dao.js +0 -279
- package/build/dex/idle-dao/idle-dao.js.map +0 -1
- package/build/dex/idle-dao/token_list.d.ts +0 -4
- package/build/dex/idle-dao/token_list.js +0 -289
- package/build/dex/idle-dao/token_list.js.map +0 -1
- package/build/dex/idle-dao/tokens.d.ts +0 -9
- package/build/dex/idle-dao/tokens.js +0 -68
- package/build/dex/idle-dao/tokens.js.map +0 -1
- package/build/dex/idle-dao/types.d.ts +0 -35
- package/build/dex/idle-dao/types.js +0 -11
- package/build/dex/idle-dao/types.js.map +0 -1
- package/build/dex/idle-dao/utils.d.ts +0 -8
- package/build/dex/idle-dao/utils.js +0 -149
- package/build/dex/idle-dao/utils.js.map +0 -1
- package/build/dex/infusion/config.d.ts +0 -3
- package/build/dex/infusion/config.js +0 -20
- package/build/dex/infusion/config.js.map +0 -1
- package/build/dex/infusion/infusion-stable-pool.d.ts +0 -4
- package/build/dex/infusion/infusion-stable-pool.js +0 -74
- package/build/dex/infusion/infusion-stable-pool.js.map +0 -1
- package/build/dex/infusion/infusion.d.ts +0 -51
- package/build/dex/infusion/infusion.js +0 -500
- package/build/dex/infusion/infusion.js.map +0 -1
- package/build/dex/infusion/types.d.ts +0 -45
- package/build/dex/infusion/types.js +0 -3
- package/build/dex/infusion/types.js.map +0 -1
- package/build/dex/infusion/utils/isStablePair.d.ts +0 -2
- package/build/dex/infusion/utils/isStablePair.js +0 -18
- package/build/dex/infusion/utils/isStablePair.js.map +0 -1
- package/build/dex/jarvis.d.ts +0 -56
- package/build/dex/jarvis.js +0 -163
- package/build/dex/jarvis.js.map +0 -1
- package/build/dex/mStable.d.ts +0 -44
- package/build/dex/mStable.js +0 -75
- package/build/dex/mStable.js.map +0 -1
- package/build/dex/maker-psm/config.d.ts +0 -11
- package/build/dex/maker-psm/config.js +0 -53
- package/build/dex/maker-psm/config.js.map +0 -1
- package/build/dex/maker-psm/maker-psm.d.ts +0 -103
- package/build/dex/maker-psm/maker-psm.js +0 -493
- package/build/dex/maker-psm/maker-psm.js.map +0 -1
- package/build/dex/maker-psm/types.d.ts +0 -39
- package/build/dex/maker-psm/types.js +0 -3
- package/build/dex/maker-psm/types.js.map +0 -1
- package/build/dex/onebit/onebit.d.ts +0 -16
- package/build/dex/onebit/onebit.js +0 -61
- package/build/dex/onebit/onebit.js.map +0 -1
- package/build/dex/onebit/types.d.ts +0 -14
- package/build/dex/onebit/types.js +0 -8
- package/build/dex/onebit/types.js.map +0 -1
- package/build/dex/quick-perps/config.d.ts +0 -11
- package/build/dex/quick-perps/config.js +0 -27
- package/build/dex/quick-perps/config.js.map +0 -1
- package/build/dex/quick-perps/fast-price-feed.d.ts +0 -26
- package/build/dex/quick-perps/fast-price-feed.js +0 -184
- package/build/dex/quick-perps/fast-price-feed.js.map +0 -1
- package/build/dex/quick-perps/pool.d.ts +0 -21
- package/build/dex/quick-perps/pool.js +0 -229
- package/build/dex/quick-perps/pool.js.map +0 -1
- package/build/dex/quick-perps/quick-perps.d.ts +0 -53
- package/build/dex/quick-perps/quick-perps.js +0 -247
- package/build/dex/quick-perps/quick-perps.js.map +0 -1
- package/build/dex/quick-perps/types.d.ts +0 -98
- package/build/dex/quick-perps/types.js +0 -3
- package/build/dex/quick-perps/types.js.map +0 -1
- package/build/dex/quick-perps/usdq.d.ts +0 -15
- package/build/dex/quick-perps/usdq.js +0 -62
- package/build/dex/quick-perps/usdq.js.map +0 -1
- package/build/dex/quick-perps/vault-price-feed.d.ts +0 -43
- package/build/dex/quick-perps/vault-price-feed.js +0 -203
- package/build/dex/quick-perps/vault-price-feed.js.map +0 -1
- package/build/dex/quick-perps/vault-utils.d.ts +0 -8
- package/build/dex/quick-perps/vault-utils.js +0 -42
- package/build/dex/quick-perps/vault-utils.js.map +0 -1
- package/build/dex/quick-perps/vault.d.ts +0 -46
- package/build/dex/quick-perps/vault.js +0 -182
- package/build/dex/quick-perps/vault.js.map +0 -1
- package/build/dex/se-vlr/config.d.ts +0 -3
- package/build/dex/se-vlr/config.js +0 -24
- package/build/dex/se-vlr/config.js.map +0 -1
- package/build/dex/se-vlr/se-vlr-pool.d.ts +0 -39
- package/build/dex/se-vlr/se-vlr-pool.js +0 -70
- package/build/dex/se-vlr/se-vlr-pool.js.map +0 -1
- package/build/dex/se-vlr/se-vlr.d.ts +0 -35
- package/build/dex/se-vlr/se-vlr.js +0 -131
- package/build/dex/se-vlr/se-vlr.js.map +0 -1
- package/build/dex/se-vlr/types.d.ts +0 -6
- package/build/dex/se-vlr/types.js +0 -3
- package/build/dex/se-vlr/types.js.map +0 -1
- package/build/dex/shell.d.ts +0 -25
- package/build/dex/shell.js +0 -41
- package/build/dex/shell.js.map +0 -1
- package/build/dex/solidly/forks-override/aerodrome.d.ts +0 -14
- package/build/dex/solidly/forks-override/aerodrome.js +0 -46
- package/build/dex/solidly/forks-override/aerodrome.js.map +0 -1
- package/build/dex/solidly/forks-override/chronos.d.ts +0 -23
- package/build/dex/solidly/forks-override/chronos.js +0 -141
- package/build/dex/solidly/forks-override/chronos.js.map +0 -1
- package/build/dex/solidly/forks-override/usdfi.d.ts +0 -8
- package/build/dex/solidly/forks-override/usdfi.js +0 -15
- package/build/dex/solidly/forks-override/usdfi.js.map +0 -1
- package/build/dex/solidly/forks-override/velocimeter.d.ts +0 -23
- package/build/dex/solidly/forks-override/velocimeter.js +0 -77
- package/build/dex/solidly/forks-override/velocimeter.js.map +0 -1
- package/build/dex/trader-joe-v2.d.ts +0 -40
- package/build/dex/trader-joe-v2.js +0 -74
- package/build/dex/trader-joe-v2.js.map +0 -1
- package/build/dex/uniswap-v2/dfyn.d.ts +0 -19
- package/build/dex/uniswap-v2/dfyn.js +0 -61
- package/build/dex/uniswap-v2/dfyn.js.map +0 -1
- package/build/dex/uniswap-v2/excalibur.d.ts +0 -24
- package/build/dex/uniswap-v2/excalibur.js +0 -47
- package/build/dex/uniswap-v2/excalibur.js.map +0 -1
- package/build/dex/uniswap-v2/mdex.d.ts +0 -24
- package/build/dex/uniswap-v2/mdex.js +0 -50
- package/build/dex/uniswap-v2/mdex.js.map +0 -1
- package/build/dex/uniswap-v2/nomiswap-v2.d.ts +0 -24
- package/build/dex/uniswap-v2/nomiswap-v2.js +0 -57
- package/build/dex/uniswap-v2/nomiswap-v2.js.map +0 -1
- package/build/dex/uniswap-v3/uniswap-v3-new.d.ts +0 -94
- package/build/dex/uniswap-v3/uniswap-v3-new.js +0 -923
- package/build/dex/uniswap-v3/uniswap-v3-new.js.map +0 -1
- package/build/dex/uniswap-v4/contract-math/Position.d.ts +0 -3
- package/build/dex/uniswap-v4/contract-math/Position.js +0 -10
- package/build/dex/uniswap-v4/contract-math/Position.js.map +0 -1
- package/build/dex/usual-bond/config.d.ts +0 -3
- package/build/dex/usual-bond/config.js +0 -13
- package/build/dex/usual-bond/config.js.map +0 -1
- package/build/dex/usual-bond/types.d.ts +0 -7
- package/build/dex/usual-bond/types.js +0 -3
- package/build/dex/usual-bond/types.js.map +0 -1
- package/build/dex/usual-bond/usual-bond.d.ts +0 -35
- package/build/dex/usual-bond/usual-bond.js +0 -176
- package/build/dex/usual-bond/usual-bond.js.map +0 -1
- package/build/dex/wusdm/config.d.ts +0 -3
- package/build/dex/wusdm/config.js +0 -43
- package/build/dex/wusdm/config.js.map +0 -1
- package/build/dex/wusdm/constants.d.ts +0 -2
- package/build/dex/wusdm/constants.js +0 -6
- package/build/dex/wusdm/constants.js.map +0 -1
- package/build/dex/wusdm/types.d.ts +0 -18
- package/build/dex/wusdm/types.js +0 -11
- package/build/dex/wusdm/types.js.map +0 -1
- package/build/dex/wusdm/wusdm-pool.d.ts +0 -21
- package/build/dex/wusdm/wusdm-pool.js +0 -74
- package/build/dex/wusdm/wusdm-pool.js.map +0 -1
- package/build/dex/wusdm/wusdm.d.ts +0 -46
- package/build/dex/wusdm/wusdm.js +0 -243
- package/build/dex/wusdm/wusdm.js.map +0 -1
- package/build/dex/zerox/config.d.ts +0 -2
- package/build/dex/zerox/config.js +0 -33
- package/build/dex/zerox/config.js.map +0 -1
- package/build/dex/zerox/index.d.ts +0 -22
- package/build/dex/zerox/index.js +0 -225
- package/build/dex/zerox/index.js.map +0 -1
- package/build/dex/zerox/order.d.ts +0 -88
- package/build/dex/zerox/order.js +0 -53
- package/build/dex/zerox/order.js.map +0 -1
- package/build/dex/zerox/types.d.ts +0 -73
- package/build/dex/zerox/types.js +0 -21
- 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"
|
package/native/build.rs
ADDED
|
@@ -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
|
+
}
|