@defisaver/positions-sdk 2.1.78-aave-v4-dev → 2.1.79

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 (65) hide show
  1. package/cjs/claiming/spark.js +1 -1
  2. package/cjs/config/contracts.d.ts +0 -1551
  3. package/cjs/config/contracts.js +0 -9
  4. package/cjs/contracts.d.ts +0 -32741
  5. package/cjs/contracts.js +1 -2
  6. package/cjs/helpers/index.d.ts +0 -1
  7. package/cjs/helpers/index.js +1 -2
  8. package/cjs/index.d.ts +1 -2
  9. package/cjs/index.js +1 -3
  10. package/cjs/markets/index.d.ts +0 -1
  11. package/cjs/markets/index.js +1 -3
  12. package/cjs/portfolio/index.js +0 -20
  13. package/cjs/types/index.d.ts +0 -1
  14. package/cjs/types/index.js +0 -1
  15. package/cjs/types/portfolio.d.ts +0 -4
  16. package/esm/claiming/spark.js +1 -1
  17. package/esm/config/contracts.d.ts +0 -1551
  18. package/esm/config/contracts.js +0 -8
  19. package/esm/contracts.d.ts +0 -32741
  20. package/esm/contracts.js +0 -1
  21. package/esm/helpers/index.d.ts +0 -1
  22. package/esm/helpers/index.js +0 -1
  23. package/esm/index.d.ts +1 -2
  24. package/esm/index.js +1 -2
  25. package/esm/markets/index.d.ts +0 -1
  26. package/esm/markets/index.js +0 -1
  27. package/esm/portfolio/index.js +1 -21
  28. package/esm/types/index.d.ts +0 -1
  29. package/esm/types/index.js +0 -1
  30. package/esm/types/portfolio.d.ts +0 -4
  31. package/package.json +2 -2
  32. package/src/claiming/spark.ts +1 -1
  33. package/src/config/contracts.ts +0 -8
  34. package/src/contracts.ts +0 -2
  35. package/src/helpers/index.ts +0 -1
  36. package/src/index.ts +0 -2
  37. package/src/markets/index.ts +1 -6
  38. package/src/portfolio/index.ts +0 -20
  39. package/src/types/index.ts +1 -2
  40. package/src/types/portfolio.ts +0 -4
  41. package/cjs/aaveV4/index.d.ts +0 -7
  42. package/cjs/aaveV4/index.js +0 -298
  43. package/cjs/aaveV4/lend.d.ts +0 -45
  44. package/cjs/aaveV4/lend.js +0 -141
  45. package/cjs/helpers/aaveV4Helpers/index.d.ts +0 -12
  46. package/cjs/helpers/aaveV4Helpers/index.js +0 -117
  47. package/cjs/markets/aaveV4/index.d.ts +0 -28
  48. package/cjs/markets/aaveV4/index.js +0 -140
  49. package/cjs/types/aaveV4.d.ts +0 -153
  50. package/cjs/types/aaveV4.js +0 -19
  51. package/esm/aaveV4/index.d.ts +0 -7
  52. package/esm/aaveV4/index.js +0 -255
  53. package/esm/aaveV4/lend.d.ts +0 -45
  54. package/esm/aaveV4/lend.js +0 -134
  55. package/esm/helpers/aaveV4Helpers/index.d.ts +0 -12
  56. package/esm/helpers/aaveV4Helpers/index.js +0 -108
  57. package/esm/markets/aaveV4/index.d.ts +0 -28
  58. package/esm/markets/aaveV4/index.js +0 -122
  59. package/esm/types/aaveV4.d.ts +0 -153
  60. package/esm/types/aaveV4.js +0 -16
  61. package/src/aaveV4/index.ts +0 -291
  62. package/src/aaveV4/lend.ts +0 -180
  63. package/src/helpers/aaveV4Helpers/index.ts +0 -133
  64. package/src/markets/aaveV4/index.ts +0 -149
  65. package/src/types/aaveV4.ts +0 -169
