@paraswap/dex-lib 4.6.21 → 4.6.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 (77) hide show
  1. package/build/abi/PendleRouterStatic.json +19 -0
  2. package/build/abi/apex-defi/ApexDefiFactory.abi.json +1749 -0
  3. package/build/abi/apex-defi/ApexDefiRouter.abi.json +1120 -0
  4. package/build/abi/apex-defi/ApexDefiToken.abi.json +229 -0
  5. package/build/abi/apex-defi/ApexDefiWrapper.abi.json +92 -0
  6. package/build/abi/apex-defi/ApexDefiWrapperFactory.abi.json +1107 -0
  7. package/build/abi/ekubo/router.json +416 -398
  8. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.d.ts +2 -3
  9. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.js +53 -26
  10. package/build/dex/aave-pt-to-underlying/aave-pt-to-underlying.js.map +1 -1
  11. package/build/dex/aave-pt-to-underlying/config.js +3 -0
  12. package/build/dex/aave-pt-to-underlying/config.js.map +1 -1
  13. package/build/dex/aave-pt-to-underlying/types.d.ts +1 -0
  14. package/build/dex/apex-defi/apex-defi-factory.d.ts +26 -0
  15. package/build/dex/apex-defi/apex-defi-factory.js +53 -0
  16. package/build/dex/apex-defi/apex-defi-factory.js.map +1 -0
  17. package/build/dex/apex-defi/apex-defi-pool.d.ts +55 -0
  18. package/build/dex/apex-defi/apex-defi-pool.js +247 -0
  19. package/build/dex/apex-defi/apex-defi-pool.js.map +1 -0
  20. package/build/dex/apex-defi/apex-defi-wrapper-factory.d.ts +57 -0
  21. package/build/dex/apex-defi/apex-defi-wrapper-factory.js +250 -0
  22. package/build/dex/apex-defi/apex-defi-wrapper-factory.js.map +1 -0
  23. package/build/dex/apex-defi/apex-defi.d.ts +97 -0
  24. package/build/dex/apex-defi/apex-defi.js +1021 -0
  25. package/build/dex/apex-defi/apex-defi.js.map +1 -0
  26. package/build/dex/apex-defi/config.d.ts +4 -0
  27. package/build/dex/apex-defi/config.js +138 -0
  28. package/build/dex/apex-defi/config.js.map +1 -0
  29. package/build/dex/apex-defi/types.d.ts +32 -0
  30. package/build/dex/apex-defi/types.js +3 -0
  31. package/build/dex/apex-defi/types.js.map +1 -0
  32. package/build/dex/apex-defi/utils.d.ts +46 -0
  33. package/build/dex/apex-defi/utils.js +133 -0
  34. package/build/dex/apex-defi/utils.js.map +1 -0
  35. package/build/dex/ekubo/config.d.ts +2 -1
  36. package/build/dex/ekubo/config.js +6 -4
  37. package/build/dex/ekubo/config.js.map +1 -1
  38. package/build/dex/ekubo/ekubo.d.ts +13 -12
  39. package/build/dex/ekubo/ekubo.js +282 -234
  40. package/build/dex/ekubo/ekubo.js.map +1 -1
  41. package/build/dex/ekubo/pools/base.d.ts +6 -2
  42. package/build/dex/ekubo/pools/base.js +120 -113
  43. package/build/dex/ekubo/pools/base.js.map +1 -1
  44. package/build/dex/ekubo/pools/full-range.d.ts +6 -5
  45. package/build/dex/ekubo/pools/full-range.js +50 -40
  46. package/build/dex/ekubo/pools/full-range.js.map +1 -1
  47. package/build/dex/ekubo/pools/math/swap.js +3 -3
  48. package/build/dex/ekubo/pools/math/swap.js.map +1 -1
  49. package/build/dex/ekubo/pools/math/tick.d.ts +1 -0
  50. package/build/dex/ekubo/pools/math/tick.js +9 -4
  51. package/build/dex/ekubo/pools/math/tick.js.map +1 -1
  52. package/build/dex/ekubo/pools/oracle.d.ts +5 -6
  53. package/build/dex/ekubo/pools/oracle.js +8 -10
  54. package/build/dex/ekubo/pools/oracle.js.map +1 -1
  55. package/build/dex/ekubo/pools/twamm.d.ts +5 -3
  56. package/build/dex/ekubo/pools/twamm.js +102 -94
  57. package/build/dex/ekubo/pools/twamm.js.map +1 -1
  58. package/build/dex/ekubo/pools/utils.d.ts +8 -7
  59. package/build/dex/ekubo/pools/utils.js +31 -18
  60. package/build/dex/ekubo/pools/utils.js.map +1 -1
  61. package/build/dex/ekubo/types.d.ts +1 -0
  62. package/build/dex/ekubo/utils.d.ts +0 -1
  63. package/build/dex/ekubo/utils.js +0 -4
  64. package/build/dex/ekubo/utils.js.map +1 -1
  65. package/build/dex/yo/config.d.ts +3 -0
  66. package/build/dex/yo/config.js +21 -0
  67. package/build/dex/yo/config.js.map +1 -0
  68. package/build/dex/yo/types.d.ts +13 -0
  69. package/build/dex/yo/types.js +3 -0
  70. package/build/dex/yo/types.js.map +1 -0
  71. package/build/dex/yo/yo-pool.d.ts +13 -0
  72. package/build/dex/yo/yo-pool.js +26 -0
  73. package/build/dex/yo/yo-pool.js.map +1 -0
  74. package/build/dex/yo/yo.d.ts +39 -0
  75. package/build/dex/yo/yo.js +248 -0
  76. package/build/dex/yo/yo.js.map +1 -0
  77. package/package.json +1 -1
