@paraswap/dex-lib 4.6.5-pool-key-addresses.0 → 4.6.5
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.
- package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.d.ts +52 -0
- package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.js +363 -0
- package/build/dex/aave-pt-to-usdc/aave-pt-to-usdc.js.map +1 -0
- package/build/dex/aave-pt-to-usdc/config.d.ts +3 -0
- package/build/dex/aave-pt-to-usdc/config.js +59 -0
- package/build/dex/aave-pt-to-usdc/config.js.map +1 -0
- package/build/dex/aave-pt-to-usdc/constants.d.ts +6 -0
- package/build/dex/aave-pt-to-usdc/constants.js +13 -0
- package/build/dex/aave-pt-to-usdc/constants.js.map +1 -0
- package/build/dex/aave-pt-to-usdc/types.d.ts +34 -0
- package/build/dex/aave-pt-to-usdc/types.js +3 -0
- package/build/dex/aave-pt-to-usdc/types.js.map +1 -0
- package/build/dex/bunni-v2/bunni-v2-pool.d.ts +2 -1
- package/build/dex/bunni-v2/bunni-v2-pool.js +14 -4
- package/build/dex/bunni-v2/bunni-v2-pool.js.map +1 -1
- package/build/dex/bunni-v2/bunni-v2.d.ts +4 -2
- package/build/dex/bunni-v2/bunni-v2.js +57 -33
- package/build/dex/bunni-v2/bunni-v2.js.map +1 -1
- package/build/dex/bunni-v2/getOnChainState.d.ts +3 -2
- package/build/dex/bunni-v2/getOnChainState.js +40 -2
- package/build/dex/bunni-v2/getOnChainState.js.map +1 -1
- package/build/dex/bunni-v2/lib/Constants.d.ts +1 -0
- package/build/dex/bunni-v2/lib/Constants.js +2 -1
- package/build/dex/bunni-v2/lib/Constants.js.map +1 -1
- package/build/dex/bunni-v2/types.d.ts +1 -0
- package/build/dex/bunni-v2/utils.js +1 -0
- package/build/dex/bunni-v2/utils.js.map +1 -1
- package/build/dex/uniswap-v4/uniswap-v4.js +1 -1
- package/build/dex/uniswap-v4/uniswap-v4.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Token, Address, ExchangePrices, AdapterExchangeParam, PoolLiquidity, Logger, NumberAsString } from '../../types';
|
|
2
|
+
import { SwapSide, Network } from '../../constants';
|
|
3
|
+
import { Context, IDex } from '../../dex/idex';
|
|
4
|
+
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
5
|
+
import { AavePtToUsdcData } from './types';
|
|
6
|
+
import { SimpleExchange } from '../simple-exchange';
|
|
7
|
+
import { DexExchangeParam } from '../../types';
|
|
8
|
+
export declare class AavePtToUsdc extends SimpleExchange implements IDex<AavePtToUsdcData> {
|
|
9
|
+
readonly network: Network;
|
|
10
|
+
readonly dexKey: string;
|
|
11
|
+
readonly dexHelper: IDexHelper;
|
|
12
|
+
readonly hasConstantPriceLargeAmounts = false;
|
|
13
|
+
readonly needWrapNative = false;
|
|
14
|
+
readonly isFeeOnTransferSupported = false;
|
|
15
|
+
private config;
|
|
16
|
+
private marketsCache;
|
|
17
|
+
private oracleInterface;
|
|
18
|
+
private usdcToken;
|
|
19
|
+
private readonly supportedMarkets;
|
|
20
|
+
private lastApiCallTime;
|
|
21
|
+
private readonly minApiCallInterval;
|
|
22
|
+
private priceCache;
|
|
23
|
+
logger: Logger;
|
|
24
|
+
static dexKeysWithNetwork: {
|
|
25
|
+
key: string;
|
|
26
|
+
networks: Network[];
|
|
27
|
+
}[];
|
|
28
|
+
constructor(network: Network, dexKey: string, dexHelper: IDexHelper);
|
|
29
|
+
getAdapters(): {
|
|
30
|
+
name: string;
|
|
31
|
+
index: number;
|
|
32
|
+
}[] | null;
|
|
33
|
+
initializePricing(blockNumber: number): Promise<void>;
|
|
34
|
+
private populateMarketsFromConfig;
|
|
35
|
+
private getMarketForPt;
|
|
36
|
+
isPairSupported(tokenA: Token, tokenB: Token): boolean;
|
|
37
|
+
private _findPtToken;
|
|
38
|
+
getPoolIdentifier(marketAddress: string): string;
|
|
39
|
+
getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
|
|
40
|
+
private getMarketByPtToken;
|
|
41
|
+
getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<ExchangePrices<AavePtToUsdcData> | null>;
|
|
42
|
+
getCalldataGasCost(): number | number[];
|
|
43
|
+
getAdapterParam(srcToken: string, destToken: string, srcAmount: string, destAmount: string, data: AavePtToUsdcData, side: SwapSide): AdapterExchangeParam;
|
|
44
|
+
getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
|
|
45
|
+
updatePoolState(): Promise<void>;
|
|
46
|
+
getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: AavePtToUsdcData, side: SwapSide, context: Context, executorAddress: Address): Promise<DexExchangeParam>;
|
|
47
|
+
private callPendleSdkApi;
|
|
48
|
+
private getSupportedMarkets;
|
|
49
|
+
private generateCacheKey;
|
|
50
|
+
private waitForRateLimit;
|
|
51
|
+
private executeWithRetry;
|
|
52
|
+
}
|
|
@@ -0,0 +1,363 @@
|
|
|
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.AavePtToUsdc = void 0;
|
|
40
|
+
const constants_1 = require("../../constants");
|
|
41
|
+
const CALLDATA_GAS_COST = __importStar(require("../../calldata-gas-cost"));
|
|
42
|
+
const utils_1 = require("../../utils");
|
|
43
|
+
const simple_exchange_1 = require("../simple-exchange");
|
|
44
|
+
const config_1 = require("./config");
|
|
45
|
+
const abi_1 = require("@ethersproject/abi");
|
|
46
|
+
const PendleOracle_json_1 = __importDefault(require("../../abi/PendleOracle.json"));
|
|
47
|
+
const constants_2 = require("./constants");
|
|
48
|
+
const MAINNET_USDC = {
|
|
49
|
+
address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
50
|
+
decimals: 6,
|
|
51
|
+
name: 'USD Coin',
|
|
52
|
+
symbol: 'USDC',
|
|
53
|
+
};
|
|
54
|
+
class AavePtToUsdc extends simple_exchange_1.SimpleExchange {
|
|
55
|
+
network;
|
|
56
|
+
dexKey;
|
|
57
|
+
dexHelper;
|
|
58
|
+
hasConstantPriceLargeAmounts = false;
|
|
59
|
+
needWrapNative = false;
|
|
60
|
+
isFeeOnTransferSupported = false;
|
|
61
|
+
config;
|
|
62
|
+
marketsCache = new Map();
|
|
63
|
+
oracleInterface;
|
|
64
|
+
usdcToken;
|
|
65
|
+
supportedMarkets;
|
|
66
|
+
lastApiCallTime = 0;
|
|
67
|
+
// FIX: Increase the minimum delay between API calls to avoid rate limiting
|
|
68
|
+
minApiCallInterval = 1500; // 1.5 seconds
|
|
69
|
+
priceCache = new Map();
|
|
70
|
+
logger;
|
|
71
|
+
static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.AavePtToUsdcConfig);
|
|
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.AavePtToUsdcConfig[dexKey][network];
|
|
78
|
+
this.logger = dexHelper.getLogger(dexKey);
|
|
79
|
+
this.oracleInterface = new abi_1.Interface(PendleOracle_json_1.default);
|
|
80
|
+
if (this.network !== constants_1.Network.MAINNET) {
|
|
81
|
+
throw new Error('AavePtToUsdc is only supported on Mainnet');
|
|
82
|
+
}
|
|
83
|
+
this.usdcToken = MAINNET_USDC;
|
|
84
|
+
this.supportedMarkets = this.getSupportedMarkets();
|
|
85
|
+
}
|
|
86
|
+
getAdapters() {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
async initializePricing(blockNumber) {
|
|
90
|
+
this.populateMarketsFromConfig();
|
|
91
|
+
}
|
|
92
|
+
populateMarketsFromConfig() {
|
|
93
|
+
this.config.supportedPts.forEach(ptConfig => {
|
|
94
|
+
this.marketsCache.set(ptConfig.pt.address.toLowerCase(), {
|
|
95
|
+
address: ptConfig.marketAddress,
|
|
96
|
+
ptAddress: ptConfig.pt.address,
|
|
97
|
+
ptDecimals: ptConfig.pt.decimals,
|
|
98
|
+
ytAddress: constants_1.NULL_ADDRESS,
|
|
99
|
+
underlyingAssetAddress: ptConfig.underlyingAssetAddress,
|
|
100
|
+
name: ptConfig.pt.name,
|
|
101
|
+
expiry: ptConfig.pt.expiry,
|
|
102
|
+
chainId: this.network,
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
this.logger.info(`${this.dexKey}-${this.network}: Populated ${this.marketsCache.size} markets from static configuration`);
|
|
106
|
+
}
|
|
107
|
+
getMarketForPt(ptAddress) {
|
|
108
|
+
return this.marketsCache.get(ptAddress.toLowerCase()) ?? null;
|
|
109
|
+
}
|
|
110
|
+
isPairSupported(tokenA, tokenB) {
|
|
111
|
+
const ptToken = this._findPtToken(tokenA, tokenB);
|
|
112
|
+
if (!ptToken) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
const market = this.getMarketByPtToken(ptToken);
|
|
116
|
+
if (!market) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
const otherToken = ptToken.address.toLowerCase() === tokenA.address.toLowerCase()
|
|
120
|
+
? tokenB
|
|
121
|
+
: tokenA;
|
|
122
|
+
return (otherToken.address.toLowerCase() ===
|
|
123
|
+
market.underlyingRawAddress.toLowerCase() ||
|
|
124
|
+
otherToken.address.toLowerCase() === this.usdcToken.address.toLowerCase());
|
|
125
|
+
}
|
|
126
|
+
_findPtToken(srcToken, destToken) {
|
|
127
|
+
const supportedMarkets = this.getSupportedMarkets();
|
|
128
|
+
this.logger.info(`supportedMarkets inside _findPtToken: ${JSON.stringify(supportedMarkets, null, 2)}`);
|
|
129
|
+
this.logger.info(`Checking srcToken: ${srcToken.symbol || 'undefined'} (${srcToken.address})`);
|
|
130
|
+
this.logger.info(`Checking destToken: ${destToken.symbol || 'undefined'} (${destToken.address})`);
|
|
131
|
+
const result = [srcToken, destToken].find(t => {
|
|
132
|
+
const found = supportedMarkets.some(m => m.pt.address.toLowerCase() === t.address.toLowerCase());
|
|
133
|
+
this.logger.info(`Checking token ${t.address.toLowerCase()} against supported markets: ${found}`);
|
|
134
|
+
return found;
|
|
135
|
+
});
|
|
136
|
+
this.logger.info(`_findPtToken final result: ${result?.address || 'undefined'}`);
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
getPoolIdentifier(marketAddress) {
|
|
140
|
+
return `${this.dexKey}_${marketAddress.toLowerCase()}`;
|
|
141
|
+
}
|
|
142
|
+
async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
|
|
143
|
+
this.logger.info(`getPoolIdentifiers called with src: ${srcToken.symbol || 'undefined'}, dest: ${destToken.symbol || 'undefined'}`);
|
|
144
|
+
const ptToken = this._findPtToken(srcToken, destToken);
|
|
145
|
+
this.logger.info(`_findPtToken result: ${ptToken?.address || 'undefined'}`);
|
|
146
|
+
if (!ptToken) {
|
|
147
|
+
this.logger.warn(`Could not find PT token for pair ${srcToken.symbol || 'undefined'}-${destToken.symbol || 'undefined'}`);
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
const market = this.getSupportedMarkets().find((m) => m.pt.address.toLowerCase() === ptToken.address.toLowerCase());
|
|
151
|
+
this.logger.info(`found market: ${market?.marketAddress}`);
|
|
152
|
+
if (!market) {
|
|
153
|
+
this.logger.warn(`Could not find market for PT ${ptToken.address || 'undefined'}`);
|
|
154
|
+
return [];
|
|
155
|
+
}
|
|
156
|
+
return [this.getPoolIdentifier(market.marketAddress)];
|
|
157
|
+
}
|
|
158
|
+
getMarketByPtToken(ptToken) {
|
|
159
|
+
return this.supportedMarkets.find(m => m.pt.address.toLowerCase() === ptToken.address.toLowerCase());
|
|
160
|
+
}
|
|
161
|
+
async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
|
|
162
|
+
if (side === constants_1.SwapSide.BUY) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const pt = this._findPtToken(srcToken, destToken);
|
|
166
|
+
if (!pt || pt.address.toLowerCase() !== srcToken.address.toLowerCase()) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const market = this.getMarketByPtToken(pt);
|
|
170
|
+
if (!market)
|
|
171
|
+
return null;
|
|
172
|
+
const isUsdc = destToken.address.toLowerCase() === this.usdcToken.address.toLowerCase();
|
|
173
|
+
const isUnderlying = destToken.address.toLowerCase() ===
|
|
174
|
+
market.underlyingRawAddress.toLowerCase();
|
|
175
|
+
if (!isUsdc && !isUnderlying)
|
|
176
|
+
return null;
|
|
177
|
+
const marketAddress = market.marketAddress;
|
|
178
|
+
const destAmounts = [];
|
|
179
|
+
for (const amount of amounts) {
|
|
180
|
+
if (amount === 0n) {
|
|
181
|
+
destAmounts.push('0');
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
try {
|
|
185
|
+
this.logger.info(`Calling Pendle SDK API for amount ${amount} (${isUsdc ? 'USDC' : 'underlying'} route)`);
|
|
186
|
+
const params = {
|
|
187
|
+
receiver: this.augustusAddress,
|
|
188
|
+
slippage: constants_2.DEFAULT_SLIPPAGE_FOR_QUOTTING,
|
|
189
|
+
ptAmount: amount.toString(),
|
|
190
|
+
ytAmount: '0',
|
|
191
|
+
lpAmount: '0',
|
|
192
|
+
tokenOut: destToken.address,
|
|
193
|
+
enableAggregator: isUsdc,
|
|
194
|
+
};
|
|
195
|
+
const swapData = await this.callPendleSdkApi(market.marketAddress, params);
|
|
196
|
+
if (!swapData?.success || !swapData?.data?.amountOut) {
|
|
197
|
+
this.logger.warn(`Invalid response for amount ${amount}: ${JSON.stringify(swapData)}`);
|
|
198
|
+
destAmounts.push('0');
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
this.logger.info(`Got dest amount: ${swapData.data.amountOut} for PT amount: ${amount}`);
|
|
202
|
+
destAmounts.push(swapData.data.amountOut);
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
this.logger.warn(`Failed to get price for amount ${amount}: ${error}`);
|
|
206
|
+
destAmounts.push('0');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const finalPrices = destAmounts.map(amt => amt === '0' ? 0n : BigInt(amt));
|
|
210
|
+
const gasCost = isUsdc
|
|
211
|
+
? constants_2.AAVE_PT_TO_USDC_GAS_COST + 250_000
|
|
212
|
+
: constants_2.AAVE_PT_TO_USDC_GAS_COST;
|
|
213
|
+
if (finalPrices.every(p => p === 0n)) {
|
|
214
|
+
this.logger.warn(`All prices are zero for ${srcToken.symbol} -> ${destToken.symbol}`);
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
return [
|
|
218
|
+
{
|
|
219
|
+
exchange: this.dexKey,
|
|
220
|
+
poolIdentifier: this.getPoolIdentifier(marketAddress),
|
|
221
|
+
poolAddresses: [marketAddress, 'PendleSwap'],
|
|
222
|
+
prices: finalPrices,
|
|
223
|
+
unit: 1n,
|
|
224
|
+
gasCost,
|
|
225
|
+
data: {
|
|
226
|
+
marketAddress,
|
|
227
|
+
ptAddress: srcToken.address,
|
|
228
|
+
underlyingAssetAddress: market.underlyingAssetAddress,
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
];
|
|
232
|
+
}
|
|
233
|
+
getCalldataGasCost() {
|
|
234
|
+
return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
|
|
235
|
+
}
|
|
236
|
+
getAdapterParam(srcToken, destToken, srcAmount, destAmount, data, side) {
|
|
237
|
+
const payload = '0x';
|
|
238
|
+
return {
|
|
239
|
+
targetExchange: this.config.pendleRouterAddress,
|
|
240
|
+
payload,
|
|
241
|
+
networkFee: '0',
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
async getTopPoolsForToken(tokenAddress, limit) {
|
|
245
|
+
const market = this.getMarketForPt(tokenAddress);
|
|
246
|
+
if (market) {
|
|
247
|
+
return [
|
|
248
|
+
{
|
|
249
|
+
exchange: this.dexKey,
|
|
250
|
+
address: market.address,
|
|
251
|
+
connectorTokens: [
|
|
252
|
+
{
|
|
253
|
+
address: this.usdcToken.address,
|
|
254
|
+
decimals: this.usdcToken.decimals,
|
|
255
|
+
liquidityUSD: 10_000_000,
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
liquidityUSD: 10_000_000,
|
|
259
|
+
},
|
|
260
|
+
];
|
|
261
|
+
}
|
|
262
|
+
return [];
|
|
263
|
+
}
|
|
264
|
+
async updatePoolState() {
|
|
265
|
+
if (this.marketsCache.size === 0) {
|
|
266
|
+
this.populateMarketsFromConfig();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side, context, executorAddress) {
|
|
270
|
+
if (side === constants_1.SwapSide.BUY) {
|
|
271
|
+
throw new Error('AavePtToUsdc: Buying PT is not supported');
|
|
272
|
+
}
|
|
273
|
+
const { ptAddress } = data;
|
|
274
|
+
const market = this.getMarketByPtToken({ address: ptAddress });
|
|
275
|
+
if (!market) {
|
|
276
|
+
throw new Error(`Market not found for PT ${ptAddress}`);
|
|
277
|
+
}
|
|
278
|
+
const isUsdc = destToken.toLowerCase() === this.usdcToken.address.toLowerCase();
|
|
279
|
+
const swapResp = await this.callPendleSdkApi(market.marketAddress, {
|
|
280
|
+
receiver: recipient,
|
|
281
|
+
slippage: constants_2.DEFAULT_SLIPPAGE_FOR_QUOTTING,
|
|
282
|
+
ptAmount: srcAmount,
|
|
283
|
+
ytAmount: '0',
|
|
284
|
+
lpAmount: '0',
|
|
285
|
+
tokenOut: destToken,
|
|
286
|
+
enableAggregator: isUsdc,
|
|
287
|
+
});
|
|
288
|
+
if (!swapResp.success || !swapResp.tx) {
|
|
289
|
+
throw new Error(`Pendle SDK exit-positions endpoint failed: ${swapResp.error || 'No transaction data returned'}`);
|
|
290
|
+
}
|
|
291
|
+
const tx = swapResp.tx;
|
|
292
|
+
return {
|
|
293
|
+
targetExchange: tx.to,
|
|
294
|
+
exchangeData: tx.data,
|
|
295
|
+
needWrapNative: false,
|
|
296
|
+
dexFuncHasRecipient: true,
|
|
297
|
+
returnAmountPos: 0,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
async callPendleSdkApi(marketAddress, params) {
|
|
301
|
+
const cacheKey = this.generateCacheKey(marketAddress, params);
|
|
302
|
+
if (this.priceCache.has(cacheKey)) {
|
|
303
|
+
return this.priceCache.get(cacheKey);
|
|
304
|
+
}
|
|
305
|
+
const result = await this.executeWithRetry(async () => {
|
|
306
|
+
const url = new URL(`${constants_2.PENDLE_API_URL}/v2/sdk/${this.network}/markets/${marketAddress}/exit-positions`);
|
|
307
|
+
Object.keys(params).forEach(key => {
|
|
308
|
+
if (params[key] !== undefined && params[key] !== null) {
|
|
309
|
+
url.searchParams.append(key, params[key].toString());
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
const response = await this.dexHelper.httpRequest.get(url.toString(), 30000, {
|
|
313
|
+
Accept: 'application/json',
|
|
314
|
+
});
|
|
315
|
+
const responseData = response;
|
|
316
|
+
return {
|
|
317
|
+
success: true,
|
|
318
|
+
data: responseData.data || responseData,
|
|
319
|
+
tx: responseData.tx || responseData.data?.tx,
|
|
320
|
+
};
|
|
321
|
+
});
|
|
322
|
+
this.priceCache.set(cacheKey, result);
|
|
323
|
+
return result;
|
|
324
|
+
}
|
|
325
|
+
getSupportedMarkets() {
|
|
326
|
+
return this.config.supportedPts;
|
|
327
|
+
}
|
|
328
|
+
generateCacheKey(marketAddress, params) {
|
|
329
|
+
return `${marketAddress}_${JSON.stringify(params)}`;
|
|
330
|
+
}
|
|
331
|
+
async waitForRateLimit() {
|
|
332
|
+
const now = Date.now();
|
|
333
|
+
const timeSinceLastCall = now - this.lastApiCallTime;
|
|
334
|
+
if (timeSinceLastCall < this.minApiCallInterval) {
|
|
335
|
+
const waitTime = this.minApiCallInterval - timeSinceLastCall;
|
|
336
|
+
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
337
|
+
}
|
|
338
|
+
this.lastApiCallTime = Date.now();
|
|
339
|
+
}
|
|
340
|
+
async executeWithRetry(operation, maxRetries = 2) {
|
|
341
|
+
let lastError;
|
|
342
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
343
|
+
try {
|
|
344
|
+
await this.waitForRateLimit();
|
|
345
|
+
return await operation();
|
|
346
|
+
}
|
|
347
|
+
catch (error) {
|
|
348
|
+
lastError = error;
|
|
349
|
+
if (error?.response?.status === 429 && attempt < maxRetries) {
|
|
350
|
+
// FINAL FIX: Increase the initial backoff delay even more.
|
|
351
|
+
const delay = 3000 * Math.pow(2, attempt); // 3s, 6s, 12s
|
|
352
|
+
this.logger.warn(`Rate limit hit, retrying in ${delay}ms (attempt ${attempt + 1}/${maxRetries + 1})`);
|
|
353
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
throw lastError;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
exports.AavePtToUsdc = AavePtToUsdc;
|
|
363
|
+
//# sourceMappingURL=aave-pt-to-usdc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aave-pt-to-usdc.js","sourceRoot":"","sources":["../../../src/dex/aave-pt-to-usdc/aave-pt-to-usdc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AavePtToUsdcConfig = void 0;
|
|
4
|
+
const constants_1 = require("../../constants");
|
|
5
|
+
// Aave V3 PT to USDC
|
|
6
|
+
// Pendle V4 Router https://etherscan.io/address/0x888888888889758f76e7103c6cbf23abbf58f946#code
|
|
7
|
+
const PENDLE_ROUTER_ADDRESS = '0x888888888889758f76e7103c6cbf23abbf58f946';
|
|
8
|
+
// Pendle Oracle https://etherscan.io/address/0x9a9Fa8338dd5E5B2188006f1Cd2Ef26d921650C2
|
|
9
|
+
const ORACLE_ADDRESS = '0x9a9Fa8338dd5E5B2188006f1Cd2Ef26d921650C2';
|
|
10
|
+
// PT sUSDe 31 Jul 2025: https://etherscan.io/address/0x3b3fb9c57858ef816833dc91565efcd85d96f634
|
|
11
|
+
// PT eUSDe 14 Aug 2025: https://etherscan.io/address/0x14bdc3a3ae09f5518b923b69489cbcafb238e617
|
|
12
|
+
// PT USDe 31 Jul 2025: https://etherscan.io/address/0x917459337CaAC939D41d7493B3999f571D20D667
|
|
13
|
+
exports.AavePtToUsdcConfig = {
|
|
14
|
+
AavePtToUsdc: {
|
|
15
|
+
[constants_1.Network.MAINNET]: {
|
|
16
|
+
pendleRouterAddress: PENDLE_ROUTER_ADDRESS,
|
|
17
|
+
oracleAddress: ORACLE_ADDRESS,
|
|
18
|
+
supportedPts: [
|
|
19
|
+
{
|
|
20
|
+
pt: {
|
|
21
|
+
address: '0x3b3fb9c57858ef816833dc91565efcd85d96f634',
|
|
22
|
+
decimals: 18,
|
|
23
|
+
name: 'PT-sUSDe-31JUL2025',
|
|
24
|
+
expiry: 1753929600,
|
|
25
|
+
},
|
|
26
|
+
marketAddress: '0x4339ffe2b7592dc783ed13cce310531ab366deac', // V4 market address (for router)
|
|
27
|
+
exitMarketAddress: '0x4339ffe2b7592dc783ed13cce310531ab366deac', // V4 market address (for exit-position API)
|
|
28
|
+
underlyingAssetAddress: '0x5cb12D1CeE6C1353FdEF5e6627D2C1cCd0eE2A9d', // SY-sUSDe
|
|
29
|
+
underlyingRawAddress: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497', // raw sUSDe
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
pt: {
|
|
33
|
+
address: '0x14bdc3a3ae09f5518b923b69489cbcafb238e617',
|
|
34
|
+
decimals: 18,
|
|
35
|
+
name: 'PT-eUSDe-14AUG2025',
|
|
36
|
+
expiry: 1755196800,
|
|
37
|
+
},
|
|
38
|
+
marketAddress: '0xe93b4a93e80bd3065b290394264af5d82422ee70', // V4 market address (for router)
|
|
39
|
+
exitMarketAddress: '0xe93b4a93e80bd3065b290394264af5d82422ee70', // V4 market address (for exit-position API)
|
|
40
|
+
underlyingAssetAddress: '0x90d2af7d622ca3141efa4d8f1f24d86e5974cc8f', // eUSDe
|
|
41
|
+
underlyingRawAddress: '0x90d2af7d622ca3141efa4d8f1f24d86e5974cc8f', // raw eUSDe
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
pt: {
|
|
45
|
+
address: '0x917459337CaAC939D41d7493B3999f571D20D667',
|
|
46
|
+
decimals: 18,
|
|
47
|
+
name: 'PT-USDe-31JUL2025',
|
|
48
|
+
expiry: 1753929600,
|
|
49
|
+
},
|
|
50
|
+
marketAddress: '0x9df192d13d61609d1852461c4850595e1f56e714', // V4 market address (for router)
|
|
51
|
+
exitMarketAddress: '0x9df192d13d61609d1852461c4850595e1f56e714', // V4 market address (for exit-position API)
|
|
52
|
+
underlyingAssetAddress: '0x4c9edd5852cd905f086c759e8383e09bff1e68b3', // USDe
|
|
53
|
+
underlyingRawAddress: '0x4c9edd5852cd905f086c759e8383e09bff1e68b3', // raw USDe
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/aave-pt-to-usdc/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAE1C,qBAAqB;AAErB,gGAAgG;AAChG,MAAM,qBAAqB,GAAG,4CAA4C,CAAC;AAC3E,wFAAwF;AACxF,MAAM,cAAc,GAAG,4CAA4C,CAAC;AAEpE,gGAAgG;AAChG,gGAAgG;AAChG,+FAA+F;AAElF,QAAA,kBAAkB,GAA4B;IACzD,YAAY,EAAE;QACZ,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,mBAAmB,EAAE,qBAAqB;YAC1C,aAAa,EAAE,cAAc;YAC7B,YAAY,EAAE;gBACZ;oBACE,EAAE,EAAE;wBACF,OAAO,EAAE,4CAA4C;wBACrD,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE,oBAAoB;wBAC1B,MAAM,EAAE,UAAU;qBACnB;oBACD,aAAa,EAAE,4CAA4C,EAAE,iCAAiC;oBAC9F,iBAAiB,EAAE,4CAA4C,EAAE,4CAA4C;oBAC7G,sBAAsB,EAAE,4CAA4C,EAAE,WAAW;oBACjF,oBAAoB,EAAE,4CAA4C,EAAE,YAAY;iBACjF;gBACD;oBACE,EAAE,EAAE;wBACF,OAAO,EAAE,4CAA4C;wBACrD,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE,oBAAoB;wBAC1B,MAAM,EAAE,UAAU;qBACnB;oBACD,aAAa,EAAE,4CAA4C,EAAE,iCAAiC;oBAC9F,iBAAiB,EAAE,4CAA4C,EAAE,4CAA4C;oBAC7G,sBAAsB,EAAE,4CAA4C,EAAE,QAAQ;oBAC9E,oBAAoB,EAAE,4CAA4C,EAAE,YAAY;iBACjF;gBACD;oBACE,EAAE,EAAE;wBACF,OAAO,EAAE,4CAA4C;wBACrD,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE,mBAAmB;wBACzB,MAAM,EAAE,UAAU;qBACnB;oBACD,aAAa,EAAE,4CAA4C,EAAE,iCAAiC;oBAC9F,iBAAiB,EAAE,4CAA4C,EAAE,4CAA4C;oBAC7G,sBAAsB,EAAE,4CAA4C,EAAE,OAAO;oBAC7E,oBAAoB,EAAE,4CAA4C,EAAE,WAAW;iBAChF;aACF;SACF;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const PENDLE_API_URL = "https://api-v2.pendle.finance/core";
|
|
2
|
+
export declare const AAVE_PT_TO_USDC_GAS_COST = 200000;
|
|
3
|
+
export declare const DEFAULT_SLIPPAGE_FOR_QUOTTING = 0.005;
|
|
4
|
+
export declare const STABLE_COINS: {
|
|
5
|
+
[network: number]: string[];
|
|
6
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STABLE_COINS = exports.DEFAULT_SLIPPAGE_FOR_QUOTTING = exports.AAVE_PT_TO_USDC_GAS_COST = exports.PENDLE_API_URL = void 0;
|
|
4
|
+
const constants_1 = require("../../constants");
|
|
5
|
+
exports.PENDLE_API_URL = 'https://api-v2.pendle.finance/core';
|
|
6
|
+
exports.AAVE_PT_TO_USDC_GAS_COST = 200000;
|
|
7
|
+
exports.DEFAULT_SLIPPAGE_FOR_QUOTTING = 0.005; // 0.5%
|
|
8
|
+
exports.STABLE_COINS = {
|
|
9
|
+
[constants_1.Network.MAINNET]: [
|
|
10
|
+
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
|
|
11
|
+
],
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/dex/aave-pt-to-usdc/constants.ts"],"names":[],"mappings":";;;AACA,+CAA0C;AAE7B,QAAA,cAAc,GAAG,oCAAoC,CAAC;AACtD,QAAA,wBAAwB,GAAG,MAAM,CAAC;AAClC,QAAA,6BAA6B,GAAG,KAAK,CAAC,CAAC,OAAO;AAE9C,QAAA,YAAY,GAAoC;IAC3D,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;QACjB,4CAA4C,EAAE,OAAO;KACtD;CACF,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Address } from '../../types';
|
|
2
|
+
export type PendleSDKMarket = {
|
|
3
|
+
address: string;
|
|
4
|
+
ptAddress: string;
|
|
5
|
+
ptDecimals: number;
|
|
6
|
+
ytAddress: string;
|
|
7
|
+
underlyingAssetAddress: string;
|
|
8
|
+
name: string;
|
|
9
|
+
expiry: number;
|
|
10
|
+
chainId: number;
|
|
11
|
+
};
|
|
12
|
+
export type AavePtToUsdcData = {
|
|
13
|
+
marketAddress: Address;
|
|
14
|
+
ptAddress: Address;
|
|
15
|
+
underlyingAssetAddress: Address;
|
|
16
|
+
};
|
|
17
|
+
export interface PendleToken {
|
|
18
|
+
address: string;
|
|
19
|
+
decimals: number;
|
|
20
|
+
name: string;
|
|
21
|
+
expiry: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SupportedPt {
|
|
24
|
+
pt: PendleToken;
|
|
25
|
+
marketAddress: string;
|
|
26
|
+
exitMarketAddress: string;
|
|
27
|
+
underlyingAssetAddress: string;
|
|
28
|
+
underlyingRawAddress: string;
|
|
29
|
+
}
|
|
30
|
+
export interface DexParams {
|
|
31
|
+
pendleRouterAddress: string;
|
|
32
|
+
oracleAddress: string;
|
|
33
|
+
supportedPts: SupportedPt[];
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/dex/aave-pt-to-usdc/types.ts"],"names":[],"mappings":""}
|
|
@@ -56,6 +56,7 @@ export declare class BunniV2EventPool extends StatefulEventSubscriber<ProtocolSt
|
|
|
56
56
|
swapFee: bigint;
|
|
57
57
|
totalLiquidity: bigint;
|
|
58
58
|
};
|
|
59
|
-
|
|
59
|
+
_updatePoolTotalValueLocked(blockNumber?: number): Promise<void>;
|
|
60
|
+
_updateVaultSharePrices(blockNumber?: number): Promise<void>;
|
|
60
61
|
private _K;
|
|
61
62
|
}
|
|
@@ -245,8 +245,7 @@ class BunniV2EventPool extends stateful_event_subscriber_1.StatefulEventSubscrib
|
|
|
245
245
|
}
|
|
246
246
|
}
|
|
247
247
|
// update the total supply (always 1e18 on the first deposit)
|
|
248
|
-
newPoolState.totalSupply +=
|
|
249
|
-
newPoolState.totalSupply === 0n ? 1000000000000000000n : shares;
|
|
248
|
+
newPoolState.totalSupply += newPoolState.totalSupply === 0n ? Constants_1.WAD : shares;
|
|
250
249
|
newState.poolStates[poolId] = newPoolState;
|
|
251
250
|
return newState;
|
|
252
251
|
}
|
|
@@ -477,9 +476,20 @@ class BunniV2EventPool extends stateful_event_subscriber_1.StatefulEventSubscrib
|
|
|
477
476
|
_quoteSwap(state, vaults, params, blockNumber, blockTimestamp) {
|
|
478
477
|
return (0, BunniQuoter_1.quoteSwap)(state, params, blockNumber, blockTimestamp, this.state?.hookFeeModifier || 0n, this.config.bunniHook.deploymentBlock, this._K(blockNumber), vaults, this.config);
|
|
479
478
|
}
|
|
480
|
-
async
|
|
479
|
+
async _updatePoolTotalValueLocked(blockNumber) {
|
|
480
|
+
const _blockNumber = blockNumber || this.dexHelper.blockManager.getLatestBlockNumber();
|
|
481
481
|
if (this.state !== null) {
|
|
482
|
-
|
|
482
|
+
const newState = lodash_1.default.cloneDeep(this.state);
|
|
483
|
+
await (0, getOnChainState_1.updatePoolTotalValueLocked)(newState, this.dexHelper);
|
|
484
|
+
this.setState(newState, _blockNumber);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
async _updateVaultSharePrices(blockNumber) {
|
|
488
|
+
const _blockNumber = blockNumber || this.dexHelper.blockManager.getLatestBlockNumber();
|
|
489
|
+
if (this.state !== null) {
|
|
490
|
+
const newState = lodash_1.default.cloneDeep(this.state);
|
|
491
|
+
await (0, getOnChainState_1.updateVaultSharePrices)(newState, this.dexHelper);
|
|
492
|
+
this.setState(newState, _blockNumber);
|
|
483
493
|
}
|
|
484
494
|
}
|
|
485
495
|
_K(blockNumber) {
|