@paraswap/dex-lib 4.0.9-fluid-dex-arb.0 → 4.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,49 @@
1
+ import { Token, Address, ExchangePrices, PoolPrices, AdapterExchangeParam, PoolLiquidity, Logger, NumberAsString, DexExchangeParam } 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 { AaveV3StataV2Data, Rounding } from './types';
6
+ import { SimpleExchange } from '../simple-exchange';
7
+ import { Interface } from '@ethersproject/abi';
8
+ export declare const TOKEN_LIST_CACHE_KEY = "stata-v2-token-list";
9
+ export declare class AaveV3StataV2 extends SimpleExchange implements IDex<AaveV3StataV2Data> {
10
+ readonly network: Network;
11
+ readonly dexKey: string;
12
+ readonly dexHelper: IDexHelper;
13
+ protected config: import("./types").DexParams;
14
+ readonly hasConstantPriceLargeAmounts = false;
15
+ readonly isFeeOnTransferSupported = false;
16
+ static dexKeysWithNetwork: {
17
+ key: string;
18
+ networks: Network[];
19
+ }[];
20
+ logger: Logger;
21
+ static readonly stata: Interface;
22
+ static readonly pool: Interface;
23
+ private state;
24
+ constructor(network: Network, dexKey: string, dexHelper: IDexHelper, config?: import("./types").DexParams);
25
+ initializePricing(blockNumber: number): Promise<void>;
26
+ initializeTokens(blockNumber?: number): Promise<void>;
27
+ getAdapters(side: SwapSide): {
28
+ name: string;
29
+ index: number;
30
+ }[] | null;
31
+ private _getPoolIdentifier;
32
+ getPoolIdentifiers(srcToken: Token, destToken: Token, side: SwapSide, blockNumber: number): Promise<string[]>;
33
+ getPricesVolume(srcToken: Token, destToken: Token, amounts: bigint[], side: SwapSide, blockNumber: number, limitPools?: string[]): Promise<null | ExchangePrices<AaveV3StataV2Data>>;
34
+ getCalldataGasCost(poolPrices: PoolPrices<AaveV3StataV2Data>): number | number[];
35
+ getAdapterParam(): AdapterExchangeParam;
36
+ getDexParam(srcToken: Address, destToken: Address, srcAmount: NumberAsString, destAmount: NumberAsString, recipient: Address, data: AaveV3StataV2Data, side: SwapSide, _: Context, executorAddress: Address): DexExchangeParam;
37
+ updatePoolState(): Promise<void>;
38
+ getTopPoolsForToken(tokenAddress: Address, limit: number): Promise<PoolLiquidity[]>;
39
+ previewRedeem(shares: bigint, rate: bigint): bigint;
40
+ previewMint(shares: bigint, rate: bigint): bigint;
41
+ previewWithdraw(assets: bigint, rate: bigint): bigint;
42
+ previewDeposit(assets: bigint, rate: bigint): bigint;
43
+ _convertToAssets(shares: bigint, rate: bigint, rounding: Rounding): bigint;
44
+ _convertToShares(assets: bigint, rate: bigint, rounding: Rounding): bigint;
45
+ rayMulRoundDown(a: bigint, b: bigint): bigint;
46
+ rayMulRoundUp(a: bigint, b: bigint): bigint;
47
+ rayDivRoundDown(a: bigint, b: bigint): bigint;
48
+ rayDivRoundUp(a: bigint, b: bigint): bigint;
49
+ }
@@ -0,0 +1,449 @@
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.AaveV3StataV2 = exports.TOKEN_LIST_CACHE_KEY = 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 types_1 = require("./types");
44
+ const simple_exchange_1 = require("../simple-exchange");
45
+ const config_1 = require("./config");
46
+ const abi_1 = require("@ethersproject/abi");
47
+ const utils_2 = require("./utils");
48
+ const tokens_1 = require("./tokens");
49
+ const decoders_1 = require("../../lib/decoders");
50
+ const Token_json_1 = __importDefault(require("../../abi/aavev3statav2/Token.json"));
51
+ const Pool_json_1 = __importDefault(require("../../abi/aavev3statav2/Pool.json"));
52
+ const utils_3 = require("../../executor/utils");
53
+ const constants_2 = require("../../executor/constants");
54
+ // import { IStaticATokenLM_ABI } from '@bgd-labs/aave-address-book';
55
+ // slimmed down version of @bgd-labs/aave-address-book
56
+ // required as version of web3-utils used is buggy
57
+ //import IStaticATokenFactory_ABI from '../../abi/aave-v3-stata/StaticATokenFactory.json';
58
+ exports.TOKEN_LIST_CACHE_KEY = 'stata-v2-token-list';
59
+ const TOKEN_LIST_TTL_SECONDS = 24 * 60 * 60; // 1 day
60
+ const RAY = BigInt(`1${'0'.repeat(27)}`);
61
+ class AaveV3StataV2 extends simple_exchange_1.SimpleExchange {
62
+ network;
63
+ dexKey;
64
+ dexHelper;
65
+ config;
66
+ hasConstantPriceLargeAmounts = false;
67
+ isFeeOnTransferSupported = false;
68
+ static dexKeysWithNetwork = (0, utils_1.getDexKeysWithNetwork)(config_1.AaveV3StataConfig);
69
+ logger;
70
+ // static readonly stata = new Interface(IStaticATokenLM_ABI);
71
+ static stata = new abi_1.Interface(Token_json_1.default);
72
+ static pool = new abi_1.Interface(Pool_json_1.default);
73
+ state = {};
74
+ constructor(network, dexKey, dexHelper, config = config_1.AaveV3StataConfig[dexKey][network]) {
75
+ super(dexHelper, dexKey);
76
+ this.network = network;
77
+ this.dexKey = dexKey;
78
+ this.dexHelper = dexHelper;
79
+ this.config = config;
80
+ this.logger = dexHelper.getLogger(dexKey);
81
+ }
82
+ async initializePricing(blockNumber) {
83
+ await this.initializeTokens(blockNumber);
84
+ }
85
+ async initializeTokens(blockNumber) {
86
+ let cachedTokenList = await this.dexHelper.cache.getAndCacheLocally(this.dexKey, this.network, exports.TOKEN_LIST_CACHE_KEY, TOKEN_LIST_TTL_SECONDS);
87
+ if (cachedTokenList !== null) {
88
+ if (Object.keys(tokens_1.Tokens[this.network] ?? {}).length !== 0)
89
+ return;
90
+ const tokenListParsed = JSON.parse(cachedTokenList);
91
+ (0, tokens_1.setTokensOnNetwork)(this.network, tokenListParsed);
92
+ tokenListParsed.forEach((token) => {
93
+ this.state[token.address] = {
94
+ blockNumber: 0,
95
+ rate: 0n,
96
+ };
97
+ });
98
+ return;
99
+ }
100
+ let tokenList = await (0, utils_2.fetchTokenList)(this.dexHelper.web3Provider, this.config.factoryAddresses, this.dexHelper.multiWrapper, blockNumber);
101
+ await this.dexHelper.cache.setexAndCacheLocally(this.dexKey, this.network, exports.TOKEN_LIST_CACHE_KEY, TOKEN_LIST_TTL_SECONDS, JSON.stringify(tokenList));
102
+ (0, tokens_1.setTokensOnNetwork)(this.network, tokenList);
103
+ // init state for all tokens as empty
104
+ tokenList.forEach(token => {
105
+ this.state[token.address] = {
106
+ blockNumber: 0,
107
+ rate: 0n,
108
+ };
109
+ });
110
+ }
111
+ // Returns the list of contract adapters (name and index)
112
+ // for a buy/sell. Return null if there are no adapters.
113
+ getAdapters(side) {
114
+ return null;
115
+ }
116
+ _getPoolIdentifier(srcToken, destToken) {
117
+ return (this.dexKey +
118
+ '-' +
119
+ [srcToken.address.toLowerCase(), destToken.address.toLowerCase()]
120
+ .sort((a, b) => (a > b ? 1 : -1))
121
+ .join('_'));
122
+ }
123
+ // Returns list of pool identifiers that can be used
124
+ // for a given swap. poolIdentifiers must be unique
125
+ // across DEXes. It is recommended to use
126
+ // ${dexKey}_${poolAddress} as a poolIdentifier
127
+ async getPoolIdentifiers(srcToken, destToken, side, blockNumber) {
128
+ return [this._getPoolIdentifier(srcToken, destToken)];
129
+ }
130
+ // Returns pool prices for amounts.
131
+ // If limitPools is defined only pools in limitPools
132
+ // should be used. If limitPools is undefined then
133
+ // any pools can be used.
134
+ async getPricesVolume(srcToken, destToken, amounts, side, blockNumber, limitPools) {
135
+ const src = (0, tokens_1.getTokenType)(this.network, srcToken.address);
136
+ const dest = (0, tokens_1.getTokenType)(this.network, destToken.address);
137
+ // one of the tokens must be stata
138
+ if (![src, dest].includes(types_1.TokenType.STATA_TOKEN) || src === dest) {
139
+ return null;
140
+ }
141
+ const isSrcStata = src === types_1.TokenType.STATA_TOKEN;
142
+ const [stataToken, otherAddressLower] = isSrcStata
143
+ ? [
144
+ (0, tokens_1.getTokenFromAddress)(this.network, srcToken.address),
145
+ destToken.address.toLowerCase(),
146
+ ]
147
+ : [
148
+ (0, tokens_1.getTokenFromAddress)(this.network, destToken.address),
149
+ srcToken.address.toLowerCase(),
150
+ ];
151
+ // the token itself can only swap from/to underlying and aToken, so
152
+ // - at least one must be stata
153
+ // - maximum one can be stata
154
+ // - second one must be underlying or aUnderlying
155
+ // on the buy side (mint, withdraw) we only support the underlying<->stata conversion, not the aUnderlying
156
+ if (side === constants_1.SwapSide.SELL) {
157
+ if (otherAddressLower !== stataToken.underlying.toLowerCase() &&
158
+ otherAddressLower !== stataToken.underlyingAToken.toLowerCase()) {
159
+ return null;
160
+ }
161
+ }
162
+ else {
163
+ if (otherAddressLower !== stataToken.underlying.toLowerCase()) {
164
+ return null;
165
+ }
166
+ }
167
+ const stataAddressLower = stataToken.address.toLowerCase();
168
+ if (!this.state[stataAddressLower]?.blockNumber ||
169
+ blockNumber > this.state[stataAddressLower].blockNumber) {
170
+ const cached = await this.dexHelper.cache.get(this.dexKey, this.network, `state_${stataAddressLower}`);
171
+ if (cached) {
172
+ this.state[stataAddressLower] = utils_1.Utils.Parse(cached);
173
+ }
174
+ else {
175
+ const results = await this.dexHelper.multiWrapper.tryAggregate(true, [
176
+ {
177
+ target: this.config.pool,
178
+ callData: AaveV3StataV2.pool.encodeFunctionData('getReserveNormalizedIncome', [stataToken.underlying]),
179
+ decodeFunction: decoders_1.uint256ToBigInt,
180
+ },
181
+ ], blockNumber);
182
+ this.state[stataAddressLower] = {
183
+ blockNumber,
184
+ rate: results[0].returnData,
185
+ };
186
+ this.dexHelper.cache.setex(this.dexKey, this.network, `state_${stataAddressLower}`, 60, utils_1.Utils.Serialize(this.state[stataAddressLower]));
187
+ }
188
+ }
189
+ return [
190
+ {
191
+ prices: amounts.map(amount => {
192
+ const rate = this.state[stataAddressLower].rate;
193
+ if (side === constants_1.SwapSide.SELL) {
194
+ if (isSrcStata) {
195
+ return this.previewRedeem(amount, rate);
196
+ }
197
+ else {
198
+ return this.previewDeposit(amount, rate);
199
+ }
200
+ }
201
+ else {
202
+ if (isSrcStata) {
203
+ return this.previewWithdraw(amount, rate);
204
+ }
205
+ else {
206
+ return this.previewMint(amount, rate);
207
+ }
208
+ }
209
+ }),
210
+ unit: (0, utils_1.getBigIntPow)((side === constants_1.SwapSide.SELL ? destToken : srcToken).decimals),
211
+ gasCost: 270000, // 250_000 from underlying, far less from aToken
212
+ exchange: this.dexKey,
213
+ data: {
214
+ srcType: src,
215
+ destType: dest,
216
+ exchange: stataToken.address,
217
+ },
218
+ poolAddresses: [stataAddressLower],
219
+ },
220
+ ];
221
+ }
222
+ getCalldataGasCost(poolPrices) {
223
+ return CALLDATA_GAS_COST.DEX_NO_PAYLOAD;
224
+ }
225
+ // Not used for V6
226
+ getAdapterParam() {
227
+ return {
228
+ targetExchange: '0x',
229
+ payload: '0x',
230
+ networkFee: '0',
231
+ };
232
+ }
233
+ // Encode call data used by simpleSwap like routers
234
+ // Used for simpleSwap & simpleBuy
235
+ // Hint: this.buildSimpleParamWithoutWETHConversion
236
+ // could be useful
237
+ // async getSimpleParam(
238
+ // srcToken: string,
239
+ // destToken: string,
240
+ // srcAmount: string,
241
+ // destAmount: string,
242
+ // data: AaveV3StataV2Data,
243
+ // side: SwapSide,
244
+ // ): Promise<SimpleExchangeParam> {
245
+ // const { exchange, srcType, destType } = data;
246
+ // let swapData;
247
+ //
248
+ // if (side === SwapSide.SELL) {
249
+ // if (srcType === TokenType.STATA_TOKEN) {
250
+ // // e.g. sell srcAmount 100 srcToken stataUSDC for destToken USDC
251
+ // swapData = AaveV3Stata.stata.encodeFunctionData(StataFunctions.redeem, [
252
+ // srcAmount,
253
+ // this.augustusAddress, // receiver
254
+ // this.augustusAddress, // owner
255
+ // destType === TokenType.UNDERLYING, // withdraw from aToken
256
+ // ]);
257
+ // } else {
258
+ // // sell srcAmount 100 srcToken USDC for destToken stataUSDC
259
+ // swapData = AaveV3Stata.stata.encodeFunctionData(
260
+ // StataFunctions.deposit,
261
+ // [
262
+ // srcAmount,
263
+ // this.augustusAddress, // receiver
264
+ // 0, // referrer (noop)
265
+ // srcType === TokenType.UNDERLYING, // deposit to aave
266
+ // ],
267
+ // );
268
+ // }
269
+ // } else {
270
+ // if (srcType === TokenType.STATA_TOKEN) {
271
+ // // e.g. buy destAmount 100 destToken USDC for srcToken stataUSDC
272
+ // swapData = AaveV3Stata.stata.encodeFunctionData(
273
+ // StataFunctions.withdraw,
274
+ // [
275
+ // destAmount,
276
+ // this.augustusAddress, // receiver
277
+ // this.augustusAddress, // owner
278
+ // ],
279
+ // );
280
+ // } else {
281
+ // // e.g. buy destAmount 100 destToken stataUSDC for srcToken USDC
282
+ // swapData = AaveV3Stata.stata.encodeFunctionData(StataFunctions.mint, [
283
+ // destAmount,
284
+ // this.augustusAddress,
285
+ // ]);
286
+ // }
287
+ // }
288
+ //
289
+ // return this.buildSimpleParamWithoutWETHConversion(
290
+ // srcToken,
291
+ // srcAmount,
292
+ // destToken,
293
+ // destAmount,
294
+ // swapData,
295
+ // exchange,
296
+ // );
297
+ // }
298
+ getDexParam(srcToken, destToken, srcAmount, destAmount, recipient, data, side, _, executorAddress) {
299
+ const { exchange, srcType, destType } = data;
300
+ let swapData;
301
+ let returnAmountPos = undefined;
302
+ if (side === constants_1.SwapSide.SELL) {
303
+ if (srcType === types_1.TokenType.STATA_TOKEN) {
304
+ // e.g. sell srcAmount 100 srcToken stataUSDC for destToken USDC
305
+ if (destType === types_1.TokenType.UNDERLYING) {
306
+ swapData = AaveV3StataV2.stata.encodeFunctionData(types_1.StataFunctions.redeem, [
307
+ srcAmount,
308
+ recipient, // receiver
309
+ executorAddress, // owner
310
+ ]);
311
+ }
312
+ else {
313
+ swapData = AaveV3StataV2.stata.encodeFunctionData(types_1.StataFunctions.redeemATokens, [
314
+ srcAmount,
315
+ recipient, // receiver
316
+ executorAddress, // owner
317
+ ]);
318
+ }
319
+ returnAmountPos = constants_2.RETURN_AMOUNT_POS_32;
320
+ }
321
+ else {
322
+ if (srcType === types_1.TokenType.UNDERLYING) {
323
+ // sell srcAmount 100 srcToken USDC for destToken stataUSDC
324
+ swapData = AaveV3StataV2.stata.encodeFunctionData(types_1.StataFunctions.deposit, [
325
+ srcAmount,
326
+ recipient, // receiver
327
+ ]);
328
+ returnAmountPos = (0, utils_3.extractReturnAmountPosition)(AaveV3StataV2.stata, types_1.StataFunctions.deposit);
329
+ }
330
+ else {
331
+ // sell srcAmount 100 srcToken USDC for destToken stataUSDC
332
+ swapData = AaveV3StataV2.stata.encodeFunctionData(types_1.StataFunctions.depositATokens, [
333
+ srcAmount,
334
+ recipient, // receiver
335
+ ]);
336
+ returnAmountPos = (0, utils_3.extractReturnAmountPosition)(AaveV3StataV2.stata, types_1.StataFunctions.depositATokens);
337
+ }
338
+ }
339
+ }
340
+ else {
341
+ if (srcType === types_1.TokenType.STATA_TOKEN) {
342
+ // e.g. buy destAmount 100 destToken USDC for srcToken stataUSDC
343
+ swapData = AaveV3StataV2.stata.encodeFunctionData(types_1.StataFunctions.withdraw, [
344
+ destAmount,
345
+ recipient, // receiver
346
+ executorAddress, // owner
347
+ ]);
348
+ }
349
+ else {
350
+ // e.g. buy destAmount 100 destToken stataUSDC for srcToken USDC
351
+ swapData = AaveV3StataV2.stata.encodeFunctionData(types_1.StataFunctions.mint, [
352
+ destAmount,
353
+ recipient,
354
+ ]);
355
+ }
356
+ }
357
+ return {
358
+ needWrapNative: this.needWrapNative,
359
+ dexFuncHasRecipient: true,
360
+ exchangeData: swapData,
361
+ targetExchange: exchange,
362
+ returnAmountPos,
363
+ skipApproval: srcType === types_1.TokenType.STATA_TOKEN,
364
+ };
365
+ }
366
+ async updatePoolState() { }
367
+ async getTopPoolsForToken(tokenAddress, limit) {
368
+ await this.initializeTokens();
369
+ const tokenType = (0, tokens_1.getTokenType)(this.network, tokenAddress);
370
+ if (tokenType === types_1.TokenType.UNKNOWN) {
371
+ return [];
372
+ }
373
+ const stata = (0, tokens_1.getTokenFromAddress)(this.network, tokenAddress);
374
+ if (tokenType === types_1.TokenType.STATA_TOKEN) {
375
+ return [
376
+ {
377
+ liquidityUSD: 1e11,
378
+ exchange: this.dexKey,
379
+ address: stata.address,
380
+ connectorTokens: [
381
+ { address: stata.underlying, decimals: stata.decimals },
382
+ { address: stata.underlyingAToken, decimals: stata.decimals },
383
+ ],
384
+ },
385
+ ];
386
+ }
387
+ else {
388
+ return [
389
+ {
390
+ liquidityUSD: 1e11,
391
+ exchange: this.dexKey,
392
+ address: stata.address,
393
+ connectorTokens: [
394
+ { address: stata.address, decimals: stata.decimals },
395
+ {
396
+ address: tokenType === types_1.TokenType.UNDERLYING
397
+ ? stata.underlyingAToken
398
+ : stata.underlying,
399
+ decimals: stata.decimals,
400
+ },
401
+ ],
402
+ },
403
+ ];
404
+ }
405
+ }
406
+ // TODO: Move to pool implementation when migrating to event based
407
+ previewRedeem(shares, rate) {
408
+ return this._convertToAssets(shares, rate, types_1.Rounding.DOWN);
409
+ }
410
+ previewMint(shares, rate) {
411
+ return this._convertToAssets(shares, rate, types_1.Rounding.UP);
412
+ }
413
+ previewWithdraw(assets, rate) {
414
+ return this._convertToShares(assets, rate, types_1.Rounding.UP);
415
+ }
416
+ previewDeposit(assets, rate) {
417
+ return this._convertToShares(assets, rate, types_1.Rounding.DOWN);
418
+ }
419
+ _convertToAssets(shares, rate, rounding) {
420
+ if (rounding == types_1.Rounding.UP)
421
+ return this.rayMulRoundUp(shares, rate);
422
+ return this.rayMulRoundDown(shares, rate);
423
+ }
424
+ _convertToShares(assets, rate, rounding) {
425
+ if (rounding == types_1.Rounding.UP)
426
+ return this.rayDivRoundUp(assets, rate);
427
+ return this.rayDivRoundDown(assets, rate);
428
+ }
429
+ rayMulRoundDown(a, b) {
430
+ if (a === 0n || b === 0n) {
431
+ return 0n;
432
+ }
433
+ return (a * b) / RAY;
434
+ }
435
+ rayMulRoundUp(a, b) {
436
+ if (a === 0n || b === 0n) {
437
+ return 0n;
438
+ }
439
+ return (a * b + RAY - 1n) / RAY;
440
+ }
441
+ rayDivRoundDown(a, b) {
442
+ return (a * RAY) / b;
443
+ }
444
+ rayDivRoundUp(a, b) {
445
+ return (a * RAY + b - 1n) / b;
446
+ }
447
+ }
448
+ exports.AaveV3StataV2 = AaveV3StataV2;
449
+ //# sourceMappingURL=aave-v3-stata-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aave-v3-stata-v2.js","sourceRoot":"","sources":["../../../src/dex/aave-v3-stata-v2/aave-v3-stata-v2.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 AaveV3StataConfig: DexConfigMap<DexParams>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AaveV3StataConfig = void 0;
4
+ const constants_1 = require("../../constants");
5
+ const aave_address_book_1 = require("@bgd-labs/aave-address-book");
6
+ exports.AaveV3StataConfig = {
7
+ AaveV3StataV2: {
8
+ [constants_1.Network.MAINNET]: {
9
+ factoryAddresses: [
10
+ aave_address_book_1.AaveV3Ethereum.STATA_FACTORY,
11
+ aave_address_book_1.AaveV3EthereumLido.STATA_FACTORY,
12
+ ],
13
+ pool: aave_address_book_1.AaveV3Ethereum.POOL,
14
+ },
15
+ [constants_1.Network.GNOSIS]: {
16
+ factoryAddresses: [aave_address_book_1.AaveV3Gnosis.STATA_FACTORY],
17
+ pool: aave_address_book_1.AaveV3Gnosis.POOL,
18
+ },
19
+ },
20
+ };
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/dex/aave-v3-stata-v2/config.ts"],"names":[],"mappings":";;;AAEA,+CAA0C;AAC1C,mEAIqC;AAExB,QAAA,iBAAiB,GAA4B;IACxD,aAAa,EAAE;QACb,CAAC,mBAAO,CAAC,OAAO,CAAC,EAAE;YACjB,gBAAgB,EAAE;gBAChB,kCAAc,CAAC,aAAa;gBAC5B,sCAAkB,CAAC,aAAa;aACjC;YACD,IAAI,EAAE,kCAAc,CAAC,IAAI;SAC1B;QACD,CAAC,mBAAO,CAAC,MAAM,CAAC,EAAE;YAChB,gBAAgB,EAAE,CAAC,gCAAY,CAAC,aAAa,CAAC;YAC9C,IAAI,EAAE,gCAAY,CAAC,IAAI;SACxB;KACF;CACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Network } from '../../constants';
2
+ import { StataToken, TokenType } from './types';
3
+ export declare const Tokens: {
4
+ [network: number]: {
5
+ [symbol: string]: StataToken;
6
+ };
7
+ };
8
+ export declare function setTokensOnNetwork(network: Network, tokens: StataToken[]): void;
9
+ export declare function getTokenType(network: Network, address: string): TokenType;
10
+ export declare function getTokenFromAddress(network: Network, address: string): StataToken;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Tokens = void 0;
4
+ exports.setTokensOnNetwork = setTokensOnNetwork;
5
+ exports.getTokenType = getTokenType;
6
+ exports.getTokenFromAddress = getTokenFromAddress;
7
+ const types_1 = require("./types");
8
+ exports.Tokens = {};
9
+ const TokensByAddress = {};
10
+ function setTokensOnNetwork(network, tokens) {
11
+ if (exports.Tokens[network] === undefined) {
12
+ exports.Tokens[network] = {};
13
+ }
14
+ if (TokensByAddress[network] === undefined) {
15
+ TokensByAddress[network] = {};
16
+ }
17
+ for (let token of tokens) {
18
+ token.address = token.address.toLowerCase();
19
+ token.underlying = token.underlying.toLowerCase();
20
+ token.underlyingAToken = token.underlyingAToken.toLowerCase();
21
+ exports.Tokens[network][token.stataSymbol] = token;
22
+ TokensByAddress[network][token.address] = token;
23
+ TokensByAddress[network][token.underlying] = token;
24
+ TokensByAddress[network][token.underlyingAToken] = token;
25
+ }
26
+ }
27
+ function getTokenType(network, address) {
28
+ const addressLower = address.toLowerCase();
29
+ const token = TokensByAddress[network]?.[addressLower];
30
+ if (!token)
31
+ return types_1.TokenType.UNKNOWN;
32
+ if (token.address === addressLower)
33
+ return types_1.TokenType.STATA_TOKEN;
34
+ if (token.underlying === addressLower)
35
+ return types_1.TokenType.UNDERLYING;
36
+ if (token.underlyingAToken === addressLower)
37
+ return types_1.TokenType.A_TOKEN;
38
+ return types_1.TokenType.UNKNOWN;
39
+ }
40
+ function getTokenFromAddress(network, address) {
41
+ return TokensByAddress[network]?.[address.toLowerCase()];
42
+ }
43
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/dex/aave-v3-stata-v2/tokens.ts"],"names":[],"mappings":";;;AAUA,gDAmBC;AAED,oCASC;AAED,kDAKC;AA9CD,mCAAgD;AAEnC,QAAA,MAAM,GACjB,EAAE,CAAC;AAEL,MAAM,eAAe,GAEjB,EAAE,CAAC;AAEP,SAAgB,kBAAkB,CAAC,OAAgB,EAAE,MAAoB;IACvE,IAAI,cAAM,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;QAClC,cAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;QAC3C,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC5C,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAClD,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE9D,cAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;QAC3C,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAChD,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;QACnD,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,OAAgB,EAAE,OAAe;IAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAEvD,IAAI,CAAC,KAAK;QAAE,OAAO,iBAAS,CAAC,OAAO,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,KAAK,YAAY;QAAE,OAAO,iBAAS,CAAC,WAAW,CAAC;IACjE,IAAI,KAAK,CAAC,UAAU,KAAK,YAAY;QAAE,OAAO,iBAAS,CAAC,UAAU,CAAC;IACnE,IAAI,KAAK,CAAC,gBAAgB,KAAK,YAAY;QAAE,OAAO,iBAAS,CAAC,OAAO,CAAC;IACtE,OAAO,iBAAS,CAAC,OAAO,CAAC;AAC3B,CAAC;AAED,SAAgB,mBAAmB,CACjC,OAAgB,EAChB,OAAe;IAEf,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { Address } from '../../types';
2
+ export type PoolState = {};
3
+ export declare enum TokenType {
4
+ UNDERLYING = 0,
5
+ A_TOKEN = 1,
6
+ STATA_TOKEN = 2,
7
+ UNKNOWN = 3
8
+ }
9
+ export type AaveV3StataV2Data = {
10
+ exchange: Address;
11
+ srcType: TokenType;
12
+ destType: TokenType;
13
+ };
14
+ export type DexParams = {
15
+ factoryAddresses: string[];
16
+ pool: string;
17
+ };
18
+ export type StataToken = {
19
+ address: string;
20
+ underlying: string;
21
+ underlyingAToken: string;
22
+ stataSymbol: string;
23
+ decimals: number;
24
+ };
25
+ export type DepositParams = [
26
+ assets: string,
27
+ receiver: string,
28
+ referralCode: number,
29
+ depositToAave: boolean
30
+ ];
31
+ export type RedeemParams = [
32
+ shares: string,
33
+ receiver: string,
34
+ owner: string,
35
+ withdrawFromAave: string
36
+ ];
37
+ export type Param = DepositParams | RedeemParams;
38
+ export declare enum StataFunctions {
39
+ deposit = "deposit",
40
+ depositATokens = "depositATokens",
41
+ redeem = "redeem",
42
+ redeemATokens = "redeemATokens",
43
+ mint = "mint",
44
+ withdraw = "withdraw"
45
+ }
46
+ export declare enum Rounding {
47
+ UP = "UP",
48
+ DOWN = "DOWN"
49
+ }