@paraswap/dex-lib 4.7.23 → 4.7.24-inactive-dexs-cleanup.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/build/abi/ekubo-v3/core.json +797 -0
  2. package/build/abi/ekubo-v3/mev-capture-router.json +936 -0
  3. package/build/abi/ekubo-v3/quote-data-fetcher.json +161 -0
  4. package/build/abi/ekubo-v3/twamm-data-fetcher.json +216 -0
  5. package/build/abi/ekubo-v3/twamm.json +613 -0
  6. package/build/dex/algebra/config.js +0 -30
  7. package/build/dex/algebra/config.js.map +1 -1
  8. package/build/dex/algebra-integral/config.js +0 -7
  9. package/build/dex/algebra-integral/config.js.map +1 -1
  10. package/build/dex/angle-staked-stable/config.js +0 -32
  11. package/build/dex/angle-staked-stable/config.js.map +1 -1
  12. package/build/dex/dodo-v1/config.js +0 -10
  13. package/build/dex/dodo-v1/config.js.map +1 -1
  14. package/build/dex/ekubo-v3/config.d.ts +13 -0
  15. package/build/dex/ekubo-v3/config.js +23 -0
  16. package/build/dex/ekubo-v3/config.js.map +1 -0
  17. package/build/dex/ekubo-v3/ekubo-v3-pool-manager.d.ts +34 -0
  18. package/build/dex/ekubo-v3/ekubo-v3-pool-manager.js +421 -0
  19. package/build/dex/ekubo-v3/ekubo-v3-pool-manager.js.map +1 -0
  20. package/build/dex/ekubo-v3/ekubo-v3.d.ts +38 -0
  21. package/build/dex/ekubo-v3/ekubo-v3.js +274 -0
  22. package/build/dex/ekubo-v3/ekubo-v3.js.map +1 -0
  23. package/build/dex/ekubo-v3/pools/base.d.ts +42 -0
  24. package/build/dex/ekubo-v3/pools/base.js +307 -0
  25. package/build/dex/ekubo-v3/pools/base.js.map +1 -0
  26. package/build/dex/ekubo-v3/pools/full-range.d.ts +25 -0
  27. package/build/dex/ekubo-v3/pools/full-range.js +105 -0
  28. package/build/dex/ekubo-v3/pools/full-range.js.map +1 -0
  29. package/build/dex/ekubo-v3/pools/math/constants.d.ts +12 -0
  30. package/build/dex/ekubo-v3/pools/math/constants.js +16 -0
  31. package/build/dex/ekubo-v3/pools/math/constants.js.map +1 -0
  32. package/build/dex/ekubo-v3/pools/math/delta.d.ts +2 -0
  33. package/build/dex/ekubo-v3/pools/math/delta.js +51 -0
  34. package/build/dex/ekubo-v3/pools/math/delta.js.map +1 -0
  35. package/build/dex/ekubo-v3/pools/math/sqrt-ratio.d.ts +8 -0
  36. package/build/dex/ekubo-v3/pools/math/sqrt-ratio.js +113 -0
  37. package/build/dex/ekubo-v3/pools/math/sqrt-ratio.js.map +1 -0
  38. package/build/dex/ekubo-v3/pools/math/swap.d.ts +18 -0
  39. package/build/dex/ekubo-v3/pools/math/swap.js +128 -0
  40. package/build/dex/ekubo-v3/pools/math/swap.js.map +1 -0
  41. package/build/dex/ekubo-v3/pools/math/tick.d.ts +8 -0
  42. package/build/dex/ekubo-v3/pools/math/tick.js +129 -0
  43. package/build/dex/ekubo-v3/pools/math/tick.js.map +1 -0
  44. package/build/dex/ekubo-v3/pools/math/twamm/exp2.d.ts +1 -0
  45. package/build/dex/ekubo-v3/pools/math/twamm/exp2.js +86 -0
  46. package/build/dex/ekubo-v3/pools/math/twamm/exp2.js.map +1 -0
  47. package/build/dex/ekubo-v3/pools/math/twamm/sqrt-ratio.d.ts +1 -0
  48. package/build/dex/ekubo-v3/pools/math/twamm/sqrt-ratio.js +56 -0
  49. package/build/dex/ekubo-v3/pools/math/twamm/sqrt-ratio.js.map +1 -0
  50. package/build/dex/ekubo-v3/pools/mev-capture.d.ts +8 -0
  51. package/build/dex/ekubo-v3/pools/mev-capture.js +42 -0
  52. package/build/dex/ekubo-v3/pools/mev-capture.js.map +1 -0
  53. package/build/dex/ekubo-v3/pools/oracle.d.ts +8 -0
  54. package/build/dex/ekubo-v3/pools/oracle.js +18 -0
  55. package/build/dex/ekubo-v3/pools/oracle.js.map +1 -0
  56. package/build/dex/ekubo-v3/pools/pool.d.ts +56 -0
  57. package/build/dex/ekubo-v3/pools/pool.js +88 -0
  58. package/build/dex/ekubo-v3/pools/pool.js.map +1 -0
  59. package/build/dex/ekubo-v3/pools/stableswap.d.ts +22 -0
  60. package/build/dex/ekubo-v3/pools/stableswap.js +123 -0
  61. package/build/dex/ekubo-v3/pools/stableswap.js.map +1 -0
  62. package/build/dex/ekubo-v3/pools/twamm.d.ts +40 -0
  63. package/build/dex/ekubo-v3/pools/twamm.js +265 -0
  64. package/build/dex/ekubo-v3/pools/twamm.js.map +1 -0
  65. package/build/dex/ekubo-v3/pools/utils.d.ts +62 -0
  66. package/build/dex/ekubo-v3/pools/utils.js +160 -0
  67. package/build/dex/ekubo-v3/pools/utils.js.map +1 -0
  68. package/build/dex/ekubo-v3/types.d.ts +58 -0
  69. package/build/dex/ekubo-v3/types.js +3 -0
  70. package/build/dex/ekubo-v3/types.js.map +1 -0
  71. package/build/dex/ekubo-v3/utils.d.ts +10 -0
  72. package/build/dex/ekubo-v3/utils.js +54 -0
  73. package/build/dex/ekubo-v3/utils.js.map +1 -0
  74. package/build/dex/erc4626/config.js +0 -22
  75. package/build/dex/erc4626/config.js.map +1 -1
  76. package/build/dex/index.js +0 -30
  77. package/build/dex/index.js.map +1 -1
  78. package/build/dex/nerve/config.js +0 -276
  79. package/build/dex/nerve/config.js.map +1 -1
  80. package/build/dex/nerve/nerve-pool.d.ts +0 -2
  81. package/build/dex/nerve/nerve-pool.js +8 -57
  82. package/build/dex/nerve/nerve-pool.js.map +1 -1
  83. package/build/dex/solidly/config.js +10 -64
  84. package/build/dex/solidly/config.js.map +1 -1
  85. package/build/dex/solidly/forks-override/velodromeV2.js +1 -1
  86. package/build/dex/solidly/forks-override/velodromeV2.js.map +1 -1
  87. package/build/dex/solidly/solidly-stable-pool.d.ts +1 -1
  88. package/build/dex/solidly/solidly-stable-pool.js +1 -1
  89. package/build/dex/solidly/solidly-stable-pool.js.map +1 -1
  90. package/build/dex/solidly/solidly.d.ts +6 -4
  91. package/build/dex/solidly/solidly.js +119 -76
  92. package/build/dex/solidly/solidly.js.map +1 -1
  93. package/build/dex/solidly/types.d.ts +3 -0
  94. package/build/dex/stable-pool/stable-pool.js +1 -1
  95. package/build/dex/stable-pool/stable-pool.js.map +1 -1
  96. package/build/dex/trader-joe-v2.1/config.js +0 -3
  97. package/build/dex/trader-joe-v2.1/config.js.map +1 -1
  98. package/build/dex/uniswap-v2/config.js +0 -239
  99. package/build/dex/uniswap-v2/config.js.map +1 -1
  100. package/build/dex/uniswap-v2/constants.js +1 -12
  101. package/build/dex/uniswap-v2/constants.js.map +1 -1
  102. package/build/dex/uniswap-v2/uniswap-v2.d.ts +6 -4
  103. package/build/dex/uniswap-v2/uniswap-v2.js +32 -20
  104. package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
  105. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3.d.ts +5 -0
  106. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3.js +11 -0
  107. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3.js.map +1 -1
  108. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.d.ts +1 -4
  109. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.js +0 -30
  110. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.js.map +1 -1
  111. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.d.ts +7 -0
  112. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js +58 -0
  113. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js.map +1 -1
  114. package/build/dex/wombat/config.js +0 -12
  115. package/build/dex/wombat/config.js.map +1 -1
  116. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ import { DeepReadonly } from 'ts-essentials';