@@ -0,0 +1,57 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { DeepReadonly } from 'ts-essentials';
3
+ import { IDexHelper } from '../../dex-helper/idex-helper';
4
+ import { StatefulEventSubscriber } from '../../stateful-event-subscriber';
5
+ import { Address, Log, Logger } from '../../types';
6
+ import { LogDescription } from 'ethers/lib/utils';
7
+ export interface WrapperInfo {
8
+ wrapperAddress: Address;
9
+ originalToken: Address;
10
+ wrappedToken: Address;
11
+ originalTokenDecimals: number;
12
+ wrappedTokenDecimals: number;
13
+ }
14
+ export type WrapperFactoryState = Record<Address, WrapperInfo>;
15
+ export type OnWrapperCreatedCallback = ({ wrapperInfo, blockNumber, }: {
16
+ wrapperInfo: WrapperInfo;
17
+ blockNumber: number;
18
+ }) => Promise<void>;
19
+ export declare class ApexDefiWrapperFactory extends StatefulEventSubscriber<WrapperFactoryState> {
20
+ readonly dexHelper: IDexHelper;
21
+ protected readonly wrapperFactoryAddress: Address;
22
+ protected readonly onWrapperCreated: OnWrapperCreatedCallback;
23
+ handlers: {
24
+ [event: string]: (event: any, log: Readonly<Log>) => Promise<void>;
25
+ };
26
+ logDecoder: (log: Log) => any;
27
+ readonly wrapperFactoryIface: Interface;
28
+ readonly wrapperIface: Interface;
29
+ private wrapperCache;
30
+ private originalTokenToWrapper;
31
+ private wrappedTokenToWrapper;
32
+ constructor(dexHelper: IDexHelper, parentName: string, wrapperFactoryAddress: Address, logger: Logger, onWrapperCreated: OnWrapperCreatedCallback);
33
+ generateState(): WrapperFactoryState;
34
+ protected processLog(_: DeepReadonly<WrapperFactoryState>, log: Readonly<Log>): Promise<WrapperFactoryState>;
35
+ handleWrapperCreated(event: LogDescription, log: Readonly<Log>): Promise<void>;
36
+ private fetchWrapperInfo;
37
+ initialize(blockNumber: number): Promise<void>;
38
+ getWrapperInfo(wrapperAddress: Address): WrapperInfo | undefined;
39
+ getWrapperByOriginalToken(originalToken: Address): Address | undefined;
40
+ getWrapperByWrappedToken(wrappedToken: Address): Address | undefined;
41
+ isWrappedToken(tokenAddress: Address): boolean;
42
+ isOriginalToken(tokenAddress: Address): boolean;
43
+ getAllWrappers(): WrapperInfo[];
44
+ /**
45
+ * Check if two tokens form a wrapper pair and return wrapper info
46
+ */
47
+ getWrapperPairInfo(srcToken: Address, destToken: Address): {
48
+ wrapperAddress: Address;
49
+ isWrap: boolean;
50
+ wrapperInfo: WrapperInfo;
51
+ } | null;
52
+ /**
53
+ * Check if two tokens form a wrapper operation
54
+ */
55
+ isWrapperOperation(srcToken: Address, destToken: Address): boolean;
56
+ releaseResources(): void;
57
+ }
@@ -0,0 +1,250 @@
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.ApexDefiWrapperFactory = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const ApexDefiWrapperFactory_abi_json_1 = __importDefault(require("../../abi/apex-defi/ApexDefiWrapperFactory.abi.json"));
9
+ const ApexDefiWrapper_abi_json_1 = __importDefault(require("../../abi/apex-defi/ApexDefiWrapper.abi.json"));
10
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
11
+ /*
12
+ * Event subscriber to capture "WrapperCreated" events on new wrappers created.
13
+ * Maintains a cache of all wrapper information for quick lookups.
14
+ */
15
+ class ApexDefiWrapperFactory extends stateful_event_subscriber_1.StatefulEventSubscriber {
16
+ dexHelper;
17
+ wrapperFactoryAddress;
18
+ onWrapperCreated;
19
+ handlers = {};
20
+ logDecoder;
21
+ wrapperFactoryIface = new abi_1.Interface(ApexDefiWrapperFactory_abi_json_1.default);
22
+ wrapperIface = new abi_1.Interface(ApexDefiWrapper_abi_json_1.default);
23
+ // Cache for quick lookups
24
+ wrapperCache = new Map();
25
+ originalTokenToWrapper = new Map();
26
+ wrappedTokenToWrapper = new Map();
27
+ constructor(dexHelper, parentName, wrapperFactoryAddress, logger, onWrapperCreated) {
28
+ super(parentName, `${parentName} WrapperFactory`, dexHelper, logger);
29
+ this.dexHelper = dexHelper;
30
+ this.wrapperFactoryAddress = wrapperFactoryAddress;
31
+ this.onWrapperCreated = onWrapperCreated;
32
+ this.addressesSubscribed = [wrapperFactoryAddress];
33
+ this.logDecoder = (log) => this.wrapperFactoryIface.parseLog(log);
34
+ this.handlers['WrapperCreated'] = this.handleWrapperCreated.bind(this);
35
+ }
36
+ generateState() {
37
+ return {};
38
+ }
39
+ async processLog(_, log) {
40
+ const event = this.logDecoder(log);
41
+ if (event.name in this.handlers) {
42
+ await this.handlers[event.name](event, log);
43
+ }
44
+ return {};
45
+ }
46
+ async handleWrapperCreated(event, log) {
47
+ const { originalToken, wrappedToken, wrapperContract } = event.args;
48
+ // Fetch wrapper details
49
+ const wrapperInfo = await this.fetchWrapperInfo(wrapperContract.toLowerCase(), originalToken.toLowerCase(), wrappedToken.toLowerCase());
50
+ if (wrapperInfo) {
51
+ // Update caches
52
+ // Fix case sensitivity issue in wrapper cache
53
+ // Add to cache - use lowercase for consistency
54
+ this.wrapperCache.set(wrapperInfo.wrapperAddress.toLowerCase(), wrapperInfo);
55
+ this.originalTokenToWrapper.set(wrapperInfo.originalToken, wrapperInfo.wrapperAddress.toLowerCase());
56
+ this.wrappedTokenToWrapper.set(wrapperInfo.wrappedToken, wrapperInfo.wrapperAddress.toLowerCase());
57
+ await this.onWrapperCreated({
58
+ wrapperInfo,
59
+ blockNumber: log.blockNumber,
60
+ });
61
+ }
62
+ }
63
+ async fetchWrapperInfo(wrapperAddress, originalToken, wrappedToken) {
64
+ try {
65
+ const blockNumber = await this.dexHelper.web3Provider.eth.getBlockNumber();
66
+ const result = await this.dexHelper.multiContract.methods
67
+ .aggregate([
68
+ {
69
+ target: wrapperAddress,
70
+ callData: this.wrapperIface.encodeFunctionData('originalTokenDecimals', []),
71
+ },
72
+ {
73
+ target: wrapperAddress,
74
+ callData: this.wrapperIface.encodeFunctionData('wrappedTokenDecimals', []),
75
+ },
76
+ ])
77
+ .call({}, blockNumber);
78
+ const [originalTokenDecimals, wrappedTokenDecimals] = result.returnData.map((data, index) => {
79
+ const decoded = this.wrapperIface.decodeFunctionResult(index === 0 ? 'originalTokenDecimals' : 'wrappedTokenDecimals', data);
80
+ return Number(decoded[0]);
81
+ });
82
+ return {
83
+ wrapperAddress,
84
+ originalToken,
85
+ wrappedToken,
86
+ originalTokenDecimals,
87
+ wrappedTokenDecimals,
88
+ };
89
+ }
90
+ catch (error) {
91
+ this.logger.error(`Error fetching wrapper info for ${wrapperAddress}:`, error);
92
+ return null;
93
+ }
94
+ }
95
+ // Initialize by fetching all existing wrappers
96
+ async initialize(blockNumber) {
97
+ try {
98
+ // Get all wrappers from factory
99
+ const result = await this.dexHelper.multiContract.methods
100
+ .aggregate([
101
+ {
102
+ target: this.wrapperFactoryAddress,
103
+ callData: this.wrapperFactoryIface.encodeFunctionData('getAllWrappers', []),
104
+ },
105
+ ])
106
+ .call({}, blockNumber);
107
+ const wrapperAddresses = this.wrapperFactoryIface.decodeFunctionResult('getAllWrappers', result.returnData[0])[0];
108
+ // Use tryAggregate for all wrapper info calls
109
+ const wrapperInfoCalls = wrapperAddresses
110
+ .map(wrapperAddress => [
111
+ {
112
+ target: wrapperAddress,
113
+ callData: this.wrapperIface.encodeFunctionData('originalToken', []),
114
+ },
115
+ {
116
+ target: wrapperAddress,
117
+ callData: this.wrapperIface.encodeFunctionData('wrappedToken', []),
118
+ },
119
+ {
120
+ target: wrapperAddress,
121
+ callData: this.wrapperIface.encodeFunctionData('originalTokenDecimals', []),
122
+ },
123
+ {
124
+ target: wrapperAddress,
125
+ callData: this.wrapperIface.encodeFunctionData('wrappedTokenDecimals', []),
126
+ },
127
+ ])
128
+ .flat();
129
+ const tokenResults = await this.dexHelper.multiContract.methods
130
+ .tryAggregate(false, wrapperInfoCalls)
131
+ .call({}, blockNumber);
132
+ // Process results in groups of 4 (originalToken, wrappedToken, originalDecimals, wrappedDecimals)
133
+ for (let i = 0; i < wrapperAddresses.length; i++) {
134
+ const wrapperAddress = wrapperAddresses[i];
135
+ const baseIndex = i * 4;
136
+ const [originalTokenSuccess, originalTokenData] = tokenResults[baseIndex];
137
+ const [wrappedTokenSuccess, wrappedTokenData] = tokenResults[baseIndex + 1];
138
+ const [originalDecimalsSuccess, originalDecimalsData] = tokenResults[baseIndex + 2];
139
+ const [wrappedDecimalsSuccess, wrappedDecimalsData] = tokenResults[baseIndex + 3];
140
+ // Check if basic token info succeeded
141
+ if (originalTokenSuccess && wrappedTokenSuccess) {
142
+ const originalToken = this.wrapperIface
143
+ .decodeFunctionResult('originalToken', originalTokenData)[0]
144
+ .toLowerCase();
145
+ const wrappedToken = this.wrapperIface
146
+ .decodeFunctionResult('wrappedToken', wrappedTokenData)[0]
147
+ .toLowerCase();
148
+ // Handle decimals - use fallback for older wrappers
149
+ let originalTokenDecimals;
150
+ let wrappedTokenDecimals;
151
+ if (originalDecimalsSuccess && wrappedDecimalsSuccess) {
152
+ // New wrapper with decimals functions
153
+ originalTokenDecimals = Number(this.wrapperIface.decodeFunctionResult('originalTokenDecimals', originalDecimalsData)[0]);
154
+ wrappedTokenDecimals = Number(this.wrapperIface.decodeFunctionResult('wrappedTokenDecimals', wrappedDecimalsData)[0]);
155
+ }
156
+ else {
157
+ // Fallback for older wrappers - assume standard decimals
158
+ originalTokenDecimals = 0; // Default for most ERC20
159
+ wrappedTokenDecimals = 18; // ERC314 always has 18 decimals
160
+ }
161
+ const wrapperInfo = {
162
+ wrapperAddress,
163
+ originalToken,
164
+ wrappedToken,
165
+ originalTokenDecimals,
166
+ wrappedTokenDecimals,
167
+ };
168
+ // Add to cache
169
+ this.wrapperCache.set(wrapperInfo.wrapperAddress.toLowerCase(), wrapperInfo);
170
+ this.originalTokenToWrapper.set(wrapperInfo.originalToken, wrapperInfo.wrapperAddress.toLowerCase());
171
+ this.wrappedTokenToWrapper.set(wrapperInfo.wrappedToken, wrapperInfo.wrapperAddress.toLowerCase());
172
+ }
173
+ }
174
+ }
175
+ catch (error) {
176
+ this.logger.error('Error initializing wrapper factory:', error);
177
+ }
178
+ }
179
+ // Quick lookup methods
180
+ getWrapperInfo(wrapperAddress) {
181
+ const result = this.wrapperCache.get(wrapperAddress.toLowerCase());
182
+ return result;
183
+ }
184
+ getWrapperByOriginalToken(originalToken) {
185
+ const result = this.originalTokenToWrapper.get(originalToken.toLowerCase());
186
+ return result;
187
+ }
188
+ getWrapperByWrappedToken(wrappedToken) {
189
+ return this.wrappedTokenToWrapper.get(wrappedToken.toLowerCase());
190
+ }
191
+ isWrappedToken(tokenAddress) {
192
+ return this.wrappedTokenToWrapper.has(tokenAddress.toLowerCase());
193
+ }
194
+ isOriginalToken(tokenAddress) {
195
+ return this.originalTokenToWrapper.has(tokenAddress.toLowerCase());
196
+ }
197
+ // Get all wrapper infos
198
+ getAllWrappers() {
199
+ return Array.from(this.wrapperCache.values());
200
+ }
201
+ // ✅ New helper methods for wrapper operations
202
+ /**
203
+ * Check if two tokens form a wrapper pair and return wrapper info
204
+ */
205
+ getWrapperPairInfo(srcToken, destToken) {
206
+ // Check if srcToken has a wrapper that matches destToken (wrap operation)
207
+ const srcWrapper = this.getWrapperByOriginalToken(srcToken);
208
+ if (srcWrapper) {
209
+ const wrapperInfo = this.getWrapperInfo(srcWrapper);
210
+ if (wrapperInfo &&
211
+ wrapperInfo.wrappedToken.toLowerCase() === destToken.toLowerCase()) {
212
+ return {
213
+ wrapperAddress: srcWrapper,
214
+ isWrap: true,
215
+ wrapperInfo,
216
+ };
217
+ }
218
+ }
219
+ // Check if destToken has a wrapper that matches srcToken (unwrap operation)
220
+ const destWrapper = this.getWrapperByOriginalToken(destToken);
221
+ if (destWrapper) {
222
+ const wrapperInfo = this.getWrapperInfo(destWrapper);
223
+ if (wrapperInfo &&
224
+ wrapperInfo.wrappedToken.toLowerCase() === srcToken.toLowerCase()) {
225
+ return {
226
+ wrapperAddress: destWrapper,
227
+ isWrap: false,
228
+ wrapperInfo,
229
+ };
230
+ }
231
+ }
232
+ return null;
233
+ }
234
+ /**
235
+ * Check if two tokens form a wrapper operation
236
+ */
237
+ isWrapperOperation(srcToken, destToken) {
238
+ return this.getWrapperPairInfo(srcToken, destToken) !== null;
239
+ }
240
+ // Release resources
241
+ releaseResources() {
242
+ this.wrapperCache.clear();
243
+ this.originalTokenToWrapper.clear();
244
+ this.wrappedTokenToWrapper.clear();
245
+ this.handlers = {};
246
+ this.addressesSubscribed = [];
247
+ }
248
+ }
249
+ exports.ApexDefiWrapperFactory = ApexDefiWrapperFactory;
250
+ //# sourceMappingURL=apex-defi-wrapper-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apex-defi-wrapper-factory.js","sourceRoot":"","sources":["../../../src/dex/apex-defi/apex-defi-wrapper-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { AsyncOrSync } from 'ts-essentials';
2
+ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, SimpleExchangeParam, PoolLiquidity, Logger, NumberAsString, TxInfo, DexExchangeParam } from '../../types';
3
+ import { SwapSide, Network } from '../../constants';
4
+ import { IDex } from '../../dex/idex';
5
+ import { IDexHelper } from '../../dex-helper/idex-helper';
6
+ import { ApexDefiData } from './types';
7
+ import { SimpleExchange } from '../simple-exchange';
8
+ import { ApexDefiEventPool } from './apex-defi-pool';
9
+ import { Interface } from '@ethersproject/abi';
10
+ import { ApexDefiFactory, OnPoolCreatedCallback } from './apex-defi-factory';
11
+ import { ApexDefiWrapperFactory, OnWrapperCreatedCallback } from './apex-defi-wrapper-factory';
12
+ export declare class ApexDefi extends SimpleExchange implements IDex<ApexDefiData> {
13
+ readonly network: Network;
14
+ readonly dexKey: string;
15
+ readonly dexHelper: IDexHelper;
16
+ readonly eventPools: Record<string, ApexDefiEventPool | null>;
17
+ protected supportedTokensMap: {
18
+ [address: string]: Token;
19
+ };
20
+ protected readonly factory: ApexDefiFactory;
21
+ protected readonly wrapperFactory: ApexDefiWrapperFactory;
22
+ readonly routerIface: Interface;
23
+ readonly erc20Iface: Interface;
24
+ readonly tokenIface: Interface;
25
+ readonly factoryIface: Interface;
26
+ readonly wrapperFactoryIface: Interface;
27
+ readonly wrapperIface: Interface;
28
+ feeFactor: number;
29
+ readonly hasConstantPriceLargeAmounts = false;
30
+ readonly needWrapNative = false;
31
+ readonly isFeeOnTransferSupported = false;
32
+ static dexKeysWithNetwork: {
33
+ key: string;
34
+ networks: Network[];
35
+ }[];
36
+ logger: Logger;
37
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper);
38
+ protected getFactoryInstance(): ApexDefiFactory;
39
+ protected getWrapperFactoryInstance(): ApexDefiWrapperFactory;
40
+ protected onPoolCreated(): OnPoolCreatedCallback;
41
+ protected onWrapperCreated(): OnWrapperCreatedCallback;
42
+ initializePricing(blockNumber: number): Promise<void>;
43
+ getAdapters(side: SwapSide): {
44
+ name: string;
45
+ index: number;
46
+ }[] | null;
47
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
48
+ protected getPoolIdentifier(pairAddress: Address): string;
49
+ protected getPoolAddress(srcToken: Token, destToken: Token): string;
50
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<ApexDefiData>>;
51
+ private getDirectAVAXPairPrices;
52
+ private getCrossPairTokenToTokenPrices;
53
+ private getOrDiscoverPool;
54
+ /**
55
+ * Discover and add a pool for a given token pair
56
+ * This method is called when a pool is not found in the eventPools map
57
+ */
58
+ private discoverPool;
59
+ /**
60
+ * Calculate the output amount for a sell (exact input) swap
61
+ * Uses the constant product formula: amountOut = (amountIn * reserveOut) / (reserveIn + amountIn)
62
+ */
63
+ private getSellPrice;
64
+ /**
65
+ * Calculate the input amount for a buy (exact output) swap
66
+ * Uses the constant product formula: amountIn = (amountOut * reserveIn * feeFactor) / ((reserveOut - amountOut) * (feeFactor - totalFee))
67
+ */
68
+ private getBuyPrice;
69
+ private calculateCrossPairSellPrice;
70
+ private calculateCrossPairBuyPrice;
71
+ private calculatePrices;
72
+ getCalldataGasCost(_poolPrices: PoolPrices<ApexDefiData>): number | number[];
73
+ getAdapterParam(_srcToken: string, _destToken: string, _srcAmount: string, _destAmount: string, _data: ApexDefiData, _side: SwapSide): AdapterExchangeParam;
74
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: ApexDefiData, _side: SwapSide): DexExchangeParam;
75
+ private getDirectTokenSwap;
76
+ private getRouterSwap;
77
+ getSimpleParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, data: ApexDefiData, _side: SwapSide): Promise<SimpleExchangeParam>;
78
+ getDirectParam(_srcToken: Address, _destToken: Address, _srcAmount: NumberAsString, _destAmount: NumberAsString, _expectedAmount: NumberAsString, _data: ApexDefiData, _side: SwapSide, _permit: string, _uuid: string, _feePercent: NumberAsString, _deadline: NumberAsString, _partner: string, _beneficiary: string, _contractMethod: string): TxInfo<null>;
79
+ getDirectParamV6(_srcToken: Address, _destToken: Address, _fromAmount: NumberAsString, _toAmount: NumberAsString, _quotedAmount: NumberAsString, _data: ApexDefiData, _side: SwapSide, _permit: string, _uuid: string, _partnerAndFee: string, _beneficiary: string, _blockNumber: number, _contractMethod: string): TxInfo<null>;
80
+ static getDirectFunctionName(): string[];
81
+ static getDirectFunctionNameV6(): string[];
82
+ updatePoolState(): Promise<void>;
83
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
84
+ private fetchAndInitPool;
85
+ releaseResources(): AsyncOrSync<void>;
86
+ protected _getLoweredAddresses(srcToken: Token, destToken: Token): string[];
87
+ fixPathForRouter(path: Address[]): Address[];
88
+ private getERC314Token;
89
+ private convertAmountToERC314;
90
+ private convertAmountFromERC314;
91
+ private convertAmountsToERC314;
92
+ private convertPricesFromERC314;
93
+ private isWrapperOperation;
94
+ private getWrapperPrices;
95
+ private getWrapperSwap;
96
+ private getWrapperSimpleParam;
97
+ }