@paraswap/dex-lib 3.7.7-skip-approval → 3.7.7-skip-approval.2

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 (46) hide show
  1. package/build/abi/idle-dao/idle-cdo-factory.json +38 -0
  2. package/build/abi/idle-dao/idle-cdo.json +1245 -0
  3. package/build/config.js +2 -0
  4. package/build/config.js.map +1 -1
  5. package/build/dex/aave-v3-stata/aave-v3-stata.js +1 -0
  6. package/build/dex/aave-v3-stata/aave-v3-stata.js.map +1 -1
  7. package/build/dex/idle-dao/config.d.ts +5 -0
  8. package/build/dex/idle-dao/config.js +25 -0
  9. package/build/dex/idle-dao/config.js.map +1 -0
  10. package/build/dex/idle-dao/idle-dao.d.ts +42 -0
  11. package/build/dex/idle-dao/idle-dao.js +260 -0
  12. package/build/dex/idle-dao/idle-dao.js.map +1 -0
  13. package/build/dex/idle-dao/token_list.d.ts +4 -0
  14. package/build/dex/idle-dao/token_list.js +289 -0
  15. package/build/dex/idle-dao/token_list.js.map +1 -0
  16. package/build/dex/idle-dao/tokens.d.ts +9 -0
  17. package/build/dex/idle-dao/tokens.js +68 -0
  18. package/build/dex/idle-dao/tokens.js.map +1 -0
  19. package/build/dex/idle-dao/types.d.ts +35 -0
  20. package/build/dex/idle-dao/types.js +11 -0
  21. package/build/dex/idle-dao/types.js.map +1 -0
  22. package/build/dex/idle-dao/utils.d.ts +8 -0
  23. package/build/dex/idle-dao/utils.js +149 -0
  24. package/build/dex/idle-dao/utils.js.map +1 -0
  25. package/build/dex/index.js +2 -0
  26. package/build/dex/index.js.map +1 -1
  27. package/build/generic-swap-transaction-builder.js +3 -1
  28. package/build/generic-swap-transaction-builder.js.map +1 -1
  29. package/build/types.d.ts +1 -0
  30. package/package.json +1 -1
  31. package/src/abi/idle-dao/idle-cdo-factory.json +38 -0
  32. package/src/abi/idle-dao/idle-cdo.json +1245 -0
  33. package/src/config.ts +3 -0
  34. package/src/dex/aave-v3-stata/aave-v3-stata.ts +1 -0
  35. package/src/dex/idle-dao/config.ts +26 -0
  36. package/src/dex/idle-dao/idle-dao-e2e.test.ts +112 -0
  37. package/src/dex/idle-dao/idle-dao-integration.test.ts +155 -0
  38. package/src/dex/idle-dao/idle-dao.ts +402 -0
  39. package/src/dex/idle-dao/token_list.ts +287 -0
  40. package/src/dex/idle-dao/tokens.ts +99 -0
  41. package/src/dex/idle-dao/types.ts +43 -0
  42. package/src/dex/idle-dao/utils.ts +216 -0
  43. package/src/dex/index.ts +2 -0
  44. package/src/generic-swap-transaction-builder.ts +3 -1
  45. package/src/types.ts +1 -0
  46. package/tests/constants-e2e.ts +69 -3