2
+ import { IDexHelper } from '../../../dex-helper/idex-helper';
3
+ import { Logger } from '../../../types';
4
+ import { BasicQuoteData, EkuboContracts, PoolInitializationState } from '../types';
5
+ import { EkuboPool, PoolKeyed, Quote } from './pool';
6
+ import { PoolKey, StableswapPoolTypeConfig, SwappedEvent } from './utils';
7
+ export declare class FullRangePool extends EkuboPool<StableswapPoolTypeConfig, FullRangePoolState.Object> {
8
+ private readonly quoteDataFetcher;
9
+ constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, contracts: EkuboContracts, initBlockNumber: number, key: PoolKey<StableswapPoolTypeConfig>);
10
+ generateState(blockNumber?: number | 'latest'): Promise<DeepReadonly<FullRangePoolState.Object>>;
11
+ protected _quote(amount: bigint, isToken1: boolean, state: DeepReadonly<FullRangePoolState.Object>, sqrtRatioLimit?: bigint): Quote;
12
+ quoteFullRange(this: PoolKeyed<StableswapPoolTypeConfig>, amount: bigint, isToken1: boolean, state: DeepReadonly<FullRangePoolState.Object>, sqrtRatioLimit?: bigint): Quote<FullRangePoolState.Object>;
13
+ protected _computeTvl(state: FullRangePoolState.Object): [bigint, bigint];
14
+ }
15
+ export declare namespace FullRangePoolState {
16
+ type Object = {
17
+ sqrtRatio: bigint;
18
+ liquidity: bigint;
19
+ };
20
+ function fromPoolInitialization(state: PoolInitializationState): DeepReadonly<Object>;
21
+ function fromQuoter(data: BasicQuoteData): DeepReadonly<Object>;
22
+ function fromPositionUpdatedEvent(oldState: DeepReadonly<Object>, liquidityDelta: bigint): Object | null;
23
+ function fromSwappedEvent(ev: SwappedEvent): Object;
24
+ function computeTvl(state: Object): [bigint, bigint];
25
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FullRangePoolState = exports.FullRangePool = void 0;
4
+ const pool_1 = require("./pool");
5
+ const sqrt_ratio_1 = require("./math/sqrt-ratio");
6
+ const swap_1 = require("./math/swap");
7
+ const tick_1 = require("./math/tick");
8
+ const utils_1 = require("./utils");
9
+ const delta_1 = require("./math/delta");
10
+ const GAS_COST_OF_ONE_FULL_RANGE_SWAP = 14_774;
11
+ class FullRangePool extends pool_1.EkuboPool {
12
+ quoteDataFetcher;
13
+ constructor(parentName, dexHelper, logger, contracts, initBlockNumber, key) {
14
+ const { contract: { address }, interface: iface, quoteDataFetcher, } = contracts.core;
15
+ super(parentName, dexHelper, logger, initBlockNumber, key, {
16
+ [address]: new pool_1.NamedEventHandlers(iface, {
17
+ PositionUpdated: (args, oldState) => FullRangePoolState.fromPositionUpdatedEvent(oldState, args.liquidityDelta.toBigInt()),
18
+ }),
19
+ }, {
20
+ [address]: data => FullRangePoolState.fromSwappedEvent((0, utils_1.parseSwappedEvent)(data)),
21
+ });
22
+ this.quoteDataFetcher = quoteDataFetcher;
23
+ }
24
+ async generateState(blockNumber) {
25
+ const data = await this.quoteDataFetcher.getQuoteData([this.key.toAbi()], 0, {
26
+ blockTag: blockNumber,
27
+ });
28
+ return FullRangePoolState.fromQuoter(data[0]);
29
+ }
30
+ _quote(amount, isToken1, state, sqrtRatioLimit) {
31
+ return this.quoteFullRange(amount, isToken1, state, sqrtRatioLimit);
32
+ }
33
+ quoteFullRange(amount, isToken1, state, sqrtRatioLimit) {
34
+ const isIncreasing = (0, swap_1.isPriceIncreasing)(amount, isToken1);
35
+ let sqrtRatio = state.sqrtRatio;
36
+ const liquidity = state.liquidity;
37
+ sqrtRatioLimit ??= isIncreasing ? tick_1.MAX_SQRT_RATIO : tick_1.MIN_SQRT_RATIO;
38
+ const step = (0, swap_1.computeStep)({
39
+ fee: this.key.config.fee,
40
+ sqrtRatio,
41
+ liquidity,
42
+ isToken1,
43
+ sqrtRatioLimit,
44
+ amount,
45
+ });
46
+ return {
47
+ consumedAmount: step.consumedAmount,
48
+ calculatedAmount: step.calculatedAmount,
49
+ gasConsumed: GAS_COST_OF_ONE_FULL_RANGE_SWAP,
50
+ skipAhead: 0,
51
+ stateAfter: {
52
+ sqrtRatio: step.sqrtRatioNext,
53
+ liquidity,
54
+ },
55
+ };
56
+ }
57
+ _computeTvl(state) {
58
+ return FullRangePoolState.computeTvl(state);
59
+ }
60
+ }
61
+ exports.FullRangePool = FullRangePool;
62
+ var FullRangePoolState;
63
+ (function (FullRangePoolState) {
64
+ function fromPoolInitialization(state) {
65
+ return {
66
+ sqrtRatio: state.sqrtRatio,
67
+ liquidity: 0n,
68
+ };
69
+ }
70
+ FullRangePoolState.fromPoolInitialization = fromPoolInitialization;
71
+ function fromQuoter(data) {
72
+ const liquidity = data.liquidity.toBigInt();
73
+ const sqrtRatioFloat = data.sqrtRatio.toBigInt();
74
+ return {
75
+ sqrtRatio: (0, sqrt_ratio_1.floatSqrtRatioToFixed)(sqrtRatioFloat),
76
+ liquidity,
77
+ };
78
+ }
79
+ FullRangePoolState.fromQuoter = fromQuoter;
80
+ function fromPositionUpdatedEvent(oldState, liquidityDelta) {
81
+ if (liquidityDelta === 0n) {
82
+ return null;
83
+ }
84
+ const clonedState = structuredClone(oldState);
85
+ clonedState.liquidity += liquidityDelta;
86
+ return clonedState;
87
+ }
88
+ FullRangePoolState.fromPositionUpdatedEvent = fromPositionUpdatedEvent;
89
+ function fromSwappedEvent(ev) {
90
+ return {
91
+ liquidity: ev.liquidityAfter,
92
+ sqrtRatio: ev.sqrtRatioAfter,
93
+ };
94
+ }
95
+ FullRangePoolState.fromSwappedEvent = fromSwappedEvent;
96
+ function computeTvl(state) {
97
+ const { sqrtRatio, liquidity } = state;
98
+ return [
99
+ (0, delta_1.amount0Delta)(sqrtRatio, tick_1.MAX_SQRT_RATIO, liquidity, false),
100
+ (0, delta_1.amount1Delta)(tick_1.MIN_SQRT_RATIO, sqrtRatio, liquidity, false),
101
+ ];
102
+ }
103
+ FullRangePoolState.computeTvl = computeTvl;
104
+ })(FullRangePoolState || (exports.FullRangePoolState = FullRangePoolState = {}));
105
+ //# sourceMappingURL=full-range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-range.js","sourceRoot":"","sources":["../../../../src/dex/ekubo-v3/pools/full-range.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const MAX_U32: number;
2
+ export declare const MAX_U128: bigint;
3
+ export declare const MAX_U256: bigint;
4
+ export declare const MIN_I256: bigint;
5
+ export declare const TWO_POW_192: bigint;
6
+ export declare const TWO_POW_160: bigint;
7
+ export declare const TWO_POW_128: bigint;
8
+ export declare const TWO_POW_127: bigint;
9
+ export declare const TWO_POW_96: bigint;
10
+ export declare const TWO_POW_95: bigint;
11
+ export declare const TWO_POW_94: bigint;
12
+ export declare const TWO_POW_64: bigint;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TWO_POW_64 = exports.TWO_POW_94 = exports.TWO_POW_95 = exports.TWO_POW_96 = exports.TWO_POW_127 = exports.TWO_POW_128 = exports.TWO_POW_160 = exports.TWO_POW_192 = exports.MIN_I256 = exports.MAX_U256 = exports.MAX_U128 = exports.MAX_U32 = void 0;
4
+ exports.MAX_U32 = 2 ** 32 - 1;
5
+ exports.MAX_U128 = 2n ** 128n - 1n;
6
+ exports.MAX_U256 = 2n ** 256n - 1n;
7
+ exports.MIN_I256 = -(2n ** 255n);
8
+ exports.TWO_POW_192 = 2n ** 192n;
9
+ exports.TWO_POW_160 = 2n ** 160n;
10
+ exports.TWO_POW_128 = 2n ** 128n;
11
+ exports.TWO_POW_127 = 2n ** 127n;
12
+ exports.TWO_POW_96 = 2n ** 96n;
13
+ exports.TWO_POW_95 = 2n ** 95n;
14
+ exports.TWO_POW_94 = 2n ** 94n;
15
+ exports.TWO_POW_64 = 2n ** 64n;
16
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/dex/ekubo-v3/pools/math/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACtB,QAAA,QAAQ,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAC3B,QAAA,QAAQ,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;AAC3B,QAAA,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;AAEzB,QAAA,WAAW,GAAG,EAAE,IAAI,IAAI,CAAC;AACzB,QAAA,WAAW,GAAG,EAAE,IAAI,IAAI,CAAC;AACzB,QAAA,WAAW,GAAG,EAAE,IAAI,IAAI,CAAC;AACzB,QAAA,WAAW,GAAG,EAAE,IAAI,IAAI,CAAC;AACzB,QAAA,UAAU,GAAG,EAAE,IAAI,GAAG,CAAC;AACvB,QAAA,UAAU,GAAG,EAAE,IAAI,GAAG,CAAC;AACvB,QAAA,UAAU,GAAG,EAAE,IAAI,GAAG,CAAC;AACvB,QAAA,UAAU,GAAG,EAAE,IAAI,GAAG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function amount0Delta(sqrtRatioA: bigint, sqrtRatioB: bigint, liquidity: bigint, roundUp: boolean): bigint;
2
+ export declare function amount1Delta(sqrtRatioA: bigint, sqrtRatioB: bigint, liquidity: bigint, roundUp: boolean): bigint;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.amount0Delta = amount0Delta;
4
+ exports.amount1Delta = amount1Delta;
5
+ const constants_1 = require("./constants");
6
+ function amount0Delta(sqrtRatioA, sqrtRatioB, liquidity, roundUp) {
7
+ if (liquidity === 0n || sqrtRatioA === sqrtRatioB)
8
+ return 0n;
9
+ const [lower, upper] = sqrtRatioA < sqrtRatioB
10
+ ? [sqrtRatioA, sqrtRatioB]
11
+ : [sqrtRatioB, sqrtRatioA];
12
+ const numerator = (liquidity << 128n) * (upper - lower);
13
+ let result0 = numerator / upper;
14
+ if (roundUp && numerator % upper !== 0n) {
15
+ result0++;
16
+ }
17
+ if (result0 > constants_1.MAX_U256) {
18
+ throw new Error('AMOUNT0_DELTA_OVERFLOW_U256');
19
+ }
20
+ let result = result0 / lower;
21
+ if (roundUp && result0 % lower !== 0n) {
22
+ result++;
23
+ }
24
+ if (result > constants_1.MAX_U128) {
25
+ throw new Error('AMOUNT0_DELTA_OVERFLOW_U128');
26
+ }
27
+ return result;
28
+ }
29
+ const TWO_POW_128 = 0x100000000000000000000000000000000n;
30
+ function amount1Delta(sqrtRatioA, sqrtRatioB, liquidity, roundUp) {
31
+ if (liquidity === 0n || sqrtRatioA === sqrtRatioB)
32
+ return 0n;
33
+ const [lower, upper] = sqrtRatioA < sqrtRatioB
34
+ ? [sqrtRatioA, sqrtRatioB]
35
+ : [sqrtRatioB, sqrtRatioA];
36
+ const result = liquidity * (upper - lower);
37
+ if (result > constants_1.MAX_U256) {
38
+ throw new Error('AMOUNT1_DELTA_OVERFLOW_U256');
39
+ }
40
+ if (roundUp && result % TWO_POW_128 !== 0n) {
41
+ const delta = result / TWO_POW_128 + 1n;
42
+ if (delta > constants_1.MAX_U128) {
43
+ throw new Error('AMOUNT1_DELTA_OVERFLOW_U128');
44
+ }
45
+ return delta;
46
+ }
47
+ else {
48
+ return result >> 128n;
49
+ }
50
+ }
51
+ //# sourceMappingURL=delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../../../../src/dex/ekubo-v3/pools/math/delta.ts"],"names":[],"mappings":";;AAEA,oCAiCC;AAID,oCA4BC;AAnED,2CAAiD;AAEjD,SAAgB,YAAY,CAC1B,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,OAAgB;IAEhB,IAAI,SAAS,KAAK,EAAE,IAAI,UAAU,KAAK,UAAU;QAAE,OAAO,EAAE,CAAC;IAE7D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAClB,UAAU,GAAG,UAAU;QACrB,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC;QAC1B,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE/B,MAAM,SAAS,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IAExD,IAAI,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IAChC,IAAI,OAAO,IAAI,SAAS,GAAG,KAAK,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,GAAG,oBAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IAC7B,IAAI,OAAO,IAAI,OAAO,GAAG,KAAK,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,CAAC;IACX,CAAC;IAED,IAAI,MAAM,GAAG,oBAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEzD,SAAgB,YAAY,CAC1B,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,OAAgB;IAEhB,IAAI,SAAS,KAAK,EAAE,IAAI,UAAU,KAAK,UAAU;QAAE,OAAO,EAAE,CAAC;IAE7D,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAClB,UAAU,GAAG,UAAU;QACrB,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC;QAC1B,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IAE3C,IAAI,MAAM,GAAG,oBAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,IAAI,MAAM,GAAG,WAAW,KAAK,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,GAAG,WAAW,GAAG,EAAE,CAAC;QACxC,IAAI,KAAK,GAAG,oBAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { BigNumber } from 'ethers';
2
+ export declare const ONE_FLOAT_SQRT_RATIO: bigint;
3
+ export declare function floatSqrtRatioToFixed(sqrtRatioFloat: bigint): bigint;
4
+ export declare function fixedSqrtRatioToFloat(sqrtRatioFixed: bigint): bigint;
5
+ export declare const MAX_SQRT_RATIO_FLOAT: BigNumber;
6
+ export declare const MIN_SQRT_RATIO_FLOAT: BigNumber;
7
+ export declare function nextSqrtRatioFromAmount0(sqrtRatio: bigint, liquidity: bigint, amount0: bigint): bigint | null;
8
+ export declare function nextSqrtRatioFromAmount1(sqrtRatio: bigint, liquidity: bigint, amount1: bigint): bigint | null;
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MIN_SQRT_RATIO_FLOAT = exports.MAX_SQRT_RATIO_FLOAT = exports.ONE_FLOAT_SQRT_RATIO = void 0;
4
+ exports.floatSqrtRatioToFixed = floatSqrtRatioToFixed;
5
+ exports.fixedSqrtRatioToFloat = fixedSqrtRatioToFloat;
6
+ exports.nextSqrtRatioFromAmount0 = nextSqrtRatioFromAmount0;
7
+ exports.nextSqrtRatioFromAmount1 = nextSqrtRatioFromAmount1;
8
+ const ethers_1 = require("ethers");
9
+ const constants_1 = require("./constants");
10
+ const tick_1 = require("./tick");
11
+ const BIT_MASK = 0xc00000000000000000000000n;
12
+ const NOT_BIT_MASK = 0x3fffffffffffffffffffffffn;
13
+ exports.ONE_FLOAT_SQRT_RATIO = (2n << 94n) | (1n << 62n);
14
+ function floatSqrtRatioToFixed(sqrtRatioFloat) {
15
+ return sqrtRatioFloat === 0n
16
+ ? constants_1.TWO_POW_128 // Default value for the case that the passed value comes from an uninitialized pool
17
+ : (sqrtRatioFloat & NOT_BIT_MASK) <<
18
+ (2n + ((sqrtRatioFloat & BIT_MASK) >> 89n));
19
+ }
20
+ function fixedSqrtRatioToFloat(sqrtRatioFixed) {
21
+ if (sqrtRatioFixed >= constants_1.TWO_POW_192) {
22
+ throw new Error('Out of bounds');
23
+ }
24
+ else if (sqrtRatioFixed >= constants_1.TWO_POW_160) {
25
+ return (sqrtRatioFixed >> 98n) + BIT_MASK;
26
+ }
27
+ else if (sqrtRatioFixed >= constants_1.TWO_POW_128) {
28
+ return (sqrtRatioFixed >> 66n) + constants_1.TWO_POW_95;
29
+ }
30
+ else if (sqrtRatioFixed >= constants_1.TWO_POW_96) {
31
+ return (sqrtRatioFixed >> 34n) + constants_1.TWO_POW_94;
32
+ }
33
+ else {
34
+ return sqrtRatioFixed >> 2n;
35
+ }
36
+ }
37
+ exports.MAX_SQRT_RATIO_FLOAT = ethers_1.BigNumber.from(fixedSqrtRatioToFloat(tick_1.MAX_SQRT_RATIO));
38
+ exports.MIN_SQRT_RATIO_FLOAT = ethers_1.BigNumber.from(fixedSqrtRatioToFloat(tick_1.MIN_SQRT_RATIO));
39
+ function nextSqrtRatioFromAmount0(sqrtRatio, liquidity, amount0) {
40
+ if (amount0 === 0n)
41
+ return sqrtRatio;
42
+ if (liquidity === 0n)
43
+ throw new Error('NO_LIQUIDITY');
44
+ const numerator1 = liquidity << 128n;
45
+ // because quotient is rounded down, this price movement is also rounded towards sqrt_ratio
46
+ if (amount0 < 0n) {
47
+ const product = amount0 * -1n * sqrtRatio;
48
+ if (product >= constants_1.MAX_U256) {
49
+ return null;
50
+ }
51
+ const denominator = numerator1 - product;
52
+ if (denominator < 0n) {
53
+ return null;
54
+ }
55
+ const num = numerator1 * sqrtRatio;
56
+ const result = num / denominator + (num % denominator === 0n ? 0n : 1n);
57
+ if (result > constants_1.MAX_U256) {
58
+ return null;
59
+ }
60
+ return result;
61
+ }
62
+ else {
63
+ const denomP1 = numerator1 / sqrtRatio;
64
+ const denom = denomP1 + amount0;
65
+ const quotient = numerator1 / denom;
66
+ const remainder = numerator1 % denom;
67
+ if (remainder === 0n)
68
+ return quotient;
69
+ const sum = quotient + 1n;
70
+ if (sum > constants_1.MAX_U256)
71
+ return null;
72
+ return sum;
73
+ }
74
+ }
75
+ function nextSqrtRatioFromAmount1(sqrtRatio, liquidity, amount1) {
76
+ if (amount1 === 0n)
77
+ return sqrtRatio;
78
+ if (liquidity === 0n)
79
+ throw new Error('NO_LIQUIDITY');
80
+ const amountShifted = amount1 << 128n;
81
+ const quotient = amountShifted / liquidity;
82
+ const remainder = amountShifted % liquidity;
83
+ // because quotient is rounded down, this price movement is also rounded towards sqrt_ratio
84
+ if (amount1 < 0n) {
85
+ // adding amount1, taking out amount0
86
+ const res = sqrtRatio + quotient;
87
+ if (res < 0n) {
88
+ return null;
89
+ }
90
+ if (remainder === 0n) {
91
+ return res;
92
+ }
93
+ else {
94
+ if (res != 0n) {
95
+ return res - 1n;
96
+ }
97
+ else {
98
+ return null;
99
+ }
100
+ }
101
+ }
102
+ else {
103
+ // adding amount1, taking out amount0, price goes up
104
+ const res = sqrtRatio + quotient;
105
+ if (res > constants_1.MAX_U256) {
106
+ return null;
107
+ }
108
+ else {
109
+ return res;
110
+ }
111
+ }
112
+ }
113
+ //# sourceMappingURL=sqrt-ratio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqrt-ratio.js","sourceRoot":"","sources":["../../../../../src/dex/ekubo-v3/pools/math/sqrt-ratio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ interface SwapResult {
2
+ consumedAmount: bigint;
3
+ calculatedAmount: bigint;
4
+ sqrtRatioNext: bigint;
5
+ feeAmount: bigint;
6
+ }
7
+ export declare function isPriceIncreasing(amount: bigint, isToken1: boolean): boolean;
8
+ export declare function amountBeforeFee(amount: bigint, fee: bigint): bigint;
9
+ export declare function computeFee(amount: bigint, fee: bigint): bigint;
10
+ export declare function computeStep({ sqrtRatio, liquidity, sqrtRatioLimit, amount, isToken1, fee, }: {
11
+ sqrtRatio: bigint;
12
+ liquidity: bigint;
13
+ sqrtRatioLimit: bigint;
14
+ amount: bigint;
15
+ isToken1: boolean;
16
+ fee: bigint;
17
+ }): SwapResult;
18
+ export {};
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPriceIncreasing = isPriceIncreasing;
4
+ exports.amountBeforeFee = amountBeforeFee;
5
+ exports.computeFee = computeFee;
6
+ exports.computeStep = computeStep;
7
+ const constants_1 = require("./constants");
8
+ const delta_1 = require("./delta");
9
+ const sqrt_ratio_1 = require("./sqrt-ratio");
10
+ function isPriceIncreasing(amount, isToken1) {
11
+ return amount < 0n !== isToken1;
12
+ }
13
+ function noOp(sqrtRatioNext) {
14
+ return {
15
+ consumedAmount: 0n,
16
+ calculatedAmount: 0n,
17
+ sqrtRatioNext,
18
+ feeAmount: 0n,
19
+ };
20
+ }
21
+ function amountBeforeFee(amount, fee) {
22
+ if (fee === 0n)
23
+ return amount;
24
+ const num = amount << 64n;
25
+ const denom = (1n << 64n) - fee;
26
+ const val = num / denom;
27
+ const result = val + (num % denom !== 0n ? 1n : 0n);
28
+ if (result > constants_1.MAX_U128)
29
+ throw new Error('AMOUNT_BEFORE_FEE_OVERFLOW');
30
+ return result;
31
+ }
32
+ function computeFee(amount, fee) {
33
+ const num = amount * fee;
34
+ const denom = 2n ** 64n;
35
+ if (num % denom !== 0n) {
36
+ return num / denom + 1n;
37
+ }
38
+ else {
39
+ return num / denom;
40
+ }
41
+ }
42
+ function computeStep({ sqrtRatio, liquidity, sqrtRatioLimit, amount, isToken1, fee, }) {
43
+ if (amount === 0n || sqrtRatio === sqrtRatioLimit) {
44
+ return noOp(sqrtRatio);
45
+ }
46
+ const increasing = isPriceIncreasing(amount, isToken1);
47
+ if (sqrtRatioLimit < sqrtRatio === increasing) {
48
+ throw new Error('computeStep: wrong direction');
49
+ }
50
+ if (liquidity === 0n) {
51
+ return noOp(sqrtRatioLimit);
52
+ }
53
+ let priceImpactAmount;
54
+ if (amount < 0n) {
55
+ priceImpactAmount = amount;
56
+ }
57
+ else {
58
+ priceImpactAmount = amount - computeFee(amount, fee);
59
+ }
60
+ let sqrtRatioNextFromAmount;
61
+ if (isToken1) {
62
+ sqrtRatioNextFromAmount = (0, sqrt_ratio_1.nextSqrtRatioFromAmount1)(sqrtRatio, liquidity, priceImpactAmount);
63
+ }
64
+ else {
65
+ sqrtRatioNextFromAmount = (0, sqrt_ratio_1.nextSqrtRatioFromAmount0)(sqrtRatio, liquidity, priceImpactAmount);
66
+ }
67
+ if (sqrtRatioNextFromAmount === null ||
68
+ sqrtRatioNextFromAmount > sqrtRatioLimit === increasing) {
69
+ const [specifiedAmountDelta, calculatedAmountDelta] = isToken1
70
+ ? [
71
+ (0, delta_1.amount1Delta)(sqrtRatioLimit, sqrtRatio, liquidity, amount >= 0n) *
72
+ (amount < 0n ? -1n : 1n),
73
+ (0, delta_1.amount0Delta)(sqrtRatioLimit, sqrtRatio, liquidity, amount < 0n),
74
+ ]
75
+ : [
76
+ (0, delta_1.amount0Delta)(sqrtRatioLimit, sqrtRatio, liquidity, amount >= 0n) *
77
+ (amount < 0n ? -1n : 1n),
78
+ (0, delta_1.amount1Delta)(sqrtRatioLimit, sqrtRatio, liquidity, amount < 0n),
79
+ ];
80
+ if (amount < 0n) {
81
+ const beforeFee = amountBeforeFee(calculatedAmountDelta, fee);
82
+ return {
83
+ consumedAmount: specifiedAmountDelta,
84
+ calculatedAmount: beforeFee,
85
+ feeAmount: beforeFee - calculatedAmountDelta,
86
+ sqrtRatioNext: sqrtRatioLimit,
87
+ };
88
+ }
89
+ else {
90
+ const beforeFee = amountBeforeFee(specifiedAmountDelta, fee);
91
+ return {
92
+ consumedAmount: beforeFee,
93
+ calculatedAmount: calculatedAmountDelta,
94
+ feeAmount: beforeFee - specifiedAmountDelta,
95
+ sqrtRatioNext: sqrtRatioLimit,
96
+ };
97
+ }
98
+ }
99
+ if (sqrtRatioNextFromAmount === sqrtRatio) {
100
+ return {
101
+ consumedAmount: amount,
102
+ calculatedAmount: 0n,
103
+ feeAmount: amount,
104
+ sqrtRatioNext: sqrtRatio,
105
+ };
106
+ }
107
+ const calculatedAmountExcludingFee = isToken1
108
+ ? (0, delta_1.amount0Delta)(sqrtRatioNextFromAmount, sqrtRatio, liquidity, amount < 0n)
109
+ : (0, delta_1.amount1Delta)(sqrtRatioNextFromAmount, sqrtRatio, liquidity, amount < 0n);
110
+ if (amount < 0n) {
111
+ const includingFee = amountBeforeFee(calculatedAmountExcludingFee, fee);
112
+ return {
113
+ consumedAmount: amount,
114
+ calculatedAmount: includingFee,
115
+ sqrtRatioNext: sqrtRatioNextFromAmount,
116
+ feeAmount: includingFee - calculatedAmountExcludingFee,
117
+ };
118
+ }
119
+ else {
120
+ return {
121
+ consumedAmount: amount,
122
+ calculatedAmount: calculatedAmountExcludingFee,
123
+ sqrtRatioNext: sqrtRatioNextFromAmount,
124
+ feeAmount: amount - priceImpactAmount,
125
+ };
126
+ }
127
+ }
128
+ //# sourceMappingURL=swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../../../../src/dex/ekubo-v3/pools/math/swap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare const MIN_TICK = -88722835;
2
+ export declare const MAX_TICK = 88722835;
3
+ export declare const MAX_SQRT_RATIO: bigint;
4
+ export declare const MIN_SQRT_RATIO: bigint;
5
+ export declare const FULL_RANGE_TICK_SPACING = 0;
6
+ export declare function toSqrtRatio(tick: number): bigint;
7
+ export declare function approximateNumberOfTickSpacingsCrossed(sqrtRatioStart: bigint, sqrtRatioEnd: bigint, tickSpacing: number): number;
8
+ export declare function approximateSqrtRatioToTick(sqrtRatio: bigint): number;
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FULL_RANGE_TICK_SPACING = exports.MIN_SQRT_RATIO = exports.MAX_SQRT_RATIO = exports.MAX_TICK = exports.MIN_TICK = void 0;
4
+ exports.toSqrtRatio = toSqrtRatio;
5
+ exports.approximateNumberOfTickSpacingsCrossed = approximateNumberOfTickSpacingsCrossed;
6
+ exports.approximateSqrtRatioToTick = approximateSqrtRatioToTick;
7
+ const constants_1 = require("./constants");
8
+ exports.MIN_TICK = -88722835;
9
+ exports.MAX_TICK = 88722835;
10
+ exports.MAX_SQRT_RATIO = 6276949602062853172742588666607187473671941430179807625216n;
11
+ exports.MIN_SQRT_RATIO = 18447191164202170524n;
12
+ exports.FULL_RANGE_TICK_SPACING = 0;
13
+ function toSqrtRatio(tick) {
14
+ if (tick < exports.MIN_TICK || tick > exports.MAX_TICK)
15
+ throw new Error(`Invalid tick: ${tick}`);
16
+ let sign = tick < 0;
17
+ tick = Math.abs(tick);
18
+ let ratio = 0x100000000000000000000000000000000n;
19
+ if ((tick & 0x1) != 0) {
20
+ ratio = 0xfffff79c8499329c7cbb2510d893283bn;
21
+ }
22
+ if ((tick & 0x2) != 0) {
23
+ ratio = (ratio * 0xffffef390978c398134b4ff3764fe410n) >> 128n;
24
+ }
25
+ if ((tick & 0x4) != 0) {
26
+ ratio = (ratio * 0xffffde72140b00a354bd3dc828e976c9n) >> 128n;
27
+ }
28
+ if ((tick & 0x8) != 0) {
29
+ ratio = (ratio * 0xffffbce42c7be6c998ad6318193c0b18n) >> 128n;
30
+ }
31
+ if ((tick & 0x10) != 0) {
32
+ ratio = (ratio * 0xffff79c86a8f6150a32d9778eceef97cn) >> 128n;
33
+ }
34
+ if ((tick & 0x20) != 0) {
35
+ ratio = (ratio * 0xfffef3911b7cff24ba1b3dbb5f8f5974n) >> 128n;
36
+ }
37
+ if ((tick & 0x40) != 0) {
38
+ ratio = (ratio * 0xfffde72350725cc4ea8feece3b5f13c8n) >> 128n;
39
+ }
40
+ if ((tick & 0x80) != 0) {
41
+ ratio = (ratio * 0xfffbce4b06c196e9247ac87695d53c60n) >> 128n;
42
+ }
43
+ if ((tick & 0x100) != 0) {
44
+ ratio = (ratio * 0xfff79ca7a4d1bf1ee8556cea23cdbaa5n) >> 128n;
45
+ }
46
+ if ((tick & 0x200) != 0) {
47
+ ratio = (ratio * 0xffef3995a5b6a6267530f207142a5764n) >> 128n;
48
+ }
49
+ if ((tick & 0x400) != 0) {
50
+ ratio = (ratio * 0xffde7444b28145508125d10077ba83b8n) >> 128n;
51
+ }
52
+ if ((tick & 0x800) != 0) {
53
+ ratio = (ratio * 0xffbceceeb791747f10df216f2e53ec57n) >> 128n;
54
+ }
55
+ if ((tick & 0x1000) != 0) {
56
+ ratio = (ratio * 0xff79eb706b9a64c6431d76e63531e929n) >> 128n;
57
+ }
58
+ if ((tick & 0x2000) != 0) {
59
+ ratio = (ratio * 0xfef41d1a5f2ae3a20676bec6f7f9459an) >> 128n;
60
+ }
61
+ if ((tick & 0x4000) != 0) {
62
+ ratio = (ratio * 0xfde95287d26d81bea159c37073122c73n) >> 128n;
63
+ }
64
+ if ((tick & 0x8000) != 0) {
65
+ ratio = (ratio * 0xfbd701c7cbc4c8a6bb81efd232d1e4e7n) >> 128n;
66
+ }
67
+ if ((tick & 0x10000) != 0) {
68
+ ratio = (ratio * 0xf7bf5211c72f5185f372aeb1d48f937en) >> 128n;
69
+ }
70
+ if ((tick & 0x20000) != 0) {
71
+ ratio = (ratio * 0xefc2bf59df33ecc28125cf78ec4f167fn) >> 128n;
72
+ }
73
+ if ((tick & 0x40000) != 0) {
74
+ ratio = (ratio * 0xe08d35706200796273f0b3a981d90cfdn) >> 128n;
75
+ }
76
+ if ((tick & 0x80000) != 0) {
77
+ ratio = (ratio * 0xc4f76b68947482dc198a48a54348c4edn) >> 128n;
78
+ }
79
+ if ((tick & 0x100000) != 0) {
80
+ ratio = (ratio * 0x978bcb9894317807e5fa4498eee7c0fan) >> 128n;
81
+ }
82
+ if ((tick & 0x200000) != 0) {
83
+ ratio = (ratio * 0x59b63684b86e9f486ec54727371ba6can) >> 128n;
84
+ }
85
+ if ((tick & 0x400000) != 0) {
86
+ ratio = (ratio * 0x1f703399d88f6aa83a28b22d4a1f56e3n) >> 128n;
87
+ }
88
+ if ((tick & 0x800000) != 0) {
89
+ ratio = (ratio * 0x3dc5dac7376e20fc8679758d1bcdcfcn) >> 128n;
90
+ }
91
+ if ((tick & 0x1000000) != 0) {
92
+ ratio = (ratio * 0xee7e32d61fdb0a5e622b820f681d0n) >> 128n;
93
+ }
94
+ if ((tick & 0x2000000) != 0) {
95
+ ratio = (ratio * 0xde2ee4bc381afa7089aa84bb66n) >> 128n;
96
+ }
97
+ if ((tick & 0x4000000) != 0) {
98
+ ratio = (ratio * 0xc0d55d4d7152c25fb139n) >> 128n;
99
+ }
100
+ if (tick > 0 && !sign) {
101
+ ratio = constants_1.MAX_U256 / ratio;
102
+ }
103
+ if (ratio >= constants_1.TWO_POW_160) {
104
+ ratio = (ratio >> 98n) << 98n;
105
+ }
106
+ else if (ratio >= constants_1.TWO_POW_128) {
107
+ ratio = (ratio >> 66n) << 66n;
108
+ }
109
+ else if (ratio >= constants_1.TWO_POW_96) {
110
+ ratio = (ratio >> 34n) << 34n;
111
+ }
112
+ else {
113
+ ratio = (ratio >> 2n) << 2n;
114
+ }
115
+ return ratio;
116
+ }
117
+ const LOG_BASE_SQRT_TICK_SIZE = Math.log(Math.sqrt(1.000001));
118
+ function approximateNumberOfTickSpacingsCrossed(sqrtRatioStart, sqrtRatioEnd, tickSpacing) {
119
+ if (tickSpacing === 0) {
120
+ return 0;
121
+ }
122
+ const logPriceDiff = Math.log(Number(sqrtRatioEnd) / Number(sqrtRatioStart)) /
123
+ LOG_BASE_SQRT_TICK_SIZE;
124
+ return Math.floor(Math.abs(logPriceDiff / tickSpacing));
125
+ }
126
+ function approximateSqrtRatioToTick(sqrtRatio) {
127
+ return Math.round(Math.log(Number(sqrtRatio) / 2 ** 128) / LOG_BASE_SQRT_TICK_SIZE);
128
+ }
129
+ //# sourceMappingURL=tick.js.map