@paraswap/dex-lib 4.7.24-inactive-dexs-cleanup.0 → 4.7.24-inactive-dexs-cleanup.2

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 (114) 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/angle-staked-stable/config.js +0 -32
  7. package/build/dex/angle-staked-stable/config.js.map +1 -1
  8. package/build/dex/angle-transmuter/config.js +0 -20
  9. package/build/dex/angle-transmuter/config.js.map +1 -1
  10. package/build/dex/curve-v1/constants.js +2 -4
  11. package/build/dex/curve-v1/constants.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 -18
  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 -244
  79. package/build/dex/nerve/config.js.map +1 -1
  80. package/build/dex/solidly/config.js +10 -64
  81. package/build/dex/solidly/config.js.map +1 -1
  82. package/build/dex/solidly/forks-override/velodromeV2.js +1 -1
  83. package/build/dex/solidly/forks-override/velodromeV2.js.map +1 -1
  84. package/build/dex/solidly/solidly-stable-pool.d.ts +1 -1
  85. package/build/dex/solidly/solidly-stable-pool.js +1 -1
  86. package/build/dex/solidly/solidly-stable-pool.js.map +1 -1
  87. package/build/dex/solidly/solidly.d.ts +6 -4
  88. package/build/dex/solidly/solidly.js +119 -76
  89. package/build/dex/solidly/solidly.js.map +1 -1
  90. package/build/dex/solidly/types.d.ts +3 -0
  91. package/build/dex/stable-pool/stable-pool.js +1 -1
  92. package/build/dex/stable-pool/stable-pool.js.map +1 -1
  93. package/build/dex/trader-joe-v2.1/config.d.ts +0 -3
  94. package/build/dex/trader-joe-v2.1/config.js +1 -6
  95. package/build/dex/trader-joe-v2.1/config.js.map +1 -1
  96. package/build/dex/uniswap-v2/config.js +0 -162
  97. package/build/dex/uniswap-v2/config.js.map +1 -1
  98. package/build/dex/uniswap-v2/constants.js +1 -12
  99. package/build/dex/uniswap-v2/constants.js.map +1 -1
  100. package/build/dex/uniswap-v2/uniswap-v2.d.ts +6 -4
  101. package/build/dex/uniswap-v2/uniswap-v2.js +32 -20
  102. package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
  103. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3.d.ts +5 -0
  104. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3.js +11 -0
  105. package/build/dex/uniswap-v3/forks/pharaoh-v3/pharaoh-v3.js.map +1 -1
  106. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.d.ts +1 -4
  107. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.js +0 -30
  108. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream-pool.js.map +1 -1
  109. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.d.ts +7 -0
  110. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js +58 -0
  111. package/build/dex/uniswap-v3/forks/velodrome-slipstream/velodrome-slipstream.js.map +1 -1
  112. package/build/dex/wombat/config.js +0 -3
  113. package/build/dex/wombat/config.js.map +1 -1
  114. package/package.json +1 -1
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.EkuboV3 = void 0;
40
+ const abi_1 = require("@ethersproject/abi");
41
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
42
+ const constants_1 = require("../../constants");
43
+ const utils_1 = require("../../utils");
44
+ const simple_exchange_1 = require("../simple-exchange");
45
+ const config_1 = require("./config");
46
+ const utils_2 = require("./utils");
47
+ const ethers_1 = require("ethers");
48
+ const utils_3 = require("ethers/lib/utils");
49
+ const mev_capture_router_json_1 = __importDefault(require("../../abi/ekubo-v3/mev-capture-router.json"));
50
+ const utils_4 = require("../../lib/tokens/utils");
51
+ const ekubo_v3_pool_manager_1 = require("./ekubo-v3-pool-manager");
52
+ const decoders_1 = require("../../lib/decoders");
53
+ // Ekubo Protocol https://ekubo.org/
54
+ class EkuboV3 extends simple_exchange_1.SimpleExchange {
55
+ network;
56
+ dexKey;
57
+ dexHelper;
58
+ static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.EKUBO_V3_CONFIG);
59
+ hasConstantPriceLargeAmounts = false;
60
+ needWrapNative = false;
61
+ isFeeOnTransferSupported = false;
62
+ routerIface;
63
+ logger;
64
+ config;
65
+ poolManager;
66
+ contracts;
67
+ decimals = {
68
+ [constants_1.ETHER_ADDRESS.toLowerCase()]: 18,
69
+ };
70
+ constructor(network, dexKey, dexHelper) {
71
+ super(dexHelper, dexKey);
72
+ this.network = network;
73
+ this.dexKey = dexKey;
74
+ this.dexHelper = dexHelper;
75
+ this.logger = dexHelper.getLogger(dexKey);
76
+ this.config = config_1.EKUBO_V3_CONFIG[dexKey][network];
77
+ this.contracts = (0, utils_2.ekuboContracts)(dexHelper.provider);
78
+ this.routerIface = new abi_1.Interface(mev_capture_router_json_1.default);
79
+ this.poolManager = new ekubo_v3_pool_manager_1.EkuboV3PoolManager(this.dexKey, this.logger, this.dexHelper, this.contracts, this.config.subgraphId);
80
+ }
81
+ async initializePricing(blockNumber) {
82
+ await this.poolManager.updatePools(blockNumber, true);
83
+ }
84
+ async getPoolIdentifiers(srcToken, destToken, _side, _blockNumber) {
85
+ const [token0, token1] = (0, utils_2.convertAndSortTokens)(srcToken, destToken);
86
+ return Array.from(this.poolManager.poolsByBI
87
+ .values()
88
+ .filter(pool => pool.key.token0 === token0 && pool.key.token1 === token1)
89
+ .map(pool => pool.key.stringId));
90
+ }
91
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
92
+ const pools = await this.poolManager.getQuotePools(srcToken, destToken, limitPools);
93
+ const isExactOut = side === constants_1.SwapSide.BUY;
94
+ const amountToken = isExactOut ? destToken : srcToken;
95
+ const amountTokenAddress = (0, utils_2.convertParaSwapToEkubo)(amountToken.address);
96
+ const unitAmount = (0, utils_1.getBigIntPow)(amountToken.decimals);
97
+ const token1 = (0, utils_2.convertAndSortTokens)(srcToken, destToken)[1];
98
+ const exchangePrices = [];
99
+ // eslint-disable-next-line no-restricted-syntax
100
+ poolLoop: for (const pool of pools) {
101
+ const poolId = pool.key.stringId;
102
+ try {
103
+ const quotes = [];
104
+ const skipAheadMap = {};
105
+ for (const amount of [unitAmount, ...amounts]) {
106
+ const inputAmount = isExactOut ? -amount : amount;
107
+ const quote = pool.quote(inputAmount, amountTokenAddress, blockNumber);
108
+ if (quote.consumedAmount !== inputAmount) {
109
+ this.logger.debug(`Pool ${poolId} doesn't have enough liquidity to support swap of ${amount} ${amountToken.symbol ?? amountToken.address}`);
110
+ // There doesn't seem to be a way to skip just this one price.
111
+ // Anyway, this pool is probably not the right one if it has such thin liquidity.
112
+ continue poolLoop;
113
+ }
114
+ quotes.push(quote);
115
+ skipAheadMap[amount.toString()] = quote.skipAhead;
116
+ }
117
+ const [unitQuote, ...otherQuotes] = quotes;
118
+ exchangePrices.push({
119
+ prices: otherQuotes.map(quote => quote.calculatedAmount),
120
+ unit: unitQuote.calculatedAmount,
121
+ data: {
122
+ poolKeyAbi: pool.key.toAbi(),
123
+ isToken1: amountTokenAddress === token1,
124
+ skipAhead: skipAheadMap,
125
+ },
126
+ poolIdentifiers: [poolId],
127
+ exchange: this.dexKey,
128
+ gasCost: otherQuotes.map(quote => quote.gasConsumed),
129
+ });
130
+ }
131
+ catch (err) {
132
+ this.logger.error('Quote error:', err);
133
+ continue;
134
+ }
135
+ }
136
+ return exchangePrices;
137
+ }
138
+ getDexParam(_srcToken, _destToken, srcAmount, destAmount, recipient, data, side, _context, _executorAddress) {
139
+ const amount = BigInt(side === constants_1.SwapSide.BUY ? `-${destAmount}` : srcAmount);
140
+ const amountStr = (side === constants_1.SwapSide.SELL ? srcAmount : destAmount).toString();
141
+ const isToken1AndSkipAhead = (0, utils_3.zeroPad)(ethers_1.BigNumber.from(data.skipAhead[amountStr] ?? 0).toHexString(), 4);
142
+ if (data.isToken1) {
143
+ isToken1AndSkipAhead[0] |= 0x80;
144
+ }
145
+ const params = (0, utils_3.concat)([
146
+ '0x000000000000000000000000', // No sqrt ratio limit
147
+ (0, utils_3.zeroPad)(ethers_1.BigNumber.from(amount).toTwos(128).toHexString(), 16),
148
+ isToken1AndSkipAhead,
149
+ ]);
150
+ return {
151
+ needWrapNative: this.needWrapNative,
152
+ exchangeData: this.routerIface.encodeFunctionData('swapAllowPartialFill((address,address,bytes32),bytes32,address)', [data.poolKeyAbi, params, recipient]),
153
+ sendEthButSupportsInsertFromAmount: true,
154
+ targetExchange: config_1.ROUTER_ADDRESS,
155
+ dexFuncHasRecipient: true,
156
+ returnAmountPos: undefined,
157
+ };
158
+ }
159
+ async updatePoolState() {
160
+ const blockNumber = await this.dexHelper.provider.getBlockNumber();
161
+ await this.poolManager.updatePools(blockNumber, false);
162
+ const tokenAddresses = new Set();
163
+ for (const pool of this.poolManager.poolsByBI.values()) {
164
+ tokenAddresses.add((0, utils_2.convertEkuboToParaSwap)(pool.key.token0).toLowerCase());
165
+ tokenAddresses.add((0, utils_2.convertEkuboToParaSwap)(pool.key.token1).toLowerCase());
166
+ }
167
+ if (!tokenAddresses.size)
168
+ return;
169
+ const calls = Array.from(tokenAddresses).map(tokenAddress => ({
170
+ target: tokenAddress,
171
+ callData: utils_4.erc20Iface.encodeFunctionData('decimals'),
172
+ decodeFunction: decoders_1.uint8ToNumber,
173
+ }));
174
+ const results = await this.dexHelper.multiWrapper.tryAggregate(false, calls, blockNumber);
175
+ Array.from(tokenAddresses).forEach((address, i) => {
176
+ const result = results[i];
177
+ if (result.success) {
178
+ this.decimals[address] = result.returnData;
179
+ }
180
+ });
181
+ }
182
+ async getTopPoolsForToken(tokenAddress, limit) {
183
+ tokenAddress = tokenAddress.toLowerCase();
184
+ const poolsTokenTvls = (await Promise.all(this.poolManager.poolsByBI.values().map(async (pool) => {
185
+ try {
186
+ const tokenPair = [
187
+ (0, utils_2.convertEkuboToParaSwap)(pool.key.token0),
188
+ (0, utils_2.convertEkuboToParaSwap)(pool.key.token1),
189
+ ];
190
+ if (!tokenPair.includes(tokenAddress)) {
191
+ return null;
192
+ }
193
+ const tvls = pool.computeTvl();
194
+ const [token0Tvl, token1Tvl] = tokenPair.map((tokenAddress, i) => {
195
+ const decimals = this.decimals[tokenAddress.toLowerCase()];
196
+ if (!decimals) {
197
+ return null;
198
+ }
199
+ return {
200
+ tvl: tvls[i],
201
+ address: tokenAddress,
202
+ decimals,
203
+ };
204
+ });
205
+ if (token0Tvl === null || token1Tvl === null) {
206
+ return null;
207
+ }
208
+ return {
209
+ pool,
210
+ token0Tvl,
211
+ token1Tvl,
212
+ };
213
+ }
214
+ catch (err) {
215
+ this.logger.error(`TVL computation for pool ${pool.key.stringId} failed: ${err}`);
216
+ return null;
217
+ }
218
+ }))).filter(res => res !== null);
219
+ const usdTvls = await this.dexHelper.getUsdTokenAmounts(poolsTokenTvls.flatMap(({ token0Tvl, token1Tvl }) => [
220
+ [token0Tvl.address, token0Tvl.tvl],
221
+ [token1Tvl.address, token1Tvl.tvl],
222
+ ]));
223
+ const poolLiquidities = poolsTokenTvls.map(({ token0Tvl, token1Tvl }, i) => {
224
+ const [token0UsdTvl, token1UsdTvl] = usdTvls.slice(i * 2, i * 2 + 2);
225
+ const [connector, thisLiquidityUSD, connectorLiquidityUsd] = token0Tvl.address === tokenAddress
226
+ ? [token1Tvl, token0UsdTvl, token1UsdTvl]
227
+ : [token0Tvl, token1UsdTvl, token0UsdTvl];
228
+ return {
229
+ exchange: this.dexKey,
230
+ address: config_1.CORE_ADDRESS,
231
+ connectorTokens: [
232
+ {
233
+ address: connector.address,
234
+ decimals: connector.decimals,
235
+ liquidityUSD: connectorLiquidityUsd,
236
+ },
237
+ ],
238
+ liquidityUSD: thisLiquidityUSD,
239
+ };
240
+ });
241
+ poolLiquidities
242
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
243
+ .splice(limit, Infinity);
244
+ return poolLiquidities;
245
+ }
246
+ // LEGACY
247
+ getAdapters(_side) {
248
+ return null;
249
+ }
250
+ getCalldataGasCost(_poolPrices) {
251
+ // swapAllowPartialFill((address,address,bytes32),bytes32,address)
252
+ return (CALLDATA_GAS_COST.DEX_OVERHEAD +
253
+ // poolKey.token0
254
+ CALLDATA_GAS_COST.ADDRESS +
255
+ // poolKey.token1
256
+ CALLDATA_GAS_COST.ADDRESS +
257
+ // poolKey.config (bytes32)
258
+ CALLDATA_GAS_COST.FULL_WORD +
259
+ // swap parameters (bytes32)
260
+ CALLDATA_GAS_COST.FULL_WORD +
261
+ // recipient
262
+ CALLDATA_GAS_COST.ADDRESS);
263
+ }
264
+ // LEGACY
265
+ getAdapterParam(_srcToken, _destToken, _srcAmount, _destAmount, _data, _side) {
266
+ return {
267
+ targetExchange: this.dexKey,
268
+ payload: '',
269
+ networkFee: '0',
270
+ };
271
+ }
272
+ }
273
+ exports.EkuboV3 = EkuboV3;
274
+ //# sourceMappingURL=ekubo-v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ekubo-v3.js","sourceRoot":"","sources":["../../../src/dex/ekubo-v3/ekubo-v3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
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 { ConcentratedPoolTypeConfig, PoolKey, SwappedEvent } from './utils';
7
+ export declare const GAS_COST_OF_ONE_EXTRA_BITMAP_SLOAD = 2000;
8
+ export declare class BasePool extends EkuboPool<ConcentratedPoolTypeConfig, BasePoolState.Object> {
9
+ private readonly quoteDataFetcher;
10
+ constructor(parentName: string, dexHelper: IDexHelper, logger: Logger, contracts: EkuboContracts, initBlockNumber: number, key: PoolKey<ConcentratedPoolTypeConfig>);
11
+ generateState(blockNumber: number): Promise<DeepReadonly<BasePoolState.Object>>;
12
+ protected _quote(amount: bigint, isToken1: boolean, state: DeepReadonly<BasePoolState.Object>, sqrtRatioLimit?: bigint): Quote;
13
+ quoteBase(this: PoolKeyed<ConcentratedPoolTypeConfig>, amount: bigint, isToken1: boolean, state: DeepReadonly<BasePoolState.Object>, sqrtRatioLimit?: bigint): Quote<Pick<BasePoolState.Object, 'activeTickIndex' | 'sqrtRatio' | 'liquidity'>>;
14
+ protected _computeTvl(state: BasePoolState.Object): [bigint, bigint];
15
+ }
16
+ export declare function initializedTicksCrossedGasCosts(initializedTicksCrossed: number): number;
17
+ export interface Tick {
18
+ readonly number: number;
19
+ liquidityDelta: bigint;
20
+ }
21
+ /**
22
+ * Returns the index in the sorted tick array that has the greatest value of tick that is not greater than the given tick
23
+ * @param sortedTicks the sorted list of ticks to search in
24
+ * @param tick the tick to search for
25
+ */
26
+ export declare function findNearestInitializedTickIndex(sortedTicks: Tick[], tick: number): number | null;
27
+ export declare namespace BasePoolState {
28
+ type Object = {
29
+ sqrtRatio: bigint;
30
+ liquidity: bigint;
31
+ activeTick: number;
32
+ readonly sortedTicks: Tick[];
33
+ activeTickIndex: number | null;
34
+ readonly checkedTicksBounds: readonly [number, number];
35
+ };
36
+ function fromPoolInitialization(state: PoolInitializationState): DeepReadonly<Object>;
37
+ function fromQuoter(data: BasicQuoteData): DeepReadonly<Object>;
38
+ function fromSwappedEvent(oldState: DeepReadonly<Object>, ev: SwappedEvent): Object;
39
+ function fromPositionUpdatedEvent(oldState: DeepReadonly<Object>, [lowTick, highTick]: [number, number], liquidityDelta: bigint): Object | null;
40
+ function addLiquidityCutoffs(state: BasePoolState.Object): void;
41
+ function computeTvl(state: DeepReadonly<Object>): [bigint, bigint];
42
+ }
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BasePoolState = exports.BasePool = exports.GAS_COST_OF_ONE_EXTRA_BITMAP_SLOAD = void 0;
4
+ exports.initializedTicksCrossedGasCosts = initializedTicksCrossedGasCosts;
5
+ exports.findNearestInitializedTickIndex = findNearestInitializedTickIndex;
6
+ const pool_1 = require("./pool");
7
+ const sqrt_ratio_1 = require("./math/sqrt-ratio");
8
+ const swap_1 = require("./math/swap");
9
+ const tick_1 = require("./math/tick");
10
+ const utils_1 = require("./utils");
11
+ const delta_1 = require("./math/delta");
12
+ const utils_2 = require("ethers/lib/utils");
13
+ const ethers_1 = require("ethers");
14
+ const GAS_COST_OF_ONE_CL_SWAP = 19_632;
15
+ // TODO Estimates are still from v2
16
+ const GAS_COST_OF_ONE_INITIALIZED_TICK_CROSSED = 13_700;
17
+ exports.GAS_COST_OF_ONE_EXTRA_BITMAP_SLOAD = 2_000;
18
+ const GAS_COST_OF_ONE_EXTRA_MATH_ROUND = 5_750;
19
+ class BasePool extends pool_1.EkuboPool {
20
+ quoteDataFetcher;
21
+ constructor(parentName, dexHelper, logger, contracts, initBlockNumber, key) {
22
+ const { contract: { address }, interface: iface, quoteDataFetcher, } = contracts.core;
23
+ super(parentName, dexHelper, logger, initBlockNumber, key, {
24
+ [address]: new pool_1.NamedEventHandlers(iface, {
25
+ PositionUpdated: (args, oldState) => {
26
+ const [lower, upper] = [
27
+ ethers_1.BigNumber.from((0, utils_2.hexDataSlice)(args.positionId, 24, 28))
28
+ .fromTwos(32)
29
+ .toNumber(),
30
+ ethers_1.BigNumber.from((0, utils_2.hexDataSlice)(args.positionId, 28, 32))
31
+ .fromTwos(32)
32
+ .toNumber(),
33
+ ];
34
+ return BasePoolState.fromPositionUpdatedEvent(oldState, [lower, upper], args.liquidityDelta.toBigInt());
35
+ },
36
+ }),
37
+ }, {
38
+ [address]: (data, oldState) => BasePoolState.fromSwappedEvent(oldState, (0, utils_1.parseSwappedEvent)(data)),
39
+ });
40
+ this.quoteDataFetcher = quoteDataFetcher;
41
+ }
42
+ async generateState(blockNumber) {
43
+ const data = await this.quoteDataFetcher.getQuoteData([this.key.toAbi()], 10, {
44
+ blockTag: blockNumber,
45
+ });
46
+ return BasePoolState.fromQuoter(data[0]);
47
+ }
48
+ _quote(amount, isToken1, state, sqrtRatioLimit) {
49
+ return this.quoteBase(amount, isToken1, state, sqrtRatioLimit);
50
+ }
51
+ quoteBase(amount, isToken1, state, sqrtRatioLimit) {
52
+ const isIncreasing = (0, swap_1.isPriceIncreasing)(amount, isToken1);
53
+ let { sqrtRatio, liquidity, activeTickIndex, sortedTicks } = state;
54
+ sqrtRatioLimit ??= isIncreasing ? tick_1.MAX_SQRT_RATIO : tick_1.MIN_SQRT_RATIO;
55
+ let calculatedAmount = 0n;
56
+ let initializedTicksCrossed = 0;
57
+ let amountRemaining = amount;
58
+ const startingSqrtRatio = sqrtRatio;
59
+ while (amountRemaining !== 0n && sqrtRatio !== sqrtRatioLimit) {
60
+ const nextInitializedTick = (isIncreasing
61
+ ? sortedTicks[activeTickIndex === null ? 0 : activeTickIndex + 1]
62
+ : activeTickIndex === null
63
+ ? null
64
+ : sortedTicks[activeTickIndex]) ?? null;
65
+ const nextInitializedTickSqrtRatio = nextInitializedTick
66
+ ? (0, tick_1.toSqrtRatio)(nextInitializedTick.number)
67
+ : null;
68
+ const stepSqrtRatioLimit = nextInitializedTickSqrtRatio === null
69
+ ? sqrtRatioLimit
70
+ : nextInitializedTickSqrtRatio < sqrtRatioLimit === isIncreasing
71
+ ? nextInitializedTickSqrtRatio
72
+ : sqrtRatioLimit;
73
+ const step = (0, swap_1.computeStep)({
74
+ fee: this.key.config.fee,
75
+ sqrtRatio,
76
+ liquidity,
77
+ isToken1,
78
+ sqrtRatioLimit: stepSqrtRatioLimit,
79
+ amount: amountRemaining,
80
+ });
81
+ amountRemaining -= step.consumedAmount;
82
+ calculatedAmount += step.calculatedAmount;
83
+ sqrtRatio = step.sqrtRatioNext;
84
+ // Cross the tick if the price moved all the way to the next initialized tick price
85
+ if (nextInitializedTick && sqrtRatio === nextInitializedTickSqrtRatio) {
86
+ activeTickIndex = isIncreasing
87
+ ? activeTickIndex === null
88
+ ? 0
89
+ : activeTickIndex + 1
90
+ : activeTickIndex
91
+ ? activeTickIndex - 1
92
+ : null;
93
+ initializedTicksCrossed++;
94
+ liquidity += isIncreasing
95
+ ? nextInitializedTick.liquidityDelta
96
+ : -nextInitializedTick.liquidityDelta;
97
+ }
98
+ }
99
+ const tickSpacingsCrossed = (0, tick_1.approximateNumberOfTickSpacingsCrossed)(startingSqrtRatio, sqrtRatio, this.key.config.poolTypeConfig.tickSpacing);
100
+ return {
101
+ consumedAmount: amount - amountRemaining,
102
+ calculatedAmount,
103
+ gasConsumed: GAS_COST_OF_ONE_CL_SWAP +
104
+ initializedTicksCrossedGasCosts(initializedTicksCrossed) +
105
+ (tickSpacingsCrossed / 256) *
106
+ (GAS_COST_OF_ONE_EXTRA_MATH_ROUND +
107
+ exports.GAS_COST_OF_ONE_EXTRA_BITMAP_SLOAD),
108
+ skipAhead: initializedTicksCrossed === 0
109
+ ? 0
110
+ : Math.floor(tickSpacingsCrossed / initializedTicksCrossed),
111
+ stateAfter: {
112
+ sqrtRatio,
113
+ liquidity,
114
+ activeTickIndex,
115
+ },
116
+ };
117
+ }
118
+ _computeTvl(state) {
119
+ return BasePoolState.computeTvl(state);
120
+ }
121
+ }
122
+ exports.BasePool = BasePool;
123
+ function initializedTicksCrossedGasCosts(initializedTicksCrossed) {
124
+ return (initializedTicksCrossed *
125
+ (GAS_COST_OF_ONE_EXTRA_MATH_ROUND +
126
+ GAS_COST_OF_ONE_INITIALIZED_TICK_CROSSED));
127
+ }
128
+ /**
129
+ * Returns the index in the sorted tick array that has the greatest value of tick that is not greater than the given tick
130
+ * @param sortedTicks the sorted list of ticks to search in
131
+ * @param tick the tick to search for
132
+ */
133
+ function findNearestInitializedTickIndex(sortedTicks, tick) {
134
+ let l = 0, r = sortedTicks.length;
135
+ while (l < r) {
136
+ const mid = Math.floor((l + r) / 2);
137
+ const midTick = sortedTicks[mid].number;
138
+ if (midTick <= tick) {
139
+ // If it's the last index, or the next tick is greater, we've found our index
140
+ if (mid === sortedTicks.length - 1 ||
141
+ sortedTicks[mid + 1].number > tick) {
142
+ return mid;
143
+ }
144
+ else {
145
+ // Otherwise our value is to the right of this one
146
+ l = mid;
147
+ }
148
+ }
149
+ else {
150
+ // The mid tick is greater than the one we want, so we know it's not mid
151
+ r = mid;
152
+ }
153
+ }
154
+ return null;
155
+ }
156
+ var BasePoolState;
157
+ (function (BasePoolState) {
158
+ function fromPoolInitialization(state) {
159
+ return {
160
+ sqrtRatio: state.sqrtRatio,
161
+ liquidity: 0n,
162
+ activeTick: state.tick,
163
+ sortedTicks: [
164
+ { number: tick_1.MIN_TICK, liquidityDelta: 0n },
165
+ { number: tick_1.MAX_TICK, liquidityDelta: 0n },
166
+ ],
167
+ activeTickIndex: null,
168
+ checkedTicksBounds: [tick_1.MIN_TICK, tick_1.MAX_TICK],
169
+ };
170
+ }
171
+ BasePoolState.fromPoolInitialization = fromPoolInitialization;
172
+ function fromQuoter(data) {
173
+ const sortedTicks = data.ticks.map(({ number, liquidityDelta }) => ({
174
+ number,
175
+ liquidityDelta: liquidityDelta.toBigInt(),
176
+ }));
177
+ const liquidity = data.liquidity.toBigInt();
178
+ const sqrtRatioFloat = data.sqrtRatio.toBigInt();
179
+ const state = {
180
+ sqrtRatio: (0, sqrt_ratio_1.floatSqrtRatioToFixed)(sqrtRatioFloat),
181
+ liquidity,
182
+ activeTick: data.tick,
183
+ sortedTicks,
184
+ activeTickIndex: null, // This will be filled in
185
+ checkedTicksBounds: [data.minTick, data.maxTick],
186
+ };
187
+ addLiquidityCutoffs(state);
188
+ return state;
189
+ }
190
+ BasePoolState.fromQuoter = fromQuoter;
191
+ function fromSwappedEvent(oldState, ev) {
192
+ const sortedTicks = oldState.sortedTicks;
193
+ const clonedTicks = structuredClone(sortedTicks);
194
+ return {
195
+ sqrtRatio: ev.sqrtRatioAfter,
196
+ liquidity: ev.liquidityAfter,
197
+ activeTick: ev.tickAfter,
198
+ sortedTicks: clonedTicks,
199
+ activeTickIndex: findNearestInitializedTickIndex(clonedTicks, ev.tickAfter),
200
+ checkedTicksBounds: oldState.checkedTicksBounds,
201
+ };
202
+ }
203
+ BasePoolState.fromSwappedEvent = fromSwappedEvent;
204
+ function fromPositionUpdatedEvent(oldState, [lowTick, highTick], liquidityDelta) {
205
+ if (liquidityDelta === 0n) {
206
+ return null;
207
+ }
208
+ const clonedState = structuredClone(oldState);
209
+ updateTick(clonedState, lowTick, liquidityDelta, false, false);
210
+ updateTick(clonedState, highTick, liquidityDelta, true, false);
211
+ if (clonedState.activeTick >= lowTick &&
212
+ clonedState.activeTick < highTick) {
213
+ clonedState.liquidity += liquidityDelta;
214
+ }
215
+ return clonedState;
216
+ }
217
+ BasePoolState.fromPositionUpdatedEvent = fromPositionUpdatedEvent;
218
+ function addLiquidityCutoffs(state) {
219
+ const { sortedTicks, liquidity, activeTick } = state;
220
+ let activeTickIndex = undefined;
221
+ let currentLiquidity = 0n;
222
+ // The liquidity added/removed by out-of-range initialized ticks (i.e. lower than minCheckedTickNumber)
223
+ let liquidityDeltaMin = 0n;
224
+ for (let i = 0; i < sortedTicks.length; i++) {
225
+ const tick = sortedTicks[i];
226
+ if (typeof activeTickIndex === 'undefined' && activeTick < tick.number) {
227
+ activeTickIndex = i === 0 ? null : i - 1;
228
+ liquidityDeltaMin = liquidity - currentLiquidity;
229
+ // We now need to switch to tracking the liquidity that needs to be cut off at maxCheckedTickNumber, therefore reset to the actual liquidity
230
+ currentLiquidity = liquidity;
231
+ }
232
+ currentLiquidity += tick.liquidityDelta;
233
+ }
234
+ if (typeof activeTickIndex === 'undefined') {
235
+ activeTickIndex = sortedTicks.length > 0 ? sortedTicks.length - 1 : null;
236
+ liquidityDeltaMin = liquidity - currentLiquidity;
237
+ currentLiquidity = liquidity;
238
+ }
239
+ state.activeTickIndex = activeTickIndex;
240
+ updateTick(state, state.checkedTicksBounds[0], liquidityDeltaMin, false, true);
241
+ updateTick(state, state.checkedTicksBounds[1], currentLiquidity, true, true);
242
+ }
243
+ BasePoolState.addLiquidityCutoffs = addLiquidityCutoffs;
244
+ function updateTick(state, updatedTickNumber, liquidityDelta, upper, forceInsert) {
245
+ const sortedTicks = state.sortedTicks;
246
+ if (upper) {
247
+ liquidityDelta = -liquidityDelta;
248
+ }
249
+ const nearestTickIndex = findNearestInitializedTickIndex(sortedTicks, updatedTickNumber);
250
+ const nearestTick = nearestTickIndex === null ? null : sortedTicks[nearestTickIndex];
251
+ const nearestTickNumber = nearestTick?.number;
252
+ const newTickReferenced = nearestTickNumber !== updatedTickNumber;
253
+ if (newTickReferenced) {
254
+ if (!forceInsert && nearestTickIndex === null) {
255
+ sortedTicks[0].liquidityDelta += liquidityDelta;
256
+ }
257
+ else if (!forceInsert && nearestTickIndex === sortedTicks.length - 1) {
258
+ sortedTicks[sortedTicks.length - 1].liquidityDelta += liquidityDelta;
259
+ }
260
+ else {
261
+ sortedTicks.splice(nearestTickIndex === null ? 0 : nearestTickIndex + 1, 0, {
262
+ number: updatedTickNumber,
263
+ liquidityDelta,
264
+ });
265
+ if (state.activeTick >= updatedTickNumber) {
266
+ state.activeTickIndex =
267
+ state.activeTickIndex === null ? 0 : state.activeTickIndex + 1;
268
+ }
269
+ }
270
+ }
271
+ else {
272
+ const newDelta = nearestTick.liquidityDelta + liquidityDelta;
273
+ if (newDelta === 0n &&
274
+ !state.checkedTicksBounds.includes(nearestTickNumber)) {
275
+ sortedTicks.splice(nearestTickIndex, 1);
276
+ if (state.activeTick >= updatedTickNumber) {
277
+ state.activeTickIndex--;
278
+ }
279
+ }
280
+ else {
281
+ nearestTick.liquidityDelta = newDelta;
282
+ }
283
+ }
284
+ }
285
+ function computeTvl(state) {
286
+ const stateSqrtRatio = state.sqrtRatio;
287
+ let [tvl0, tvl1] = [0n, 0n];
288
+ let liquidity = 0n;
289
+ let sqrtRatio = tick_1.MIN_SQRT_RATIO;
290
+ for (const tick of state.sortedTicks) {
291
+ const tickSqrtRatio = (0, tick_1.toSqrtRatio)(tick.number);
292
+ const minAmount1SqrtRatio = stateSqrtRatio > tickSqrtRatio ? tickSqrtRatio : stateSqrtRatio;
293
+ const maxAmount0SqrtRatio = stateSqrtRatio > sqrtRatio ? stateSqrtRatio : sqrtRatio;
294
+ if (sqrtRatio < minAmount1SqrtRatio) {
295
+ tvl1 += (0, delta_1.amount1Delta)(sqrtRatio, minAmount1SqrtRatio, liquidity, false);
296
+ }
297
+ if (maxAmount0SqrtRatio < tickSqrtRatio) {
298
+ tvl0 += (0, delta_1.amount0Delta)(maxAmount0SqrtRatio, tickSqrtRatio, liquidity, false);
299
+ }
300
+ sqrtRatio = tickSqrtRatio;
301
+ liquidity += tick.liquidityDelta;
302
+ }
303
+ return [tvl0, tvl1];
304
+ }
305
+ BasePoolState.computeTvl = computeTvl;
306
+ })(BasePoolState || (exports.BasePoolState = BasePoolState = {}));
307
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/dex/ekubo-v3/pools/base.ts"],"names":[],"mappings":"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"}