@@ -0,0 +1,402 @@
1
+ import { assert } from 'ts-essentials';
2
+ import { Interface } from '@ethersproject/abi';
3
+ import {
4
+ Token,
5
+ Address,
6
+ ExchangePrices,
7
+ PoolPrices,
8
+ AdapterExchangeParam,
9
+ PoolLiquidity,
10
+ Logger,
11
+ NumberAsString,
12
+ DexExchangeParam,
13
+ } from '../../types';
14
+ import { SwapSide, Network, NULL_ADDRESS } from '../../constants';
15
+ import * as CALLDATA_GAS_COST from '../../calldata-gas-cost';
16
+ import { getDexKeysWithNetwork, getBigIntPow } from '../../utils';
17
+ import { Context, IDex } from '../../dex/idex';
18
+ import { IDexHelper } from '../../dex-helper/idex-helper';
19
+ import { IdleDaoData, Param, PoolFunctions, IdleToken } from './types';
20
+ import { SimpleExchange } from '../simple-exchange';
21
+ import { Config, Adapters } from './config';
22
+ import { fetchTokenList_api } from './utils';
23
+ import {
24
+ getIdleTokenIfIdleDaoPair,
25
+ setTokensOnNetwork,
26
+ getPoolsByTokenAddress,
27
+ getTokenFromIdleToken,
28
+ getIdleTokenByAddress,
29
+ } from './tokens';
30
+ import FACTORY_ABI from '../../abi/idle-dao/idle-cdo-factory.json';
31
+ import CDO_ABI from '../../abi/idle-dao/idle-cdo.json';
32
+ import { extractReturnAmountPosition } from '../../executor/utils';
33
+
34
+ export const TOKEN_LIST_CACHE_KEY = 'token-list';
35
+ const TOKEN_LIST_TTL_SECONDS = 24 * 60 * 60;
36
+
37
+ export class IdleDao extends SimpleExchange implements IDex<IdleDaoData> {
38
+ readonly hasConstantPriceLargeAmounts = false;
39
+ readonly needWrapNative = true;
40
+
41
+ readonly isFeeOnTransferSupported = false;
42
+
43
+ public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
44
+ getDexKeysWithNetwork(Config);
45
+
46
+ logger: Logger;
47
+
48
+ private cdo: Interface;
49
+ private factory: Interface;
50
+
51
+ private tokenList: IdleToken[] = [];
52
+ private idleDaoAuthToken: string;
53
+
54
+ constructor(
55
+ readonly network: Network,
56
+ readonly dexKey: string,
57
+ readonly dexHelper: IDexHelper,
58
+ protected config = Config[dexKey][network],
59
+ protected adapters = Adapters[network] || {},
60
+ ) {
61
+ super(dexHelper, dexKey);
62
+ this.logger = dexHelper.getLogger(dexKey);
63
+ this.cdo = new Interface(CDO_ABI);
64
+ this.factory = new Interface(FACTORY_ABI);
65
+
66
+ const idleDaoAuthToken = dexHelper.config.data.idleDaoAuthToken;
67
+ assert(
68
+ idleDaoAuthToken !== undefined,
69
+ 'idleDaoAuthToken auth token is not specified with env variable',
70
+ );
71
+
72
+ this.idleDaoAuthToken = idleDaoAuthToken;
73
+ }
74
+
75
+ async getTokensList(blockNumber: number): Promise<Record<string, IdleToken>> {
76
+ if (!this.tokenList) {
77
+ this.tokenList = await fetchTokenList_api(
78
+ this.network,
79
+ this.dexHelper,
80
+ this.cdo,
81
+ this.erc20Interface,
82
+ this.dexHelper.multiWrapper,
83
+ this.idleDaoAuthToken,
84
+ );
85
+ }
86
+
87
+ return this.tokenList.reduce(
88
+ (acc: Record<string, IdleToken>, idleToken: IdleToken) => {
89
+ return {
90
+ ...acc,
91
+ [idleToken.idleAddress]: idleToken,
92
+ };
93
+ },
94
+ {},
95
+ );
96
+ }
97
+
98
+ async initializePricing(blockNumber: number) {
99
+ await this.initializeTokens(blockNumber);
100
+ }
101
+
102
+ async initializeTokens(blockNumber?: number) {
103
+ let cachedTokenList = await this.dexHelper.cache.getAndCacheLocally(
104
+ this.dexKey,
105
+ this.network,
106
+ TOKEN_LIST_CACHE_KEY,
107
+ TOKEN_LIST_TTL_SECONDS,
108
+ );
109
+
110
+ if (cachedTokenList !== null) {
111
+ const tokens: IdleToken[] = JSON.parse(cachedTokenList);
112
+ setTokensOnNetwork(this.network, tokens, this.dexHelper);
113
+
114
+ this.tokenList = tokens;
115
+ return;
116
+ }
117
+
118
+ this.tokenList = await fetchTokenList_api(
119
+ this.network,
120
+ this.dexHelper,
121
+ this.cdo,
122
+ this.erc20Interface,
123
+ this.dexHelper.multiWrapper,
124
+ this.idleDaoAuthToken,
125
+ blockNumber,
126
+ );
127
+
128
+ await this.dexHelper.cache.setexAndCacheLocally(
129
+ this.dexKey,
130
+ this.network,
131
+ TOKEN_LIST_CACHE_KEY,
132
+ TOKEN_LIST_TTL_SECONDS,
133
+ JSON.stringify(this.tokenList),
134
+ );
135
+
136
+ setTokensOnNetwork(this.network, this.tokenList, this.dexHelper);
137
+ }
138
+
139
+ getAdapters(side: SwapSide): { name: string; index: number }[] | null {
140
+ return null;
141
+ }
142
+
143
+ private _getPoolIdentifier(srcToken: Token, destToken: Token): string {
144
+ return (
145
+ this.dexKey +
146
+ '_' +
147
+ [srcToken.address.toLowerCase(), destToken.address.toLowerCase()]
148
+ .sort((a, b) => (a > b ? 1 : -1))
149
+ .join('_')
150
+ );
151
+ }
152
+
153
+ async getPoolIdentifiers(
154
+ srcToken: Token,
155
+ destToken: Token,
156
+ ): Promise<string[]> {
157
+ const idleToken = getIdleTokenIfIdleDaoPair(
158
+ this.network,
159
+ this.dexHelper.config.wrapETH(srcToken),
160
+ this.dexHelper.config.wrapETH(destToken),
161
+ );
162
+
163
+ if (idleToken === null) return [];
164
+
165
+ return [this._getPoolIdentifier(srcToken, destToken)];
166
+ }
167
+
168
+ async getPricesVolume(
169
+ srcToken: Token,
170
+ destToken: Token,
171
+ amounts: bigint[],
172
+ side: SwapSide,
173
+ blockNumber: number,
174
+ limitPools?: string[],
175
+ ): Promise<null | ExchangePrices<IdleDaoData>> {
176
+ try {
177
+ const _src = this.dexHelper.config.wrapETH(srcToken);
178
+ const _dst = this.dexHelper.config.wrapETH(destToken);
179
+
180
+ // Look for idleToken
181
+ const idleToken = getIdleTokenIfIdleDaoPair(this.network, _src, _dst);
182
+ if (!idleToken) {
183
+ return null;
184
+ }
185
+
186
+ const fromIdleToken =
187
+ idleToken.idleAddress.toLowerCase() == _src.address.toLowerCase();
188
+
189
+ const tokenPrice = await this.getTokenPrice(idleToken, blockNumber);
190
+
191
+ if (!tokenPrice) {
192
+ return null;
193
+ }
194
+
195
+ const unitVolume = getBigIntPow(
196
+ (side === SwapSide.SELL ? srcToken : destToken).decimals,
197
+ );
198
+
199
+ const prices = [unitVolume, ...amounts].map((amount: bigint) => {
200
+ let output = 0;
201
+ if (side === SwapSide.SELL) {
202
+ // SELL idleToken (amount = 1000000000000000000 AA_idle_cpPOR-USDC, output = 1000000000000000000*tokenPrice/1e18)
203
+ if (fromIdleToken) {
204
+ output = Math.round(
205
+ (parseFloat('' + tokenPrice) * parseFloat('' + amount)) /
206
+ parseFloat(`1e${idleToken.idleDecimals}`),
207
+ );
208
+ // SELL underlyingToken (amount = 1000000 USDC), output = 1000000/tokenPrice*1e18
209
+ } else {
210
+ output = Math.round(
211
+ (parseFloat('' + amount) / parseFloat('' + tokenPrice)) *
212
+ parseFloat(`1e${idleToken.idleDecimals}`),
213
+ );
214
+ }
215
+ } else {
216
+ // BUY idleToken (amount = 1000000 USDC, output = 1000000/tokenPrice*1e18)
217
+ if (fromIdleToken) {
218
+ output = Math.round(
219
+ (parseFloat('' + amount) / parseFloat('' + tokenPrice)) *
220
+ parseFloat(`1e${idleToken.idleDecimals}`),
221
+ );
222
+ // BUY underlyingToken (amount = 1000000000000000000 AA_idle_cpPOR-USDC, output = 1000000000000000000*tokenPrice/1e18)
223
+ } else {
224
+ output = Math.round(
225
+ (parseFloat('' + tokenPrice) * parseFloat('' + amount)) /
226
+ parseFloat(`1e${idleToken.idleDecimals}`),
227
+ );
228
+ }
229
+ }
230
+ return BigInt(output);
231
+ });
232
+
233
+ return [
234
+ {
235
+ unit: prices[0],
236
+ prices: prices.slice(1),
237
+ gasCost: this.config.lendingGasCost,
238
+ exchange: this.dexKey,
239
+ data: {
240
+ idleToken: {
241
+ cdoAddress: idleToken.cdoAddress,
242
+ tokenType: idleToken.tokenType,
243
+ },
244
+ fromIdleToken,
245
+ },
246
+ poolAddresses: [fromIdleToken ? srcToken.address : destToken.address],
247
+ },
248
+ ];
249
+ } catch (e) {
250
+ if (blockNumber === 0)
251
+ this.logger.error(
252
+ `Error_getPricesVolume: Aurelius block manager not yet instantiated`,
253
+ );
254
+ this.logger.error(`Error_getPrices:`, e);
255
+ return null;
256
+ }
257
+ }
258
+
259
+ // Cannot be implemented fully event-based.
260
+ // Rate changes almost every block.
261
+ // rpc-based pricing is only done for limited amount of tokens that are supported
262
+ async getTokenPrice(
263
+ idleToken: IdleToken,
264
+ blockNumber: number,
265
+ ): Promise<bigint | null> {
266
+ if (!idleToken.cdoContract) {
267
+ return null;
268
+ }
269
+
270
+ const tranchePrice = await idleToken.cdoContract.methods['virtualPrice'](
271
+ idleToken.idleAddress,
272
+ ).call({}, blockNumber);
273
+
274
+ return BigInt(tranchePrice);
275
+ }
276
+
277
+ // Returns estimated gas cost of calldata for this DEX in multiSwap
278
+ getCalldataGasCost(poolPrices: PoolPrices<IdleDaoData>): number | number[] {
279
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
280
+ }
281
+
282
+ getAdapterParam(
283
+ srcToken: string,
284
+ destToken: string,
285
+ srcAmount: string,
286
+ destAmount: string,
287
+ data: IdleDaoData,
288
+ side: SwapSide,
289
+ ): AdapterExchangeParam {
290
+ return {
291
+ // target exchange is not used by the contract
292
+ targetExchange: NULL_ADDRESS,
293
+ payload: '0x',
294
+ networkFee: '0',
295
+ };
296
+ }
297
+
298
+ getDexParam(
299
+ srcToken: Address,
300
+ destToken: Address,
301
+ srcAmount: NumberAsString,
302
+ destAmount: NumberAsString,
303
+ recipient: Address,
304
+ data: IdleDaoData,
305
+ side: SwapSide,
306
+ _: Context,
307
+ executorAddress: Address,
308
+ ): DexExchangeParam {
309
+ let returnAmountPos = undefined;
310
+
311
+ const [Interface, swapCallee, swapFunction, swapFunctionParams] = ((): [
312
+ Interface,
313
+ Address,
314
+ PoolFunctions,
315
+ Param,
316
+ ] => {
317
+ if (data.fromIdleToken) {
318
+ returnAmountPos = extractReturnAmountPosition(
319
+ this.cdo,
320
+ PoolFunctions[`withdraw${data.idleToken.tokenType}`],
321
+ );
322
+ return [
323
+ this.cdo,
324
+ data.idleToken.cdoAddress,
325
+ PoolFunctions[`withdraw${data.idleToken.tokenType}`],
326
+ [srcAmount],
327
+ ];
328
+ }
329
+
330
+ returnAmountPos = extractReturnAmountPosition(
331
+ this.cdo,
332
+ PoolFunctions[`deposit${data.idleToken.tokenType}`],
333
+ );
334
+ return [
335
+ this.cdo,
336
+ data.idleToken.cdoAddress,
337
+ PoolFunctions[`deposit${data.idleToken.tokenType}`],
338
+ [srcAmount, recipient],
339
+ ];
340
+ })();
341
+
342
+ const exchangeData = Interface.encodeFunctionData(
343
+ swapFunction,
344
+ swapFunctionParams,
345
+ );
346
+
347
+ return {
348
+ needWrapNative: this.needWrapNative,
349
+ dexFuncHasRecipient: false,
350
+ exchangeData,
351
+ targetExchange: swapCallee,
352
+ returnAmountPos: side === SwapSide.SELL ? returnAmountPos : undefined,
353
+ skipApproval: data.fromIdleToken,
354
+ };
355
+ }
356
+
357
+ async getTopPoolsForToken(
358
+ tokenAddress: Address,
359
+ limit: number,
360
+ ): Promise<PoolLiquidity[]> {
361
+ await this.initializeTokens();
362
+ const idleTokens: IdleToken[] = getPoolsByTokenAddress(
363
+ this.network,
364
+ tokenAddress,
365
+ );
366
+
367
+ if (idleTokens.length > 0) {
368
+ return idleTokens
369
+ .map((idleToken: IdleToken) => ({
370
+ // liquidity is infinite, tokens are minted when swapping for idle tokens
371
+ liquidityUSD: 1e8,
372
+ exchange: this.dexKey,
373
+ address: idleToken.cdoAddress,
374
+ connectorTokens: [getTokenFromIdleToken(idleToken)],
375
+ }))
376
+ .slice(0, limit);
377
+ }
378
+
379
+ const idleToken = getIdleTokenByAddress(
380
+ this.network,
381
+ tokenAddress.toLowerCase(),
382
+ );
383
+
384
+ if (idleToken) {
385
+ return [
386
+ {
387
+ liquidityUSD: 1e9,
388
+ exchange: this.dexKey,
389
+ address: idleToken.cdoAddress,
390
+ connectorTokens: [
391
+ {
392
+ address: idleToken.address,
393
+ decimals: idleToken.decimals,
394
+ },
395
+ ],
396
+ },
397
+ ];
398
+ }
399
+
400
+ return [];
401
+ }
402
+ }
@@ -0,0 +1,287 @@
1
+ import { Network } from '../../constants';
2
+ import { IdleToken } from './types';
3
+
4
+ export const TOKEN_LISTS: { [network: number]: IdleToken[] } = {
5
+ [Network.MAINNET]: [
6
+ {
7
+ blockNumber: 0,
8
+ idleDecimals: 18,
9
+ cdoAddress: '0x34dCd573C5dE4672C8248cd12A99f875Ca112Ad8',
10
+ idleAddress: '0x2688fc68c4eac90d9e5e1b94776cf14eade8d877',
11
+ address: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',
12
+ decimals: 18,
13
+ idleSymbol: 'AA_wstETH',
14
+ tokenType: 'AA',
15
+ },
16
+ {
17
+ blockNumber: 0,
18
+ idleDecimals: 18,
19
+ cdoAddress: '0x34dCd573C5dE4672C8248cd12A99f875Ca112Ad8',
20
+ idleAddress: '0x3a52fa30c33caf05faee0f9c5dfe5fd5fe8b3978',
21
+ address: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',
22
+ decimals: 18,
23
+ idleSymbol: 'BB_wstETH',
24
+ tokenType: 'BB',
25
+ },
26
+ {
27
+ blockNumber: 0,
28
+ idleDecimals: 18,
29
+ cdoAddress: '0x8E0A8A5c1e5B3ac0670Ea5a613bB15724D51Fc37',
30
+ idleAddress: '0xdf17c739b666b259da3416d01f0310a6e429f592',
31
+ address: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',
32
+ decimals: 18,
33
+ idleSymbol: 'AA_iETHv2',
34
+ tokenType: 'AA',
35
+ },
36
+ {
37
+ blockNumber: 0,
38
+ idleDecimals: 18,
39
+ cdoAddress: '0x8E0A8A5c1e5B3ac0670Ea5a613bB15724D51Fc37',
40
+ idleAddress: '0x990b3af34ddb502715e1070ce6778d8eb3c8ea82',
41
+ address: '0xae7ab96520de3a18e5e111b5eaab095312d7fe84',
42
+ decimals: 18,
43
+ idleSymbol: 'BB_iETHv2',
44
+ tokenType: 'BB',
45
+ },
46
+ {
47
+ blockNumber: 0,
48
+ idleDecimals: 18,
49
+ cdoAddress: '0x1329E8DB9Ed7a44726572D44729427F132Fa290D',
50
+ idleAddress: '0x9cacd44cfdf22731bc99facf3531c809d56bd4a2',
51
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
52
+ decimals: 6,
53
+ idleSymbol: 'AA_idle_cpPOR-USDC',
54
+ tokenType: 'AA',
55
+ },
56
+ {
57
+ blockNumber: 0,
58
+ idleDecimals: 18,
59
+ cdoAddress: '0x1329E8DB9Ed7a44726572D44729427F132Fa290D',
60
+ idleAddress: '0xf85fd280b301c0a6232d515001da8b6c8503d714',
61
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
62
+ decimals: 6,
63
+ idleSymbol: 'BB_idle_cpPOR-USDC',
64
+ tokenType: 'BB',
65
+ },
66
+ {
67
+ blockNumber: 0,
68
+ idleDecimals: 18,
69
+ cdoAddress: '0xc4574C60a455655864aB80fa7638561A756C5E61',
70
+ idleAddress: '0x0a6f2449c09769950cfb76f905ad11c341541f70',
71
+ address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
72
+ decimals: 6,
73
+ idleSymbol: 'AA_idle_cpFAS-USDT',
74
+ tokenType: 'AA',
75
+ },
76
+ {
77
+ blockNumber: 0,
78
+ idleDecimals: 18,
79
+ cdoAddress: '0xc4574C60a455655864aB80fa7638561A756C5E61',
80
+ idleAddress: '0x3eb6318b8d9f362a0e1d99f6032edb1c4c602500',
81
+ address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
82
+ decimals: 6,
83
+ idleSymbol: 'BB_idle_cpFAS-USDT',
84
+ tokenType: 'BB',
85
+ },
86
+ {
87
+ blockNumber: 0,
88
+ idleDecimals: 18,
89
+ cdoAddress: '0xE7C6A4525492395d65e736C3593aC933F33ee46e',
90
+ idleAddress: '0xdca1dae87f5c733c84e0593984967ed756579bee',
91
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
92
+ decimals: 6,
93
+ idleSymbol: 'AA_idle_cpFASA-USDC',
94
+ tokenType: 'AA',
95
+ },
96
+ {
97
+ blockNumber: 0,
98
+ idleDecimals: 18,
99
+ cdoAddress: '0xE7C6A4525492395d65e736C3593aC933F33ee46e',
100
+ idleAddress: '0xbcc845bb731632ebe8ac0bfacde056170aaaaa06',
101
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
102
+ decimals: 6,
103
+ idleSymbol: 'BB_idle_cpFASA-USDC',
104
+ tokenType: 'BB',
105
+ },
106
+ {
107
+ blockNumber: 0,
108
+ idleDecimals: 18,
109
+ cdoAddress: '0x5dcA0B3Ed7594A6613c1A2acd367d56E1f74F92D',
110
+ idleAddress: '0x43ed68703006add5f99ce36b5182392362369c1c',
111
+ address: '0x6b175474e89094c44da98b954eedeac495271d0f',
112
+ decimals: 18,
113
+ idleSymbol: 'AA_idle_cpPOR-USDC',
114
+ tokenType: 'AA',
115
+ },
116
+ {
117
+ blockNumber: 0,
118
+ idleDecimals: 18,
119
+ cdoAddress: '0x5dcA0B3Ed7594A6613c1A2acd367d56E1f74F92D',
120
+ idleAddress: '0x38d36353d07cfb92650822d9c31fb4ada1c73d6e',
121
+ address: '0x6b175474e89094c44da98b954eedeac495271d0f',
122
+ decimals: 18,
123
+ idleSymbol: 'BB_idle_cpPOR-USDC',
124
+ tokenType: 'BB',
125
+ },
126
+ {
127
+ blockNumber: 0,
128
+ idleDecimals: 18,
129
+ cdoAddress: '0xF87ec7e1Ee467d7d78862089B92dd40497cBa5B8',
130
+ idleAddress: '0xaef4fcc4e5f2dc270760063446d4116d24704ad1',
131
+ address: '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0',
132
+ decimals: 18,
133
+ idleSymbol: 'AA_stMATIC',
134
+ tokenType: 'AA',
135
+ },
136
+ {
137
+ blockNumber: 0,
138
+ idleDecimals: 18,
139
+ cdoAddress: '0xF87ec7e1Ee467d7d78862089B92dd40497cBa5B8',
140
+ idleAddress: '0x077212c69a66261cf7bd1fd3b5c5db7cffa948ee',
141
+ address: '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0',
142
+ decimals: 18,
143
+ idleSymbol: 'BB_stMATIC',
144
+ tokenType: 'BB',
145
+ },
146
+ {
147
+ blockNumber: 0,
148
+ idleDecimals: 18,
149
+ cdoAddress: '0x87E53bE99975DA318056af5c4933469a6B513768',
150
+ idleAddress: '0x2b0e31b8ee653d2077db86dea3acf3f34ae9d5d2',
151
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
152
+ decimals: 6,
153
+ idleSymbol: 'AA_steakUSDC',
154
+ tokenType: 'AA',
155
+ },
156
+ {
157
+ blockNumber: 0,
158
+ idleDecimals: 18,
159
+ cdoAddress: '0x87E53bE99975DA318056af5c4933469a6B513768',
160
+ idleAddress: '0x7b713b1cb6eafd4061064581579ffccf7df21545',
161
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
162
+ decimals: 6,
163
+ idleSymbol: 'BB_steakUSDC',
164
+ tokenType: 'BB',
165
+ },
166
+ {
167
+ blockNumber: 0,
168
+ idleDecimals: 18,
169
+ cdoAddress: '0xA8d747Ef758469e05CF505D708b2514a1aB9Cc08',
170
+ idleAddress: '0x454bb3cb427b21e1c052a080e21a57753cd6969e',
171
+ address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
172
+ decimals: 18,
173
+ idleSymbol: 'AA_Re7WETH',
174
+ tokenType: 'AA',
175
+ },
176
+ {
177
+ blockNumber: 0,
178
+ idleDecimals: 18,
179
+ cdoAddress: '0xA8d747Ef758469e05CF505D708b2514a1aB9Cc08',
180
+ idleAddress: '0x20aa3cd83044d2903181f7ef5c2b498a017d1c4a',
181
+ address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
182
+ decimals: 18,
183
+ idleSymbol: 'BB_Re7WETH',
184
+ tokenType: 'BB',
185
+ },
186
+ {
187
+ blockNumber: 0,
188
+ idleDecimals: 18,
189
+ cdoAddress: '0xD071EA5D2575E155E4e9c2234968D1E11B8a920E',
190
+ idleAddress: '0xb9d321b26095195610707597aab416925c598aab',
191
+ address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
192
+ decimals: 18,
193
+ idleSymbol: 'AA_Re7WETH',
194
+ tokenType: 'AA',
195
+ },
196
+ {
197
+ blockNumber: 0,
198
+ idleDecimals: 18,
199
+ cdoAddress: '0xD071EA5D2575E155E4e9c2234968D1E11B8a920E',
200
+ idleAddress: '0xf529f10fe24367d3a123faf0e9d5f6d80980b46f',
201
+ address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
202
+ decimals: 18,
203
+ idleSymbol: 'BB_Re7WETH',
204
+ tokenType: 'BB',
205
+ },
206
+ {
207
+ blockNumber: 0,
208
+ idleDecimals: 18,
209
+ cdoAddress: '0x9e0c5ee5e4B187Cf18B23745FCF2b6aE66a9B52f',
210
+ idleAddress: '0x28d8a22c6689ac1e2ddc43ca6f85c520457351c1',
211
+ address: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
212
+ decimals: 18,
213
+ idleSymbol: 'AA_ampr-LP-ETH',
214
+ tokenType: 'AA',
215
+ },
216
+ {
217
+ blockNumber: 0,
218
+ idleDecimals: 18,
219
+ cdoAddress: '0x9e0c5ee5e4B187Cf18B23745FCF2b6aE66a9B52f',
220
+ idleAddress: '0xefc4f43737fd336fa8a8254454ced1e421804b16',
221
+ address: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0',
222
+ decimals: 18,
223
+ idleSymbol: 'BB_ampr-LP-ETH',
224
+ tokenType: 'BB',
225
+ },
226
+ {
227
+ blockNumber: 0,
228
+ idleDecimals: 18,
229
+ cdoAddress: '0x1EB1b47D0d8BCD9D761f52D26FCD90bBa225344C',
230
+ idleAddress: '0xf3188697bd35df73e4293d04a07ebaaf1ffc4018',
231
+ address: '0x4c9edd5852cd905f086c759e8383e09bff1e68b3',
232
+ decimals: 18,
233
+ idleSymbol: 'AA_sUSDe',
234
+ tokenType: 'AA',
235
+ },
236
+ {
237
+ blockNumber: 0,
238
+ idleDecimals: 18,
239
+ cdoAddress: '0x1EB1b47D0d8BCD9D761f52D26FCD90bBa225344C',
240
+ idleAddress: '0xb8d0be502a8f12cc5213733285b430a43d07349d',
241
+ address: '0x4c9edd5852cd905f086c759e8383e09bff1e68b3',
242
+ decimals: 18,
243
+ idleSymbol: 'BB_sUSDe',
244
+ tokenType: 'BB',
245
+ },
246
+ {
247
+ blockNumber: 0,
248
+ idleDecimals: 18,
249
+ cdoAddress: '0xbc48967C34d129a2ef25DD4dc693Cc7364d02eb9',
250
+ idleAddress: '0x0f09a04ad551dd941b589625bd2360fc962ff9f7',
251
+ address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
252
+ decimals: 18,
253
+ idleSymbol: 'AA_dWETHV3',
254
+ tokenType: 'AA',
255
+ },
256
+ {
257
+ blockNumber: 0,
258
+ idleDecimals: 18,
259
+ cdoAddress: '0xbc48967C34d129a2ef25DD4dc693Cc7364d02eb9',
260
+ idleAddress: '0x1223ddeee77f8f379ea7a49e7650ff1ec1e2de8a',
261
+ address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
262
+ decimals: 18,
263
+ idleSymbol: 'BB_dWETHV3',
264
+ tokenType: 'BB',
265
+ },
266
+ {
267
+ blockNumber: 0,
268
+ idleDecimals: 18,
269
+ cdoAddress: '0xdd4D030A4337CE492B55bc5169F6A9568242C0Bc',
270
+ idleAddress: '0x450c055a00226f1eba09e8d9627034565b7c4c8a',
271
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
272
+ decimals: 6,
273
+ idleSymbol: 'AA_dUSDCV3',
274
+ tokenType: 'AA',
275
+ },
276
+ {
277
+ blockNumber: 0,
278
+ idleDecimals: 18,
279
+ cdoAddress: '0xdd4D030A4337CE492B55bc5169F6A9568242C0Bc',
280
+ idleAddress: '0x2a84a042db06222c486bcb815e961f26599d0df6',
281
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
282
+ decimals: 6,
283
+ idleSymbol: 'BB_dUSDCV3',
284
+ tokenType: 'BB',
285
+ },
286
+ ],
287
+ };