@paraswap/dex-lib 4.8.21 → 4.8.22

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 (38) hide show
  1. package/build/abi/pancakeswap-infinity/cl-pool-manager.abi.json +136 -0
  2. package/build/abi/pancakeswap-infinity/cl-quoter.abi.json +66 -0
  3. package/build/abi/pancakeswap-infinity/router.abi.json +23 -0
  4. package/build/dex/pancakeswap-infinity/config.d.ts +4 -0
  5. package/build/dex/pancakeswap-infinity/config.js +30 -0
  6. package/build/dex/pancakeswap-infinity/config.js.map +1 -0
  7. package/build/dex/pancakeswap-infinity/constants.d.ts +11 -0
  8. package/build/dex/pancakeswap-infinity/constants.js +15 -0
  9. package/build/dex/pancakeswap-infinity/constants.js.map +1 -0
  10. package/build/dex/pancakeswap-infinity/encoder.d.ts +16 -0
  11. package/build/dex/pancakeswap-infinity/encoder.js +289 -0
  12. package/build/dex/pancakeswap-infinity/encoder.js.map +1 -0
  13. package/build/dex/pancakeswap-infinity/liquidity.d.ts +1 -0
  14. package/build/dex/pancakeswap-infinity/liquidity.js +7 -0
  15. package/build/dex/pancakeswap-infinity/liquidity.js.map +1 -0
  16. package/build/dex/pancakeswap-infinity/optimizer.d.ts +2 -0
  17. package/build/dex/pancakeswap-infinity/optimizer.js +48 -0
  18. package/build/dex/pancakeswap-infinity/optimizer.js.map +1 -0
  19. package/build/dex/pancakeswap-infinity/pancakeswap-infinity-pool-manager.d.ts +36 -0
  20. package/build/dex/pancakeswap-infinity/pancakeswap-infinity-pool-manager.js +393 -0
  21. package/build/dex/pancakeswap-infinity/pancakeswap-infinity-pool-manager.js.map +1 -0
  22. package/build/dex/pancakeswap-infinity/pancakeswap-infinity-pool.d.ts +37 -0
  23. package/build/dex/pancakeswap-infinity/pancakeswap-infinity-pool.js +289 -0
  24. package/build/dex/pancakeswap-infinity/pancakeswap-infinity-pool.js.map +1 -0
  25. package/build/dex/pancakeswap-infinity/pancakeswap-infinity.d.ts +42 -0
  26. package/build/dex/pancakeswap-infinity/pancakeswap-infinity.js +350 -0
  27. package/build/dex/pancakeswap-infinity/pancakeswap-infinity.js.map +1 -0
  28. package/build/dex/pancakeswap-infinity/subgraph.d.ts +8 -0
  29. package/build/dex/pancakeswap-infinity/subgraph.js +122 -0
  30. package/build/dex/pancakeswap-infinity/subgraph.js.map +1 -0
  31. package/build/dex/pancakeswap-infinity/types.d.ts +101 -0
  32. package/build/dex/pancakeswap-infinity/types.js +3 -0
  33. package/build/dex/pancakeswap-infinity/types.js.map +1 -0
  34. package/build/dex/pancakeswap-infinity/utils.d.ts +5 -0
  35. package/build/dex/pancakeswap-infinity/utils.js +45 -0
  36. package/build/dex/pancakeswap-infinity/utils.js.map +1 -0
  37. package/build/dex/uniswap-v3/config.js +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PancakeSwapInfinityPool = void 0;
