@defisaver/positions-sdk 2.1.137 → 2.1.138
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/cjs/aaveV4/index.js +26 -10
- package/cjs/config/contracts.d.ts +0 -938
- package/cjs/config/contracts.js +1 -8
- package/cjs/contracts.d.ts +0 -23433
- package/cjs/contracts.js +2 -3
- package/cjs/helpers/index.d.ts +0 -1
- package/cjs/helpers/index.js +1 -2
- package/cjs/index.d.ts +1 -2
- package/cjs/index.js +1 -3
- package/cjs/markets/index.d.ts +0 -1
- package/cjs/markets/index.js +1 -3
- package/cjs/portfolio/discovery.d.ts +1 -1
- package/cjs/portfolio/discovery.js +1 -1
- package/cjs/portfolio/index.js +0 -32
- package/cjs/services/utils.d.ts +1 -0
- package/cjs/services/utils.js +3 -1
- package/cjs/staking/staking.js +1 -2
- package/cjs/types/aaveV4.d.ts +5 -0
- package/cjs/types/index.d.ts +0 -1
- package/cjs/types/index.js +0 -1
- package/cjs/types/portfolio.d.ts +0 -4
- package/esm/aaveV4/index.js +27 -11
- package/esm/config/contracts.d.ts +0 -938
- package/esm/config/contracts.js +0 -6
- package/esm/contracts.d.ts +0 -23433
- package/esm/contracts.js +0 -1
- package/esm/helpers/index.d.ts +0 -1
- package/esm/helpers/index.js +0 -1
- package/esm/index.d.ts +1 -2
- package/esm/index.js +1 -2
- package/esm/markets/index.d.ts +0 -1
- package/esm/markets/index.js +0 -1
- package/esm/portfolio/discovery.d.ts +1 -1
- package/esm/portfolio/discovery.js +1 -1
- package/esm/portfolio/index.js +1 -33
- package/esm/services/utils.d.ts +1 -0
- package/esm/services/utils.js +1 -0
- package/esm/staking/staking.js +1 -2
- package/esm/types/aaveV4.d.ts +5 -0
- package/esm/types/index.d.ts +0 -1
- package/esm/types/index.js +0 -1
- package/esm/types/portfolio.d.ts +0 -4
- package/package.json +1 -1
- package/src/aaveV4/index.ts +29 -11
- package/src/config/contracts.ts +0 -6
- package/src/contracts.ts +0 -1
- package/src/helpers/index.ts +0 -1
- package/src/index.ts +0 -2
- package/src/markets/index.ts +0 -1
- package/src/portfolio/discovery.ts +1 -1
- package/src/portfolio/index.ts +0 -33
- package/src/services/utils.ts +2 -0
- package/src/staking/staking.ts +1 -2
- package/src/types/aaveV4.ts +5 -0
- package/src/types/index.ts +0 -1
- package/src/types/portfolio.ts +0 -4
- package/cjs/eulerV2/index.d.ts +0 -47
- package/cjs/eulerV2/index.js +0 -225
- package/cjs/helpers/eulerHelpers/index.d.ts +0 -22
- package/cjs/helpers/eulerHelpers/index.js +0 -231
- package/cjs/markets/euler/index.d.ts +0 -8
- package/cjs/markets/euler/index.js +0 -30
- package/cjs/types/euler.d.ts +0 -153
- package/cjs/types/euler.js +0 -14
- package/esm/eulerV2/index.d.ts +0 -47
- package/esm/eulerV2/index.js +0 -215
- package/esm/helpers/eulerHelpers/index.d.ts +0 -22
- package/esm/helpers/eulerHelpers/index.js +0 -218
- package/esm/markets/euler/index.d.ts +0 -8
- package/esm/markets/euler/index.js +0 -24
- package/esm/types/euler.d.ts +0 -153
- package/esm/types/euler.js +0 -11
- package/src/eulerV2/index.ts +0 -331
- package/src/helpers/eulerHelpers/index.ts +0 -232
- package/src/markets/euler/index.ts +0 -27
- package/src/types/euler.ts +0 -178
package/src/portfolio/index.ts
CHANGED
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
AaveV4Spokes,
|
|
6
6
|
CompoundMarkets,
|
|
7
7
|
CrvUsdMarkets,
|
|
8
|
-
EulerV2Markets,
|
|
9
8
|
LiquityV2Markets,
|
|
10
9
|
LlamaLendMarkets,
|
|
11
10
|
MorphoBlueMarkets,
|
|
@@ -22,7 +21,6 @@ import {
|
|
|
22
21
|
CompoundV3MarketsData,
|
|
23
22
|
CompoundVersions,
|
|
24
23
|
CrvUSDGlobalMarketData,
|
|
25
|
-
EulerV2FullMarketData,
|
|
26
24
|
LiquityV2MarketData,
|
|
27
25
|
LlamaLendGlobalMarketData,
|
|
28
26
|
MorphoBlueMarketInfo,
|
|
@@ -31,7 +29,6 @@ import {
|
|
|
31
29
|
} from '../types';
|
|
32
30
|
import { _getCompoundV3AccountData, _getCompoundV3MarketsData } from '../compoundV3';
|
|
33
31
|
import { _getSparkAccountData, _getSparkMarketsData } from '../spark';
|
|
34
|
-
import { _getEulerV2AccountData, _getEulerV2MarketsData } from '../eulerV2';
|
|
35
32
|
import { _getCurveUsdGlobalData, _getCurveUsdUserData } from '../curveUsd';
|
|
36
33
|
import { _getLlamaLendGlobalData, _getLlamaLendUserData } from '../llamaLend';
|
|
37
34
|
import { _getAaveV3AccountData, _getAaveV3MarketData, getStakeAaveData } from '../aaveV3';
|
|
@@ -43,7 +40,6 @@ import { getViemProvider } from '../services/viem';
|
|
|
43
40
|
import { _getLiquityTroveInfo, getLiquityStakingData } from '../liquity';
|
|
44
41
|
import { _getLiquityV2MarketData, getLiquitySAndYBold, getLiquityV2Staking } from '../liquityV2';
|
|
45
42
|
import { _getAllUserEarnPositionsWithFTokens, _getUserPositionsPortfolio } from '../fluid';
|
|
46
|
-
import { getEulerV2SubAccounts } from '../helpers/eulerHelpers';
|
|
47
43
|
import { getUmbrellaData } from '../umbrella';
|
|
48
44
|
import { getMeritUnclaimedRewards, getUnclaimedRewardsForAllMarkets } from '../claiming/aaveV3';
|
|
49
45
|
import { getCompoundV3Rewards } from '../claiming/compV3';
|
|
@@ -65,7 +61,6 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
|
|
|
65
61
|
const morphoMarkets = Object.values(MorphoBlueMarkets(network)).filter((market) => market.chainIds.includes(network));
|
|
66
62
|
const compoundV3Markets = Object.values(CompoundMarkets(network)).filter((market) => market.chainIds.includes(network) && market.value !== CompoundVersions.CompoundV2);
|
|
67
63
|
const sparkMarkets = Object.values(SparkMarkets(network)).filter((market) => market.chainIds.includes(network));
|
|
68
|
-
const eulerV2Markets = Object.values(EulerV2Markets(network)).filter((market) => market.chainIds.includes(network));
|
|
69
64
|
const aaveV3Markets = [AaveVersions.AaveV3, AaveVersions.AaveV3Lido, AaveVersions.AaveV3Etherfi].map((version) => AaveMarkets(network)[version]).filter((market) => market.chainIds.includes(network));
|
|
70
65
|
const aaveV2Markets = [AaveVersions.AaveV2].map((version) => AaveMarkets(network)[version]).filter((market) => market.chainIds.includes(network));
|
|
71
66
|
const compoundV2Markets = [CompoundVersions.CompoundV2].map((version) => CompoundMarkets(network)[version]).filter((market) => market.chainIds.includes(network));
|
|
@@ -83,7 +78,6 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
|
|
|
83
78
|
const morphoMarketsData: Record<string, MorphoBlueMarketInfo> = {};
|
|
84
79
|
const compoundV3MarketsData: Record<string, CompoundV3MarketsData> = {};
|
|
85
80
|
const sparkMarketsData: Record<string, SparkMarketsData> = {};
|
|
86
|
-
const eulerV2MarketsData: Record<string, EulerV2FullMarketData> = {};
|
|
87
81
|
const aaveV3MarketsData: Record<string, AaveV3MarketData> = {};
|
|
88
82
|
const makerCdps: Record<string, CdpInfo[]> = {};
|
|
89
83
|
const aaveV2MarketsData: Record<string, AaveV2MarketData> = {};
|
|
@@ -97,7 +91,6 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
|
|
|
97
91
|
morphoMarketsData,
|
|
98
92
|
compoundV3MarketsData,
|
|
99
93
|
sparkMarketsData,
|
|
100
|
-
eulerV2MarketsData,
|
|
101
94
|
aaveV3MarketsData,
|
|
102
95
|
aaveV2MarketsData,
|
|
103
96
|
compoundV2MarketsData,
|
|
@@ -119,7 +112,6 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
|
|
|
119
112
|
morphoBlue: {},
|
|
120
113
|
compoundV3: {},
|
|
121
114
|
spark: {},
|
|
122
|
-
eulerV2: {},
|
|
123
115
|
maker: {},
|
|
124
116
|
aaveV2: {},
|
|
125
117
|
compoundV2: {},
|
|
@@ -175,10 +167,6 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
|
|
|
175
167
|
const marketData = await _getSparkMarketsData(client, network, market);
|
|
176
168
|
sparkMarketsData[market.value] = marketData;
|
|
177
169
|
}),
|
|
178
|
-
...eulerV2Markets.map(async (market) => {
|
|
179
|
-
const marketData = await _getEulerV2MarketsData(client, network, market);
|
|
180
|
-
eulerV2MarketsData[market.value] = marketData;
|
|
181
|
-
}),
|
|
182
170
|
...aaveV3Markets.map(async (market) => {
|
|
183
171
|
const marketData = await _getAaveV3MarketData(client, network, market);
|
|
184
172
|
aaveV3MarketsData[market.value] = marketData;
|
|
@@ -503,27 +491,6 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
|
|
|
503
491
|
positions[address.toLowerCase() as EthAddress].spark[market.value] = { error: `Error fetching Spark account data for address ${address} on market ${market.value}`, data: null };
|
|
504
492
|
}
|
|
505
493
|
})).flat(),
|
|
506
|
-
...eulerV2Markets.map((market) => addresses.map((address) => {
|
|
507
|
-
const eulerV2SubAccounts = getEulerV2SubAccounts(address);
|
|
508
|
-
const eulerV2Addresses = [address, ...eulerV2SubAccounts];
|
|
509
|
-
return Promise.all(eulerV2Addresses.map(async (eulerAddress) => {
|
|
510
|
-
try {
|
|
511
|
-
const accData = await _getEulerV2AccountData(client, network, eulerAddress, eulerAddress, { selectedMarket: market, ...eulerV2MarketsData[market.value] });
|
|
512
|
-
if (new Dec(accData.suppliedUsd).gt(0) || new Dec(accData.borrowedUsd).gt(0)) {
|
|
513
|
-
if (!positions[address.toLowerCase() as EthAddress].eulerV2[market.value]) {
|
|
514
|
-
positions[address.toLowerCase() as EthAddress].eulerV2[market.value] = {};
|
|
515
|
-
}
|
|
516
|
-
positions[address.toLowerCase() as EthAddress].eulerV2[market.value]![eulerAddress.toLowerCase() as EthAddress] = { error: '', data: accData };
|
|
517
|
-
}
|
|
518
|
-
} catch (error) {
|
|
519
|
-
console.error(`Error fetching EulerV2 account data for address ${eulerAddress} on market ${market.value}:`, error);
|
|
520
|
-
if (!positions[address.toLowerCase() as EthAddress].eulerV2[market.value]) {
|
|
521
|
-
positions[address.toLowerCase() as EthAddress].eulerV2[market.value] = {};
|
|
522
|
-
}
|
|
523
|
-
positions[address.toLowerCase() as EthAddress].eulerV2[market.value]![eulerAddress.toLowerCase() as EthAddress] = { error: `Error fetching EulerV2 account data for address ${eulerAddress} on market ${market.value}`, data: null };
|
|
524
|
-
}
|
|
525
|
-
}));
|
|
526
|
-
}).flat()).flat(),
|
|
527
494
|
...addresses.map(async (address) => makerCdps[address.toLowerCase() as EthAddress]?.map(async (cdpInfo) => {
|
|
528
495
|
try {
|
|
529
496
|
const cdpData = await _getMakerCdpData(client, network, cdpInfo);
|
package/src/services/utils.ts
CHANGED
|
@@ -20,6 +20,8 @@ export const isAddress = (address: string) => typeof address === 'string' && (ne
|
|
|
20
20
|
|
|
21
21
|
export const compareAddresses = (addr1 = '', addr2 = '') => addr1.toLowerCase() === addr2.toLowerCase();
|
|
22
22
|
|
|
23
|
+
export const shortenAddress = (address = '', start = 8, end = 4) => `${address.substring(0, start)}...${address.slice(-end)}`;
|
|
24
|
+
|
|
23
25
|
export const getWeiAmountForDecimals = (amount: string | number, decimals: number) => new Dec(amount).mul(10 ** decimals).floor().toString();
|
|
24
26
|
|
|
25
27
|
export const getEthAmountForDecimals = (amount: string | number, decimals: string | number) => new Dec(amount).div(10 ** +decimals).toString();
|
package/src/staking/staking.ts
CHANGED
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
import { BLOCKS_IN_A_YEAR } from '../constants';
|
|
9
9
|
import { DEFAULT_TIMEOUT } from '../services/utils';
|
|
10
10
|
import { EligibilityMapping } from './eligibility';
|
|
11
|
-
import { EulerV2UsedAsset } from '../types';
|
|
12
11
|
|
|
13
12
|
const getSsrApy = async () => {
|
|
14
13
|
try {
|
|
@@ -143,7 +142,7 @@ export const calculateNetApy = ({
|
|
|
143
142
|
}: { usedAssets: MMUsedAssets, assetsData: MMAssetsData, optionalData?: any }) => {
|
|
144
143
|
const sumValues = Object.values(usedAssets).reduce((_acc, usedAsset) => {
|
|
145
144
|
const acc = { ..._acc };
|
|
146
|
-
const assetData = assetsData[usedAsset.symbol]
|
|
145
|
+
const assetData = assetsData[usedAsset.symbol];
|
|
147
146
|
|
|
148
147
|
if (usedAsset.isSupplied) {
|
|
149
148
|
const amount = usedAsset.suppliedUsd;
|
package/src/types/aaveV4.ts
CHANGED
|
@@ -52,6 +52,11 @@ export interface AaveV4SpokeInfo {
|
|
|
52
52
|
value: AaveV4SpokesType,
|
|
53
53
|
url: string,
|
|
54
54
|
address: EthAddress,
|
|
55
|
+
/**
|
|
56
|
+
* Known hub addresses, used only to prefetch hub data in parallel with the spoke data.
|
|
57
|
+
* The on-chain reserves are the source of truth — hubs found there but missing here are
|
|
58
|
+
* fetched dynamically, so this list going stale can't break spoke loading.
|
|
59
|
+
*/
|
|
55
60
|
hubs: EthAddress[],
|
|
56
61
|
}
|
|
57
62
|
|
package/src/types/index.ts
CHANGED
package/src/types/portfolio.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { AaveV4AccountData, AaveV4SpokesType } from './aaveV4';
|
|
|
3
3
|
import { EthAddress } from './common';
|
|
4
4
|
import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
|
|
5
5
|
import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
|
|
6
|
-
import { EulerV2PositionData, EulerV2Versions } from './euler';
|
|
7
6
|
import { FluidVaultData } from './fluid';
|
|
8
7
|
import { LiquityTroveInfo } from './liquity';
|
|
9
8
|
import { LiquityV2TroveData, LiquityV2Versions } from './liquityV2';
|
|
@@ -30,9 +29,6 @@ export interface PortfolioPositionsDataForAddress {
|
|
|
30
29
|
spark: {
|
|
31
30
|
[key in SparkVersions]?: PortfolioProtocolData<SparkPositionData>;
|
|
32
31
|
};
|
|
33
|
-
eulerV2: {
|
|
34
|
-
[key in EulerV2Versions]?: Record<EthAddress, PortfolioProtocolData<EulerV2PositionData>>;
|
|
35
|
-
};
|
|
36
32
|
maker: {
|
|
37
33
|
[key: string]: PortfolioProtocolData<CdpData>;
|
|
38
34
|
};
|
package/cjs/eulerV2/index.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Client } from 'viem';
|
|
2
|
-
import { EulerV2AssetsData, EulerV2FullMarketData, EulerV2Market, EulerV2MarketInfoData, EulerV2PositionData, EthAddress, EthereumProvider, NetworkNumber } from '../types';
|
|
3
|
-
export declare const EMPTY_USED_ASSET: {
|
|
4
|
-
isSupplied: boolean;
|
|
5
|
-
isBorrowed: boolean;
|
|
6
|
-
supplied: string;
|
|
7
|
-
suppliedUsd: string;
|
|
8
|
-
borrowed: string;
|
|
9
|
-
borrowedUsd: string;
|
|
10
|
-
symbol: string;
|
|
11
|
-
collateral: boolean;
|
|
12
|
-
vaultAddress: string;
|
|
13
|
-
};
|
|
14
|
-
export declare const _getEulerV2MarketsData: (provider: Client, network: NetworkNumber, selectedMarket: EulerV2Market) => Promise<EulerV2FullMarketData>;
|
|
15
|
-
export declare const getEulerV2MarketsData: (provider: EthereumProvider, network: NetworkNumber, selectedMarket: EulerV2Market) => Promise<EulerV2FullMarketData>;
|
|
16
|
-
export declare const EMPTY_EULER_V2_DATA: {
|
|
17
|
-
usedAssets: {};
|
|
18
|
-
suppliedUsd: string;
|
|
19
|
-
borrowedUsd: string;
|
|
20
|
-
borrowLimitUsd: string;
|
|
21
|
-
leftToBorrowUsd: string;
|
|
22
|
-
ratio: string;
|
|
23
|
-
minRatio: string;
|
|
24
|
-
netApy: string;
|
|
25
|
-
incentiveUsd: string;
|
|
26
|
-
totalInterestUsd: string;
|
|
27
|
-
isSubscribedToAutomation: boolean;
|
|
28
|
-
automationResubscribeRequired: boolean;
|
|
29
|
-
borrowVault: string;
|
|
30
|
-
borrowAmountInUnit: string;
|
|
31
|
-
inLockDownMode: boolean;
|
|
32
|
-
inPermitDisabledMode: boolean;
|
|
33
|
-
lastUpdated: number;
|
|
34
|
-
hasBorrowInDifferentVault: boolean;
|
|
35
|
-
addressSpaceTakenByAnotherAccount: boolean;
|
|
36
|
-
exposure: string;
|
|
37
|
-
};
|
|
38
|
-
export declare const _getEulerV2AccountData: (provider: Client, network: NetworkNumber, addressForPosition: EthAddress, ownerAddress: EthAddress, extractedState: ({
|
|
39
|
-
selectedMarket: EulerV2Market;
|
|
40
|
-
assetsData: EulerV2AssetsData;
|
|
41
|
-
marketData: EulerV2MarketInfoData;
|
|
42
|
-
})) => Promise<EulerV2PositionData>;
|
|
43
|
-
export declare const getEulerV2AccountData: (provider: EthereumProvider, network: NetworkNumber, addressForPosition: EthAddress, ownerAddress: EthAddress, extractedState: ({
|
|
44
|
-
selectedMarket: EulerV2Market;
|
|
45
|
-
assetsData: EulerV2AssetsData;
|
|
46
|
-
marketData: EulerV2MarketInfoData;
|
|
47
|
-
})) => Promise<EulerV2PositionData>;
|
package/cjs/eulerV2/index.js
DELETED
|
@@ -1,225 +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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.getEulerV2AccountData = exports._getEulerV2AccountData = exports.EMPTY_EULER_V2_DATA = exports.getEulerV2MarketsData = exports._getEulerV2MarketsData = exports.EMPTY_USED_ASSET = void 0;
|
|
16
|
-
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
17
|
-
const tokens_1 = require("@defisaver/tokens");
|
|
18
|
-
const staking_1 = require("../staking");
|
|
19
|
-
const utils_1 = require("../services/utils");
|
|
20
|
-
const types_1 = require("../types");
|
|
21
|
-
const eulerHelpers_1 = require("../helpers/eulerHelpers");
|
|
22
|
-
const constants_1 = require("../constants");
|
|
23
|
-
const contracts_1 = require("../contracts");
|
|
24
|
-
const viem_1 = require("../services/viem");
|
|
25
|
-
exports.EMPTY_USED_ASSET = {
|
|
26
|
-
isSupplied: false,
|
|
27
|
-
isBorrowed: false,
|
|
28
|
-
supplied: '0',
|
|
29
|
-
suppliedUsd: '0',
|
|
30
|
-
borrowed: '0',
|
|
31
|
-
borrowedUsd: '0',
|
|
32
|
-
symbol: '',
|
|
33
|
-
collateral: false,
|
|
34
|
-
vaultAddress: '',
|
|
35
|
-
};
|
|
36
|
-
const UnitOfAccountUSD = '0x0000000000000000000000000000000000000348';
|
|
37
|
-
const _getEulerV2MarketsData = (provider, network, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
-
const contract = (0, contracts_1.EulerV2ViewContractViem)(provider, network);
|
|
39
|
-
const data = yield contract.read.getVaultInfoFull([selectedMarket.marketAddress]);
|
|
40
|
-
const isInUSD = (0, utils_1.compareAddresses)(UnitOfAccountUSD, data.unitOfAccount);
|
|
41
|
-
const usdPrice = (0, utils_1.getEthAmountForDecimals)(data.unitOfAccountInUsd.toString(), 8);
|
|
42
|
-
// parse collateral tokens
|
|
43
|
-
// imma use address as key for assetsData because there can be more collateral vaults with the same name
|
|
44
|
-
const colls = data.collaterals.map((collateral) => {
|
|
45
|
-
const decimals = collateral.decimals.toString();
|
|
46
|
-
const assetInfo = (0, tokens_1.getAssetInfoByAddress)(collateral.assetAddr);
|
|
47
|
-
const borrowRate = (0, eulerHelpers_1.getEulerV2BorrowRate)(collateral.interestRate.toString());
|
|
48
|
-
const utilizationRate = (0, eulerHelpers_1.getUtilizationRate)(collateral.totalBorrows.toString(), new decimal_js_1.default(collateral.totalBorrows.toString()).plus(collateral.cash.toString()).toString());
|
|
49
|
-
const supplyRate = (0, eulerHelpers_1.getEulerV2SupplyRate)(borrowRate, utilizationRate, collateral.interestFee.toString());
|
|
50
|
-
const isEscrow = collateral.isEscrowed;
|
|
51
|
-
const isGoverned = !(0, utils_1.compareAddresses)(collateral.governorAdmin, constants_1.ZERO_ADDRESS);
|
|
52
|
-
const vaultType = isEscrow
|
|
53
|
-
? types_1.EulerV2VaultType.Escrow
|
|
54
|
-
: (isGoverned ? types_1.EulerV2VaultType.Governed : types_1.EulerV2VaultType.Ungoverned);
|
|
55
|
-
return ({
|
|
56
|
-
vaultAddress: collateral.vaultAddr,
|
|
57
|
-
assetAddress: (0, utils_1.wethToEthByAddress)(collateral.assetAddr),
|
|
58
|
-
symbol: (0, utils_1.wethToEth)(assetInfo.symbol),
|
|
59
|
-
vaultSymbol: collateral.vaultSymbol,
|
|
60
|
-
name: collateral.name,
|
|
61
|
-
vaultType,
|
|
62
|
-
decimals,
|
|
63
|
-
liquidationRatio: new decimal_js_1.default(collateral.liquidationLTV).div(10000).toString(),
|
|
64
|
-
collateralFactor: new decimal_js_1.default(collateral.borrowLTV).div(10000).toString(),
|
|
65
|
-
totalBorrow: (0, utils_1.getEthAmountForDecimals)(collateral.totalBorrows.toString(), decimals), // parse
|
|
66
|
-
cash: (0, utils_1.getEthAmountForDecimals)(collateral.cash.toString(), decimals),
|
|
67
|
-
supplyCap: (0, utils_1.isMaxUint)(collateral.supplyCap.toString()) ? collateral.supplyCap.toString() : (0, utils_1.getEthAmountForDecimals)(collateral.supplyCap.toString(), decimals),
|
|
68
|
-
borrowCap: '0',
|
|
69
|
-
price: isInUSD ? (0, tokens_1.assetAmountInEth)(collateral.assetPriceInUnit.toString()) : new decimal_js_1.default((0, tokens_1.assetAmountInEth)(collateral.assetPriceInUnit.toString())).mul(usdPrice).toString(), // 1e18 -> price in unitOfAccount (so it could be USD or any other token)
|
|
70
|
-
canBeBorrowed: false,
|
|
71
|
-
canBeSupplied: true,
|
|
72
|
-
borrowRate,
|
|
73
|
-
supplyRate,
|
|
74
|
-
utilization: new decimal_js_1.default(utilizationRate).mul(100).toString(),
|
|
75
|
-
governorAdmin: collateral.governorAdmin,
|
|
76
|
-
supplyIncentives: [],
|
|
77
|
-
borrowIncentives: [],
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
for (const coll of colls) {
|
|
81
|
-
if (staking_1.STAKING_ASSETS.includes(coll.symbol)) {
|
|
82
|
-
coll.supplyIncentives.push({
|
|
83
|
-
apy: yield (0, staking_1.getStakingApy)(coll.symbol),
|
|
84
|
-
token: coll.symbol,
|
|
85
|
-
incentiveKind: types_1.IncentiveKind.Staking,
|
|
86
|
-
description: `Native ${coll.symbol} yield.`,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const isEscrow = data.collaterals.length === 0;
|
|
91
|
-
const isGoverned = !(0, utils_1.compareAddresses)(data.governorAdmin, constants_1.ZERO_ADDRESS);
|
|
92
|
-
const vaultType = isEscrow ? types_1.EulerV2VaultType.Escrow : (isGoverned ? types_1.EulerV2VaultType.Governed : types_1.EulerV2VaultType.Ungoverned);
|
|
93
|
-
const decimals = data.decimals.toString();
|
|
94
|
-
// (1 + SPY/10**27) ** secondsPerYear - 1
|
|
95
|
-
const interestRate = data.interestRate.toString();
|
|
96
|
-
const borrowRate = (0, eulerHelpers_1.getEulerV2BorrowRate)(interestRate);
|
|
97
|
-
const utilizationRate = (0, eulerHelpers_1.getUtilizationRate)(data.totalBorrows.toString(), data.totalAssets.toString());
|
|
98
|
-
const supplyRate = (0, eulerHelpers_1.getEulerV2SupplyRate)(borrowRate, utilizationRate, data.interestFee.toString());
|
|
99
|
-
const marketAsset = {
|
|
100
|
-
assetAddress: data.assetAddr,
|
|
101
|
-
vaultAddress: data.vaultAddr,
|
|
102
|
-
symbol: selectedMarket.asset,
|
|
103
|
-
vaultSymbol: selectedMarket.shortLabel,
|
|
104
|
-
decimals,
|
|
105
|
-
totalBorrow: (0, utils_1.getEthAmountForDecimals)(data.totalBorrows.toString(), decimals), // parse
|
|
106
|
-
cash: (0, utils_1.getEthAmountForDecimals)(data.cash.toString(), decimals),
|
|
107
|
-
supplyCap: (0, utils_1.isMaxUint)(data.supplyCap.toString()) ? data.supplyCap.toString() : (0, utils_1.getEthAmountForDecimals)(data.supplyCap.toString(), decimals),
|
|
108
|
-
borrowCap: (0, utils_1.isMaxUint)(data.supplyCap.toString()) ? data.borrowCap.toString() : (0, utils_1.getEthAmountForDecimals)(data.borrowCap.toString(), decimals),
|
|
109
|
-
price: isInUSD ? (0, tokens_1.assetAmountInEth)(data.assetPriceInUnit.toString()) : new decimal_js_1.default((0, tokens_1.assetAmountInEth)(data.assetPriceInUnit.toString())).mul(usdPrice).toString(), // 1e18 -> price in unitOfAccount (so it could be USD or any other token)
|
|
110
|
-
sortIndex: 0,
|
|
111
|
-
canBeBorrowed: true,
|
|
112
|
-
canBeSupplied: false,
|
|
113
|
-
borrowRate,
|
|
114
|
-
supplyRate,
|
|
115
|
-
collateralFactor: '0',
|
|
116
|
-
liquidationRatio: '0',
|
|
117
|
-
utilization: new decimal_js_1.default(utilizationRate).mul(100).toString(),
|
|
118
|
-
governorAdmin: data.governorAdmin,
|
|
119
|
-
vaultType,
|
|
120
|
-
name: data.name,
|
|
121
|
-
supplyIncentives: [],
|
|
122
|
-
borrowIncentives: [],
|
|
123
|
-
};
|
|
124
|
-
const assetsData = {
|
|
125
|
-
[data.vaultAddr.toLowerCase()]: marketAsset,
|
|
126
|
-
};
|
|
127
|
-
colls
|
|
128
|
-
.sort((coll1, coll2) => {
|
|
129
|
-
const aMarket = new decimal_js_1.default(coll1.price).times(coll1.totalBorrow).toString();
|
|
130
|
-
const bMarket = new decimal_js_1.default(coll2.price).times(coll2.totalBorrow).toString();
|
|
131
|
-
return new decimal_js_1.default(bMarket).minus(aMarket).toNumber();
|
|
132
|
-
})
|
|
133
|
-
.forEach((market, i) => {
|
|
134
|
-
assetsData[market.vaultAddress.toLowerCase()] = Object.assign(Object.assign({}, market), { sortIndex: i + 1 });
|
|
135
|
-
});
|
|
136
|
-
const marketData = {
|
|
137
|
-
name: data.name,
|
|
138
|
-
symbol: data.symbol,
|
|
139
|
-
decimals: data.decimals.toString(),
|
|
140
|
-
irm: data.irm,
|
|
141
|
-
creator: data.creator,
|
|
142
|
-
governorAdmin: data.governorAdmin,
|
|
143
|
-
unitOfAccount: data.unitOfAccount,
|
|
144
|
-
unitOfAccountUsdPrice: usdPrice,
|
|
145
|
-
isInUSD,
|
|
146
|
-
oracle: data.oracle,
|
|
147
|
-
collaterals: data.collaterals.map((collateral) => collateral.vaultAddr),
|
|
148
|
-
isEscrow,
|
|
149
|
-
isGoverned,
|
|
150
|
-
vaultType,
|
|
151
|
-
vaultAddress: data.vaultAddr,
|
|
152
|
-
};
|
|
153
|
-
return {
|
|
154
|
-
marketData,
|
|
155
|
-
assetsData,
|
|
156
|
-
};
|
|
157
|
-
});
|
|
158
|
-
exports._getEulerV2MarketsData = _getEulerV2MarketsData;
|
|
159
|
-
const getEulerV2MarketsData = (provider, network, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getEulerV2MarketsData)((0, viem_1.getViemProvider)(provider, network), network, selectedMarket); });
|
|
160
|
-
exports.getEulerV2MarketsData = getEulerV2MarketsData;
|
|
161
|
-
exports.EMPTY_EULER_V2_DATA = {
|
|
162
|
-
usedAssets: {},
|
|
163
|
-
suppliedUsd: '0',
|
|
164
|
-
borrowedUsd: '0',
|
|
165
|
-
borrowLimitUsd: '0',
|
|
166
|
-
leftToBorrowUsd: '0',
|
|
167
|
-
ratio: '0',
|
|
168
|
-
minRatio: '0',
|
|
169
|
-
netApy: '0',
|
|
170
|
-
incentiveUsd: '0',
|
|
171
|
-
totalInterestUsd: '0',
|
|
172
|
-
isSubscribedToAutomation: false,
|
|
173
|
-
automationResubscribeRequired: false,
|
|
174
|
-
borrowVault: '',
|
|
175
|
-
borrowAmountInUnit: '0',
|
|
176
|
-
inLockDownMode: false,
|
|
177
|
-
inPermitDisabledMode: false,
|
|
178
|
-
lastUpdated: Date.now(),
|
|
179
|
-
hasBorrowInDifferentVault: false,
|
|
180
|
-
addressSpaceTakenByAnotherAccount: false,
|
|
181
|
-
exposure: 'N/A',
|
|
182
|
-
};
|
|
183
|
-
const _getEulerV2AccountData = (provider, network, addressForPosition, ownerAddress, extractedState) => __awaiter(void 0, void 0, void 0, function* () {
|
|
184
|
-
if (!addressForPosition)
|
|
185
|
-
throw new Error('No address provided');
|
|
186
|
-
const { selectedMarket, assetsData, marketData, } = extractedState;
|
|
187
|
-
let payload = Object.assign(Object.assign({}, exports.EMPTY_EULER_V2_DATA), { lastUpdated: Date.now() });
|
|
188
|
-
const isInUSD = marketData.isInUSD;
|
|
189
|
-
const parsingDecimals = isInUSD ? 18 : (0, tokens_1.getAssetInfoByAddress)(marketData.unitOfAccount).decimals;
|
|
190
|
-
const contract = (0, contracts_1.EulerV2ViewContractViem)(provider, network);
|
|
191
|
-
const loanData = yield contract.read.getUserData([addressForPosition]);
|
|
192
|
-
const usedAssets = {};
|
|
193
|
-
// there is no user position check for a specific market, only global check
|
|
194
|
-
// but we need to make sure it works for the UI and show position only for the selected market
|
|
195
|
-
if (!(0, utils_1.compareAddresses)(loanData.borrowVault, selectedMarket.marketAddress)) {
|
|
196
|
-
payload = Object.assign(Object.assign({}, payload), { borrowVault: constants_1.ZERO_ADDRESS, borrowAmountInUnit: '0', inLockDownMode: false, inPermitDisabledMode: false, hasBorrowInDifferentVault: !(0, utils_1.compareAddresses)(loanData.borrowVault, constants_1.ZERO_ADDRESS), addressSpaceTakenByAnotherAccount: !(0, utils_1.compareAddresses)(loanData.owner, ownerAddress) && !(0, utils_1.compareAddresses)(loanData.owner, constants_1.ZERO_ADDRESS) });
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
payload = Object.assign(Object.assign({}, payload), { borrowVault: loanData.borrowVault, borrowAmountInUnit: loanData.borrowAmountInUnit.toString(), inLockDownMode: loanData.inLockDownMode, inPermitDisabledMode: loanData.inPermitDisabledMode, addressSpaceTakenByAnotherAccount: !(0, utils_1.compareAddresses)(loanData.owner, ownerAddress) && !(0, utils_1.compareAddresses)(loanData.owner, constants_1.ZERO_ADDRESS) });
|
|
200
|
-
const borrowedInUnit = (0, utils_1.getEthAmountForDecimals)(loanData.borrowAmountInUnit.toString(), parsingDecimals);
|
|
201
|
-
const borrowedInAsset = (0, utils_1.getEthAmountForDecimals)(loanData.borrowAmountInAsset.toString(), marketData.decimals);
|
|
202
|
-
const borrowVault = loanData.borrowVault;
|
|
203
|
-
if (borrowVault && !(0, utils_1.compareAddresses)(constants_1.ZERO_ADDRESS, borrowVault) && borrowedInUnit) {
|
|
204
|
-
const borrowInfo = assetsData[borrowVault.toLowerCase()];
|
|
205
|
-
usedAssets[borrowVault.toLowerCase()] = Object.assign(Object.assign({}, exports.EMPTY_USED_ASSET), { isBorrowed: true, borrowed: borrowedInAsset, borrowedUsd: isInUSD ? borrowedInUnit : new decimal_js_1.default(borrowedInUnit).mul(marketData.unitOfAccountUsdPrice).toString(), vaultAddress: loanData.borrowVault, symbol: borrowInfo.symbol });
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
loanData.collaterals.forEach((collateral, i) => {
|
|
209
|
-
const key = collateral.collateralVault.toLowerCase();
|
|
210
|
-
const collInfo = assetsData[key];
|
|
211
|
-
if (!collInfo || !marketData.collaterals.map(a => a.toLowerCase()).includes(key))
|
|
212
|
-
return; // this is a token supplied but not being used as a collateral for the market
|
|
213
|
-
const suppliedInUnit = (0, utils_1.getEthAmountForDecimals)(collateral.collateralAmountInUnit.toString(), parsingDecimals);
|
|
214
|
-
const suppliedInAsset = (0, utils_1.getEthAmountForDecimals)(collateral.collateralAmountInAsset.toString(), collInfo.decimals);
|
|
215
|
-
const collateralAmountInUSD = (0, utils_1.getEthAmountForDecimals)(collateral.collateralAmountInUSD.toString(), 18);
|
|
216
|
-
usedAssets[key] = Object.assign(Object.assign({}, exports.EMPTY_USED_ASSET), { collateral: true, isSupplied: !new decimal_js_1.default(suppliedInAsset).eq(0), supplied: suppliedInAsset, suppliedUsd: collateralAmountInUSD, vaultAddress: collateral.collateralVault, symbol: collInfo.symbol });
|
|
217
|
-
});
|
|
218
|
-
payload = Object.assign(Object.assign(Object.assign({}, payload), { usedAssets }), (0, eulerHelpers_1.getEulerV2AggregatedData)({
|
|
219
|
-
usedAssets, assetsData, network,
|
|
220
|
-
}));
|
|
221
|
-
return payload;
|
|
222
|
-
});
|
|
223
|
-
exports._getEulerV2AccountData = _getEulerV2AccountData;
|
|
224
|
-
const getEulerV2AccountData = (provider, network, addressForPosition, ownerAddress, extractedState) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getEulerV2AccountData)((0, viem_1.getViemProvider)(provider, network), network, addressForPosition, ownerAddress, extractedState); });
|
|
225
|
-
exports.getEulerV2AccountData = getEulerV2AccountData;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { EthAddress, EthereumProvider, LeverageType, NetworkNumber } from '../../types/common';
|
|
2
|
-
import { EulerV2AggregatedPositionData, EulerV2AssetsData, EulerV2UsedAssets } from '../../types';
|
|
3
|
-
export declare const isLeveragedPos: (usedAssets: EulerV2UsedAssets, dustLimit?: number) => {
|
|
4
|
-
leveragedType: LeverageType;
|
|
5
|
-
leveragedAsset: string;
|
|
6
|
-
leveragedVault: string;
|
|
7
|
-
};
|
|
8
|
-
export declare const getEulerV2AggregatedData: ({ usedAssets, assetsData, network, ...rest }: {
|
|
9
|
-
usedAssets: EulerV2UsedAssets;
|
|
10
|
-
assetsData: EulerV2AssetsData;
|
|
11
|
-
network: NetworkNumber;
|
|
12
|
-
}) => EulerV2AggregatedPositionData;
|
|
13
|
-
export declare const getEulerV2BorrowRate: (interestRate: string) => string;
|
|
14
|
-
export declare const getUtilizationRate: (totalBorrows: string, totalAssets: string) => string;
|
|
15
|
-
export declare const getEulerV2SupplyRate: (borrowRate: string, utilizationRate: string, _interestFee: string) => string;
|
|
16
|
-
export declare const getApyAfterValuesEstimationEulerV2: (actions: {
|
|
17
|
-
action: string;
|
|
18
|
-
amount: string;
|
|
19
|
-
asset: string;
|
|
20
|
-
vaultAddress: EthAddress;
|
|
21
|
-
}[], provider: EthereumProvider, network: NetworkNumber) => Promise<any>;
|
|
22
|
-
export declare const getEulerV2SubAccounts: (address: EthAddress) => EthAddress[];
|