@paraswap/dex-lib 4.7.28 → 4.8.1-ekubo-v3.0

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 (51) hide show
  1. package/build/abi/clear/ClearFactory.json +71 -0
  2. package/build/abi/clear/ClearSwap.json +334 -0
  3. package/build/abi/clear/ClearVault.json +28 -0
  4. package/build/dex/algebra/config.js +0 -30
  5. package/build/dex/algebra/config.js.map +1 -1
  6. package/build/dex/algebra-integral/config.js +0 -7
  7. package/build/dex/algebra-integral/config.js.map +1 -1
  8. package/build/dex/angle-staked-stable/config.js +0 -32
  9. package/build/dex/angle-staked-stable/config.js.map +1 -1
  10. package/build/dex/angle-transmuter/config.js +0 -20
  11. package/build/dex/angle-transmuter/config.js.map +1 -1
  12. package/build/dex/clear/clear-factory.d.ts +40 -0
  13. package/build/dex/clear/clear-factory.js +152 -0
  14. package/build/dex/clear/clear-factory.js.map +1 -0
  15. package/build/dex/clear/clear.d.ts +56 -0
  16. package/build/dex/clear/clear.js +325 -0
  17. package/build/dex/clear/clear.js.map +1 -0
  18. package/build/dex/clear/config.d.ts +3 -0
  19. package/build/dex/clear/config.js +17 -0
  20. package/build/dex/clear/config.js.map +1 -0
  21. package/build/dex/clear/types.d.ts +30 -0
  22. package/build/dex/clear/types.js +3 -0
  23. package/build/dex/clear/types.js.map +1 -0
  24. package/build/dex/curve-v1/constants.js +2 -4
  25. package/build/dex/curve-v1/constants.js.map +1 -1
  26. package/build/dex/dodo-v1/config.js +0 -10
  27. package/build/dex/dodo-v1/config.js.map +1 -1
  28. package/build/dex/dodo-v2.js +0 -3
  29. package/build/dex/dodo-v2.js.map +1 -1
  30. package/build/dex/ekubo-v3/ekubo-v3-pool-manager.js +10 -11
  31. package/build/dex/ekubo-v3/ekubo-v3-pool-manager.js.map +1 -1
  32. package/build/dex/ekubo-v3/ekubo-v3.js +1 -1
  33. package/build/dex/ekubo-v3/ekubo-v3.js.map +1 -1
  34. package/build/dex/ekubo-v3/types.d.ts +0 -8
  35. package/build/dex/erc4626/config.js +0 -22
  36. package/build/dex/erc4626/config.js.map +1 -1
  37. package/build/dex/index.js +2 -28
  38. package/build/dex/index.js.map +1 -1
  39. package/build/dex/nerve/config.js +0 -435
  40. package/build/dex/nerve/config.js.map +1 -1
  41. package/build/dex/oswap/oswap-pool.js.map +1 -1
  42. package/build/dex/stable-pool/stable-pool.js +1 -1
  43. package/build/dex/stable-pool/stable-pool.js.map +1 -1
  44. package/build/dex/trader-joe-v2.1/config.d.ts +0 -3
  45. package/build/dex/trader-joe-v2.1/config.js +1 -8
  46. package/build/dex/trader-joe-v2.1/config.js.map +1 -1
  47. package/build/dex/uniswap-v2/config.js +0 -8
  48. package/build/dex/uniswap-v2/config.js.map +1 -1
  49. package/build/dex/uniswap-v2/uniswap-v2.js +0 -10
  50. package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
  51. package/package.json +3 -3