7
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
8
+ const utils_1 = require("ethers/lib/utils");
9
+ const cl_pool_manager_abi_json_1 = __importDefault(require("../../abi/pancakeswap-infinity/cl-pool-manager.abi.json"));
10
+ const lodash_1 = __importDefault(require("lodash"));
11
+ const utils_2 = require("../../utils");
12
+ // CL pool math is identical to UniswapV4
13
+ const uniswap_v4_pool_math_1 = require("../uniswap-v4/contract-math/uniswap-v4-pool-math");
14
+ const constants_1 = require("./constants");
15
+ class PancakeSwapInfinityPool extends stateful_event_subscriber_1.StatefulEventSubscriber {
16
+ dexHelper;
17
+ network;
18
+ config;
19
+ logger;
20
+ poolId;
21
+ token0;
22
+ token1;
23
+ fee;
24
+ hooks;
25
+ tickSpacing;
26
+ handlers = {};
27
+ logDecoder;
28
+ clPoolManagerIface;
29
+ constructor(dexHelper, parentName, network, config, logger, mapKey = '', poolId, token0, token1, fee, hooks, tickSpacing) {
30
+ super(parentName, poolId, dexHelper, logger, true, mapKey);
31
+ this.dexHelper = dexHelper;
32
+ this.network = network;
33
+ this.config = config;
34
+ this.logger = logger;
35
+ this.poolId = poolId;
36
+ this.token0 = token0;
37
+ this.token1 = token1;
38
+ this.fee = fee;
39
+ this.hooks = hooks;
40
+ this.tickSpacing = tickSpacing;
41
+ this.clPoolManagerIface = new utils_1.Interface(cl_pool_manager_abi_json_1.default);
42
+ // Subscribe to events from CLPoolManager
43
+ this.addressesSubscribed = [this.config.clPoolManager];
44
+ this.logDecoder = (log) => this.clPoolManagerIface.parseLog(log);
45
+ this.handlers['Swap'] = this.handleSwapEvent.bind(this);
46
+ this.handlers['Donate'] = this.handleDonateEvent.bind(this);
47
+ this.handlers['ProtocolFeeUpdated'] =
48
+ this.handleProtocolFeeUpdatedEvent.bind(this);
49
+ this.handlers['DynamicLPFeeUpdated'] =
50
+ this.handleDynamicLPFeeUpdatedEvent.bind(this);
51
+ this.handlers['ModifyLiquidity'] =
52
+ this.handleModifyLiquidityEvent.bind(this);
53
+ }
54
+ async initialize(blockNumber, options) {
55
+ await super.initialize(blockNumber, options);
56
+ }
57
+ getPoolIdentifierData() {
58
+ return {
59
+ poolId: this.poolId,
60
+ };
61
+ }
62
+ async getOrGenerateState(blockNumber) {
63
+ let state = this.getState(blockNumber);
64
+ if (!state) {
65
+ this.logger.warn(`${this.parentName}: No state found on block ${blockNumber} for pool ${this.poolId}, generating new one`);
66
+ state = await this.generateState(blockNumber);
67
+ this.setState(state, blockNumber);
68
+ }
69
+ return state;
70
+ }
71
+ async generateState(blockNumber) {
72
+ // Round 1: Get slot0, liquidity, feeGrowthGlobals
73
+ const round1Calls = [
74
+ {
75
+ target: this.config.clPoolManager,
76
+ callData: this.clPoolManagerIface.encodeFunctionData('getSlot0', [
77
+ this.poolId,
78
+ ]),
79
+ decodeFunction: (result) => {
80
+ if (typeof result === 'object' && 'success' in result) {
81
+ if (!result.success)
82
+ return null;
83
+ return this.clPoolManagerIface.decodeFunctionResult('getSlot0', result.returnData);
84
+ }
85
+ return this.clPoolManagerIface.decodeFunctionResult('getSlot0', result);
86
+ },
87
+ },
88
+ {
89
+ target: this.config.clPoolManager,
90
+ callData: this.clPoolManagerIface.encodeFunctionData('getLiquidity', [
91
+ this.poolId,
92
+ ]),
93
+ decodeFunction: (result) => {
94
+ if (typeof result === 'object' && 'success' in result) {
95
+ if (!result.success)
96
+ return null;
97
+ return this.clPoolManagerIface.decodeFunctionResult('getLiquidity', result.returnData);
98
+ }
99
+ return this.clPoolManagerIface.decodeFunctionResult('getLiquidity', result);
100
+ },
101
+ },
102
+ {
103
+ target: this.config.clPoolManager,
104
+ callData: this.clPoolManagerIface.encodeFunctionData('getFeeGrowthGlobals', [this.poolId]),
105
+ decodeFunction: (result) => {
106
+ if (typeof result === 'object' && 'success' in result) {
107
+ if (!result.success)
108
+ return null;
109
+ return this.clPoolManagerIface.decodeFunctionResult('getFeeGrowthGlobals', result.returnData);
110
+ }
111
+ return this.clPoolManagerIface.decodeFunctionResult('getFeeGrowthGlobals', result);
112
+ },
113
+ },
114
+ ];
115
+ const round1Results = await this.dexHelper.multiWrapper.tryAggregate(false, round1Calls, blockNumber);
116
+ const slot0Data = round1Results[0].returnData;
117
+ const liquidityData = round1Results[1].returnData;
118
+ const feeGrowthData = round1Results[2].returnData;
119
+ if (!slot0Data || !liquidityData || !feeGrowthData) {
120
+ throw new Error(`Failed to fetch base state for pool ${this.poolId}`);
121
+ }
122
+ const currentTick = BigInt(slot0Data.tick);
123
+ const tickSpacing = parseInt(this.tickSpacing);
124
+ // Compute bitmap word position for current tick
125
+ const compressed = Number(currentTick) / tickSpacing;
126
+ const currentWordPos = Math.floor(compressed / 256);
127
+ const bitmapRange = Number(this.getBitmapRange());
128
+ // Round 2: Get bitmap words around current tick
129
+ const bitmapCalls = [];
130
+ for (let i = currentWordPos - bitmapRange; i <= currentWordPos + bitmapRange; i++) {
131
+ bitmapCalls.push({
132
+ target: this.config.clPoolManager,
133
+ callData: this.clPoolManagerIface.encodeFunctionData('getPoolBitmapInfo', [this.poolId, i]),
134
+ decodeFunction: (result) => {
135
+ if (typeof result === 'object' && 'success' in result) {
136
+ if (!result.success)
137
+ return 0n;
138
+ return this.clPoolManagerIface.decodeFunctionResult('getPoolBitmapInfo', result.returnData)[0];
139
+ }
140
+ return this.clPoolManagerIface.decodeFunctionResult('getPoolBitmapInfo', result)[0];
141
+ },
142
+ });
143
+ }
144
+ const bitmapResults = await this.dexHelper.multiWrapper.tryAggregate(false, bitmapCalls, blockNumber);
145
+ // Parse bitmaps and find populated ticks
146
+ const tickBitMapResults = {};
147
+ const populatedTicks = [];
148
+ for (let i = 0; i < bitmapResults.length; i++) {
149
+ const wordPos = currentWordPos - bitmapRange + i;
150
+ const bitmap = BigInt(bitmapResults[i].returnData ?? 0n);
151
+ tickBitMapResults[wordPos.toString()] = bitmap;
152
+ if (bitmap === 0n)
153
+ continue;
154
+ for (let bit = 0; bit < 256; bit++) {
155
+ if ((bitmap >> BigInt(bit)) & 1n) {
156
+ const tick = (wordPos * 256 + bit) * tickSpacing;
157
+ populatedTicks.push(tick);
158
+ }
159
+ }
160
+ }
161
+ // Round 3: Get tick info for populated ticks
162
+ const ticksResults = {};
163
+ if (populatedTicks.length > 0) {
164
+ const tickCalls = populatedTicks.map(tick => ({
165
+ target: this.config.clPoolManager,
166
+ callData: this.clPoolManagerIface.encodeFunctionData('getPoolTickInfo', [this.poolId, tick]),
167
+ decodeFunction: (result) => {
168
+ if (typeof result === 'object' && 'success' in result) {
169
+ if (!result.success)
170
+ return null;
171
+ return this.clPoolManagerIface.decodeFunctionResult('getPoolTickInfo', result.returnData);
172
+ }
173
+ return this.clPoolManagerIface.decodeFunctionResult('getPoolTickInfo', result);
174
+ },
175
+ }));
176
+ const tickResults = await this.dexHelper.multiWrapper.tryAggregate(false, tickCalls, blockNumber, 50, false);
177
+ for (let i = 0; i < populatedTicks.length; i++) {
178
+ const tickData = tickResults[i].returnData;
179
+ if (tickData) {
180
+ const info = tickData.info || tickData[0];
181
+ const liquidityGross = BigInt(info.liquidityGross);
182
+ if (liquidityGross > 0n) {
183
+ ticksResults[populatedTicks[i].toString()] = {
184
+ liquidityGross,
185
+ liquidityNet: BigInt(info.liquidityNet),
186
+ };
187
+ }
188
+ }
189
+ }
190
+ }
191
+ return {
192
+ id: this.poolId,
193
+ token0: this.token0.toLowerCase(),
194
+ token1: this.token1.toLowerCase(),
195
+ fee: this.fee,
196
+ hooks: this.hooks,
197
+ feeGrowthGlobal0X128: BigInt(feeGrowthData[0]),
198
+ feeGrowthGlobal1X128: BigInt(feeGrowthData[1]),
199
+ liquidity: BigInt(liquidityData[0]),
200
+ slot0: {
201
+ sqrtPriceX96: BigInt(slot0Data.sqrtPriceX96),
202
+ tick: BigInt(slot0Data.tick),
203
+ protocolFee: BigInt(slot0Data.protocolFee),
204
+ lpFee: BigInt(slot0Data.lpFee),
205
+ },
206
+ tickSpacing: parseInt(this.tickSpacing),
207
+ ticks: ticksResults,
208
+ tickBitmap: tickBitMapResults,
209
+ isValid: true,
210
+ };
211
+ }
212
+ getBitmapRange() {
213
+ const networkId = this.dexHelper.config.data.network;
214
+ const tickBitMapToUse = constants_1.TICK_BITMAP_TO_USE_BY_CHAIN[networkId] ?? constants_1.TICK_BITMAP_TO_USE;
215
+ const tickBitMapBuffer = constants_1.TICK_BITMAP_BUFFER_BY_CHAIN[networkId] ?? constants_1.TICK_BITMAP_BUFFER;
216
+ return tickBitMapToUse + tickBitMapBuffer;
217
+ }
218
+ async processBlockLogs(state, logs, blockHeader) {
219
+ const newState = await super.processBlockLogs(state, logs, blockHeader);
220
+ if (newState && !newState.isValid) {
221
+ return await this.generateState(blockHeader.number);
222
+ }
223
+ return newState;
224
+ }
225
+ async processLog(state, log, blockHeader) {
226
+ try {
227
+ const event = this.logDecoder(log);
228
+ if (event.name in this.handlers) {
229
+ const id = event.args.id.toLowerCase();
230
+ if (id && id !== this.poolId.toLowerCase())
231
+ return null;
232
+ const _state = lodash_1.default.cloneDeep(state);
233
+ try {
234
+ return this.handlers[event.name](event, _state, log, blockHeader);
235
+ }
236
+ catch (e) {
237
+ this.logger.error(`${this.parentName}: CLPoolManager ${this.config.clPoolManager} (pool id ${this.poolId}), ` +
238
+ `network=${this.dexHelper.config.data.network}: Unexpected ` +
239
+ `error while handling event on blockNumber=${blockHeader.number} for ${this.parentName}, txHash=${log.transactionHash}, logIndex=${log.logIndex}, event=${event?.name}`, e);
240
+ _state.isValid = false;
241
+ return _state;
242
+ }
243
+ }
244
+ }
245
+ catch (e) {
246
+ (0, utils_2.catchParseLogError)(e, this.logger);
247
+ }
248
+ return null;
249
+ }
250
+ handleProtocolFeeUpdatedEvent(event, poolState) {
251
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.checkPoolInitialized(poolState);
252
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.setProtocolFee(poolState, event.args.protocolFee);
253
+ return poolState;
254
+ }
255
+ handleDynamicLPFeeUpdatedEvent(event, poolState) {
256
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.checkPoolInitialized(poolState);
257
+ poolState.slot0.lpFee = BigInt(event.args.dynamicLPFee);
258
+ return poolState;
259
+ }
260
+ handleDonateEvent(event, poolState) {
261
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.checkPoolInitialized(poolState);
262
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.donate(poolState, BigInt(event.args.amount0), BigInt(event.args.amount1));
263
+ return poolState;
264
+ }
265
+ handleSwapEvent(event, poolState) {
266
+ const amount0 = BigInt(event.args.amount0);
267
+ const amount1 = BigInt(event.args.amount1);
268
+ const resultSqrtPriceX96 = BigInt(event.args.sqrtPriceX96);
269
+ const resultLiquidity = BigInt(event.args.liquidity);
270
+ const resultTick = BigInt(event.args.tick);
271
+ const resultSwapFee = BigInt(event.args.fee);
272
+ const zeroForOne = amount0 < 0n;
273
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.checkPoolInitialized(poolState);
274
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.swapFromEvent(poolState, zeroForOne, resultSqrtPriceX96, resultTick, resultLiquidity, resultSwapFee, amount0, amount1, this.logger);
275
+ return poolState;
276
+ }
277
+ handleModifyLiquidityEvent(event, poolState, _) {
278
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.checkPoolInitialized(poolState);
279
+ uniswap_v4_pool_math_1.uniswapV4PoolMath.modifyLiquidity(poolState, {
280
+ liquidityDelta: BigInt(event.args.liquidityDelta),
281
+ tickUpper: BigInt(event.args.tickUpper),
282
+ tickLower: BigInt(event.args.tickLower),
283
+ tickSpacing: BigInt(poolState.tickSpacing),
284
+ });
285
+ return poolState;
286
+ }
287
+ }
288
+ exports.PancakeSwapInfinityPool = PancakeSwapInfinityPool;
289
+ //# sourceMappingURL=pancakeswap-infinity-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pancakeswap-infinity-pool.js","sourceRoot":"","sources":["../../../src/dex/pancakeswap-infinity/pancakeswap-infinity-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { AdapterExchangeParam, Address, DexExchangeParam, ExchangePrices, NumberAsString, PoolLiquidity, PoolPrices, Token } from '../../types';
2
+ import { Logger } from 'log4js';
3
+ import { Network } from '../../constants';
4
+ import { IDexHelper } from '../../dex-helper';
5
+ import { IDex } from '../idex';
6
+ import { SimpleExchange } from '../simple-exchange';
7
+ import { Pool, PancakeSwapInfinityData, PoolState } from './types';
8
+ import { Interface } from '@ethersproject/abi';
9
+ import { DeepReadonly } from 'ts-essentials';
10
+ import { SwapSide } from '@paraswap/core';
11
+ export declare class PancakeSwapInfinity extends SimpleExchange implements IDex<PancakeSwapInfinityData> {
12
+ protected network: Network;
13
+ protected dexHelper: IDexHelper;
14
+ protected routerAddress: string;
15
+ protected quoterAddress: string;
16
+ protected clPoolManagerAddress: string;
17
+ readonly hasConstantPriceLargeAmounts = false;
18
+ needWrapNative: boolean;
19
+ logger: Logger;
20
+ protected quoterIface: Interface;
21
+ private poolManager;
22
+ static dexKeysWithNetwork: {
23
+ key: string;
24
+ networks: Network[];
25
+ }[];
26
+ private wethAddress;
27
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, routerAddress?: string, quoterAddress?: string, clPoolManagerAddress?: string);
28
+ initializePricing(blockNumber: number): Promise<void>;
29
+ addMasterPool(poolKey: string, blockNumber: number): Promise<boolean>;
30
+ getPoolIdentifiers(from: Token, to: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
31
+ protected _getOutputs(pool: Pool, state: DeepReadonly<PoolState>, amounts: bigint[], zeroForOne: boolean, side: SwapSide): bigint[] | null;
32
+ getPricesVolume(from: Token, to: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<ExchangePrices<PancakeSwapInfinityData> | null>;
33
+ getCalldataGasCost(poolPrices: PoolPrices<PancakeSwapInfinityData>): number | number[];
34
+ getAdapters(side: SwapSide): {
35
+ name: string;
36
+ index: number;
37
+ }[] | null;
38
+ getTopPoolsForToken(_tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
39
+ queryPriceFromRpc(zeroForOne: boolean, amounts: bigint[], pool: Pool, side: SwapSide, blockNumber: number): Promise<bigint[]>;
40
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: PancakeSwapInfinityData, side: SwapSide): DexExchangeParam;
41
+ getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: PancakeSwapInfinityData, side: SwapSide): AdapterExchangeParam;
42
+ }