@defisaver/positions-sdk 2.1.161-portfolio-api-1-dev → 2.1.161-portfolio-api-3-dev
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/aaveV2/index.js +2 -0
- package/cjs/aaveV3/index.d.ts +41 -12
- package/cjs/aaveV3/index.js +237 -2
- package/cjs/aaveV3/sgho.d.ts +2 -16
- package/cjs/aaveV4/lend.d.ts +2 -43
- package/cjs/claiming/aaveV3.d.ts +2 -2
- package/cjs/claiming/ethena.d.ts +2 -1
- package/cjs/claiming/king.d.ts +2 -1
- package/cjs/claiming/spark.d.ts +2 -2
- package/cjs/curveUsd/index.d.ts +5 -2
- package/cjs/curveUsd/index.js +30 -15
- package/cjs/fluid/index.d.ts +10 -49
- package/cjs/fluid/index.js +36 -1
- package/cjs/helpers/aaveHelpers/index.d.ts +9 -1
- package/cjs/helpers/aaveHelpers/index.js +26 -6
- package/cjs/helpers/aaveV4Helpers/index.js +1 -0
- package/cjs/helpers/compoundHelpers/index.js +2 -0
- package/cjs/helpers/curveUsdHelpers/index.d.ts +3 -1
- package/cjs/helpers/curveUsdHelpers/index.js +15 -2
- package/cjs/helpers/fluidHelpers/index.js +1 -0
- package/cjs/helpers/liquityV2Helpers/index.js +1 -0
- package/cjs/helpers/llamaLendHelpers/index.js +1 -0
- package/cjs/helpers/makerHelpers/index.d.ts +1 -1
- package/cjs/helpers/makerHelpers/index.js +2 -2
- package/cjs/helpers/morphoBlueHelpers/index.js +2 -0
- package/cjs/helpers/morphoMidnightHelpers/index.js +2 -0
- package/cjs/helpers/sparkHelpers/index.js +1 -0
- package/cjs/liquity/index.d.ts +2 -12
- package/cjs/liquity/index.js +15 -2
- package/cjs/liquityV2/index.d.ts +8 -23
- package/cjs/liquityV2/index.js +37 -19
- package/cjs/maker/index.d.ts +7 -2
- package/cjs/maker/index.js +44 -12
- package/cjs/markets/index.d.ts +1 -0
- package/cjs/markets/index.js +3 -1
- package/cjs/markets/maker/index.d.ts +1 -0
- package/cjs/markets/maker/index.js +13 -0
- package/cjs/moneymarket/moneymarketCommonService.d.ts +9 -0
- package/cjs/moneymarket/moneymarketCommonService.js +13 -1
- package/cjs/portfolio/index.d.ts +17 -5
- package/cjs/portfolio/index.js +583 -381
- package/cjs/portfolio/lendingProtocols.d.ts +184 -0
- package/cjs/portfolio/lendingProtocols.js +196 -0
- package/cjs/savings/index.d.ts +8 -2
- package/cjs/savings/index.js +37 -5
- package/cjs/savings/morphoVaults/index.d.ts +1 -1
- package/cjs/savings/morphoVaults/index.js +56 -18
- package/cjs/savings/morphoVaults/options.d.ts +2 -0
- package/cjs/savings/morphoVaults/options.js +61 -1
- package/cjs/spark/index.js +1 -0
- package/cjs/staking/staking.d.ts +20 -0
- package/cjs/staking/staking.js +19 -1
- package/cjs/types/aave.d.ts +86 -0
- package/cjs/types/aaveV4.d.ts +45 -0
- package/cjs/types/compound.d.ts +2 -0
- package/cjs/types/curveUsd.d.ts +6 -0
- package/cjs/types/fluid.d.ts +14 -0
- package/cjs/types/index.d.ts +1 -0
- package/cjs/types/index.js +1 -0
- package/cjs/types/liquity.d.ts +16 -0
- package/cjs/types/liquityV2.d.ts +26 -0
- package/cjs/types/maker.d.ts +4 -0
- package/cjs/types/morphoBlue.d.ts +2 -0
- package/cjs/types/morphoMidnight.d.ts +1 -0
- package/cjs/types/portfolio.d.ts +127 -6
- package/cjs/types/savings/index.d.ts +9 -1
- package/cjs/types/savings/morphoVaults.d.ts +10 -2
- package/cjs/types/savings/morphoVaults.js +9 -1
- package/cjs/types/spark.d.ts +2 -0
- package/cjs/umbrella/index.d.ts +2 -3
- package/esm/aaveV2/index.js +2 -0
- package/esm/aaveV3/index.d.ts +41 -12
- package/esm/aaveV3/index.js +231 -2
- package/esm/aaveV3/sgho.d.ts +2 -16
- package/esm/aaveV4/lend.d.ts +2 -43
- package/esm/claiming/aaveV3.d.ts +2 -2
- package/esm/claiming/aaveV3.js +1 -1
- package/esm/claiming/ethena.d.ts +2 -1
- package/esm/claiming/king.d.ts +2 -1
- package/esm/claiming/spark.d.ts +2 -2
- package/esm/claiming/spark.js +1 -1
- package/esm/curveUsd/index.d.ts +5 -2
- package/esm/curveUsd/index.js +30 -15
- package/esm/fluid/index.d.ts +10 -49
- package/esm/fluid/index.js +33 -0
- package/esm/helpers/aaveHelpers/index.d.ts +9 -1
- package/esm/helpers/aaveHelpers/index.js +23 -5
- package/esm/helpers/aaveV4Helpers/index.js +1 -0
- package/esm/helpers/compoundHelpers/index.js +2 -0
- package/esm/helpers/curveUsdHelpers/index.d.ts +3 -1
- package/esm/helpers/curveUsdHelpers/index.js +16 -3
- package/esm/helpers/fluidHelpers/index.js +1 -0
- package/esm/helpers/liquityV2Helpers/index.js +1 -0
- package/esm/helpers/llamaLendHelpers/index.js +2 -1
- package/esm/helpers/makerHelpers/index.d.ts +1 -1
- package/esm/helpers/makerHelpers/index.js +2 -2
- package/esm/helpers/morphoBlueHelpers/index.js +2 -0
- package/esm/helpers/morphoMidnightHelpers/index.js +2 -0
- package/esm/helpers/sparkHelpers/index.js +1 -0
- package/esm/liquity/index.d.ts +2 -12
- package/esm/liquity/index.js +16 -3
- package/esm/liquityV2/index.d.ts +8 -23
- package/esm/liquityV2/index.js +35 -18
- package/esm/maker/index.d.ts +7 -2
- package/esm/maker/index.js +44 -14
- package/esm/markets/index.d.ts +1 -0
- package/esm/markets/index.js +1 -0
- package/esm/markets/maker/index.d.ts +1 -0
- package/esm/markets/maker/index.js +10 -0
- package/esm/moneymarket/moneymarketCommonService.d.ts +9 -0
- package/esm/moneymarket/moneymarketCommonService.js +11 -0
- package/esm/portfolio/index.d.ts +17 -5
- package/esm/portfolio/index.js +584 -385
- package/esm/portfolio/lendingProtocols.d.ts +184 -0
- package/esm/portfolio/lendingProtocols.js +189 -0
- package/esm/savings/index.d.ts +8 -2
- package/esm/savings/index.js +35 -4
- package/esm/savings/morphoVaults/index.d.ts +1 -1
- package/esm/savings/morphoVaults/index.js +57 -19
- package/esm/savings/morphoVaults/options.d.ts +2 -0
- package/esm/savings/morphoVaults/options.js +61 -1
- package/esm/spark/index.js +1 -0
- package/esm/staking/staking.d.ts +20 -0
- package/esm/staking/staking.js +17 -0
- package/esm/types/aave.d.ts +86 -0
- package/esm/types/aaveV4.d.ts +45 -0
- package/esm/types/compound.d.ts +2 -0
- package/esm/types/curveUsd.d.ts +6 -0
- package/esm/types/fluid.d.ts +14 -0
- package/esm/types/index.d.ts +1 -0
- package/esm/types/index.js +1 -0
- package/esm/types/liquity.d.ts +16 -0
- package/esm/types/liquityV2.d.ts +26 -0
- package/esm/types/maker.d.ts +4 -0
- package/esm/types/morphoBlue.d.ts +2 -0
- package/esm/types/morphoMidnight.d.ts +1 -0
- package/esm/types/portfolio.d.ts +127 -6
- package/esm/types/savings/index.d.ts +9 -1
- package/esm/types/savings/morphoVaults.d.ts +10 -2
- package/esm/types/savings/morphoVaults.js +8 -0
- package/esm/types/spark.d.ts +2 -0
- package/esm/umbrella/index.d.ts +2 -3
- package/package.json +3 -2
- package/src/aaveV2/index.ts +2 -0
- package/src/aaveV3/index.ts +293 -2
- package/src/aaveV3/sgho.ts +2 -17
- package/src/aaveV4/lend.ts +2 -48
- package/src/claiming/aaveV3.ts +4 -2
- package/src/claiming/ethena.ts +5 -5
- package/src/claiming/king.ts +3 -3
- package/src/claiming/spark.ts +6 -4
- package/src/curveUsd/index.ts +33 -16
- package/src/fluid/index.ts +44 -3
- package/src/helpers/aaveHelpers/index.ts +27 -7
- package/src/helpers/aaveV4Helpers/index.ts +1 -0
- package/src/helpers/compoundHelpers/index.ts +2 -0
- package/src/helpers/curveUsdHelpers/index.ts +23 -3
- package/src/helpers/fluidHelpers/index.ts +1 -0
- package/src/helpers/liquityV2Helpers/index.ts +1 -0
- package/src/helpers/llamaLendHelpers/index.ts +2 -1
- package/src/helpers/makerHelpers/index.ts +2 -1
- package/src/helpers/morphoBlueHelpers/index.ts +2 -0
- package/src/helpers/morphoMidnightHelpers/index.ts +2 -0
- package/src/helpers/sparkHelpers/index.ts +1 -0
- package/src/liquity/index.ts +19 -5
- package/src/liquityV2/index.ts +48 -22
- package/src/maker/index.ts +77 -30
- package/src/markets/index.ts +2 -1
- package/src/markets/maker/index.ts +10 -0
- package/src/moneymarket/moneymarketCommonService.ts +15 -0
- package/src/portfolio/index.ts +477 -248
- package/src/portfolio/lendingProtocols.ts +281 -0
- package/src/savings/index.ts +45 -5
- package/src/savings/morphoVaults/index.ts +73 -21
- package/src/savings/morphoVaults/options.ts +67 -1
- package/src/spark/index.ts +1 -0
- package/src/staking/staking.ts +28 -0
- package/src/types/aave.ts +90 -0
- package/src/types/aaveV4.ts +50 -0
- package/src/types/compound.ts +2 -0
- package/src/types/curveUsd.ts +7 -0
- package/src/types/fluid.ts +15 -0
- package/src/types/index.ts +2 -1
- package/src/types/liquity.ts +19 -1
- package/src/types/liquityV2.ts +28 -1
- package/src/types/maker.ts +6 -0
- package/src/types/morphoBlue.ts +2 -0
- package/src/types/morphoMidnight.ts +1 -0
- package/src/types/portfolio.ts +153 -7
- package/src/types/savings/index.ts +12 -1
- package/src/types/savings/morphoVaults.ts +11 -1
- package/src/types/spark.ts +2 -0
- package/src/umbrella/index.ts +2 -1
package/cjs/fluid/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Client, PublicClient } from 'viem';
|
|
2
2
|
import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
|
|
3
|
-
import { FluidAssetsData, FluidMarketData, FluidMarketInfo, FluidUsedAssets, FluidVaultData, InnerFluidMarketData } from '../types';
|
|
3
|
+
import { FluidAssetsData, FluidEarnPositionData, FluidMarketData, FluidMarketInfo, FluidUsedAssets, FluidVaultData, InnerFluidMarketData } from '../types';
|
|
4
4
|
export { FluidMerklOpportunityType, buildFluidMerklRewardMap, getFluidMerklCampaigns, attachFluidMerklIncentives, } from './merkl';
|
|
5
5
|
export declare const EMPTY_USED_ASSET: {
|
|
6
6
|
isSupplied: boolean;
|
|
@@ -71,54 +71,10 @@ export declare const getFluidTokenData: (provider: EthereumProvider, network: Ne
|
|
|
71
71
|
depositRate: string;
|
|
72
72
|
withdrawRate: string;
|
|
73
73
|
}>;
|
|
74
|
-
export declare const _getFluidDepositData: (provider: Client, network: NetworkNumber, token: string, address: EthAddress) => Promise<
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
totalDeposited: string;
|
|
79
|
-
withdrawable: string;
|
|
80
|
-
apy: string;
|
|
81
|
-
depositRate: string;
|
|
82
|
-
withdrawRate: string;
|
|
83
|
-
deposited: string;
|
|
84
|
-
depositedShares: string;
|
|
85
|
-
}>;
|
|
86
|
-
export declare const getFluidDepositData: (provider: EthereumProvider, network: NetworkNumber, token: string, address: EthAddress) => Promise<{
|
|
87
|
-
fTokenAddress: string | undefined;
|
|
88
|
-
fTokenSymbol: string;
|
|
89
|
-
decimals: string;
|
|
90
|
-
totalDeposited: string;
|
|
91
|
-
withdrawable: string;
|
|
92
|
-
apy: string;
|
|
93
|
-
depositRate: string;
|
|
94
|
-
withdrawRate: string;
|
|
95
|
-
deposited: string;
|
|
96
|
-
depositedShares: string;
|
|
97
|
-
}>;
|
|
98
|
-
export declare const _getAllUserEarnPositionsWithFTokens: (provider: Client, network: NetworkNumber, user: EthAddress) => Promise<{
|
|
99
|
-
fTokenAddress: string | undefined;
|
|
100
|
-
fTokenSymbol: string;
|
|
101
|
-
decimals: string;
|
|
102
|
-
totalDeposited: string;
|
|
103
|
-
withdrawable: string;
|
|
104
|
-
apy: string;
|
|
105
|
-
depositRate: string;
|
|
106
|
-
withdrawRate: string;
|
|
107
|
-
deposited: string;
|
|
108
|
-
depositedShares: string;
|
|
109
|
-
}[]>;
|
|
110
|
-
export declare const getAllUserEarnPositionsWithFTokens: (provider: EthereumProvider, network: NetworkNumber, user: EthAddress) => Promise<{
|
|
111
|
-
fTokenAddress: string | undefined;
|
|
112
|
-
fTokenSymbol: string;
|
|
113
|
-
decimals: string;
|
|
114
|
-
totalDeposited: string;
|
|
115
|
-
withdrawable: string;
|
|
116
|
-
apy: string;
|
|
117
|
-
depositRate: string;
|
|
118
|
-
withdrawRate: string;
|
|
119
|
-
deposited: string;
|
|
120
|
-
depositedShares: string;
|
|
121
|
-
}[]>;
|
|
74
|
+
export declare const _getFluidDepositData: (provider: Client, network: NetworkNumber, token: string, address: EthAddress) => Promise<FluidEarnPositionData>;
|
|
75
|
+
export declare const getFluidDepositData: (provider: EthereumProvider, network: NetworkNumber, token: string, address: EthAddress) => Promise<FluidEarnPositionData>;
|
|
76
|
+
export declare const _getAllUserEarnPositionsWithFTokens: (provider: Client, network: NetworkNumber, user: EthAddress) => Promise<FluidEarnPositionData[]>;
|
|
77
|
+
export declare const getAllUserEarnPositionsWithFTokens: (provider: EthereumProvider, network: NetworkNumber, user: EthAddress) => Promise<FluidEarnPositionData[]>;
|
|
122
78
|
export declare const _getUserPositions: (provider: PublicClient, network: NetworkNumber, user: EthAddress) => Promise<{
|
|
123
79
|
marketData: FluidMarketData | undefined;
|
|
124
80
|
userData: {
|
|
@@ -133,6 +89,7 @@ export declare const _getUserPositions: (provider: PublicClient, network: Networ
|
|
|
133
89
|
merklBorrowIncentives: import("../types").IncentiveData[];
|
|
134
90
|
ratio: string;
|
|
135
91
|
collRatio: string;
|
|
92
|
+
safetyRatio: string;
|
|
136
93
|
minRatio: string;
|
|
137
94
|
totalInterestUsd: string;
|
|
138
95
|
leveragedType?: import("../types").LeverageType;
|
|
@@ -167,6 +124,7 @@ export declare const getUserPositions: (provider: EthereumProvider, network: Net
|
|
|
167
124
|
merklBorrowIncentives: import("../types").IncentiveData[];
|
|
168
125
|
ratio: string;
|
|
169
126
|
collRatio: string;
|
|
127
|
+
safetyRatio: string;
|
|
170
128
|
minRatio: string;
|
|
171
129
|
totalInterestUsd: string;
|
|
172
130
|
leveragedType?: import("../types").LeverageType;
|
|
@@ -201,6 +159,7 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
|
|
|
201
159
|
merklBorrowIncentives: import("../types").IncentiveData[];
|
|
202
160
|
ratio: string;
|
|
203
161
|
collRatio: string;
|
|
162
|
+
safetyRatio: string;
|
|
204
163
|
minRatio: string;
|
|
205
164
|
totalInterestUsd: string;
|
|
206
165
|
leveragedType?: import("../types").LeverageType;
|
|
@@ -221,3 +180,5 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
|
|
|
221
180
|
nftId: string;
|
|
222
181
|
} | undefined;
|
|
223
182
|
}[]>;
|
|
183
|
+
export declare const _getAllFluidMarketDataPortfolio: (provider: PublicClient, network: NetworkNumber) => Promise<Record<string, FluidMarketData>>;
|
|
184
|
+
export declare const getAllFluidMarketDataPortfolio: (provider: EthereumProvider, network: NetworkNumber) => Promise<Record<string, FluidMarketData>>;
|
package/cjs/fluid/index.js
CHANGED
|
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports._getUserPositionsPortfolio = exports.getUserPositions = exports._getUserPositions = exports.getAllUserEarnPositionsWithFTokens = exports._getAllUserEarnPositionsWithFTokens = exports.getFluidDepositData = exports._getFluidDepositData = exports.getFluidTokenData = exports._getFluidTokenData = exports.getAllFluidMarketDataChunked = exports._getAllFluidMarketDataChunked = exports.getFluidPositionWithMarket = exports._getFluidPositionWithMarket = exports.getFluidPosition = exports._getFluidPosition = exports.getFluidVaultIdsForUser = exports._getFluidVaultIdsForUser = exports.getFluidMarketData = exports._getFluidMarketData = exports.EMPTY_FLUID_DATA = exports.EMPTY_USED_ASSET = exports.attachFluidMerklIncentives = exports.getFluidMerklCampaigns = exports.buildFluidMerklRewardMap = exports.FluidMerklOpportunityType = void 0;
|
|
15
|
+
exports.getAllFluidMarketDataPortfolio = exports._getAllFluidMarketDataPortfolio = exports._getUserPositionsPortfolio = exports.getUserPositions = exports._getUserPositions = exports.getAllUserEarnPositionsWithFTokens = exports._getAllUserEarnPositionsWithFTokens = exports.getFluidDepositData = exports._getFluidDepositData = exports.getFluidTokenData = exports._getFluidTokenData = exports.getAllFluidMarketDataChunked = exports._getAllFluidMarketDataChunked = exports.getFluidPositionWithMarket = exports._getFluidPositionWithMarket = exports.getFluidPosition = exports._getFluidPosition = exports.getFluidVaultIdsForUser = exports._getFluidVaultIdsForUser = exports.getFluidMarketData = exports._getFluidMarketData = exports.EMPTY_FLUID_DATA = exports.EMPTY_USED_ASSET = exports.attachFluidMerklIncentives = exports.getFluidMerklCampaigns = exports.buildFluidMerklRewardMap = exports.FluidMerklOpportunityType = void 0;
|
|
16
16
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
17
17
|
const tokens_1 = require("@defisaver/tokens");
|
|
18
18
|
const common_1 = require("../types/common");
|
|
@@ -1410,3 +1410,38 @@ const _getUserPositionsPortfolio = (provider, network, user) => __awaiter(void 0
|
|
|
1410
1410
|
})).filter(md => md.marketData !== undefined);
|
|
1411
1411
|
});
|
|
1412
1412
|
exports._getUserPositionsPortfolio = _getUserPositionsPortfolio;
|
|
1413
|
+
const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1414
|
+
const versions = (0, markets_1.getFluidVersionsDataForNetwork)(network);
|
|
1415
|
+
if (versions.length === 0)
|
|
1416
|
+
return {};
|
|
1417
|
+
const view = (0, contracts_1.FluidViewContractViem)(provider, network);
|
|
1418
|
+
const vaultsData = yield Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress])));
|
|
1419
|
+
const tokens = Array.from(new Set(vaultsData.map((vaultData) => {
|
|
1420
|
+
const vaultTokens = [(0, tokens_1.getAssetInfoByAddress)(vaultData.supplyToken0, network).symbol, (0, tokens_1.getAssetInfoByAddress)(vaultData.borrowToken0, network).symbol];
|
|
1421
|
+
if (vaultData.supplyToken1 && !(0, utils_1.compareAddresses)(constants_1.ZERO_ADDRESS, vaultData.supplyToken1))
|
|
1422
|
+
vaultTokens.push((0, tokens_1.getAssetInfoByAddress)(vaultData.supplyToken1, network).symbol);
|
|
1423
|
+
if (vaultData.borrowToken1 && !(0, utils_1.compareAddresses)(constants_1.ZERO_ADDRESS, vaultData.borrowToken1))
|
|
1424
|
+
vaultTokens.push((0, tokens_1.getAssetInfoByAddress)(vaultData.borrowToken1, network).symbol);
|
|
1425
|
+
return vaultTokens;
|
|
1426
|
+
}).flat()));
|
|
1427
|
+
// ETH and WBTC needed for other tokens prices
|
|
1428
|
+
if (!tokens.includes('ETH'))
|
|
1429
|
+
tokens.push('ETH');
|
|
1430
|
+
if (!tokens.includes('WBTC'))
|
|
1431
|
+
tokens.push('WBTC');
|
|
1432
|
+
const [tokenPrices, merklCampaigns] = yield Promise.all([
|
|
1433
|
+
getTokensPricesForPortfolio(tokens, provider, network),
|
|
1434
|
+
(0, merkl_1.getFluidMerklCampaigns)(network),
|
|
1435
|
+
]);
|
|
1436
|
+
const parsedMarketsData = yield Promise.all(vaultsData.map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); })));
|
|
1437
|
+
const marketsData = {};
|
|
1438
|
+
parsedMarketsData.forEach((marketData, i) => {
|
|
1439
|
+
if (!marketData)
|
|
1440
|
+
return;
|
|
1441
|
+
marketsData[versions[i].value] = (0, merkl_1.attachFluidMerklIncentives)(marketData, merklCampaigns);
|
|
1442
|
+
});
|
|
1443
|
+
return marketsData;
|
|
1444
|
+
});
|
|
1445
|
+
exports._getAllFluidMarketDataPortfolio = _getAllFluidMarketDataPortfolio;
|
|
1446
|
+
const getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getAllFluidMarketDataPortfolio)((0, viem_1.getViemProvider)(provider, network, { batch: { multicall: true } }), network); });
|
|
1447
|
+
exports.getAllFluidMarketDataPortfolio = getAllFluidMarketDataPortfolio;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AaveHelperCommon, AaveMarketInfo, AaveV3AggregatedPositionData, AaveV3AssetsData, AaveV3UsedAsset, AaveV3UsedAssets, AaveVersions } from '../../types';
|
|
1
|
+
import { AaveHelperCommon, AaveMarketInfo, AaveV3AggregatedPositionData, AaveV3AssetsData, AaveV3UsedAsset, AaveV3UsedAssets, AaveVersions, EModeCategoriesData } from '../../types';
|
|
2
2
|
import { EthereumProvider, NetworkNumber } from '../../types/common';
|
|
3
3
|
export declare const AAVE_V3_MARKETS: AaveVersions[];
|
|
4
4
|
export declare const isAaveV2: ({ selectedMarket }: {
|
|
@@ -15,6 +15,14 @@ export declare const aaveV3IsInSiloedMode: ({ usedAssets, assetsData }: {
|
|
|
15
15
|
usedAssets: AaveV3UsedAssets;
|
|
16
16
|
assetsData: AaveV3AssetsData;
|
|
17
17
|
}) => boolean;
|
|
18
|
+
export declare const aaveV3IsEmodeIsolated: ({ eModeCategory, eModeCategoriesData }: {
|
|
19
|
+
eModeCategory: number;
|
|
20
|
+
eModeCategoriesData?: EModeCategoriesData;
|
|
21
|
+
}) => boolean;
|
|
22
|
+
export declare const aaveV3CanBeCollateralInEmode: ({ eModeCategory, eModeCategoriesData }: {
|
|
23
|
+
eModeCategory: number;
|
|
24
|
+
eModeCategoriesData?: EModeCategoriesData;
|
|
25
|
+
}, _asset: string) => boolean;
|
|
18
26
|
export declare const aaveAnyGetCollSuppliedAssets: ({ usedAssets }: {
|
|
19
27
|
usedAssets: AaveV3UsedAssets;
|
|
20
28
|
}) => AaveV3UsedAsset[];
|
|
@@ -23,7 +23,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
23
23
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.getAaveUnderlyingSymbol = exports.getApyAfterValuesEstimation = exports.aaveAnyGetAggregatedPositionData = exports.aaveAnyGetUserReserveLtvAndLltv = exports.aaveAnyGetEmodeMutableProps = exports.aaveAnyGetSuppliableAsCollAssets = exports.aaveAnyGetSuppliableAssets = exports.aaveAnyGetCollSuppliedAssets = exports.aaveV3IsInSiloedMode = exports.aaveV3IsInIsolationMode = exports.isAaveV3 = exports.isAaveV2 = exports.AAVE_V3_MARKETS = void 0;
|
|
26
|
+
exports.getAaveUnderlyingSymbol = exports.getApyAfterValuesEstimation = exports.aaveAnyGetAggregatedPositionData = exports.aaveAnyGetUserReserveLtvAndLltv = exports.aaveAnyGetEmodeMutableProps = exports.aaveAnyGetSuppliableAsCollAssets = exports.aaveAnyGetSuppliableAssets = exports.aaveAnyGetCollSuppliedAssets = exports.aaveV3CanBeCollateralInEmode = exports.aaveV3IsEmodeIsolated = exports.aaveV3IsInSiloedMode = exports.aaveV3IsInIsolationMode = exports.isAaveV3 = exports.isAaveV2 = exports.AAVE_V3_MARKETS = void 0;
|
|
27
27
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
28
28
|
const tokens_1 = require("@defisaver/tokens");
|
|
29
29
|
const types_1 = require("../../types");
|
|
@@ -43,6 +43,14 @@ const aaveV3IsInIsolationMode = ({ usedAssets, assetsData }) => Object.values(us
|
|
|
43
43
|
exports.aaveV3IsInIsolationMode = aaveV3IsInIsolationMode;
|
|
44
44
|
const aaveV3IsInSiloedMode = ({ usedAssets, assetsData }) => Object.values(usedAssets).some(({ symbol, debt }) => debt && assetsData[symbol].isSiloed);
|
|
45
45
|
exports.aaveV3IsInSiloedMode = aaveV3IsInSiloedMode;
|
|
46
|
+
const aaveV3IsEmodeIsolated = ({ eModeCategory, eModeCategoriesData }) => { var _a; return eModeCategory !== 0 && !!((_a = eModeCategoriesData === null || eModeCategoriesData === void 0 ? void 0 : eModeCategoriesData[eModeCategory]) === null || _a === void 0 ? void 0 : _a.isolated); };
|
|
47
|
+
exports.aaveV3IsEmodeIsolated = aaveV3IsEmodeIsolated;
|
|
48
|
+
const aaveV3CanBeCollateralInEmode = ({ eModeCategory, eModeCategoriesData }, _asset) => {
|
|
49
|
+
if (!(0, exports.aaveV3IsEmodeIsolated)({ eModeCategory, eModeCategoriesData }))
|
|
50
|
+
return true;
|
|
51
|
+
return eModeCategoriesData[eModeCategory].collateralAssets.includes((0, utils_1.getNativeAssetFromWrapped)(_asset));
|
|
52
|
+
};
|
|
53
|
+
exports.aaveV3CanBeCollateralInEmode = aaveV3CanBeCollateralInEmode;
|
|
46
54
|
const aaveAnyGetCollSuppliedAssets = ({ usedAssets }) => Object.values(usedAssets)
|
|
47
55
|
.filter(({ isSupplied, collateral }) => isSupplied && collateral);
|
|
48
56
|
exports.aaveAnyGetCollSuppliedAssets = aaveAnyGetCollSuppliedAssets;
|
|
@@ -51,13 +59,16 @@ const aaveAnyGetSuppliableAssets = (_a) => {
|
|
|
51
59
|
const data = Object.assign({ usedAssets, eModeCategory, assetsData, selectedMarket, network }, rest);
|
|
52
60
|
const collAccountAssets = (0, exports.aaveAnyGetCollSuppliedAssets)(data);
|
|
53
61
|
const marketAssets = Object.values(assetsData);
|
|
54
|
-
if (
|
|
62
|
+
if (!(0, exports.isAaveV3)(data))
|
|
55
63
|
return marketAssets.filter(({ canBeSupplied }) => canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: true }));
|
|
64
|
+
const canBeCollateralInEmode = (symbol) => (0, exports.aaveV3CanBeCollateralInEmode)(data, symbol);
|
|
65
|
+
if (collAccountAssets.length === 0)
|
|
66
|
+
return marketAssets.filter(({ canBeSupplied }) => canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: canBeCollateralInEmode(symbol) }));
|
|
56
67
|
if ((0, exports.aaveV3IsInIsolationMode)(data)) {
|
|
57
68
|
const collAsset = collAccountAssets[0].symbol;
|
|
58
|
-
return marketAssets.filter(d => d.canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: symbol === collAsset }));
|
|
69
|
+
return marketAssets.filter(d => d.canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: symbol === collAsset && canBeCollateralInEmode(symbol) }));
|
|
59
70
|
}
|
|
60
|
-
return marketAssets.filter(d => d.canBeSupplied).map(({ symbol, isIsolated }) => ({ symbol, canBeCollateral: !isIsolated }));
|
|
71
|
+
return marketAssets.filter(d => d.canBeSupplied).map(({ symbol, isIsolated }) => ({ symbol, canBeCollateral: !isIsolated && canBeCollateralInEmode(symbol) }));
|
|
61
72
|
};
|
|
62
73
|
exports.aaveAnyGetSuppliableAssets = aaveAnyGetSuppliableAssets;
|
|
63
74
|
const aaveAnyGetSuppliableAsCollAssets = (_a) => {
|
|
@@ -69,12 +80,15 @@ const aaveAnyGetEmodeMutableProps = ({ eModeCategory, eModeCategoriesData, asset
|
|
|
69
80
|
const asset = (0, utils_1.getNativeAssetFromWrapped)(_asset);
|
|
70
81
|
const assetData = assetsData[asset];
|
|
71
82
|
const eModeCategoryData = (eModeCategoriesData === null || eModeCategoriesData === void 0 ? void 0 : eModeCategoriesData[eModeCategory]) || {
|
|
72
|
-
collateralAssets: [], ltvZeroAssets: [], collateralFactor: '0', liquidationRatio: '0',
|
|
83
|
+
collateralAssets: [], ltvZeroAssets: [], collateralFactor: '0', liquidationRatio: '0', isolated: false,
|
|
73
84
|
};
|
|
74
85
|
if (eModeCategory === 0
|
|
75
86
|
|| !eModeCategoryData.collateralAssets.includes(asset)
|
|
76
87
|
|| new decimal_js_1.default(eModeCategoryData.collateralFactor || 0).eq(0)) {
|
|
77
88
|
const { liquidationRatio, collateralFactor } = assetData;
|
|
89
|
+
if (eModeCategory !== 0 && eModeCategoryData.isolated && !eModeCategoryData.collateralAssets.includes(asset)) {
|
|
90
|
+
return ({ liquidationRatio, collateralFactor: '0' });
|
|
91
|
+
}
|
|
78
92
|
return ({ liquidationRatio, collateralFactor });
|
|
79
93
|
}
|
|
80
94
|
if (eModeCategoryData.ltvZeroAssets.includes(asset))
|
|
@@ -110,7 +124,10 @@ const aaveAnyGetUserReserveLtvAndLltv = ({ eModeCategory, eModeCategoriesData, a
|
|
|
110
124
|
|| !eModeCategoryData
|
|
111
125
|
|| !eModeCategoryData.collateralAssets.includes(asset)
|
|
112
126
|
|| new decimal_js_1.default(eModeCategoryData.collateralFactor || 0).eq(0)) {
|
|
113
|
-
|
|
127
|
+
const ltv = eModeCategory !== 0 && (eModeCategoryData === null || eModeCategoryData === void 0 ? void 0 : eModeCategoryData.isolated) && !eModeCategoryData.collateralAssets.includes(asset)
|
|
128
|
+
? '0'
|
|
129
|
+
: assetData.collateralFactor;
|
|
130
|
+
return { ltv, lltv: assetData.liquidationRatio };
|
|
114
131
|
}
|
|
115
132
|
const ltv = eModeCategoryData.ltvZeroAssets.includes(asset) ? '0' : eModeCategoryData.collateralFactor;
|
|
116
133
|
return { ltv, lltv: eModeCategoryData.liquidationRatio };
|
|
@@ -140,6 +157,9 @@ const aaveAnyGetAggregatedPositionData = (_a) => {
|
|
|
140
157
|
return new decimal_js_1.default(suppliedUsd).mul(effectiveLtv);
|
|
141
158
|
});
|
|
142
159
|
payload.safetyRatioWithLtvZeroFallback = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitWithLtvZeroFallbackUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
160
|
+
// Normalised safety ratio (100 = liquidation on every protocol): the automation ratio above, falling back
|
|
161
|
+
// to the regular ratio when the fallback carries its '0' placeholder.
|
|
162
|
+
payload.safetyRatio = +payload.safetyRatioWithLtvZeroFallback ? payload.safetyRatioWithLtvZeroFallback : payload.ratio;
|
|
143
163
|
payload.liqRatio = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
|
|
144
164
|
payload.liqPercent = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
145
165
|
const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
|
|
@@ -219,6 +219,7 @@ const aaveV4GetAggregatedPositionData = ({ usedAssets, assetsData, network, useU
|
|
|
219
219
|
payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
220
220
|
payload.minRatio = '100';
|
|
221
221
|
payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
222
|
+
payload.safetyRatio = payload.ratio;
|
|
222
223
|
payload.liqRatio = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
|
|
223
224
|
payload.liqPercent = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
224
225
|
const { leveragedType, leveragedAsset } = (0, exports.isLeveragedPosAaveV4)(usedAssets);
|
|
@@ -102,6 +102,7 @@ const getCompoundV2AggregatedData = (_a) => {
|
|
|
102
102
|
payload.collRatio = payload.borrowedUsd && payload.borrowedUsd !== '0'
|
|
103
103
|
? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString()
|
|
104
104
|
: '0';
|
|
105
|
+
payload.safetyRatio = payload.ratio;
|
|
105
106
|
// Calculate borrow limits per asset
|
|
106
107
|
Object.values(usedAssets).forEach((item) => {
|
|
107
108
|
if (item.isBorrowed) {
|
|
@@ -144,6 +145,7 @@ const getCompoundV3AggregatedData = (_a) => {
|
|
|
144
145
|
payload.incentiveUsd = incentiveUsd;
|
|
145
146
|
payload.totalInterestUsd = totalInterestUsd;
|
|
146
147
|
payload.minRatio = '100';
|
|
148
|
+
payload.safetyRatio = payload.ratio;
|
|
147
149
|
payload.liqRatio = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
|
|
148
150
|
payload.liqPercent = new decimal_js_1.default(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
149
151
|
payload.minDebt = assetsData[selectedMarket.baseAsset].minDebt;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { CrvUSDAggregatedPositionData, CrvUSDMarketData, CrvUSDUsedAssets } from '../../types';
|
|
2
2
|
import { NetworkNumber } from '../../types/common';
|
|
3
|
-
export declare const getCrvUsdAggregatedData: ({ loanExists, usedAssets, network, selectedMarket, numOfBands, ...rest }: {
|
|
3
|
+
export declare const getCrvUsdAggregatedData: ({ loanExists, usedAssets, network, selectedMarket, numOfBands, borrowRate, collStakingApy, ...rest }: {
|
|
4
4
|
loanExists: boolean;
|
|
5
5
|
usedAssets: CrvUSDUsedAssets;
|
|
6
6
|
network: NetworkNumber;
|
|
7
7
|
selectedMarket: CrvUSDMarketData;
|
|
8
8
|
numOfBands: number | string;
|
|
9
|
+
borrowRate?: string;
|
|
10
|
+
collStakingApy?: string;
|
|
9
11
|
}) => CrvUSDAggregatedPositionData;
|
|
@@ -18,9 +18,10 @@ exports.getCrvUsdAggregatedData = void 0;
|
|
|
18
18
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
19
19
|
const moneymarket_1 = require("../../moneymarket");
|
|
20
20
|
const utils_1 = require("../../services/utils");
|
|
21
|
+
const staking_1 = require("../../staking");
|
|
21
22
|
const getCrvUsdAggregatedData = (_a) => {
|
|
22
|
-
var _b;
|
|
23
|
-
var { loanExists, usedAssets, network, selectedMarket, numOfBands } = _a, rest = __rest(_a, ["loanExists", "usedAssets", "network", "selectedMarket", "numOfBands"]);
|
|
23
|
+
var _b, _c;
|
|
24
|
+
var { loanExists, usedAssets, network, selectedMarket, numOfBands, borrowRate = '0', collStakingApy = '0' } = _a, rest = __rest(_a, ["loanExists", "usedAssets", "network", "selectedMarket", "numOfBands", "borrowRate", "collStakingApy"]);
|
|
24
25
|
const payload = {};
|
|
25
26
|
payload.supplied = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied }) => isSupplied, ({ supplied }) => supplied); // this is wrong if we are in soft-liquidations
|
|
26
27
|
payload.borrowed = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowed }) => borrowed);
|
|
@@ -34,6 +35,7 @@ const getCrvUsdAggregatedData = (_a) => {
|
|
|
34
35
|
: '0';
|
|
35
36
|
// this is all approximation
|
|
36
37
|
payload.minAllowedRatio = (0, utils_1.mapRange)(numOfBands, 4, 50, 115, 140); // collateral ratio
|
|
38
|
+
payload.safetyRatio = loanExists ? (0, moneymarket_1.getSafetyRatioFromCollateralRatio)(payload.ratio, payload.minAllowedRatio) : '0';
|
|
37
39
|
payload.collFactor = new decimal_js_1.default(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
|
|
38
40
|
// only take in consideration collAsset
|
|
39
41
|
payload.borrowLimitUsd = ((_b = usedAssets === null || usedAssets === void 0 ? void 0 : usedAssets[selectedMarket.collAsset]) === null || _b === void 0 ? void 0 : _b.isSupplied)
|
|
@@ -47,6 +49,17 @@ const getCrvUsdAggregatedData = (_a) => {
|
|
|
47
49
|
payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, usedAssets[selectedMarket.collAsset].price, payload.borrowedUsd, payload.borrowLimitUsd);
|
|
48
50
|
}
|
|
49
51
|
payload.exposure = (0, moneymarket_1.getExposure)(payload.borrowedUsd, payload.suppliedUsd);
|
|
52
|
+
// crvUSD debt accrues the market borrow rate. Collateral (including crvUSD held during soft liquidation) earns
|
|
53
|
+
// nothing from the protocol itself; only the native yield of staked collateral is counted, as an incentive.
|
|
54
|
+
const { netApy, totalInterestUsd, incentiveUsd } = (0, staking_1.calculateNetApyFromRates)({
|
|
55
|
+
suppliedUsd: payload.suppliedUsd,
|
|
56
|
+
borrowedUsd: payload.borrowedUsd,
|
|
57
|
+
borrowRate,
|
|
58
|
+
incentives: [{ apy: collStakingApy, amountUsd: ((_c = usedAssets === null || usedAssets === void 0 ? void 0 : usedAssets[selectedMarket.collAsset]) === null || _c === void 0 ? void 0 : _c.suppliedUsd) || '0' }],
|
|
59
|
+
});
|
|
60
|
+
payload.netApy = netApy;
|
|
61
|
+
payload.totalInterestUsd = totalInterestUsd;
|
|
62
|
+
payload.incentiveUsd = incentiveUsd;
|
|
50
63
|
return payload;
|
|
51
64
|
};
|
|
52
65
|
exports.getCrvUsdAggregatedData = getCrvUsdAggregatedData;
|
|
@@ -85,6 +85,7 @@ const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, }, supplyS
|
|
|
85
85
|
payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
86
86
|
payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
87
87
|
payload.minRatio = marketData.minRatio;
|
|
88
|
+
payload.safetyRatio = payload.ratio;
|
|
88
89
|
const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
|
|
89
90
|
payload.leveragedType = leveragedType;
|
|
90
91
|
payload.liquidationPrice = '';
|
|
@@ -48,6 +48,7 @@ const getLiquityV2AggregatedPositionData = ({ usedAssets, assetsData, minCollRat
|
|
|
48
48
|
payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
|
|
49
49
|
payload.ratio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
50
50
|
payload.collRatio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new decimal_js_1.default(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
51
|
+
payload.safetyRatio = payload.ratio;
|
|
51
52
|
const { netApy, incentiveUsd, totalInterestUsd } = (0, exports.calculateNetApyLiquityV2)(usedAssets, assetsData, interestRate);
|
|
52
53
|
payload.netApy = netApy;
|
|
53
54
|
payload.incentiveUsd = incentiveUsd;
|
|
@@ -42,6 +42,7 @@ const getLlamaLendAggregatedData = (_a) => {
|
|
|
42
42
|
: '0';
|
|
43
43
|
// this is all approximation
|
|
44
44
|
payload.minAllowedRatio = (0, utils_1.mapRange)(numOfBands, 4, 50, 115, 140); // collateral ratio
|
|
45
|
+
payload.safetyRatio = loanExists ? (0, moneymarket_1.getSafetyRatioFromCollateralRatio)(payload.ratio, payload.minAllowedRatio) : '0';
|
|
45
46
|
payload.collFactor = new decimal_js_1.default(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
|
|
46
47
|
// only take in consideration collAsset
|
|
47
48
|
payload.borrowLimitUsd = ((_b = usedAssets === null || usedAssets === void 0 ? void 0 : usedAssets[collAsset]) === null || _b === void 0 ? void 0 : _b.isSupplied)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const parseCollateralInfo: (ilk: string, _par: string, _mat: string, _art: string, _rate: string, _spot: string, _line: string, _duty: string, _futureRate: string, _chop: string) => {
|
|
1
|
+
export declare const parseCollateralInfo: (ilk: string, _par: string, _mat: string, _art: string, _rate: string, _spot: string, _line: string, _dust: string, _duty: string, _futureRate: string, _chop: string) => {
|
|
2
2
|
ilkLabel: string;
|
|
3
3
|
currentRate: string;
|
|
4
4
|
futureRate: string;
|
|
@@ -7,14 +7,14 @@ exports.parseCollateralInfo = void 0;
|
|
|
7
7
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
8
8
|
const constants_1 = require("../../constants");
|
|
9
9
|
const utils_1 = require("../../services/utils");
|
|
10
|
-
const parseCollateralInfo = (ilk, _par, _mat, _art, _rate, _spot, _line, _duty, _futureRate, _chop) => {
|
|
10
|
+
const parseCollateralInfo = (ilk, _par, _mat, _art, _rate, _spot, _line, _dust, _duty, _futureRate, _chop) => {
|
|
11
11
|
const par = new decimal_js_1.default(_par).div(1e27).toString();
|
|
12
12
|
const mat = new decimal_js_1.default(_mat).div(1e27).toString();
|
|
13
13
|
const art = new decimal_js_1.default(_art).toString();
|
|
14
14
|
const rate = new decimal_js_1.default(_rate).toString();
|
|
15
15
|
const spot = new decimal_js_1.default(_spot).div(1e27).toString();
|
|
16
16
|
const line = new decimal_js_1.default(_line).div(1e45).toString();
|
|
17
|
-
const dust = new decimal_js_1.default(
|
|
17
|
+
const dust = new decimal_js_1.default(_dust).div(1e45).toString(); // Vat.ilks.dust, rad (1e45) -> DAI
|
|
18
18
|
const duty = new decimal_js_1.default(_duty).toString();
|
|
19
19
|
const futureRate = new decimal_js_1.default(_futureRate).toString();
|
|
20
20
|
const chop = new decimal_js_1.default(_chop).div(1e18).toString();
|
|
@@ -46,6 +46,8 @@ const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, marketInf
|
|
|
46
46
|
payload.ltv = new decimal_js_1.default(((_c = usedAssets[loanToken]) === null || _c === void 0 ? void 0 : _c.borrowed) || 0).div(oracle).div(((_d = usedAssets[collateralToken]) === null || _d === void 0 ? void 0 : _d.supplied) || 1).toString(); // default to 1 because can't div 0
|
|
47
47
|
payload.ratio = new decimal_js_1.default(((_e = usedAssets[collateralToken]) === null || _e === void 0 ? void 0 : _e.supplied) || 0).mul(oracle).div(((_f = usedAssets[loanToken]) === null || _f === void 0 ? void 0 : _f.borrowed) || 1).mul(100)
|
|
48
48
|
.toString();
|
|
49
|
+
// Borrow limit over debt, so 100 sits on the market's LLTV however low it is (`ratio` is the raw collateral ratio).
|
|
50
|
+
payload.safetyRatio = +payload.borrowedUsd > 0 ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
49
51
|
const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
|
|
50
52
|
payload.leveragedType = leveragedType;
|
|
51
53
|
payload.liquidationPrice = '';
|
|
@@ -77,6 +77,8 @@ const getMorphoMidnightAggregatedPositionData = ({ usedAssets, assetsData, marke
|
|
|
77
77
|
payload.ltv = new decimal_js_1.default(payload.suppliedCollateralUsd).eq(0) ? '0' : new decimal_js_1.default(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
|
|
78
78
|
payload.ratio = new decimal_js_1.default(payload.borrowedUsd).eq(0) ? '0' : new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString();
|
|
79
79
|
payload.healthRatio = new decimal_js_1.default(payload.borrowedUsd).eq(0) ? 'Infinity' : new decimal_js_1.default(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
|
|
80
|
+
// Borrow limit over debt, so 100 sits on the market's LLTV however low it is (`ratio` is the raw collateral ratio).
|
|
81
|
+
payload.safetyRatio = +payload.borrowedUsd > 0 ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
80
82
|
const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
|
|
81
83
|
payload.leveragedType = leveragedType;
|
|
82
84
|
payload.liquidationPrice = '';
|
|
@@ -81,6 +81,7 @@ const sparkGetAggregatedPositionData = (_a) => {
|
|
|
81
81
|
payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
|
|
82
82
|
payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
83
83
|
payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
84
|
+
payload.safetyRatio = payload.ratio;
|
|
84
85
|
const { netApy, incentiveUsd, totalInterestUsd } = (0, staking_1.calculateNetApy)({ usedAssets, assetsData });
|
|
85
86
|
payload.netApy = netApy;
|
|
86
87
|
payload.incentiveUsd = incentiveUsd;
|
package/cjs/liquity/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Client } from 'viem';
|
|
2
2
|
import { Blockish, EthAddress, EthereumProvider, NetworkNumber, PositionBalances } from '../types/common';
|
|
3
|
-
import { LiquityTroveInfo } from '../types';
|
|
3
|
+
import { LiquityStakingData, LiquityTroveInfo } from '../types';
|
|
4
4
|
export declare const LIQUITY_NORMAL_MODE_RATIO = 110;
|
|
5
5
|
export declare const LIQUITY_RECOVERY_MODE_RATIO = 150;
|
|
6
6
|
export declare const _getLiquityAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
|
|
@@ -8,14 +8,4 @@ export declare const getLiquityAccountBalances: (provider: EthereumProvider, net
|
|
|
8
8
|
export declare const getDebtInFront: (provider: EthereumProvider, address: EthAddress) => Promise<string>;
|
|
9
9
|
export declare const _getLiquityTroveInfo: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<LiquityTroveInfo>;
|
|
10
10
|
export declare const getLiquityTroveInfo: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress) => Promise<LiquityTroveInfo>;
|
|
11
|
-
export declare const getLiquityStakingData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<
|
|
12
|
-
totalLUSDDeposited: string;
|
|
13
|
-
totalLQTYStaked: string;
|
|
14
|
-
stakedLQTY: string;
|
|
15
|
-
stakedLUSDBalance: string;
|
|
16
|
-
rewardETH: string;
|
|
17
|
-
rewardLUSD: string;
|
|
18
|
-
stabilityRewardETH: string;
|
|
19
|
-
stabilityRewardLQTY: string;
|
|
20
|
-
showStakingBalances: boolean;
|
|
21
|
-
}>;
|
|
11
|
+
export declare const getLiquityStakingData: (provider: Client, network: NetworkNumber, address: EthAddress) => Promise<LiquityStakingData>;
|
package/cjs/liquity/index.js
CHANGED
|
@@ -22,6 +22,7 @@ const constants_1 = require("../constants");
|
|
|
22
22
|
const viem_1 = require("../services/viem");
|
|
23
23
|
const utils_1 = require("../services/utils");
|
|
24
24
|
const moneymarket_1 = require("../moneymarket");
|
|
25
|
+
const staking_1 = require("../staking");
|
|
25
26
|
exports.LIQUITY_NORMAL_MODE_RATIO = 110; // MCR
|
|
26
27
|
exports.LIQUITY_RECOVERY_MODE_RATIO = 150; // CCR
|
|
27
28
|
const _getLiquityAccountBalances = (provider, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -77,6 +78,14 @@ const _getLiquityTroveInfo = (provider, network, address) => __awaiter(void 0, v
|
|
|
77
78
|
_getDebtInFront(viewContract, address),
|
|
78
79
|
]);
|
|
79
80
|
const recoveryMode = troveInfo[6];
|
|
81
|
+
const minCollateralRatio = recoveryMode ? exports.LIQUITY_RECOVERY_MODE_RATIO : exports.LIQUITY_NORMAL_MODE_RATIO;
|
|
82
|
+
const collateral = (0, tokens_1.assetAmountInEth)(troveInfo[1].toString());
|
|
83
|
+
const debtInAsset = (0, tokens_1.assetAmountInEth)(troveInfo[2].toString());
|
|
84
|
+
const collateralUsd = new decimal_js_1.default(collateral).mul((0, tokens_1.assetAmountInEth)(assetPrice.toString())).toString();
|
|
85
|
+
const collRatio = +debtInAsset ? new decimal_js_1.default(collateralUsd).div(debtInAsset).mul(100).toString() : '0';
|
|
86
|
+
// LUSD debt is interest free (only a one-off borrowing fee on issuance) and ETH collateral earns no yield,
|
|
87
|
+
// so a trove's net APY is always 0. It is exposed for parity with the other protocols.
|
|
88
|
+
const { netApy, totalInterestUsd, incentiveUsd } = (0, staking_1.calculateNetApyFromRates)({ suppliedUsd: collateralUsd, borrowedUsd: debtInAsset });
|
|
80
89
|
const payload = {
|
|
81
90
|
troveStatus: types_1.LIQUITY_TROVE_STATUS_ENUM[+(troveInfo[0].toString())],
|
|
82
91
|
collateral: (0, tokens_1.assetAmountInEth)(troveInfo[1].toString()),
|
|
@@ -89,10 +98,14 @@ const _getLiquityTroveInfo = (provider, network, address) => __awaiter(void 0, v
|
|
|
89
98
|
totalETH: totalETH.toString(),
|
|
90
99
|
totalLUSD: totalLUSD.toString(),
|
|
91
100
|
debtInFront: debtInFront.toString(),
|
|
92
|
-
minCollateralRatio
|
|
101
|
+
minCollateralRatio,
|
|
102
|
+
safetyRatio: (0, moneymarket_1.getSafetyRatioFromCollateralRatio)(collRatio, minCollateralRatio),
|
|
93
103
|
priceForRecovery: new decimal_js_1.default(recoveryMode ? exports.LIQUITY_RECOVERY_MODE_RATIO : exports.LIQUITY_NORMAL_MODE_RATIO).mul(totalLUSD).div(totalETH).div(100)
|
|
94
104
|
.toString(),
|
|
95
|
-
exposure: (0, moneymarket_1.getExposure)(
|
|
105
|
+
exposure: (0, moneymarket_1.getExposure)(debtInAsset, collateralUsd),
|
|
106
|
+
netApy,
|
|
107
|
+
totalInterestUsd,
|
|
108
|
+
incentiveUsd,
|
|
96
109
|
};
|
|
97
110
|
return payload;
|
|
98
111
|
});
|
package/cjs/liquityV2/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Client, PublicClient } from 'viem';
|
|
2
2
|
import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
|
|
3
|
-
import { LiquityV2AssetsData, LiquityV2MarketData, LiquityV2MarketInfo, LiquityV2TroveData, LiquityV2Versions } from '../types';
|
|
3
|
+
import { LiquityV2AssetsData, LiquityV2MarketData, LiquityV2MarketInfo, LiquityV2SBoldYBoldData, LiquityV2StakingData, LiquityV2TroveData, LiquityV2Versions } from '../types';
|
|
4
4
|
export type SPYieldGainParameters = {
|
|
5
5
|
P: string;
|
|
6
6
|
aggWeightedDebtSum: string;
|
|
@@ -11,6 +11,11 @@ export type SPYieldGainParameters = {
|
|
|
11
11
|
};
|
|
12
12
|
export declare const _getLiquityV2MarketData: (provider: Client, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo) => Promise<LiquityV2MarketData>;
|
|
13
13
|
export declare const getLiquityV2MarketData: (provider: EthereumProvider, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo) => Promise<LiquityV2MarketData>;
|
|
14
|
+
/**
|
|
15
|
+
* The trove ids of several accounts in one market: the market's NFT transfers are read once for all of them, rather
|
|
16
|
+
* than once per account as _getLiquityV2UserTroveIds does.
|
|
17
|
+
*/
|
|
18
|
+
export declare const _getLiquityV2UsersTroveIds: (provider: PublicClient, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, troveNFTAddress: EthAddress, limitBlocksForEventFetching: boolean, accounts: EthAddress[]) => Promise<Record<EthAddress, string[]>>;
|
|
14
19
|
export declare const _getLiquityV2UserTroveIds: (provider: PublicClient, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, troveNFTAddress: EthAddress, limitBlocksForEventFetching: boolean, account: EthAddress) => Promise<{
|
|
15
20
|
troves: {
|
|
16
21
|
troveId: string;
|
|
@@ -44,25 +49,5 @@ export type sBoldYieldParameters = {
|
|
|
44
49
|
wsETH: string;
|
|
45
50
|
rETH: string;
|
|
46
51
|
};
|
|
47
|
-
export declare const getLiquityV2Staking: (provider: Client, network: NetworkNumber, market: LiquityV2Versions, user: EthAddress) => Promise<
|
|
48
|
-
|
|
49
|
-
stakedBOLDBalance: string;
|
|
50
|
-
stabilityRewardColl: string;
|
|
51
|
-
stabilityRewardYield: string;
|
|
52
|
-
showStakingBalances: boolean;
|
|
53
|
-
debtTokenBalance: string;
|
|
54
|
-
stabilityPoolApy: string;
|
|
55
|
-
}>;
|
|
56
|
-
export declare const getLiquitySAndYBold: (provider: Client, network: NetworkNumber, markets: any, user: EthAddress) => Promise<{
|
|
57
|
-
spApy: string;
|
|
58
|
-
yBoldApy: string;
|
|
59
|
-
totalBoldDepositedSBold: string;
|
|
60
|
-
boldRateSBold: string;
|
|
61
|
-
maxWithdrawSBold: string;
|
|
62
|
-
totalBoldDepositedYBold: string;
|
|
63
|
-
boldRateYBold: string;
|
|
64
|
-
maxWithdrawYBold: string;
|
|
65
|
-
sBoldBalance: string;
|
|
66
|
-
yBoldBalance: string;
|
|
67
|
-
stYBoldBalance: string;
|
|
68
|
-
}>;
|
|
52
|
+
export declare const getLiquityV2Staking: (provider: Client, network: NetworkNumber, market: LiquityV2Versions, user: EthAddress) => Promise<LiquityV2StakingData>;
|
|
53
|
+
export declare const getLiquitySAndYBold: (provider: Client, network: NetworkNumber, markets: any, user: EthAddress) => Promise<LiquityV2SBoldYBoldData>;
|
package/cjs/liquityV2/index.js
CHANGED
|
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.getLiquitySAndYBold = exports.getLiquityV2Staking = exports.getLiquityV2ClaimableCollateral = exports.getLiquityV2TroveData = exports._getLiquityV2TroveData = exports.getDebtInFrontForInterestRateLiquityV2 = exports.getDebtInFrontForInterestRateIncludingNewDebtLiquityV2 = exports.calculateDebtInFrontLiquityV2 = exports.getLiquityV2UserTroveIds = exports._getLiquityV2UserTroveIds = exports.getLiquityV2MarketData = exports._getLiquityV2MarketData = void 0;
|
|
15
|
+
exports.getLiquitySAndYBold = exports.getLiquityV2Staking = exports.getLiquityV2ClaimableCollateral = exports.getLiquityV2TroveData = exports._getLiquityV2TroveData = exports.getDebtInFrontForInterestRateLiquityV2 = exports.getDebtInFrontForInterestRateIncludingNewDebtLiquityV2 = exports.calculateDebtInFrontLiquityV2 = exports.getLiquityV2UserTroveIds = exports._getLiquityV2UserTroveIds = exports._getLiquityV2UsersTroveIds = exports.getLiquityV2MarketData = exports._getLiquityV2MarketData = void 0;
|
|
16
16
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
17
17
|
const tokens_1 = require("@defisaver/tokens");
|
|
18
18
|
const contracts_1 = require("../contracts");
|
|
@@ -129,36 +129,54 @@ const nftContractCreationBlockMapping = {
|
|
|
129
129
|
[types_1.LiquityV2Versions.LiquityV2WstEthLegacy]: 21686238,
|
|
130
130
|
[types_1.LiquityV2Versions.LiquityV2REthLegacy]: 21686257,
|
|
131
131
|
};
|
|
132
|
-
|
|
132
|
+
/** Every Transfer of a market's trove NFT since the contract was created (or, on a fork, in the last 1000 blocks). */
|
|
133
|
+
const getTroveTransfers = (provider, network, troveNFTAddress, limitBlocksForEventFetching, market) => __awaiter(void 0, void 0, void 0, function* () {
|
|
133
134
|
const nftContract = (0, contracts_1.createViemContractFromConfigFunc)('LiquityV2TroveNFT', troveNFTAddress)(provider, network);
|
|
134
135
|
const nftContractCreationBlock = nftContractCreationBlockMapping[market];
|
|
135
136
|
const currentBlock = +(yield provider.getBlockNumber()).toString();
|
|
136
137
|
const _events = yield nftContract.getEvents.Transfer({}, { fromBlock: limitBlocksForEventFetching ? BigInt(currentBlock - 1000) : BigInt(nftContractCreationBlock) });
|
|
137
|
-
|
|
138
|
+
return _events.map((event) => ({
|
|
138
139
|
from: event.args.from, to: event.args.to, tokenId: event.args.tokenId.toString(), blockNumber: +(event.blockNumber.toString()),
|
|
139
140
|
}));
|
|
140
|
-
const userTransferredTroves = events.filter((event) => (0, utils_1.compareAddresses)(event.to, account));
|
|
141
|
-
// check if the last know transfer address is the user
|
|
142
|
-
userTransferredTroves.forEach((event, index) => {
|
|
143
|
-
const otherTransfers = events.filter((e) => event.blockNumber < e.blockNumber && e.tokenId === event.tokenId);
|
|
144
|
-
// @ts-ignore
|
|
145
|
-
userTransferredTroves[index].invalid = !!otherTransfers.length;
|
|
146
|
-
});
|
|
147
|
-
// @ts-ignore
|
|
148
|
-
return userTransferredTroves.filter((event) => !event.invalid).map((event) => ({ troveId: event.tokenId }));
|
|
149
141
|
});
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
142
|
+
/** The troves transferred to an account that it still holds: no later transfer of the same trove. */
|
|
143
|
+
const getAccountTransferredTroves = (events, account) => events
|
|
144
|
+
.filter((event) => (0, utils_1.compareAddresses)(event.to, account))
|
|
145
|
+
.filter((event) => !events.some((e) => event.blockNumber < e.blockNumber && e.tokenId === event.tokenId))
|
|
146
|
+
.map((event) => ({ troveId: event.tokenId }));
|
|
147
|
+
const getTransferredTroves = (provider, network, troveNFTAddress, limitBlocksForEventFetching, market, account) => __awaiter(void 0, void 0, void 0, function* () {
|
|
148
|
+
return (getAccountTransferredTroves(yield getTroveTransfers(provider, network, troveNFTAddress, limitBlocksForEventFetching, market), account));
|
|
149
|
+
});
|
|
150
|
+
/** The troves an account opened and still owns, then the ones transferred to it, each once. */
|
|
151
|
+
const mergeTroveIds = (userTroves, userTransferredTroves) => {
|
|
155
152
|
const troves = [...userTroves.map(({ troveId }) => ({ troveId })), ...userTransferredTroves];
|
|
156
153
|
const filteredTroves = troves.filter((value, index, self) => index === self.findIndex((t) => (t.troveId === value.troveId)));
|
|
157
154
|
const troveIds = filteredTroves.map((trove) => trove.troveId);
|
|
158
155
|
const troveIdsSet = new Set(troveIds);
|
|
159
156
|
const troveIdsArray = Array.from(troveIdsSet);
|
|
160
|
-
|
|
161
|
-
|
|
157
|
+
return troveIdsArray.map((troveId) => troves.find((trove) => trove.troveId === troveId));
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* The trove ids of several accounts in one market: the market's NFT transfers are read once for all of them, rather
|
|
161
|
+
* than once per account as _getLiquityV2UserTroveIds does.
|
|
162
|
+
*/
|
|
163
|
+
const _getLiquityV2UsersTroveIds = (provider, network, selectedMarket, troveNFTAddress, limitBlocksForEventFetching, accounts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
164
|
+
const [userTroves, events] = yield Promise.all([
|
|
165
|
+
Promise.all(accounts.map((account) => getUserTroves(provider, network, selectedMarket.isLegacy, account, selectedMarket.marketAddress))),
|
|
166
|
+
getTroveTransfers(provider, network, troveNFTAddress, limitBlocksForEventFetching, selectedMarket.value),
|
|
167
|
+
]);
|
|
168
|
+
return Object.fromEntries(accounts.map((account, i) => [
|
|
169
|
+
account,
|
|
170
|
+
mergeTroveIds(userTroves[i].troves, getAccountTransferredTroves(events, account)).map(({ troveId }) => troveId),
|
|
171
|
+
]));
|
|
172
|
+
});
|
|
173
|
+
exports._getLiquityV2UsersTroveIds = _getLiquityV2UsersTroveIds;
|
|
174
|
+
const _getLiquityV2UserTroveIds = (provider, network, selectedMarket, troveNFTAddress, limitBlocksForEventFetching, account) => __awaiter(void 0, void 0, void 0, function* () {
|
|
175
|
+
const [{ troves: userTroves, nextFreeTroveIndex }, userTransferredTroves] = yield Promise.all([
|
|
176
|
+
getUserTroves(provider, network, selectedMarket.isLegacy, account, selectedMarket.marketAddress),
|
|
177
|
+
getTransferredTroves(provider, network, troveNFTAddress, limitBlocksForEventFetching, selectedMarket.value, account),
|
|
178
|
+
]);
|
|
179
|
+
return { troves: mergeTroveIds(userTroves, userTransferredTroves), nextFreeTroveIndex };
|
|
162
180
|
});
|
|
163
181
|
exports._getLiquityV2UserTroveIds = _getLiquityV2UserTroveIds;
|
|
164
182
|
const getLiquityV2UserTroveIds = (provider, network, selectedMarket, troveNFTAddress, limitBlocksForEventFetching, account) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getLiquityV2UserTroveIds)((0, viem_1.getViemProvider)(provider, network), network, selectedMarket, troveNFTAddress, limitBlocksForEventFetching, account); });
|