@paraswap/dex-lib 4.2.30-fluid-base.0 → 4.2.30

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.
@@ -0,0 +1,26 @@
1
+ import { Network } from '../../constants';
2
+ import { IDexHelper } from '../../dex-helper';
3
+ import { MultiCallParams } from '../../lib/multi-wrapper';
4
+ import { Address, PoolLiquidity, Token } from '../../types';
5
+ import { Solidly } from './solidly';
6
+ type Pool = {
7
+ address: Address;
8
+ token0: Token;
9
+ token1: Token;
10
+ reserve0: bigint;
11
+ reserve1: bigint;
12
+ };
13
+ export declare class SolidlyRpcPoolTracker extends Solidly {
14
+ protected network: Network;
15
+ protected dexHelper: IDexHelper;
16
+ protected isDynamicFees: boolean;
17
+ pools: Pool[];
18
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, isDynamicFees?: boolean);
19
+ protected getAllPoolsCallData(): MultiCallParams<number> | undefined;
20
+ protected getPoolCallData(index: number): MultiCallParams<string> | undefined;
21
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
22
+ updatePools(): Promise<void>;
23
+ initPools(fromIndex: number, toIndex: number): Promise<void>;
24
+ updatePoolsReserves(pools: string[]): Promise<Pool[]>;
25
+ }
26
+ export {};
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolidlyRpcPoolTracker = void 0;
4
+ const abi_1 = require("@ethersproject/abi");
5
+ const decoders_1 = require("../../lib/decoders");
6
+ const solidly_1 = require("./solidly");
7
+ const SolidlyFactoryABI = [
8
+ {
9
+ inputs: [],
10
+ name: 'reserve0',
11
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
12
+ stateMutability: 'view',
13
+ type: 'function',
14
+ },
15
+ {
16
+ inputs: [],
17
+ name: 'reserve1',
18
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
19
+ stateMutability: 'view',
20
+ type: 'function',
21
+ },
22
+ {
23
+ inputs: [],
24
+ name: 'token0',
25
+ outputs: [{ internalType: 'address', name: '', type: 'address' }],
26
+ stateMutability: 'view',
27
+ type: 'function',
28
+ },
29
+ {
30
+ inputs: [],
31
+ name: 'token1',
32
+ outputs: [{ internalType: 'address', name: '', type: 'address' }],
33
+ stateMutability: 'view',
34
+ type: 'function',
35
+ },
36
+ {
37
+ inputs: [],
38
+ name: 'decimals',
39
+ outputs: [
40
+ {
41
+ internalType: 'uint8',
42
+ name: '',
43
+ type: 'uint8',
44
+ },
45
+ ],
46
+ stateMutability: 'view',
47
+ type: 'function',
48
+ },
49
+ ];
50
+ const solidlyFactoryIface = new abi_1.Interface(SolidlyFactoryABI);
51
+ class SolidlyRpcPoolTracker extends solidly_1.Solidly {
52
+ network;
53
+ dexHelper;
54
+ isDynamicFees;
55
+ pools = [];
56
+ constructor(network, dexKey, dexHelper, isDynamicFees = false) {
57
+ super(network, dexKey, dexHelper, isDynamicFees);
58
+ this.network = network;
59
+ this.dexHelper = dexHelper;
60
+ this.isDynamicFees = isDynamicFees;
61
+ }
62
+ // getAllPoolsCallData should be overridden in case RPC pool tracker is used
63
+ getAllPoolsCallData() {
64
+ return undefined;
65
+ }
66
+ // getPoolCallData should be overridden in case RPC pool tracker is used
67
+ getPoolCallData(index) {
68
+ return undefined;
69
+ }
70
+ async getTopPoolsForToken(tokenAddress, limit) {
71
+ await this.updatePools();
72
+ const token = tokenAddress.toLowerCase();
73
+ let pools = this.pools.filter(pool => pool.token0.address === token || pool.token1.address === token);
74
+ if (pools.length === 0) {
75
+ return [];
76
+ }
77
+ pools = await this.updatePoolsReserves(pools.map(pool => pool.address));
78
+ const tokensAmounts = pools
79
+ .map(pool => {
80
+ const token0 = pool.token0.address;
81
+ const token1 = pool.token1.address;
82
+ const reserve0 = pool.reserve0;
83
+ const reserve1 = pool.reserve1;
84
+ return [
85
+ [token0, reserve0],
86
+ [token1, reserve1],
87
+ ];
88
+ })
89
+ .flat();
90
+ const usdTokenAmounts = await this.dexHelper.getUsdTokenAmounts(tokensAmounts);
91
+ const poolsWithLiquidity = pools.map((pool, i) => {
92
+ const connectorToken = token === pool.token0.address ? pool.token1 : pool.token0;
93
+ let token0ReserveUSD = usdTokenAmounts[i * 2];
94
+ let token1ReserveUSD = usdTokenAmounts[i * 2 + 1];
95
+ // fallback to non-empty usd reserves
96
+ if (!token0ReserveUSD && token1ReserveUSD) {
97
+ token0ReserveUSD = token1ReserveUSD;
98
+ }
99
+ if (!token1ReserveUSD && token0ReserveUSD) {
100
+ token1ReserveUSD = token0ReserveUSD;
101
+ }
102
+ return {
103
+ exchange: this.dexKey,
104
+ address: pool.address,
105
+ connectorTokens: [connectorToken],
106
+ liquidityUSD: token0ReserveUSD + token1ReserveUSD,
107
+ };
108
+ });
109
+ return poolsWithLiquidity
110
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
111
+ .slice(0, limit);
112
+ }
113
+ async updatePools() {
114
+ const allPoolsCallData = this.getAllPoolsCallData();
115
+ if (!allPoolsCallData) {
116
+ throw new Error('getAllPoolsCallData is not implemented');
117
+ }
118
+ const callData = [allPoolsCallData];
119
+ const [allPoolsLength] = await this.dexHelper.multiWrapper.tryAggregate(true, callData);
120
+ if (this.pools.length < allPoolsLength.returnData) {
121
+ await this.initPools(this.pools.length, allPoolsLength.returnData);
122
+ }
123
+ }
124
+ async initPools(fromIndex, toIndex) {
125
+ const allPoolsCallData = [];
126
+ for (let i = fromIndex; i < toIndex; i++) {
127
+ const poolCallData = this.getPoolCallData(i);
128
+ if (!poolCallData) {
129
+ throw new Error('getPoolCallData is not implemented');
130
+ }
131
+ allPoolsCallData.push(poolCallData);
132
+ }
133
+ const allPoolsResults = await this.dexHelper.multiWrapper.tryAggregate(true, allPoolsCallData);
134
+ const poolsCalldata = [];
135
+ for (const poolResult of allPoolsResults) {
136
+ poolsCalldata.push({
137
+ target: poolResult.returnData,
138
+ callData: solidlyFactoryIface.encodeFunctionData('token0', []),
139
+ decodeFunction: decoders_1.addressDecode,
140
+ }, {
141
+ target: poolResult.returnData,
142
+ callData: solidlyFactoryIface.encodeFunctionData('token1', []),
143
+ decodeFunction: decoders_1.addressDecode,
144
+ }, {
145
+ target: poolResult.returnData,
146
+ callData: solidlyFactoryIface.encodeFunctionData('reserve0', []),
147
+ decodeFunction: decoders_1.uint256ToBigInt,
148
+ }, {
149
+ target: poolResult.returnData,
150
+ callData: solidlyFactoryIface.encodeFunctionData('reserve1', []),
151
+ decodeFunction: decoders_1.uint256ToBigInt,
152
+ });
153
+ }
154
+ const pools = await this.dexHelper.multiWrapper.tryAggregate(true, poolsCalldata);
155
+ this.pools = [];
156
+ const tokensSet = new Set();
157
+ for (let i = 0; i < allPoolsResults.length; i++) {
158
+ const token0 = pools[i * 4].returnData.toLowerCase();
159
+ const token1 = pools[i * 4 + 1].returnData.toLowerCase();
160
+ tokensSet.add(token0.toLowerCase());
161
+ tokensSet.add(token1.toLowerCase());
162
+ }
163
+ const decimalsCalldata = [];
164
+ const tokens = Array.from(tokensSet);
165
+ for (const token of tokens) {
166
+ decimalsCalldata.push({
167
+ target: token,
168
+ callData: solidlyFactoryIface.encodeFunctionData('decimals', []),
169
+ decodeFunction: decoders_1.uint256DecodeToNumber,
170
+ });
171
+ }
172
+ const decimalsResults = await this.dexHelper.multiWrapper.tryAggregate(true, decimalsCalldata);
173
+ const decimals = decimalsResults.reduce((acc, result, index) => {
174
+ const token = tokens[index];
175
+ acc[token] = result.returnData;
176
+ return acc;
177
+ }, {});
178
+ for (let i = 0; i < allPoolsResults.length; i++) {
179
+ const poolAddress = allPoolsResults[i].returnData.toLowerCase();
180
+ const token0 = pools[i * 4].returnData.toLowerCase();
181
+ const token1 = pools[i * 4 + 1].returnData.toLowerCase();
182
+ const reserve0 = pools[i * 4 + 2].returnData;
183
+ const reserve1 = pools[i * 4 + 3].returnData;
184
+ this.pools.push({
185
+ address: poolAddress,
186
+ token0: {
187
+ address: token0,
188
+ decimals: decimals[token0],
189
+ },
190
+ token1: {
191
+ address: token1,
192
+ decimals: decimals[token1],
193
+ },
194
+ reserve0,
195
+ reserve1,
196
+ });
197
+ }
198
+ }
199
+ async updatePoolsReserves(pools) {
200
+ const callData = [];
201
+ for (const pool of pools) {
202
+ callData.push({
203
+ target: pool,
204
+ callData: solidlyFactoryIface.encodeFunctionData('reserve0', []),
205
+ decodeFunction: decoders_1.uint256ToBigInt,
206
+ }, {
207
+ target: pool,
208
+ callData: solidlyFactoryIface.encodeFunctionData('reserve1', []),
209
+ decodeFunction: decoders_1.uint256ToBigInt,
210
+ });
211
+ }
212
+ const results = await this.dexHelper.multiWrapper.tryAggregate(true, callData);
213
+ const _pools = [];
214
+ for (let i = 0; i < pools.length; i++) {
215
+ const reserve0 = results[i * 2].returnData;
216
+ const reserve1 = results[i * 2 + 1].returnData;
217
+ const poolIndex = this.pools.findIndex(pool => pool.address === pools[i]);
218
+ if (poolIndex !== -1) {
219
+ this.pools[poolIndex].reserve0 = reserve0;
220
+ this.pools[poolIndex].reserve1 = reserve1;
221
+ _pools.push(this.pools[poolIndex]);
222
+ }
223
+ }
224
+ return _pools;
225
+ }
226
+ }
227
+ exports.SolidlyRpcPoolTracker = SolidlyRpcPoolTracker;
228
+ //# sourceMappingURL=rpc-pool-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-pool-tracker.js","sourceRoot":"","sources":["../../../src/dex/solidly/rpc-pool-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Network } from '../../constants';
2
+ import { UniswapV2RpcPoolTracker } from './rpc-pool-tracker';
3
+ export declare class PancakeSwapV2 extends UniswapV2RpcPoolTracker {
4
+ static dexKeysWithNetwork: {
5
+ key: string;
6
+ networks: Network[];
7
+ }[];
8
+ }
@@ -0,0 +1,15 @@
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.PancakeSwapV2 = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const utils_1 = require("../../utils");
9
+ const config_1 = require("./config");
10
+ const rpc_pool_tracker_1 = require("./rpc-pool-tracker");
11
+ class PancakeSwapV2 extends rpc_pool_tracker_1.UniswapV2RpcPoolTracker {
12
+ static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(lodash_1.default.pick(config_1.UniswapV2Config, ['PancakeSwapV2']));
13
+ }
14
+ exports.PancakeSwapV2 = PancakeSwapV2;
15
+ //# sourceMappingURL=pancake-swap-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pancake-swap-v2.js","sourceRoot":"","sources":["../../../src/dex/uniswap-v2/pancake-swap-v2.ts"],"names":[],"mappings":";;;;;;AAAA,oDAAuB;AAEvB,uCAAoD;AACpD,qCAA2C;AAC3C,yDAA6D;AAE7D,MAAa,aAAc,SAAQ,0CAAuB;IACjD,MAAM,CAAC,kBAAkB,GAC9B,IAAA,6BAAqB,EAAC,gBAAC,CAAC,IAAI,CAAC,wBAAe,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;AAFtE,sCAGC"}
@@ -0,0 +1,40 @@
1
+ import { Network } from '../../constants';
2
+ import { IDexHelper } from '../../dex-helper';
3
+ import { Address, PoolLiquidity, Token } from '../../types';
4
+ import { UniswapV2 } from './uniswap-v2';
5
+ type CachedPool = {
6
+ address: Address;
7
+ token0: Token;
8
+ token1: Token;
9
+ };
10
+ type Pool = {
11
+ address: Address;
12
+ token0: Token;
13
+ token1: Token;
14
+ reserves: {
15
+ updatedAt: null | number;
16
+ reserve0: bigint;
17
+ reserve1: bigint;
18
+ };
19
+ };
20
+ export declare class UniswapV2RpcPoolTracker extends UniswapV2 {
21
+ protected network: Network;
22
+ protected dexHelper: IDexHelper;
23
+ protected isDynamicFees: boolean;
24
+ private cacheKey;
25
+ pools: Record<string, Pool>;
26
+ readonly isStatePollingDex = true;
27
+ private updateInterval;
28
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, isDynamicFees?: boolean);
29
+ initializePricing(): Promise<void>;
30
+ updatePools(initialize?: boolean): Promise<void>;
31
+ initPools(fromIndex: number, toIndex: number): Promise<void>;
32
+ getCachedPools(fromIndex: number, toIndex: number): Promise<void>;
33
+ updatePoolState(): Promise<void>;
34
+ getAllPoolsLength(): Promise<number>;
35
+ fetchPools(fromIndex: number, toIndex: number): Promise<Record<string, CachedPool>>;
36
+ updatePoolsReserves(pools: Pool[]): Promise<void>;
37
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
38
+ releaseResources(): void;
39
+ }
40
+ export {};
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UniswapV2RpcPoolTracker = void 0;
4
+ const abi_1 = require("@ethersproject/abi");
5
+ const constants_1 = require("../../constants");
6
+ const decoders_1 = require("../../lib/decoders");
7
+ const uniswap_v2_1 = require("./uniswap-v2");
8
+ const UPDATE_POOL_INTERVAL = 10 * 60 * 1000; // 10 minutes
9
+ const INIT_BATCH_SIZE = 1000;
10
+ const READ_BATCH_SIZE = 10_000;
11
+ const FactoryABI = [
12
+ {
13
+ constant: true,
14
+ inputs: [
15
+ {
16
+ internalType: 'uint256',
17
+ name: '',
18
+ type: 'uint256',
19
+ },
20
+ ],
21
+ name: 'allPairs',
22
+ outputs: [
23
+ {
24
+ internalType: 'address',
25
+ name: '',
26
+ type: 'address',
27
+ },
28
+ ],
29
+ payable: false,
30
+ stateMutability: 'view',
31
+ type: 'function',
32
+ },
33
+ {
34
+ constant: true,
35
+ inputs: [],
36
+ name: 'allPairsLength',
37
+ outputs: [
38
+ {
39
+ internalType: 'uint256',
40
+ name: '',
41
+ type: 'uint256',
42
+ },
43
+ ],
44
+ payable: false,
45
+ stateMutability: 'view',
46
+ type: 'function',
47
+ },
48
+ {
49
+ constant: true,
50
+ inputs: [],
51
+ name: 'getReserves',
52
+ outputs: [
53
+ {
54
+ internalType: 'uint112',
55
+ name: '_reserve0',
56
+ type: 'uint112',
57
+ },
58
+ {
59
+ internalType: 'uint112',
60
+ name: '_reserve1',
61
+ type: 'uint112',
62
+ },
63
+ {
64
+ internalType: 'uint32',
65
+ name: '_blockTimestampLast',
66
+ type: 'uint32',
67
+ },
68
+ ],
69
+ payable: false,
70
+ stateMutability: 'view',
71
+ type: 'function',
72
+ },
73
+ {
74
+ inputs: [],
75
+ name: 'token0',
76
+ outputs: [{ internalType: 'address', name: '', type: 'address' }],
77
+ stateMutability: 'view',
78
+ type: 'function',
79
+ },
80
+ {
81
+ inputs: [],
82
+ name: 'token1',
83
+ outputs: [{ internalType: 'address', name: '', type: 'address' }],
84
+ stateMutability: 'view',
85
+ type: 'function',
86
+ },
87
+ {
88
+ inputs: [],
89
+ name: 'decimals',
90
+ outputs: [
91
+ {
92
+ internalType: 'uint8',
93
+ name: '',
94
+ type: 'uint8',
95
+ },
96
+ ],
97
+ stateMutability: 'view',
98
+ type: 'function',
99
+ },
100
+ ];
101
+ const factoryIface = new abi_1.Interface(FactoryABI);
102
+ class UniswapV2RpcPoolTracker extends uniswap_v2_1.UniswapV2 {
103
+ network;
104
+ dexHelper;
105
+ isDynamicFees;
106
+ cacheKey;
107
+ pools = {};
108
+ isStatePollingDex = true;
109
+ updateInterval = null;
110
+ constructor(network, dexKey, dexHelper, isDynamicFees = false) {
111
+ super(network, dexKey, dexHelper, isDynamicFees);
112
+ this.network = network;
113
+ this.dexHelper = dexHelper;
114
+ this.isDynamicFees = isDynamicFees;
115
+ this.cacheKey =
116
+ `${constants_1.CACHE_PREFIX}_${this.dexKey}_${this.network}_pools`.toLowerCase();
117
+ }
118
+ async initializePricing() {
119
+ this.logger.info(`PancakeSwapV2: Initializing pools for ${this.dexKey} on ${this.network}...`);
120
+ if (!this.dexHelper.config.isSlave) {
121
+ await this.updatePools(true);
122
+ this.updateInterval = setInterval(async () => {
123
+ await this.updatePools();
124
+ }, UPDATE_POOL_INTERVAL);
125
+ }
126
+ }
127
+ async updatePools(initialize = false) {
128
+ const allPools = await this.getAllPoolsLength();
129
+ const allCachedPools = await this.dexHelper.cache.hlen(this.cacheKey);
130
+ const missingPools = allPools - allCachedPools;
131
+ if (!initialize && missingPools > 1_000) {
132
+ throw new Error(`Missing ${missingPools} out of ${allPools} pools. Cache is not up to date, reverting... `);
133
+ }
134
+ if (allPools > allCachedPools) {
135
+ await this.initPools(allCachedPools, allPools);
136
+ }
137
+ }
138
+ async initPools(fromIndex, toIndex) {
139
+ this.logger.info(`Initializing pools from ${fromIndex} to ${toIndex}...`);
140
+ for (let i = fromIndex; i < toIndex; i += INIT_BATCH_SIZE) {
141
+ this.logger.info(`Fetching pools from ${i} to ${Math.min(i + INIT_BATCH_SIZE, toIndex)}`);
142
+ const fetchedPools = await this.fetchPools(i, Math.min(i + INIT_BATCH_SIZE, toIndex));
143
+ const pools = Object.fromEntries(Object.entries(fetchedPools).map(([key, value]) => [
144
+ key,
145
+ JSON.stringify(value),
146
+ ]));
147
+ await this.dexHelper.cache.hmset(this.cacheKey, pools);
148
+ }
149
+ this.logger.info(`Fetched ${toIndex - fromIndex} pools from ${fromIndex} to ${toIndex}`);
150
+ }
151
+ async getCachedPools(fromIndex, toIndex) {
152
+ for (let batchStart = fromIndex; batchStart < toIndex; batchStart += READ_BATCH_SIZE) {
153
+ const batchEnd = Math.min(batchStart + READ_BATCH_SIZE, toIndex);
154
+ const keys = [];
155
+ for (let i = batchStart; i < batchEnd; i++) {
156
+ keys.push(i.toString());
157
+ }
158
+ this.logger.info(`Getting cached pools from ${batchStart} to ${batchEnd}`);
159
+ const pools = await this.dexHelper.cache.hmget(this.cacheKey, keys);
160
+ pools.forEach((pool, idx) => {
161
+ const index = batchStart + idx;
162
+ this.pools[index] = pool
163
+ ? {
164
+ ...JSON.parse(pool),
165
+ reserves: {
166
+ reserve0: 0n,
167
+ reserve1: 0n,
168
+ updatedAt: null,
169
+ },
170
+ }
171
+ : null;
172
+ });
173
+ }
174
+ }
175
+ async updatePoolState() {
176
+ await this.updatePools();
177
+ const allPools = Object.keys(this.pools).length;
178
+ const allCachedPools = await this.dexHelper.cache.hlen(this.cacheKey);
179
+ if (allPools < allCachedPools) {
180
+ await this.getCachedPools(allPools, allCachedPools);
181
+ }
182
+ }
183
+ async getAllPoolsLength() {
184
+ const allPoolsCallData = {
185
+ target: this.factoryAddress,
186
+ callData: factoryIface.encodeFunctionData('allPairsLength', []),
187
+ decodeFunction: decoders_1.uint256DecodeToNumber,
188
+ };
189
+ if (!allPoolsCallData) {
190
+ throw new Error('getAllPoolsCallData is not implemented');
191
+ }
192
+ const callData = [allPoolsCallData];
193
+ const [allPoolsLength] = await this.dexHelper.multiWrapper.tryAggregate(true, callData);
194
+ return allPoolsLength.returnData;
195
+ }
196
+ async fetchPools(fromIndex, toIndex) {
197
+ const allPoolsCallData = [];
198
+ for (let i = fromIndex; i < toIndex; i++) {
199
+ const poolCallData = {
200
+ target: this.factoryAddress,
201
+ callData: factoryIface.encodeFunctionData('allPairs', [i]),
202
+ decodeFunction: decoders_1.addressDecode,
203
+ };
204
+ allPoolsCallData.push(poolCallData);
205
+ }
206
+ const allPoolsResults = await this.dexHelper.multiWrapper.tryAggregate(true, allPoolsCallData);
207
+ const poolsCalldata = [];
208
+ for (const poolResult of allPoolsResults) {
209
+ poolsCalldata.push({
210
+ target: poolResult.returnData,
211
+ callData: factoryIface.encodeFunctionData('token0', []),
212
+ decodeFunction: decoders_1.addressDecode,
213
+ }, {
214
+ target: poolResult.returnData,
215
+ callData: factoryIface.encodeFunctionData('token1', []),
216
+ decodeFunction: decoders_1.addressDecode,
217
+ });
218
+ }
219
+ const poolsData = await this.dexHelper.multiWrapper.tryAggregate(true, poolsCalldata);
220
+ const tokensSet = new Set();
221
+ for (let i = 0; i < allPoolsResults.length; i++) {
222
+ const token0 = poolsData[i * 2].returnData.toLowerCase();
223
+ const token1 = poolsData[i * 2 + 1].returnData.toLowerCase();
224
+ tokensSet.add(token0.toLowerCase());
225
+ tokensSet.add(token1.toLowerCase());
226
+ }
227
+ const decimalsCalldata = [];
228
+ const tokens = Array.from(tokensSet);
229
+ for (const token of tokens) {
230
+ decimalsCalldata.push({
231
+ target: token,
232
+ callData: factoryIface.encodeFunctionData('decimals', []),
233
+ decodeFunction: decoders_1.uint256DecodeToNumber,
234
+ });
235
+ }
236
+ const decimalsResults = await this.dexHelper.multiWrapper.tryAggregate(false, decimalsCalldata);
237
+ const decimals = decimalsResults.reduce((acc, result, index) => {
238
+ const token = tokens[index];
239
+ acc[token] = result.returnData || 18; // default to 18 decimals if not found
240
+ return acc;
241
+ }, {});
242
+ const pools = {};
243
+ for (let i = 0; i < allPoolsResults.length; i++) {
244
+ const poolAddress = allPoolsResults[i].returnData.toLowerCase();
245
+ const token0 = poolsData[i * 2].returnData.toLowerCase();
246
+ const token1 = poolsData[i * 2 + 1].returnData.toLowerCase();
247
+ // const [reserve0, reserve1] = pools[i * 3 + 2].returnData as bigint[];
248
+ pools[i + fromIndex] = {
249
+ address: poolAddress,
250
+ token0: {
251
+ address: token0,
252
+ decimals: decimals[token0],
253
+ },
254
+ token1: {
255
+ address: token1,
256
+ decimals: decimals[token1],
257
+ },
258
+ };
259
+ }
260
+ return pools;
261
+ }
262
+ async updatePoolsReserves(pools) {
263
+ const callData = [];
264
+ for (const pool of pools) {
265
+ callData.push({
266
+ target: pool.address,
267
+ callData: factoryIface.encodeFunctionData('getReserves', []),
268
+ decodeFunction: (result) => {
269
+ return (0, decoders_1.generalDecoder)(result, ['uint112', 'uint112'], [0n, 0n], res => [BigInt(res[0]), BigInt(res[1])]);
270
+ },
271
+ });
272
+ }
273
+ const results = await this.dexHelper.multiWrapper.tryAggregate(true, callData);
274
+ for (let i = 0; i < pools.length; i++) {
275
+ const [reserve0, reserve1] = results[i].returnData;
276
+ const pool = pools[i];
277
+ pool.reserves = {
278
+ updatedAt: Date.now(),
279
+ reserve0: reserve0,
280
+ reserve1: reserve1,
281
+ };
282
+ }
283
+ }
284
+ async getTopPoolsForToken(tokenAddress, limit) {
285
+ const token = tokenAddress.toLowerCase();
286
+ let pools = Object.values(this.pools).filter(pool => pool.token0.address === token || pool.token1.address === token);
287
+ if (pools.length === 0) {
288
+ return [];
289
+ }
290
+ const now = Date.now();
291
+ const poolsToUpdate = pools.filter(pool => !pool.reserves.updatedAt ||
292
+ now - pool.reserves.updatedAt > UPDATE_POOL_INTERVAL);
293
+ if (poolsToUpdate.length > 0) {
294
+ await this.updatePoolsReserves(pools);
295
+ }
296
+ pools = pools
297
+ .sort((a, b) => {
298
+ const aReserve = token === a.token0.address
299
+ ? a.reserves.reserve0
300
+ : a.reserves.reserve1;
301
+ const bReserve = token === b.token0.address
302
+ ? b.reserves.reserve0
303
+ : b.reserves.reserve1;
304
+ return Number(bReserve - aReserve);
305
+ })
306
+ .slice(0, limit);
307
+ const tokensAmounts = pools
308
+ .map(pool => {
309
+ const token0 = pool.token0.address;
310
+ const token1 = pool.token1.address;
311
+ const reserve0 = pool.reserves.reserve0;
312
+ const reserve1 = pool.reserves.reserve1;
313
+ return [
314
+ [token0, reserve0],
315
+ [token1, reserve1],
316
+ ];
317
+ })
318
+ .flat();
319
+ const usdTokenAmounts = await this.dexHelper.getUsdTokenAmounts(tokensAmounts);
320
+ const poolsWithLiquidity = pools.map((pool, i) => {
321
+ const connectorToken = token === pool.token0.address ? pool.token1 : pool.token0;
322
+ let token0ReserveUSD = usdTokenAmounts[i * 2];
323
+ let token1ReserveUSD = usdTokenAmounts[i * 2 + 1];
324
+ // fallback to non-empty usd reserves
325
+ if (!token0ReserveUSD && token1ReserveUSD) {
326
+ token0ReserveUSD = token1ReserveUSD;
327
+ }
328
+ if (!token1ReserveUSD && token0ReserveUSD) {
329
+ token1ReserveUSD = token0ReserveUSD;
330
+ }
331
+ return {
332
+ exchange: this.dexKey,
333
+ address: pool.address,
334
+ connectorTokens: [connectorToken],
335
+ liquidityUSD: token0ReserveUSD + token1ReserveUSD,
336
+ };
337
+ });
338
+ return poolsWithLiquidity
339
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
340
+ .slice(0, limit);
341
+ }
342
+ releaseResources() {
343
+ if (this.updateInterval) {
344
+ clearInterval(this.updateInterval);
345
+ this.updateInterval = null;
346
+ }
347
+ }
348
+ }
349
+ exports.UniswapV2RpcPoolTracker = UniswapV2RpcPoolTracker;
350
+ //# sourceMappingURL=rpc-pool-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-pool-tracker.js","sourceRoot":"","sources":["../../../src/dex/uniswap-v2/rpc-pool-tracker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paraswap/dex-lib",
3
- "version": "4.2.30-fluid-base.0",
3
+ "version": "4.2.30",
4
4
  "main": "build/index.js",
5
5
  "types": "build/index.d.ts",
6
6
  "repository": "https://github.com/paraswap/paraswap-dex-lib",