@@ -1,298 +0,0 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
- return new (P || (P = Promise))(function (resolve, reject) {
38
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
- step((generator = generator.apply(thisArg, _arguments || [])).next());
42
- });
43
- };
44
- var __importDefault = (this && this.__importDefault) || function (mod) {
45
- return (mod && mod.__esModule) ? mod : { "default": mod };
46
- };
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.lend = void 0;
49
- exports._getAaveV4SpokeData = _getAaveV4SpokeData;
50
- exports.getAaveV4SpokeData = getAaveV4SpokeData;
51
- exports._getAaveV4AccountData = _getAaveV4AccountData;
52
- exports.getAaveV4AccountData = getAaveV4AccountData;
53
- const decimal_js_1 = __importDefault(require("decimal.js"));
54
- const tokens_1 = require("@defisaver/tokens");
55
- const viem_1 = require("../services/viem");
56
- const types_1 = require("../types");
57
- const contracts_1 = require("../contracts");
58
- const staking_1 = require("../staking");
59
- const utils_1 = require("../services/utils");
60
- const aaveV4Helpers_1 = require("../helpers/aaveV4Helpers");
61
- const aaveV4_1 = require("../markets/aaveV4");
62
- const moneymarket_1 = require("../moneymarket");
63
- exports.lend = __importStar(require("./lend"));
64
- const fetchHubData = (viewContract, hubAddress) => __awaiter(void 0, void 0, void 0, function* () {
65
- const hubData = yield viewContract.read.getHubAllAssetsData([hubAddress]);
66
- return {
67
- assets: hubData.reduce((acc, assetOnChainData) => {
68
- acc[assetOnChainData.assetId] = {
69
- assetId: assetOnChainData.assetId,
70
- drawnRate: assetOnChainData.drawnRate,
71
- liquidity: assetOnChainData.liquidity,
72
- liquidityFee: assetOnChainData.liquidityFee,
73
- swept: assetOnChainData.swept,
74
- totalDrawn: assetOnChainData.totalDrawn,
75
- totalDrawnShares: assetOnChainData.totalDrawnShares,
76
- totalPremiumShares: assetOnChainData.totalPremiumShares,
77
- };
78
- return acc;
79
- }, {}),
80
- };
81
- });
82
- // TODO AaveV4: Will be used for after values, onchain data is available when fetching position data
83
- const calcUserRiskPremiumBps = (usedAssets, assetsData) => {
84
- const collaterals = [];
85
- const debts = [];
86
- Object.entries(usedAssets).forEach(([identifier, asset]) => {
87
- const reserveData = assetsData[identifier];
88
- if (!reserveData)
89
- return;
90
- const borrowedUsdDec = new decimal_js_1.default(asset.borrowedUsd || '0');
91
- if (asset.isBorrowed && borrowedUsdDec.gt(0)) {
92
- debts.push({ valueUsd: borrowedUsdDec });
93
- }
94
- const suppliedUsdDec = new decimal_js_1.default(asset.suppliedUsd || '0');
95
- const isActiveCollateral = asset.collateral
96
- && asset.isSupplied
97
- && asset.collateralFactor > 0
98
- && suppliedUsdDec.gt(0);
99
- if (isActiveCollateral) {
100
- // collateralRisk is stored as a fraction (e.g. 0.25), convert back to bps
101
- const riskBps = new decimal_js_1.default(reserveData.collateralRisk).mul(10000).toNumber();
102
- collaterals.push({
103
- riskBps,
104
- valueUsd: suppliedUsdDec,
105
- });
106
- }
107
- });
108
- const totalDebtUsd = debts.reduce((sum, d) => sum.add(d.valueUsd), new decimal_js_1.default(0));
109
- if (totalDebtUsd.lte(0)) {
110
- return 0;
111
- }
112
- // sort by risk ASC, value DESC
113
- collaterals.sort((a, b) => {
114
- if (a.riskBps !== b.riskBps)
115
- return a.riskBps - b.riskBps;
116
- return b.valueUsd.comparedTo(a.valueUsd);
117
- });
118
- let debtLeftToCover = totalDebtUsd;
119
- let numerator = new decimal_js_1.default(0); // sum(coveredUsd * riskBps)
120
- let coveredDebt = new decimal_js_1.default(0); // sum(coveredUsd)
121
- collaterals.forEach(({ riskBps, valueUsd }) => {
122
- if (debtLeftToCover.lte(0))
123
- return;
124
- const coveredUsd = decimal_js_1.default.min(valueUsd, debtLeftToCover);
125
- numerator = numerator.add(coveredUsd.mul(riskBps));
126
- coveredDebt = coveredDebt.add(coveredUsd);
127
- debtLeftToCover = debtLeftToCover.sub(coveredUsd);
128
- });
129
- if (coveredDebt.lte(0)) {
130
- return 0;
131
- }
132
- const riskPremiumBps = numerator.div(coveredDebt);
133
- return riskPremiumBps.toNumber();
134
- };
135
- const formatReserveAsset = (reserveAsset, hubAsset, reserveId, oracleDecimals, network) => __awaiter(void 0, void 0, void 0, function* () {
136
- var _a, _b, _c, _d, _e, _f;
137
- const assetInfo = (0, tokens_1.getAssetInfoByAddress)(reserveAsset.underlying, network);
138
- const symbol = (0, utils_1.wethToEth)(assetInfo.symbol);
139
- const hubInfo = (0, aaveV4_1.getAaveV4HubByAddress)(network, reserveAsset.hub);
140
- if (!hubInfo) {
141
- throw new Error(`Hub not found with address: ${reserveAsset.hub}`);
142
- }
143
- const isStakingAsset = staking_1.STAKING_ASSETS.includes(symbol);
144
- const supplyIncentives = [];
145
- const borrowIncentives = [];
146
- if (isStakingAsset) {
147
- const yieldApy = yield (0, staking_1.getStakingApy)(symbol, network);
148
- supplyIncentives.push({
149
- apy: yieldApy,
150
- token: symbol,
151
- incentiveKind: types_1.IncentiveKind.Staking,
152
- description: `Native ${symbol} yield.`,
153
- });
154
- if (reserveAsset.borrowable) {
155
- // When borrowing assets whose value increases over time
156
- borrowIncentives.push({
157
- apy: new decimal_js_1.default(yieldApy).mul(-1).toString(),
158
- token: symbol,
159
- incentiveKind: types_1.IncentiveKind.Reward,
160
- description: `Due to the native yield of ${symbol}, the value of the debt would increase over time.`,
161
- });
162
- }
163
- }
164
- const totalSuppliedRaw = (_a = reserveAsset.totalSupplied) !== null && _a !== void 0 ? _a : 0;
165
- const totalDrawnRaw = (_b = reserveAsset.totalDrawn) !== null && _b !== void 0 ? _b : 0;
166
- const totalPremiumRaw = (_c = reserveAsset.totalPremium) !== null && _c !== void 0 ? _c : 0;
167
- const totalDebtRaw = (_d = reserveAsset.totalDebt) !== null && _d !== void 0 ? _d : 0;
168
- const supplyCapRaw = (_e = reserveAsset.supplyCap) !== null && _e !== void 0 ? _e : 0;
169
- const borrowCapRaw = (_f = reserveAsset.borrowCap) !== null && _f !== void 0 ? _f : 0;
170
- const totalSuppliedDec = new decimal_js_1.default(totalSuppliedRaw.toString());
171
- const totalDrawnDec = new decimal_js_1.default(totalDrawnRaw.toString());
172
- const utilization = totalSuppliedDec.isZero() ? '0' : totalDrawnDec.times(100).div(totalSuppliedDec).toString();
173
- /** @DEV Hub related calculations */
174
- const drawnRate = new decimal_js_1.default(hubAsset.drawnRate.toString()).div(new decimal_js_1.default(10).pow(27));
175
- const borrowApr = drawnRate.mul(100);
176
- const totalDrawn = new decimal_js_1.default(hubAsset.totalDrawn.toString());
177
- const liquidity = new decimal_js_1.default(hubAsset.liquidity.toString());
178
- const swept = new decimal_js_1.default(hubAsset.swept.toString());
179
- const hubUtilizationDenominator = totalDrawn.add(swept).add(liquidity);
180
- const hubUtilization = hubUtilizationDenominator.isZero() ? new decimal_js_1.default(0) : totalDrawn.div(hubUtilizationDenominator);
181
- const liquidityFee = new decimal_js_1.default(hubAsset.liquidityFee.toString()).div(new decimal_js_1.default(10).pow(4));
182
- const totalDrawnShares = new decimal_js_1.default(hubAsset.totalDrawnShares.toString());
183
- const totalPremiumShares = new decimal_js_1.default(hubAsset.totalPremiumShares.toString());
184
- // TODO JK@JK premiumMultiplier should be added to supplyApr calculation (.mul(premiumMultiplier)
185
- // TODO JKJ@JK when we confirm that this is the right way to calculate it
186
- const premiumMultiplier = totalDrawnShares.isZero() ? new decimal_js_1.default(1) : totalDrawnShares.add(totalPremiumShares).div(totalDrawnShares);
187
- const supplyApr = borrowApr.mul(hubUtilization).mul(new decimal_js_1.default(1).minus(liquidityFee));
188
- return ({
189
- symbol,
190
- underlying: reserveAsset.underlying,
191
- hub: hubInfo.address,
192
- hubName: hubInfo === null || hubInfo === void 0 ? void 0 : hubInfo.label,
193
- assetId: reserveAsset.assetId,
194
- reserveId,
195
- paused: reserveAsset.paused,
196
- frozen: reserveAsset.frozen,
197
- borrowable: reserveAsset.borrowable,
198
- collateralRisk: new decimal_js_1.default(reserveAsset.collateralRisk).div(10000).toNumber(),
199
- collateralFactor: new decimal_js_1.default(reserveAsset.collateralFactor).div(10000).toNumber(),
200
- liquidationFee: new decimal_js_1.default(reserveAsset.liquidationFee).div(10000).toNumber(),
201
- price: new decimal_js_1.default(reserveAsset.price).div(new decimal_js_1.default(10).pow(oracleDecimals)).toString(),
202
- totalSupplied: (0, tokens_1.assetAmountInEth)(totalSuppliedRaw.toString(), symbol),
203
- totalDrawn: (0, tokens_1.assetAmountInEth)(totalDrawnRaw.toString(), symbol),
204
- totalPremium: (0, tokens_1.assetAmountInEth)(totalPremiumRaw.toString(), symbol),
205
- totalDebt: (0, tokens_1.assetAmountInEth)(totalDebtRaw.toString(), symbol),
206
- supplyCap: (0, tokens_1.assetAmountInEth)(supplyCapRaw.toString(), symbol),
207
- borrowCap: (0, tokens_1.assetAmountInEth)(borrowCapRaw.toString(), symbol),
208
- spokeActive: reserveAsset.spokeActive,
209
- spokeHalted: reserveAsset.spokeHalted,
210
- drawnRate: drawnRate.toString(),
211
- borrowRate: (0, moneymarket_1.aprToApy)(borrowApr.toString()),
212
- supplyRate: (0, moneymarket_1.aprToApy)(supplyApr.toString()),
213
- supplyIncentives,
214
- borrowIncentives,
215
- canBeBorrowed: reserveAsset.spokeActive && !reserveAsset.spokeHalted && !reserveAsset.paused && !reserveAsset.frozen,
216
- canBeSupplied: reserveAsset.spokeActive && !reserveAsset.spokeHalted && !reserveAsset.paused && !reserveAsset.frozen,
217
- canBeWithdrawn: reserveAsset.spokeActive && !reserveAsset.spokeHalted && !reserveAsset.paused,
218
- canBePayBacked: reserveAsset.spokeActive && !reserveAsset.spokeHalted && !reserveAsset.paused,
219
- utilization,
220
- });
221
- });
222
- function _getAaveV4SpokeData(provider_1, network_1, market_1) {
223
- return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest') {
224
- const viewContract = (0, contracts_1.AaveV4ViewContractViem)(provider, network, blockNumber);
225
- const hubsData = {};
226
- const [spokeData] = yield Promise.all([
227
- viewContract.read.getSpokeDataFull([market.address]),
228
- ...market.hubs.map((hubAddress) => __awaiter(this, void 0, void 0, function* () {
229
- hubsData[hubAddress] = yield fetchHubData(viewContract, hubAddress);
230
- })),
231
- ]);
232
- const reserveAssetsArray = yield Promise.all(spokeData[1].map((reserveAssetOnChain, index) => __awaiter(this, void 0, void 0, function* () { return formatReserveAsset(reserveAssetOnChain, hubsData[reserveAssetOnChain.hub].assets[reserveAssetOnChain.assetId], index, +spokeData[0].oracleDecimals.toString(), network); })));
233
- return {
234
- assetsData: reserveAssetsArray.reduce((acc, reserveAsset) => {
235
- acc[`${reserveAsset.symbol}-${reserveAsset.reserveId}`] = reserveAsset;
236
- return acc;
237
- }, {}),
238
- oracle: spokeData[0].oracle,
239
- oracleDecimals: +spokeData[0].oracleDecimals.toString(),
240
- address: market.address,
241
- };
242
- });
243
- }
244
- function getAaveV4SpokeData(provider_1, network_1, spoke_1) {
245
- return __awaiter(this, arguments, void 0, function* (provider, network, spoke, blockNumber = 'latest') {
246
- return _getAaveV4SpokeData((0, viem_1.getViemProvider)(provider, network), network, spoke, blockNumber);
247
- });
248
- }
249
- function _getAaveV4AccountData(provider_1, network_1, spokeData_1, address_1) {
250
- return __awaiter(this, arguments, void 0, function* (provider, network, spokeData, address, blockNumber = 'latest') {
251
- const viewContract = (0, contracts_1.AaveV4ViewContractViem)(provider, network, blockNumber);
252
- const loanData = yield viewContract.read.getLoanData([spokeData.address, address]);
253
- const healthFactor = new decimal_js_1.default(loanData.healthFactor).div(1e18).toString();
254
- const usedAssets = loanData.reserves.reduce((acc, usedReserveAsset) => {
255
- const identifier = `${(0, utils_1.wethToEth)((0, tokens_1.getAssetInfoByAddress)(usedReserveAsset.underlying, network).symbol)}-${+usedReserveAsset.reserveId.toString()}`;
256
- const reserveData = spokeData.assetsData[identifier];
257
- const price = reserveData.price;
258
- const supplied = (0, tokens_1.assetAmountInEth)(usedReserveAsset.supplied.toString(), reserveData.symbol);
259
- const drawn = (0, tokens_1.assetAmountInEth)(usedReserveAsset.drawn.toString(), reserveData.symbol);
260
- const premium = (0, tokens_1.assetAmountInEth)(usedReserveAsset.premium.toString(), reserveData.symbol);
261
- const borrowed = (0, tokens_1.assetAmountInEth)(usedReserveAsset.totalDebt.toString(), reserveData.symbol);
262
- acc[identifier] = {
263
- symbol: reserveData.symbol,
264
- hubName: reserveData.hubName,
265
- assetId: reserveData.assetId,
266
- reserveId: +usedReserveAsset.reserveId.toString(),
267
- supplied,
268
- suppliedUsd: new decimal_js_1.default(supplied).mul(price).toString(),
269
- drawn,
270
- drawnUsd: new decimal_js_1.default(drawn).mul(price).toString(),
271
- premium,
272
- premiumUsd: new decimal_js_1.default(premium).mul(price).toString(),
273
- borrowed,
274
- borrowedUsd: new decimal_js_1.default(borrowed).mul(price).toString(),
275
- isSupplied: !new decimal_js_1.default(supplied).eq(0),
276
- isBorrowed: usedReserveAsset.isBorrowing,
277
- collateral: usedReserveAsset.isUsingAsCollateral,
278
- collateralFactor: new decimal_js_1.default(usedReserveAsset.collateralFactor).div(10000).toNumber(),
279
- };
280
- return acc;
281
- }, {});
282
- const aggregated = (0, aaveV4Helpers_1.aaveV4GetAggregatedPositionData)({
283
- usedAssets,
284
- assetsData: spokeData.assetsData,
285
- network,
286
- useUserCollateralFactor: true,
287
- });
288
- const riskPremiumBps = calcUserRiskPremiumBps(usedAssets, spokeData.assetsData);
289
- return Object.assign(Object.assign({}, aggregated), { usedAssets,
290
- healthFactor,
291
- riskPremiumBps });
292
- });
293
- }
294
- function getAaveV4AccountData(provider_1, network_1, marketData_1, address_1) {
295
- return __awaiter(this, arguments, void 0, function* (provider, network, marketData, address, blockNumber = 'latest') {
296
- return _getAaveV4AccountData((0, viem_1.getViemProvider)(provider, network), network, marketData, address, blockNumber);
297
- });
298
- }
@@ -1,45 +0,0 @@
1
- import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
2
- export interface AaveV4TokenizationSpokeData {
3
- underlyingAsset: EthAddress;
4
- assetId: string;
5
- decimals: number;
6
- spoke: EthAddress;
7
- spokeActive: boolean;
8
- spokeHalted: boolean;
9
- spokeDepositCap: string;
10
- spokeTotalAssets: string;
11
- spokeTotalShares: string;
12
- hub: EthAddress;
13
- hubLiquidity: string;
14
- hubDrawnRate: string;
15
- convertToShares: string;
16
- convertToAssets: string;
17
- user: EthAddress;
18
- userSuppliedAssets: string;
19
- userSuppliedShares: string;
20
- }
21
- export declare const AAVE_V4_TOKENIZED_SPOKES: Record<string, EthAddress>;
22
- export declare const AAVE_V4_TOKENIZED_SPOKE_ADDRESSES: Partial<Record<NetworkNumber, EthAddress[]>>;
23
- export type AaveV4TokenizedHubKey = 'CORE' | 'PLUS' | 'PRIME';
24
- export declare const aaveV4GetTokenizedHubKey: (hubNameOrKey?: string | null) => AaveV4TokenizedHubKey | null;
25
- export declare const aaveV4GetTokenizedVaultKey: (symbol: string, hubNameOrKey?: string | null) => string | null;
26
- export declare const aaveV4GetTokenizedVaultAddress: (network: NetworkNumber, symbol: string, hubNameOrKey?: string | null) => EthAddress | undefined;
27
- /** Parsed tokenization spoke data with human-readable supplied amounts for display */
28
- export interface AaveV4TokenizationSpokeDataParsed {
29
- vaultAddress: EthAddress;
30
- key: string | null;
31
- symbol: string;
32
- hubKey: string;
33
- userSuppliedAssetsEth: string;
34
- userSuppliedSharesEth: string;
35
- userSuppliedAssets: string;
36
- userSuppliedShares: string;
37
- underlyingAsset: EthAddress;
38
- spoke: EthAddress;
39
- decimals: number;
40
- }
41
- /**
42
- * Fetches tokenization vault data for the given user via getTokenizationSpokesData.
43
- * Returns parsed data including userSuppliedAssets in human-readable form for each vault.
44
- */
45
- export declare function getAaveV4TokenizationSpokesData(provider: EthereumProvider, network: NetworkNumber, userAddress: EthAddress): Promise<AaveV4TokenizationSpokeDataParsed[]>;
@@ -1,141 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.aaveV4GetTokenizedVaultAddress = exports.aaveV4GetTokenizedVaultKey = exports.aaveV4GetTokenizedHubKey = exports.AAVE_V4_TOKENIZED_SPOKE_ADDRESSES = exports.AAVE_V4_TOKENIZED_SPOKES = void 0;
13
- exports.getAaveV4TokenizationSpokesData = getAaveV4TokenizationSpokesData;
14
- const tokens_1 = require("@defisaver/tokens");
15
- const contracts_1 = require("../contracts");
16
- const viem_1 = require("../services/viem");
17
- const utils_1 = require("../services/utils");
18
- const common_1 = require("../types/common");
19
- exports.AAVE_V4_TOKENIZED_SPOKES = {
20
- AAVE_CORE: '0x08309234884cF7E015b07Bf22569017Aa035cdeF',
21
- EURC_CORE: '0x73596dED4B2Eb0aC85e477b3c8dB56FC427E6774',
22
- GHO_CORE: '0xf7E1f1b43922527e5054bD77E7f863Cf182b194D',
23
- GHO_PRIME: '0xeF1cAd5c6a2C9cb83c952b4B96bbD35b3F61F18f',
24
- LBTC_CORE: '0x8f4D423590F22833131e3493bf67A27213398f8e',
25
- LINK_CORE: '0xBE1197750b423e30137E97d9183065d33E903BE6',
26
- PT_USDe_PLUS: '0x8cA27Ab284F2aA2BcF33D9129e11c101aD2d16de',
27
- PT_sUSDe_PLUS: '0xb8A464EC56071a98c854f30fE19CfeCc41FA6233',
28
- PYUSD_CORE: '0x203FB463087005698d50768FcA837047f738632d',
29
- RLUSD_CORE: '0xa9afdd0c54fb153CaE39cE86E49626B5e9d15513',
30
- USDC_CORE: '0xa2e476f4cbB06C7bFA8Ad51bCcbF198cd32CfD35',
31
- USDC_PLUS: '0x320Bec4fB7a25e64c003A007D0AeF7AB3D6C30d7',
32
- USDC_PRIME: '0x0A0507F7A1129892b5cf74b8B4e911442c466b87',
33
- USDG_CORE: '0x87c224256f09a014C1BC3e9FbB094C3AdD8fBaCC',
34
- USDT_CORE: '0x3f12BD5999b9172550893FF52691c980676f9E73',
35
- USDT_PLUS: '0xa4E74a78bED2d3ab8971e8AB26fb39f26DD8eEd9',
36
- USDT_PRIME: '0xF565fB55bc96d65561887898bfeb25C1dE7e06d2',
37
- USDe_PLUS: '0xA0d346ab2699B689AC67aba5174164A84206BB73',
38
- WBTC_CORE: '0x837Ab872A665e0CF467d41cF56a054031b4A38bc',
39
- WBTC_PRIME: '0xeae98b8a1798738182B2123DF1eB93d97BD29F34',
40
- WETH_CORE: '0x3961a75099E986F59a1a31c6f945061641dFD2b2',
41
- WETH_PRIME: '0xa411826a6ef5d289c0FAa7d5B45FE8aAB52257F6',
42
- XAUt_CORE: '0x470341bC0e2B833C54D0120642713BdF762A494F',
43
- cbBTC_CORE: '0xe8D5E595d5b6b5EFf84B7064765fd0e8DfD214C9',
44
- cbBTC_PRIME: '0x0E986545150DcDDe46Ea9df355D0fD2af33bd75D',
45
- frxUSD_CORE: '0x00C8A6a42947Cc4E7B6f27963Cab0143ccaaD2B5',
46
- frxUSD_PLUS: '0xCAB288d37CAb5a9db7b503F086455276Dcde61F1',
47
- rsETH_CORE: '0x6eEce89caE2163584bA7Ff9743861B9633c245E0',
48
- sUSDe_PLUS: '0xdf47fc43c88B06edC47753b7d647ff18037D2F3d',
49
- weETH_CORE: '0xB67F20bFF413C8E5d633B54BD28899c4c9e33ed0',
50
- wstETH_CORE: '0x474602394d0B02F43AC3D7C8c5cFc0814b03fd40',
51
- wstETH_PRIME: '0xAcCdAb49ECB9A801CfF62a92fc80D52339b33770',
52
- };
53
- exports.AAVE_V4_TOKENIZED_SPOKE_ADDRESSES = {
54
- [common_1.NetworkNumber.Eth]: Object.values(exports.AAVE_V4_TOKENIZED_SPOKES),
55
- };
56
- const aaveV4GetTokenizedHubKey = (hubNameOrKey) => {
57
- if (!hubNameOrKey)
58
- return null;
59
- const normalized = hubNameOrKey.trim().toUpperCase();
60
- // TODO AaveV4 Maybe turn into constants
61
- if (normalized === 'CORE' || normalized === 'CORE HUB')
62
- return 'CORE';
63
- if (normalized === 'PLUS' || normalized === 'PLUS HUB')
64
- return 'PLUS';
65
- if (normalized === 'PRIME' || normalized === 'PRIME HUB')
66
- return 'PRIME';
67
- if (normalized.includes('CORE'))
68
- return 'CORE';
69
- if (normalized.includes('PLUS'))
70
- return 'PLUS';
71
- if (normalized.includes('PRIME'))
72
- return 'PRIME';
73
- return null;
74
- };
75
- exports.aaveV4GetTokenizedHubKey = aaveV4GetTokenizedHubKey;
76
- const aaveV4GetTokenizedVaultKey = (symbol, hubNameOrKey) => {
77
- if (!symbol)
78
- return null;
79
- const hubKey = (0, exports.aaveV4GetTokenizedHubKey)(hubNameOrKey);
80
- if (!hubKey)
81
- return null;
82
- const normalizedSymbol = symbol.trim().replace(/-/g, '_');
83
- return `${normalizedSymbol}_${hubKey}`;
84
- };
85
- exports.aaveV4GetTokenizedVaultKey = aaveV4GetTokenizedVaultKey;
86
- const aaveV4GetTokenizedVaultAddress = (network, symbol, hubNameOrKey) => {
87
- if (network !== common_1.NetworkNumber.Eth)
88
- return undefined;
89
- const key = (0, exports.aaveV4GetTokenizedVaultKey)(symbol, hubNameOrKey);
90
- if (!key)
91
- return undefined;
92
- return exports.AAVE_V4_TOKENIZED_SPOKES[key];
93
- };
94
- exports.aaveV4GetTokenizedVaultAddress = aaveV4GetTokenizedVaultAddress;
95
- const AAVE_V4_TOKENIZED_SPOKE_ADDRESS_TO_KEY = Object.entries(exports.AAVE_V4_TOKENIZED_SPOKES).reduce((acc, [k, v]) => {
96
- acc[v.toLowerCase()] = k;
97
- return acc;
98
- }, {});
99
- /**
100
- * Fetches tokenization vault data for the given user via getTokenizationSpokesData.
101
- * Returns parsed data including userSuppliedAssets in human-readable form for each vault.
102
- */
103
- function getAaveV4TokenizationSpokesData(provider, network, userAddress) {
104
- return __awaiter(this, void 0, void 0, function* () {
105
- var _a;
106
- const spokes = (_a = exports.AAVE_V4_TOKENIZED_SPOKE_ADDRESSES[network]) !== null && _a !== void 0 ? _a : [];
107
- if (spokes.length === 0)
108
- return [];
109
- const client = (0, viem_1.getViemProvider)(provider, network);
110
- const viewContract = (0, contracts_1.AaveV4ViewContractViem)(client, network);
111
- const raw = yield viewContract.read.getTokenizationSpokesData([spokes, userAddress]);
112
- return raw.map((r, i) => {
113
- var _a, _b, _c, _d, _e;
114
- const vaultAddress = spokes[i];
115
- const key = (_a = AAVE_V4_TOKENIZED_SPOKE_ADDRESS_TO_KEY[vaultAddress.toLowerCase()]) !== null && _a !== void 0 ? _a : null;
116
- const symbol = (0, utils_1.wethToEth)((0, tokens_1.getAssetInfoByAddress)(r.underlyingAsset, network).symbol);
117
- if (symbol === '?') { // unsupported asset
118
- return null;
119
- }
120
- const hubKey = key ? (_b = key.split('_').pop()) !== null && _b !== void 0 ? _b : '' : '';
121
- const decimals = Number((_c = r.decimals) !== null && _c !== void 0 ? _c : 18);
122
- const userSuppliedAssetsRaw = (_d = r.userSuppliedAssets) !== null && _d !== void 0 ? _d : 0;
123
- const userSuppliedSharesRaw = (_e = r.userSuppliedShares) !== null && _e !== void 0 ? _e : 0;
124
- const userSuppliedAssetsEth = (0, tokens_1.assetAmountInEth)(userSuppliedAssetsRaw.toString(), symbol);
125
- const userSuppliedSharesEth = (0, tokens_1.assetAmountInEth)(userSuppliedSharesRaw.toString(), symbol);
126
- return {
127
- vaultAddress,
128
- key,
129
- symbol,
130
- hubKey,
131
- userSuppliedAssetsEth,
132
- userSuppliedSharesEth,
133
- userSuppliedAssets: userSuppliedAssetsRaw.toString(),
134
- userSuppliedShares: userSuppliedSharesRaw.toString(),
135
- underlyingAsset: r.underlyingAsset,
136
- spoke: r.spoke,
137
- decimals,
138
- };
139
- }).filter(item => item != null);
140
- });
141
- }
@@ -1,12 +0,0 @@
1
- import { AaveV4AggregatedPositionData, AaveV4AssetsData, AaveV4ReserveAssetData, AaveV4UsedReserveAsset, AaveV4UsedReserveAssets, LeverageType, NetworkNumber } from '../../types';
2
- export declare const aaveV4GetCollateralFactor: (assetData: AaveV4ReserveAssetData, usedAssetData: AaveV4UsedReserveAsset, useUserCollateralFactor?: boolean) => number;
3
- export declare const isLeveragedPosAaveV4: (usedAssets: AaveV4UsedReserveAssets, dustLimit?: number) => {
4
- leveragedType: LeverageType;
5
- leveragedAsset: string;
6
- };
7
- export declare const aaveV4GetAggregatedPositionData: ({ usedAssets, assetsData, network, useUserCollateralFactor, }: {
8
- usedAssets: AaveV4UsedReserveAssets;
9
- assetsData: AaveV4AssetsData;
10
- network: NetworkNumber;
11
- useUserCollateralFactor?: boolean;
12
- }) => AaveV4AggregatedPositionData;
@@ -1,117 +0,0 @@
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.aaveV4GetAggregatedPositionData = exports.isLeveragedPosAaveV4 = exports.aaveV4GetCollateralFactor = void 0;
7
- const decimal_js_1 = __importDefault(require("decimal.js"));
8
- const moneymarket_1 = require("../../moneymarket");
9
- const types_1 = require("../../types");
10
- const aaveV4GetCollateralFactor = (assetData, usedAssetData, useUserCollateralFactor = false) => (useUserCollateralFactor ? usedAssetData.collateralFactor : assetData.collateralFactor);
11
- exports.aaveV4GetCollateralFactor = aaveV4GetCollateralFactor;
12
- const isLeveragedPosAaveV4 = (usedAssets, dustLimit = 5) => {
13
- let borrowUnstable = 0;
14
- let supplyStable = 0;
15
- let borrowStable = 0;
16
- let supplyUnstable = 0;
17
- let longAsset = '';
18
- let shortAsset = '';
19
- Object.values(usedAssets).forEach(({ symbol, suppliedUsd, borrowedUsd, collateral, reserveId, }) => {
20
- const spokeAsset = `${symbol}-${reserveId}`;
21
- const isSupplied = (+suppliedUsd) > dustLimit; // ignore dust like <limit leftover supply
22
- const isBorrowed = (+borrowedUsd) > dustLimit; // ignore dust like <limit leftover supply
23
- if (isSupplied && moneymarket_1.STABLE_ASSETS.includes(symbol) && collateral)
24
- supplyStable += 1;
25
- if (isBorrowed && moneymarket_1.STABLE_ASSETS.includes(symbol))
26
- borrowStable += 1;
27
- if (isBorrowed && !moneymarket_1.STABLE_ASSETS.includes(symbol)) {
28
- borrowUnstable += 1;
29
- shortAsset = spokeAsset;
30
- }
31
- if (isSupplied && !moneymarket_1.STABLE_ASSETS.includes(symbol) && collateral) {
32
- supplyUnstable += 1;
33
- longAsset = spokeAsset;
34
- }
35
- });
36
- const isLong = borrowStable > 0 && borrowUnstable === 0 && supplyUnstable === 1 && supplyStable === 0;
37
- const isShort = supplyStable > 0 && supplyUnstable === 0 && borrowUnstable === 1 && borrowStable === 0;
38
- const isVolatilePair = supplyUnstable === 1 && borrowUnstable === 1 && supplyStable === 0 && borrowStable === 0;
39
- if (isLong) {
40
- return {
41
- leveragedType: types_1.LeverageType.Long,
42
- leveragedAsset: longAsset,
43
- };
44
- }
45
- if (isShort) {
46
- return {
47
- leveragedType: types_1.LeverageType.Short,
48
- leveragedAsset: shortAsset,
49
- };
50
- }
51
- if (isVolatilePair) {
52
- return {
53
- leveragedType: types_1.LeverageType.VolatilePair,
54
- leveragedAsset: longAsset,
55
- };
56
- }
57
- return {
58
- leveragedType: types_1.LeverageType.None,
59
- leveragedAsset: '',
60
- };
61
- };
62
- exports.isLeveragedPosAaveV4 = isLeveragedPosAaveV4;
63
- const aaveV4GetAggregatedPositionData = ({ usedAssets, assetsData, network, useUserCollateralFactor = false, }) => {
64
- const payload = {};
65
- payload.suppliedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedUsd }) => suppliedUsd);
66
- payload.suppliedCollateralUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ suppliedUsd }) => suppliedUsd);
67
- payload.borrowLimitUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied, collateral }) => isSupplied && collateral, ({ symbol, suppliedUsd, reserveId }) => new decimal_js_1.default(suppliedUsd).mul((0, exports.aaveV4GetCollateralFactor)(assetsData[`${symbol}-${reserveId}`], usedAssets[`${symbol}-${reserveId}`], useUserCollateralFactor)));
68
- payload.liquidationLimitUsd = payload.borrowLimitUsd;
69
- payload.borrowedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
70
- payload.drawnUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isBorrowed }) => isBorrowed, ({ drawnUsd }) => drawnUsd);
71
- payload.premiumUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isBorrowed }) => isBorrowed, ({ premiumUsd }) => premiumUsd);
72
- const leftToBorrowUsd = new decimal_js_1.default(payload.borrowLimitUsd).sub(payload.borrowedUsd);
73
- payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
74
- payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
75
- payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
76
- payload.liqRatio = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
77
- payload.liqPercent = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
78
- const { leveragedType, leveragedAsset } = (0, exports.isLeveragedPosAaveV4)(usedAssets);
79
- payload.leveragedType = leveragedType;
80
- payload.leveragedAsset = leveragedAsset;
81
- payload.liquidationPrice = '';
82
- if (leveragedType !== '') {
83
- const leveragedAssetData = assetsData[leveragedAsset];
84
- let assetPrice = (leveragedAssetData === null || leveragedAssetData === void 0 ? void 0 : leveragedAssetData.price) || '0';
85
- if (leveragedType === types_1.LeverageType.VolatilePair) {
86
- const borrowedAsset = Object.values(usedAssets).find(({ borrowedUsd }) => +borrowedUsd > 0);
87
- const borrowedAssetPrice = assetsData[`${borrowedAsset.symbol}-${borrowedAsset.reserveId}`].price;
88
- const leveragedAssetPrice = assetsData[leveragedAsset].price;
89
- const isReverse = new decimal_js_1.default(leveragedAssetPrice).lt(borrowedAssetPrice);
90
- if (isReverse) {
91
- payload.leveragedType = types_1.LeverageType.VolatilePairReverse;
92
- payload.currentVolatilePairRatio = new decimal_js_1.default(borrowedAssetPrice).div(leveragedAssetPrice).toDP(18).toString();
93
- assetPrice = new decimal_js_1.default(borrowedAssetPrice).div(assetPrice).toString();
94
- }
95
- else {
96
- assetPrice = new decimal_js_1.default(assetPrice).div(borrowedAssetPrice).toString();
97
- payload.currentVolatilePairRatio = new decimal_js_1.default(leveragedAssetPrice).div(borrowedAssetPrice).toDP(18).toString();
98
- }
99
- }
100
- payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(payload.leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
101
- }
102
- payload.minCollRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
103
- payload.collLiquidationRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
104
- // payload.healthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
105
- payload.minHealthRatio = new decimal_js_1.default(payload.liquidationLimitUsd).div(payload.borrowLimitUsd).toDP(4).toString();
106
- // TODO: Re-implement netApy calculation
107
- // const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({
108
- // usedAssets,
109
- // assetsData,
110
- // optionalData: { healthRatio: payload.healthRatio },
111
- // });
112
- payload.netApy = '0';
113
- payload.incentiveUsd = '0';
114
- payload.totalInterestUsd = '0';
115
- return payload;
116
- };
117
- exports.aaveV4GetAggregatedPositionData = aaveV4GetAggregatedPositionData;
@@ -1,28 +0,0 @@
1
- import { AaveV4HubInfo, AaveV4HubsType, AaveV4SpokeInfo, AaveV4SpokesType, NetworkNumber } from '../../types';
2
- export declare const AAVE_V4_CORE_HUB: (networkId: NetworkNumber) => AaveV4HubInfo;
3
- export declare const AAVE_V4_PLUS_HUB: (networkId: NetworkNumber) => AaveV4HubInfo;
4
- export declare const AAVE_V4_PRIME_HUB: (networkId: NetworkNumber) => AaveV4HubInfo;
5
- export declare const AaveV4Hubs: (networkId: NetworkNumber) => {
6
- readonly aave_v4_core_hub: AaveV4HubInfo;
7
- readonly aave_v4_plus_hub: AaveV4HubInfo;
8
- readonly aave_v4_prime_hub: AaveV4HubInfo;
9
- };
10
- export declare const getAaveV4HubTypeInfo: (type: AaveV4HubsType, network?: NetworkNumber) => AaveV4HubInfo;
11
- export declare const getAaveV4HubByAddress: (networkId: NetworkNumber, address: string) => AaveV4HubInfo | undefined;
12
- export declare const AAVE_V4_BLUECHIP_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
13
- export declare const AAVE_V4_ETHENA_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
14
- export declare const AAVE_V4_ETHERFI_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
15
- export declare const AAVE_V4_GOLD_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
16
- export declare const AAVE_V4_KELP_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
17
- export declare const AAVE_V4_LIDO_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
18
- export declare const AAVE_V4_MAIN_SPOKE: (networkId: NetworkNumber) => AaveV4SpokeInfo;
19
- export declare const AaveV4Spokes: (networkId: NetworkNumber) => {
20
- readonly aave_v4_bluechip_spoke: AaveV4SpokeInfo;
21
- readonly aave_v4_ethena_spoke: AaveV4SpokeInfo;
22
- readonly aave_v4_etherfi_spoke: AaveV4SpokeInfo;
23
- readonly aave_v4_gold_spoke: AaveV4SpokeInfo;
24
- readonly aave_v4_kelp_spoke: AaveV4SpokeInfo;
25
- readonly aave_v4_lido_spoke: AaveV4SpokeInfo;
26
- readonly aave_v4_main_spoke: AaveV4SpokeInfo;
27
- };
28
- export declare const getAaveV4SpokeTypeInfo: (type: AaveV4SpokesType, network?: NetworkNumber) => AaveV4SpokeInfo;