@@ -0,0 +1,152 @@
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.ClearFactory = void 0;
7
+ const abi_1 = require("@ethersproject/abi");
8
+ const utils_1 = require("../../utils");
9
+ const stateful_event_subscriber_1 = require("../../stateful-event-subscriber");
10
+ const ClearFactory_json_1 = __importDefault(require("../../abi/clear/ClearFactory.json"));
11
+ const ClearVault_json_1 = __importDefault(require("../../abi/clear/ClearVault.json"));
12
+ class ClearFactory extends stateful_event_subscriber_1.StatefulEventSubscriber {
13
+ parentName;
14
+ config;
15
+ network;
16
+ dexHelper;
17
+ onVaultCreated;
18
+ handlers = {};
19
+ logDecoder;
20
+ addressesSubscribed;
21
+ factoryIface = new abi_1.Interface(ClearFactory_json_1.default);
22
+ vaultIface = new abi_1.Interface(ClearVault_json_1.default);
23
+ constructor(parentName, config, network, dexHelper, logger, onVaultCreated) {
24
+ super(parentName, 'factory', dexHelper, logger);
25
+ this.parentName = parentName;
26
+ this.config = config;
27
+ this.network = network;
28
+ this.dexHelper = dexHelper;
29
+ this.onVaultCreated = onVaultCreated;
30
+ this.logDecoder = (log) => this.factoryIface.parseLog(log);
31
+ this.addressesSubscribed = [config.factoryAddress];
32
+ // Add handler for NewClearVault event
33
+ this.handlers['NewClearVault'] = this.handleNewClearVault.bind(this);
34
+ }
35
+ /**
36
+ * Handle NewClearVault event - regenerate state when a new vault is created
37
+ */
38
+ async handleNewClearVault() {
39
+ const blockNumber = await this.dexHelper.provider.getBlockNumber();
40
+ const vaults = await this.getStateOrGenerate(blockNumber, false);
41
+ this.onVaultCreated(vaults);
42
+ return vaults;
43
+ }
44
+ /**
45
+ * Process incoming logs and dispatch to appropriate handlers
46
+ */
47
+ async processLog(state, log) {
48
+ try {
49
+ let event;
50
+ try {
51
+ event = this.logDecoder(log);
52
+ }
53
+ catch (e) {
54
+ return null;
55
+ }
56
+ if (event.name in this.handlers) {
57
+ return await this.handlers[event.name](event, state, log);
58
+ }
59
+ }
60
+ catch (e) {
61
+ (0, utils_1.catchParseLogError)(e, this.logger);
62
+ }
63
+ return null;
64
+ }
65
+ async getStateOrGenerate(blockNumber, readonly = false) {
66
+ let state = this.getState(blockNumber);
67
+ if (!state) {
68
+ state = await this.generateState(blockNumber);
69
+ if (!readonly)
70
+ this.setState(state, blockNumber);
71
+ }
72
+ return state;
73
+ }
74
+ /**
75
+ * Generate state using on-chain calls:
76
+ * 1. Call vaultsLength() to get total count
77
+ * 2. Call getBatchVaultAddresses() to get all addresses
78
+ * 3. Call tokens() on each vault to get supported tokens
79
+ */
80
+ async generateState(blockNumber) {
81
+ // Step 1: Get total number of vaults
82
+ const lengthCall = {
83
+ target: this.config.factoryAddress,
84
+ callData: this.factoryIface.encodeFunctionData('vaultsLength'),
85
+ decodeFunction: (result) => {
86
+ const decoded = this.factoryIface.decodeFunctionResult('vaultsLength', result);
87
+ return BigInt(decoded[0].toString());
88
+ },
89
+ };
90
+ const [lengthResult] = await this.dexHelper.multiWrapper.tryAggregate(false, [lengthCall], blockNumber);
91
+ if (!lengthResult.success) {
92
+ this.logger.error(`${this.parentName}: Failed to fetch vaultsLength`);
93
+ return [];
94
+ }
95
+ const vaultsLength = Number(lengthResult.returnData);
96
+ if (vaultsLength === 0) {
97
+ this.logger.info(`${this.parentName}: No vaults found`);
98
+ return [];
99
+ }
100
+ // Step 2: Get all vault addresses
101
+ const indexes = Array.from({ length: vaultsLength }, (_, i) => i);
102
+ const batchCall = {
103
+ target: this.config.factoryAddress,
104
+ callData: this.factoryIface.encodeFunctionData('getBatchVaultAddresses', [
105
+ indexes,
106
+ ]),
107
+ decodeFunction: (result) => {
108
+ const decoded = this.factoryIface.decodeFunctionResult('getBatchVaultAddresses', result);
109
+ return decoded[0];
110
+ },
111
+ };
112
+ const [batchResult] = await this.dexHelper.multiWrapper.tryAggregate(false, [batchCall], blockNumber);
113
+ if (!batchResult.success || !batchResult.returnData) {
114
+ this.logger.error(`${this.parentName}: Failed to fetch vault addresses`);
115
+ return [];
116
+ }
117
+ const vaultAddresses = batchResult.returnData.map(addr => addr.toLowerCase());
118
+ // Step 3: Fetch tokens for each vault
119
+ const tokenCalls = vaultAddresses.map(vault => ({
120
+ target: vault,
121
+ callData: this.vaultIface.encodeFunctionData('tokens'),
122
+ decodeFunction: (result) => {
123
+ const decoded = this.vaultIface.decodeFunctionResult('tokens', result);
124
+ return decoded[0];
125
+ },
126
+ }));
127
+ const tokenResults = await this.dexHelper.multiWrapper.tryAggregate(false, tokenCalls, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
128
+ const vaults = [];
129
+ for (let i = 0; i < vaultAddresses.length; i++) {
130
+ const result = tokenResults[i];
131
+ if (!result.success || !result.returnData) {
132
+ this.logger.warn(`${this.parentName}: Failed to fetch tokens for vault ${vaultAddresses[i]}`);
133
+ continue;
134
+ }
135
+ const tokenAddresses = result.returnData;
136
+ vaults.push({
137
+ id: vaultAddresses[i],
138
+ address: vaultAddresses[i],
139
+ tokens: tokenAddresses.map(addr => ({
140
+ id: addr.toLowerCase(),
141
+ address: addr.toLowerCase(),
142
+ symbol: '',
143
+ decimals: '18',
144
+ })),
145
+ });
146
+ }
147
+ this.logger.info(`${this.parentName}: Generated state with ${vaults.length} vaults`);
148
+ return vaults;
149
+ }
150
+ }
151
+ exports.ClearFactory = ClearFactory;
152
+ //# sourceMappingURL=clear-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear-factory.js","sourceRoot":"","sources":["../../../src/dex/clear/clear-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { AsyncOrSync } from 'ts-essentials';
3
+ import { Logger, Token, Address, PoolPrices, AdapterExchangeParam, PoolLiquidity, ExchangePrices, DexExchangeParam } from '../../types';
4
+ import { IDexHelper } from '../../dex-helper/idex-helper';
5
+ import { IDex } from '../idex';
6
+ import { SimpleExchange } from '../simple-exchange';
7
+ import { ClearData, DexParams } from './types';
8
+ import { Network, SwapSide } from '../../constants';
9
+ import { NumberAsString } from '@paraswap/core';
10
+ import { ClearFactory } from './clear-factory';
11
+ /**
12
+ * Clear DEX Integration for ParaSwap
13
+ *
14
+ * Clear is a depeg arbitrage protocol for stablecoins
15
+ * - Vaults contain N tokens (multi-token, not pairs)
16
+ * - Pricing via ClearSwap.previewSwap() - returns 0 when no depeg
17
+ * - Discovery via StatefulEventSubscriber (getters + NewClearVault events)
18
+ * - Each (vault, tokenA, tokenB) combination = one "pool" for ParaSwap
19
+ */
20
+ export declare class Clear extends SimpleExchange implements IDex<ClearData> {
21
+ readonly network: Network;
22
+ readonly dexKey: string;
23
+ readonly dexHelper: IDexHelper;
24
+ static dexKeys: string[];
25
+ logger: Logger;
26
+ protected config: DexParams;
27
+ protected factory: ClearFactory;
28
+ readonly hasConstantPriceLargeAmounts = false;
29
+ readonly isFeeOnTransferSupported = false;
30
+ static dexKeysWithNetwork: {
31
+ key: string;
32
+ networks: Network[];
33
+ }[];
34
+ readonly clearSwapIface: Interface;
35
+ private vaults;
36
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper);
37
+ /**
38
+ * Callback when factory detects new vaults
39
+ */
40
+ private onVaultsUpdated;
41
+ getAdapters(_side: SwapSide): null;
42
+ initializePricing(blockNumber: number): Promise<void>;
43
+ /**
44
+ * Deep copy vaults from readonly state to mutable cache
45
+ */
46
+ private updateVaultsFromState;
47
+ releaseResources(): AsyncOrSync<void>;
48
+ private processMulticallResults;
49
+ private findVaultsForTokenPair;
50
+ getPoolIdentifiers(srcToken: Token, destToken: Token, _side: SwapSide, _blockNumber: number): Promise<string[]>;
51
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<ClearData>>;
52
+ getAdapterParam(): AdapterExchangeParam;
53
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: ClearData, _side: SwapSide): DexExchangeParam;
54
+ getCalldataGasCost(_poolPrices: PoolPrices<ClearData>): number | number[];
55
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
56
+ }
@@ -0,0 +1,325 @@
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.Clear = void 0;
40
+ const abi_1 = require("@ethersproject/abi");
41
+ const simple_exchange_1 = require("../simple-exchange");
42
+ const config_1 = require("./config");
43
+ const constants_1 = require("../../constants");
44
+ const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
45
+ const utils_1 = require("../../utils");
46
+ const ClearSwap_json_1 = __importDefault(require("../../abi/clear/ClearSwap.json"));
47
+ const clear_factory_1 = require("./clear-factory");
48
+ const CLEAR_GAS_COST = 150_000;
49
+ /**
50
+ * Clear DEX Integration for ParaSwap
51
+ *
52
+ * Clear is a depeg arbitrage protocol for stablecoins
53
+ * - Vaults contain N tokens (multi-token, not pairs)
54
+ * - Pricing via ClearSwap.previewSwap() - returns 0 when no depeg
55
+ * - Discovery via StatefulEventSubscriber (getters + NewClearVault events)
56
+ * - Each (vault, tokenA, tokenB) combination = one "pool" for ParaSwap
57
+ */
58
+ class Clear extends simple_exchange_1.SimpleExchange {
59
+ network;
60
+ dexKey;
61
+ dexHelper;
62
+ static dexKeys = ['clear'];
63
+ logger;
64
+ config;
65
+ factory;
66
+ hasConstantPriceLargeAmounts = false;
67
+ isFeeOnTransferSupported = false;
68
+ static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.ClearConfig);
69
+ clearSwapIface = new abi_1.Interface(ClearSwap_json_1.default);
70
+ // Vault cache - updated by factory subscriber
71
+ vaults = [];
72
+ constructor(network, dexKey, dexHelper) {
73
+ super(dexHelper, dexKey);
74
+ this.network = network;
75
+ this.dexKey = dexKey;
76
+ this.dexHelper = dexHelper;
77
+ this.config = config_1.ClearConfig[dexKey][network];
78
+ this.logger = dexHelper.getLogger(dexKey);
79
+ // Initialize factory subscriber with callback to update vaults
80
+ this.factory = new clear_factory_1.ClearFactory(dexKey, this.config, network, dexHelper, this.logger, this.onVaultsUpdated.bind(this));
81
+ }
82
+ /**
83
+ * Callback when factory detects new vaults
84
+ */
85
+ onVaultsUpdated(vaults) {
86
+ this.updateVaultsFromState(vaults);
87
+ this.logger.info(`${this.dexKey}: Vaults updated, count: ${this.vaults.length}`);
88
+ }
89
+ getAdapters(_side) {
90
+ return null;
91
+ }
92
+ async initializePricing(blockNumber) {
93
+ // Initialize factory and fetch initial state
94
+ await this.factory.initialize(blockNumber);
95
+ const vaults = await this.factory.getStateOrGenerate(blockNumber);
96
+ this.updateVaultsFromState(vaults);
97
+ this.logger.info(`${this.dexKey}: Initialized ${this.vaults.length} vaults`);
98
+ }
99
+ /**
100
+ * Deep copy vaults from readonly state to mutable cache
101
+ */
102
+ updateVaultsFromState(vaults) {
103
+ this.vaults = vaults.map(v => ({
104
+ id: v.id,
105
+ address: v.address,
106
+ tokens: v.tokens.map(t => ({
107
+ id: t.id,
108
+ address: t.address,
109
+ symbol: t.symbol,
110
+ decimals: t.decimals,
111
+ })),
112
+ }));
113
+ }
114
+ releaseResources() {
115
+ this.logger.info(`${this.dexKey}: released resources`);
116
+ }
117
+ processMulticallResults(results, callInfos, amountsLength) {
118
+ const vaultResults = new Map();
119
+ for (let i = 0; i < results.length; i++) {
120
+ const result = results[i];
121
+ const info = callInfos[i];
122
+ if (!vaultResults.has(info.vaultAddress)) {
123
+ vaultResults.set(info.vaultAddress, {
124
+ poolIdentifier: info.poolIdentifier,
125
+ prices: new Array(amountsLength).fill(0n),
126
+ unit: 0n,
127
+ });
128
+ }
129
+ if (!result.success) {
130
+ // Expected when no depeg exists - previewSwap reverts with AssetIsNotDepeg
131
+ this.logger.debug(info.isUnit
132
+ ? `No price for vault ${info.vaultAddress} (no depeg)`
133
+ : `No swap available for amount index ${info.amountIndex} in vault ${info.vaultAddress}`);
134
+ continue;
135
+ }
136
+ const vaultData = vaultResults.get(info.vaultAddress);
137
+ if (info.isUnit) {
138
+ vaultData.unit = result.returnData.amountOut;
139
+ continue;
140
+ }
141
+ vaultData.prices[info.amountIndex] = result.returnData.amountOut;
142
+ }
143
+ return vaultResults;
144
+ }
145
+ findVaultsForTokenPair(srcToken, destToken) {
146
+ return this.vaults.filter(vault => {
147
+ const tokenAddresses = vault.tokens.map(t => t.address.toLowerCase());
148
+ return (tokenAddresses.includes(srcToken.toLowerCase()) &&
149
+ tokenAddresses.includes(destToken.toLowerCase()));
150
+ });
151
+ }
152
+ async getPoolIdentifiers(srcToken, destToken, _side, _blockNumber) {
153
+ if (!this.config) {
154
+ this.logger.error(`No config for ${this.dexKey} on ${this.network}`);
155
+ return [];
156
+ }
157
+ const vaults = this.findVaultsForTokenPair(srcToken.address, destToken.address);
158
+ if (vaults.length === 0) {
159
+ return [];
160
+ }
161
+ return vaults.map(vault => `${this.dexKey}_${vault.address}_${srcToken.address}_${destToken.address}`.toLowerCase());
162
+ }
163
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
164
+ try {
165
+ if (!this.config) {
166
+ this.logger.debug(`No config available for ${this.dexKey} on network ${this.network}`);
167
+ return null;
168
+ }
169
+ // Only SELL side supported
170
+ if (side === constants_1.SwapSide.BUY) {
171
+ return null;
172
+ }
173
+ const poolIdentifiers = limitPools ||
174
+ (await this.getPoolIdentifiers(srcToken, destToken, side, blockNumber));
175
+ if (poolIdentifiers.length === 0) {
176
+ this.logger.debug(`No pools found for ${srcToken.symbol}-${destToken.symbol}`);
177
+ return null;
178
+ }
179
+ const unitAmount = BigInt(10) ** BigInt(srcToken.decimals);
180
+ const calls = [];
181
+ const callInfos = [];
182
+ for (const poolIdentifier of poolIdentifiers) {
183
+ const vaultAddress = poolIdentifier.split('_')[1];
184
+ for (let i = 0; i < amounts.length; i++) {
185
+ const callData = this.clearSwapIface.encodeFunctionData('previewSwap', [vaultAddress, srcToken.address, destToken.address, amounts[i]]);
186
+ calls.push({
187
+ target: this.config.swapAddress,
188
+ callData,
189
+ decodeFunction: (result) => {
190
+ const decoded = this.clearSwapIface.decodeFunctionResult('previewSwap', result);
191
+ return {
192
+ amountOut: BigInt(decoded.amountOut.toString()),
193
+ ious: BigInt(decoded.ious.toString()),
194
+ };
195
+ },
196
+ });
197
+ callInfos.push({
198
+ vaultAddress,
199
+ poolIdentifier,
200
+ isUnit: false,
201
+ amountIndex: i,
202
+ });
203
+ }
204
+ const unitCallData = this.clearSwapIface.encodeFunctionData('previewSwap', [vaultAddress, srcToken.address, destToken.address, unitAmount]);
205
+ calls.push({
206
+ target: this.config.swapAddress,
207
+ callData: unitCallData,
208
+ decodeFunction: (result) => {
209
+ const decoded = this.clearSwapIface.decodeFunctionResult('previewSwap', result);
210
+ return {
211
+ amountOut: BigInt(decoded.amountOut.toString()),
212
+ ious: BigInt(decoded.ious.toString()),
213
+ };
214
+ },
215
+ });
216
+ callInfos.push({
217
+ vaultAddress,
218
+ poolIdentifier,
219
+ isUnit: true,
220
+ amountIndex: -1,
221
+ });
222
+ }
223
+ const results = await this.dexHelper.multiWrapper.tryAggregate(false, calls, blockNumber, this.dexHelper.multiWrapper.defaultBatchSize, false);
224
+ const vaultResults = this.processMulticallResults(results, callInfos, amounts.length);
225
+ const poolPrices = [];
226
+ for (const [vaultAddress, vaultData] of vaultResults) {
227
+ if (vaultData.prices.every(p => p === 0n)) {
228
+ // Expected when no depeg - skip this vault
229
+ continue;
230
+ }
231
+ let unit = vaultData.unit;
232
+ if (unit === 0n && vaultData.prices[0] && amounts[0]) {
233
+ unit = (vaultData.prices[0] * unitAmount) / amounts[0];
234
+ }
235
+ poolPrices.push({
236
+ prices: vaultData.prices,
237
+ unit,
238
+ data: {
239
+ vault: vaultAddress,
240
+ router: this.config.swapAddress,
241
+ },
242
+ poolIdentifiers: [vaultData.poolIdentifier],
243
+ exchange: this.dexKey,
244
+ gasCost: this.config.poolGasCost || CLEAR_GAS_COST,
245
+ poolAddresses: [vaultAddress],
246
+ });
247
+ }
248
+ if (poolPrices.length === 0) {
249
+ // Expected when no depeg exists
250
+ return null;
251
+ }
252
+ return poolPrices;
253
+ }
254
+ catch (error) {
255
+ this.logger.error('Error in getPricesVolume:', error);
256
+ return null;
257
+ }
258
+ }
259
+ // Not used in V6, but required by interface
260
+ getAdapterParam() {
261
+ return {
262
+ targetExchange: '0x',
263
+ payload: '0x',
264
+ networkFee: '0',
265
+ };
266
+ }
267
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, _side) {
268
+ const exchangeData = this.clearSwapIface.encodeFunctionData('swap', [
269
+ recipient,
270
+ data.vault,
271
+ srcToken,
272
+ destToken,
273
+ srcAmount,
274
+ destAmount,
275
+ false,
276
+ ]);
277
+ return {
278
+ needWrapNative: this.needWrapNative,
279
+ dexFuncHasRecipient: true,
280
+ exchangeData,
281
+ targetExchange: data.router,
282
+ returnAmountPos: undefined,
283
+ };
284
+ }
285
+ getCalldataGasCost(_poolPrices) {
286
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
287
+ }
288
+ async getTopPoolsForToken(tokenAddress, limit) {
289
+ const vaultsWithToken = this.vaults.filter(vault => vault.tokens.some(t => t.address.toLowerCase() === tokenAddress.toLowerCase()));
290
+ if (vaultsWithToken.length === 0) {
291
+ return [];
292
+ }
293
+ const tokenInfo = vaultsWithToken[0].tokens.find(t => t.address.toLowerCase() === tokenAddress.toLowerCase());
294
+ if (!tokenInfo) {
295
+ return [];
296
+ }
297
+ const decimals = parseInt(tokenInfo.decimals, 10);
298
+ const amount = BigInt(10) ** BigInt(decimals);
299
+ const tokenUsdPrice = await this.dexHelper.getTokenUSDPrice({ address: tokenAddress, decimals }, amount);
300
+ const poolLiquidities = vaultsWithToken
301
+ .map(vault => {
302
+ const connectorTokens = vault.tokens
303
+ .filter(t => t.address.toLowerCase() !== tokenAddress.toLowerCase())
304
+ .map(t => ({
305
+ address: t.address,
306
+ decimals: parseInt(t.decimals, 10),
307
+ }));
308
+ if (connectorTokens.length === 0) {
309
+ return null;
310
+ }
311
+ return {
312
+ exchange: this.dexKey,
313
+ address: vault.address,
314
+ connectorTokens,
315
+ liquidityUSD: tokenUsdPrice,
316
+ };
317
+ })
318
+ .filter((p) => p !== null);
319
+ return poolLiquidities
320
+ .sort((a, b) => b.liquidityUSD - a.liquidityUSD)
321
+ .slice(0, limit);
322
+ }
323
+ }
324
+ exports.Clear = Clear;
325
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/dex/clear/clear.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { DexParams } from './types';
2
+ import { DexConfigMap } from '../../types';
3
+ export declare const ClearConfig: DexConfigMap<DexParams>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClearConfig = void 0;
4
+ const constants_1 = require("../../constants");
5
+ exports.ClearConfig = {
6
+ clear: {
7
+ [constants_1.Network.MAINNET]: {
8
+ factoryAddress: '0x8bF266ED803e474AE7Bf09ADB5ba2566c489223d',
9
+ swapAddress: '0xeb5AD3D93E59eFcbC6934caD2B48EB33BAf29745',
10
+ oracleAddress: '0x049ad7Ff0c6BdbaB86baf4b1A5a5cA975e234FCA',
11
+ accessManagerAddress: '0x20a22791923E69f0f27166B59A12aF01cA4E4AF8',
12
+ poolGasCost: 150_000,
13
+ feeCode: 0,
14
+ },
15
+ },
16
+ };
17
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/clear/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAE7B,QAAA,WAAW,GAA4B;IAClD,KAAK,EAAE;QACL,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,cAAc,EAAE,4CAA4C;YAC5D,WAAW,EAAE,4CAA4C;YACzD,aAAa,EAAE,4CAA4C;YAC3D,oBAAoB,EAAE,4CAA4C;YAClE,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,CAAC;SACX;KACF;CACF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { Address } from '../../types';
2
+ export type ClearData = {
3
+ vault: Address;
4
+ router: Address;
5
+ };
6
+ export interface DexParams {
7
+ factoryAddress: Address;
8
+ swapAddress: Address;
9
+ oracleAddress: Address;
10
+ accessManagerAddress?: Address;
11
+ poolGasCost?: number;
12
+ feeCode: number;
13
+ }
14
+ export interface ClearVaultToken {
15
+ id: string;
16
+ address: string;
17
+ symbol: string;
18
+ decimals: string;
19
+ }
20
+ export interface ClearVault {
21
+ id: string;
22
+ address: string;
23
+ tokens: ClearVaultToken[];
24
+ }
25
+ export interface PreviewSwapCallInfo {
26
+ vaultAddress: string;
27
+ poolIdentifier: string;
28
+ isUnit: boolean;
29
+ amountIndex: number;
30
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/clear/types.ts"],"names":[],"mappings":""}
@@ -2,13 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AllCurveForks = exports.DIRECT_METHOD_NAME_V6 = exports.DIRECT_METHOD_NAME = void 0;
4
4
  const config_1 = require("./config");
5
- const config_2 = require("./forks/swerve/config");
6
- const config_3 = require("./forks/curve-forks/config");
5
+ const config_2 = require("./forks/curve-forks/config");
7
6
  exports.DIRECT_METHOD_NAME = 'directCurveV1Swap';
8
7
  exports.DIRECT_METHOD_NAME_V6 = 'swapExactAmountInOnCurveV1';
9
8
  exports.AllCurveForks = [
10
9
  ...Object.keys(config_1.CurveV1Config),
11
- ...Object.keys(config_3.CurveForksConfig),
12
- ...Object.keys(config_2.SwerveConfig),
10
+ ...Object.keys(config_2.CurveForksConfig),
13
11
  ];
14
12
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/curve-v1/constants.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AACzC,kDAAqD;AACrD,uDAA8D;AAEjD,QAAA,kBAAkB,GAAG,mBAAmB,CAAC;AACzC,QAAA,qBAAqB,GAAG,4BAA4B,CAAC;AAErD,QAAA,aAAa,GAAG;IAC3B,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAa,CAAC;IAC7B,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAgB,CAAC;IAChC,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAY,CAAC;CAC7B,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/curve-v1/constants.ts"],"names":[],"mappings":";;;AAAA,qCAAyC;AACzC,uDAA8D;AAEjD,QAAA,kBAAkB,GAAG,mBAAmB,CAAC;AACzC,QAAA,qBAAqB,GAAG,4BAA4B,CAAC;AAErD,QAAA,aAAa,GAAG;IAC3B,GAAG,MAAM,CAAC,IAAI,CAAC,sBAAa,CAAC;IAC7B,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAgB,CAAC;CACjC,CAAC"}