@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/esm/aaveV4/lend.d.ts
CHANGED
|
@@ -1,53 +1,12 @@
|
|
|
1
1
|
import { EthAddress, EthereumProvider, NetworkNumber } from '../types/common';
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
}
|
|
2
|
+
import { AaveV4TokenizationSpokeDataParsed } from '../types/aaveV4';
|
|
3
|
+
export type { AaveV4TokenizationSpokeData, AaveV4TokenizationSpokeDataParsed } from '../types/aaveV4';
|
|
21
4
|
export declare const AAVE_V4_TOKENIZED_SPOKES: Record<string, EthAddress>;
|
|
22
5
|
export declare const AAVE_V4_TOKENIZED_SPOKE_ADDRESSES: Partial<Record<NetworkNumber, EthAddress[]>>;
|
|
23
6
|
export type AaveV4TokenizedHubKey = 'CORE' | 'PLUS' | 'PRIME' | 'PAXOS';
|
|
24
7
|
export declare const aaveV4GetTokenizedHubKey: (hubNameOrKey?: string | null) => AaveV4TokenizedHubKey | null;
|
|
25
8
|
export declare const aaveV4GetTokenizedVaultKey: (symbol: string, hubNameOrKey?: string | null) => string | null;
|
|
26
9
|
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
|
-
spokeActive: boolean;
|
|
34
|
-
spokeHalted: boolean;
|
|
35
|
-
/** Deposit cap in asset units (wei string) */
|
|
36
|
-
spokeDepositCap: string;
|
|
37
|
-
/** Total assets currently in spoke in asset units (wei string) */
|
|
38
|
-
spokeTotalAssets: string;
|
|
39
|
-
/** Available hub liquidity in asset units (wei string) */
|
|
40
|
-
hubLiquidity: string;
|
|
41
|
-
/** The conversion rate from assets to shares expressed in asset units. */
|
|
42
|
-
convertToShares: string;
|
|
43
|
-
userSuppliedAssetsEth: string;
|
|
44
|
-
userSuppliedSharesEth: string;
|
|
45
|
-
userSuppliedAssets: string;
|
|
46
|
-
userSuppliedShares: string;
|
|
47
|
-
underlyingAsset: EthAddress;
|
|
48
|
-
spoke: EthAddress;
|
|
49
|
-
decimals: number;
|
|
50
|
-
}
|
|
51
10
|
/**
|
|
52
11
|
* Fetches tokenization vault data for the given user via getTokenizationSpokesData.
|
|
53
12
|
* Returns parsed data including userSuppliedAssets in human-readable form for each vault.
|
package/esm/claiming/aaveV3.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Client } from 'viem';
|
|
2
2
|
import { EthAddress, NetworkNumber } from '../types';
|
|
3
|
-
import { ClaimableToken, MerklRewardsClaimableToken } from '../types/claiming';
|
|
4
|
-
export declare function getUnclaimedRewardsForAllMarkets(provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress): Promise<
|
|
3
|
+
import { AaveRewardsClaimableToken, ClaimableToken, MerklRewardsClaimableToken } from '../types/claiming';
|
|
4
|
+
export declare function getUnclaimedRewardsForAllMarkets(provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress): Promise<AaveRewardsClaimableToken[]>;
|
|
5
5
|
export declare function getMerklUnclaimedRewards(account: EthAddress, network: NetworkNumber): Promise<MerklRewardsClaimableToken[]>;
|
|
6
6
|
export declare function getMeritUnclaimedRewards(account: EthAddress, network: NetworkNumber): Promise<ClaimableToken[]>;
|
package/esm/claiming/aaveV3.js
CHANGED
|
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
|
-
import { ClaimType } from '../types/claiming';
|
|
11
|
+
import { ClaimType, } from '../types/claiming';
|
|
12
12
|
import { AaveIncentiveDataProviderV3ContractViem, AaveRewardsControllerViem, } from '../contracts';
|
|
13
13
|
import { compareAddresses, getEthAmountForDecimals, LONGER_TIMEOUT } from '../services/utils';
|
|
14
14
|
import { getAaveUnderlyingSymbol } from '../helpers/aaveHelpers';
|
package/esm/claiming/ethena.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { EthAddress } from '../types/common';
|
|
2
|
+
import { EthenaAirdropClaimableToken } from '../types/claiming';
|
|
2
3
|
export declare const fetchEthenaAirdropReward: (address: EthAddress) => Promise<any>;
|
|
3
|
-
export declare const fetchEthenaAirdropRewards: (walletAddresses: EthAddress[]) => Promise<Record<string,
|
|
4
|
+
export declare const fetchEthenaAirdropRewards: (walletAddresses: EthAddress[]) => Promise<Record<string, EthenaAirdropClaimableToken[]>>;
|
package/esm/claiming/king.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Client } from 'viem';
|
|
2
2
|
import { EthAddress, NetworkNumber } from '../types/common';
|
|
3
|
+
import { KingRewardsClaimableToken } from '../types/claiming';
|
|
3
4
|
export declare const fetchKingRewards: (walletAddress: EthAddress) => Promise<any>;
|
|
4
|
-
export declare const getKingRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string,
|
|
5
|
+
export declare const getKingRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, KingRewardsClaimableToken[]>>;
|
package/esm/claiming/spark.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Client } from 'viem';
|
|
2
2
|
import { EthAddress, NetworkNumber } from '../types/common';
|
|
3
|
-
import { SparkRewardsClaimableToken } from '../types/claiming';
|
|
3
|
+
import { SparkAirdropClaimableToken, SparkRewardsClaimableToken } from '../types/claiming';
|
|
4
4
|
export declare const fetchSpkAirdropRewards: (walletAddress: EthAddress) => Promise<any>;
|
|
5
|
-
export declare const fetchSparkAirdropRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string,
|
|
5
|
+
export declare const fetchSparkAirdropRewards: (provider: Client, network: NetworkNumber, walletAddresses: EthAddress[]) => Promise<Record<string, SparkAirdropClaimableToken[]>>;
|
|
6
6
|
export declare const fetchSparkRewards: (provider: Client, network: NetworkNumber, walletAddress: EthAddress, marketAddress: EthAddress) => Promise<SparkRewardsClaimableToken[]>;
|
package/esm/claiming/spark.js
CHANGED
|
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import { assetAmountInEth, getAssetInfoByAddress } from '@defisaver/tokens';
|
|
11
11
|
import Dec from 'decimal.js';
|
|
12
12
|
import { createViemContractFromConfigFunc, SparkIncentiveDataProviderContractViem, SparkRewardsControllerViem, } from '../contracts';
|
|
13
|
-
import { ClaimType, SparkAirdropType } from '../types/claiming';
|
|
13
|
+
import { ClaimType, SparkAirdropType, } from '../types/claiming';
|
|
14
14
|
import { compareAddresses, getEthAmountForDecimals } from '../services/utils';
|
|
15
15
|
const IGNITION_REWARDS = '0xCBA0C0a2a0B6Bb11233ec4EA85C5bFfea33e724d';
|
|
16
16
|
const PFL3_REWARDS = '0x7ac96180C4d6b2A328D3a19ac059D0E7Fc3C6d41';
|
package/esm/curveUsd/index.d.ts
CHANGED
|
@@ -5,6 +5,9 @@ export declare const _getCurveUsdGlobalData: (provider: Client, network: Network
|
|
|
5
5
|
export declare const getCurveUsdGlobalData: (provider: EthereumProvider, network: NetworkNumber, selectedMarket: CrvUSDMarketData) => Promise<CrvUSDGlobalMarketData>;
|
|
6
6
|
export declare const _getCrvUsdAccountBalances: (provider: Client, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress) => Promise<PositionBalances>;
|
|
7
7
|
export declare const getCrvUsdAccountBalances: (provider: EthereumProvider, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress) => Promise<PositionBalances>;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* @param borrowRate market borrow APY in % (`CrvUSDGlobalMarketData.borrowRate`); when omitted it is read from the view contract
|
|
10
|
+
*/
|
|
11
|
+
export declare const _getCurveUsdUserData: (provider: Client, network: NetworkNumber, address: EthAddress, selectedMarket: CrvUSDMarketData, activeBand: string, borrowRate?: string) => Promise<CrvUSDUserData>;
|
|
12
|
+
export declare const getCurveUsdUserData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, selectedMarket: CrvUSDMarketData, activeBand: string, borrowRate?: string) => Promise<CrvUSDUserData>;
|
|
10
13
|
export declare const getCurveUsdFullPositionData: (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, selectedMarket: CrvUSDMarketData) => Promise<CrvUSDUserData>;
|
package/esm/curveUsd/index.js
CHANGED
|
@@ -16,6 +16,12 @@ import { getCrvUsdAggregatedData } from '../helpers/curveUsdHelpers';
|
|
|
16
16
|
import { CrvUsdMarkets } from '../markets';
|
|
17
17
|
import { wethToEth } from '../services/utils';
|
|
18
18
|
import { getViemProvider, setViemBlockNumber } from '../services/viem';
|
|
19
|
+
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
20
|
+
/** Converts a per-second AMM rate (wei, 18 decimals) into a yearly compounded borrow APY in %. */
|
|
21
|
+
const ammRateToBorrowApy = (rateWei) => {
|
|
22
|
+
const exponent = new Dec(assetAmountInEth(rateWei)).mul(365).mul(86400);
|
|
23
|
+
return new Dec(new Dec(2.718281828459).pow(exponent).minus(1)).mul(100).toString();
|
|
24
|
+
};
|
|
19
25
|
const getAndFormatBands = (provider, network, selectedMarket, _minBand, _maxBand) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
26
|
const contract = CrvUSDViewContractViem(provider, network);
|
|
21
27
|
const minBand = parseInt(_minBand, 10);
|
|
@@ -65,14 +71,8 @@ export const _getCurveUsdGlobalData = (provider, network, selectedMarket) => __a
|
|
|
65
71
|
// all prices are in 18 decimals
|
|
66
72
|
const totalDebt = assetAmountInEth(data.totalDebt.toString(), debtAsset);
|
|
67
73
|
const ammPrice = assetAmountInEth(data.ammPrice.toString(), debtAsset);
|
|
68
|
-
const
|
|
69
|
-
const
|
|
70
|
-
const exponentRate = new Dec(rate).mul(365).mul(86400);
|
|
71
|
-
const exponentFutureRate = new Dec(futureRate).mul(365).mul(86400);
|
|
72
|
-
const borrowRate = new Dec(new Dec(2.718281828459).pow(exponentRate).minus(1)).mul(100)
|
|
73
|
-
.toString();
|
|
74
|
-
const futureBorrowRate = new Dec(new Dec(2.718281828459).pow(exponentFutureRate).minus(1)).mul(100)
|
|
75
|
-
.toString();
|
|
74
|
+
const borrowRate = ammRateToBorrowApy(data.ammRate.toString());
|
|
75
|
+
const futureBorrowRate = ammRateToBorrowApy(data.monetaryPolicyRate.toString());
|
|
76
76
|
const bandsData = yield getAndFormatBands(provider, network, selectedMarket, data.minBand.toString(), data.maxBand.toString());
|
|
77
77
|
const leftToBorrow = new Dec(debtCeiling.toString()).minus(totalDebt).toString();
|
|
78
78
|
const loanDiscount = assetAmountInEth(loanDiscountWei.toString(), debtAsset);
|
|
@@ -121,11 +121,20 @@ export const _getCrvUsdAccountBalances = (provider, network, block, addressMappi
|
|
|
121
121
|
return balances;
|
|
122
122
|
});
|
|
123
123
|
export const getCrvUsdAccountBalances = (provider, network, block, addressMapping, address, controllerAddress) => __awaiter(void 0, void 0, void 0, function* () { return _getCrvUsdAccountBalances(getViemProvider(provider, network), network, block, addressMapping, address, controllerAddress); });
|
|
124
|
-
|
|
124
|
+
/**
|
|
125
|
+
* @param borrowRate market borrow APY in % (`CrvUSDGlobalMarketData.borrowRate`); when omitted it is read from the view contract
|
|
126
|
+
*/
|
|
127
|
+
export const _getCurveUsdUserData = (provider, network, address, selectedMarket, activeBand, borrowRate) => __awaiter(void 0, void 0, void 0, function* () {
|
|
125
128
|
const contract = CrvUSDViewContractViem(provider, network);
|
|
126
|
-
const data = yield contract.read.userData([selectedMarket.controllerAddress, address]);
|
|
127
129
|
const collAsset = selectedMarket.collAsset;
|
|
128
130
|
const debtAsset = selectedMarket.baseAsset;
|
|
131
|
+
const [data, collStakingApy, marketBorrowRate] = yield Promise.all([
|
|
132
|
+
contract.read.userData([selectedMarket.controllerAddress, address]),
|
|
133
|
+
STAKING_ASSETS.includes(collAsset) ? getStakingApy(collAsset) : Promise.resolve('0'),
|
|
134
|
+
borrowRate !== undefined
|
|
135
|
+
? Promise.resolve(borrowRate)
|
|
136
|
+
: contract.read.globalData([selectedMarket.controllerAddress]).then((globalData) => ammRateToBorrowApy(globalData.ammRate.toString())),
|
|
137
|
+
]);
|
|
129
138
|
const health = assetAmountInEth(data.health.toString());
|
|
130
139
|
const healthPercent = new Dec(health).mul(100).toString();
|
|
131
140
|
const collPrice = assetAmountInEth(data.collateralPrice.toString(), debtAsset);
|
|
@@ -156,7 +165,7 @@ export const _getCurveUsdUserData = (provider, network, address, selectedMarket,
|
|
|
156
165
|
isBorrowed: new Dec(debtBorrowed).gt('0'),
|
|
157
166
|
symbol: 'crvUSD',
|
|
158
167
|
price: '1',
|
|
159
|
-
interestRate:
|
|
168
|
+
interestRate: marketBorrowRate,
|
|
160
169
|
},
|
|
161
170
|
} : {};
|
|
162
171
|
const priceHigh = assetAmountInEth(data.priceHigh.toString());
|
|
@@ -168,13 +177,19 @@ export const _getCurveUsdUserData = (provider, network, address, selectedMarket,
|
|
|
168
177
|
healthPercent,
|
|
169
178
|
priceHigh,
|
|
170
179
|
priceLow, liquidationDiscount: assetAmountInEth(data.liquidationDiscount.toString()), numOfBands: data.N.toString(), usedAssets,
|
|
171
|
-
status }), getCrvUsdAggregatedData({
|
|
172
|
-
loanExists: data.loanExists,
|
|
180
|
+
status, borrowRate: marketBorrowRate }), getCrvUsdAggregatedData({
|
|
181
|
+
loanExists: data.loanExists,
|
|
182
|
+
usedAssets,
|
|
183
|
+
network: NetworkNumber.Eth,
|
|
184
|
+
selectedMarket,
|
|
185
|
+
numOfBands: data.N.toString(),
|
|
186
|
+
borrowRate: marketBorrowRate,
|
|
187
|
+
collStakingApy,
|
|
173
188
|
})), { userBands });
|
|
174
189
|
});
|
|
175
|
-
export const getCurveUsdUserData = (provider, network, address, selectedMarket, activeBand) => __awaiter(void 0, void 0, void 0, function* () { return _getCurveUsdUserData(getViemProvider(provider, network), network, address, selectedMarket, activeBand); });
|
|
190
|
+
export const getCurveUsdUserData = (provider, network, address, selectedMarket, activeBand, borrowRate) => __awaiter(void 0, void 0, void 0, function* () { return _getCurveUsdUserData(getViemProvider(provider, network), network, address, selectedMarket, activeBand, borrowRate); });
|
|
176
191
|
export const getCurveUsdFullPositionData = (provider, network, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
|
|
177
192
|
const marketData = yield getCurveUsdGlobalData(provider, network, selectedMarket);
|
|
178
|
-
const positionData = yield getCurveUsdUserData(provider, network, address, selectedMarket, marketData.activeBand);
|
|
193
|
+
const positionData = yield getCurveUsdUserData(provider, network, address, selectedMarket, marketData.activeBand, marketData.borrowRate);
|
|
179
194
|
return positionData;
|
|
180
195
|
});
|
package/esm/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/esm/fluid/index.js
CHANGED
|
@@ -1381,3 +1381,36 @@ export const _getUserPositionsPortfolio = (provider, network, user) => __awaiter
|
|
|
1381
1381
|
userData: userData[i],
|
|
1382
1382
|
})).filter(md => md.marketData !== undefined);
|
|
1383
1383
|
});
|
|
1384
|
+
export const _getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1385
|
+
const versions = getFluidVersionsDataForNetwork(network);
|
|
1386
|
+
if (versions.length === 0)
|
|
1387
|
+
return {};
|
|
1388
|
+
const view = FluidViewContractViem(provider, network);
|
|
1389
|
+
const vaultsData = yield Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress])));
|
|
1390
|
+
const tokens = Array.from(new Set(vaultsData.map((vaultData) => {
|
|
1391
|
+
const vaultTokens = [getAssetInfoByAddress(vaultData.supplyToken0, network).symbol, getAssetInfoByAddress(vaultData.borrowToken0, network).symbol];
|
|
1392
|
+
if (vaultData.supplyToken1 && !compareAddresses(ZERO_ADDRESS, vaultData.supplyToken1))
|
|
1393
|
+
vaultTokens.push(getAssetInfoByAddress(vaultData.supplyToken1, network).symbol);
|
|
1394
|
+
if (vaultData.borrowToken1 && !compareAddresses(ZERO_ADDRESS, vaultData.borrowToken1))
|
|
1395
|
+
vaultTokens.push(getAssetInfoByAddress(vaultData.borrowToken1, network).symbol);
|
|
1396
|
+
return vaultTokens;
|
|
1397
|
+
}).flat()));
|
|
1398
|
+
// ETH and WBTC needed for other tokens prices
|
|
1399
|
+
if (!tokens.includes('ETH'))
|
|
1400
|
+
tokens.push('ETH');
|
|
1401
|
+
if (!tokens.includes('WBTC'))
|
|
1402
|
+
tokens.push('WBTC');
|
|
1403
|
+
const [tokenPrices, merklCampaigns] = yield Promise.all([
|
|
1404
|
+
getTokensPricesForPortfolio(tokens, provider, network),
|
|
1405
|
+
getFluidMerklCampaigns(network),
|
|
1406
|
+
]);
|
|
1407
|
+
const parsedMarketsData = yield Promise.all(vaultsData.map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); })));
|
|
1408
|
+
const marketsData = {};
|
|
1409
|
+
parsedMarketsData.forEach((marketData, i) => {
|
|
1410
|
+
if (!marketData)
|
|
1411
|
+
return;
|
|
1412
|
+
marketsData[versions[i].value] = attachFluidMerklIncentives(marketData, merklCampaigns);
|
|
1413
|
+
});
|
|
1414
|
+
return marketsData;
|
|
1415
|
+
});
|
|
1416
|
+
export const getAllFluidMarketDataPortfolio = (provider, network) => __awaiter(void 0, void 0, void 0, function* () { return _getAllFluidMarketDataPortfolio(getViemProvider(provider, network, { batch: { multicall: true } }), network); });
|
|
@@ -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[];
|
|
@@ -33,6 +33,12 @@ export const isAaveV2 = ({ selectedMarket }) => selectedMarket.value === AaveVer
|
|
|
33
33
|
export const isAaveV3 = ({ selectedMarket }) => AAVE_V3_MARKETS.includes(selectedMarket.value);
|
|
34
34
|
export const aaveV3IsInIsolationMode = ({ usedAssets, assetsData }) => Object.values(usedAssets).some(({ symbol, collateral }) => collateral && assetsData[symbol].isIsolated);
|
|
35
35
|
export const aaveV3IsInSiloedMode = ({ usedAssets, assetsData }) => Object.values(usedAssets).some(({ symbol, debt }) => debt && assetsData[symbol].isSiloed);
|
|
36
|
+
export 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); };
|
|
37
|
+
export const aaveV3CanBeCollateralInEmode = ({ eModeCategory, eModeCategoriesData }, _asset) => {
|
|
38
|
+
if (!aaveV3IsEmodeIsolated({ eModeCategory, eModeCategoriesData }))
|
|
39
|
+
return true;
|
|
40
|
+
return eModeCategoriesData[eModeCategory].collateralAssets.includes(getNativeAssetFromWrapped(_asset));
|
|
41
|
+
};
|
|
36
42
|
export const aaveAnyGetCollSuppliedAssets = ({ usedAssets }) => Object.values(usedAssets)
|
|
37
43
|
.filter(({ isSupplied, collateral }) => isSupplied && collateral);
|
|
38
44
|
export const aaveAnyGetSuppliableAssets = (_a) => {
|
|
@@ -40,13 +46,16 @@ export const aaveAnyGetSuppliableAssets = (_a) => {
|
|
|
40
46
|
const data = Object.assign({ usedAssets, eModeCategory, assetsData, selectedMarket, network }, rest);
|
|
41
47
|
const collAccountAssets = aaveAnyGetCollSuppliedAssets(data);
|
|
42
48
|
const marketAssets = Object.values(assetsData);
|
|
43
|
-
if (
|
|
49
|
+
if (!isAaveV3(data))
|
|
44
50
|
return marketAssets.filter(({ canBeSupplied }) => canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: true }));
|
|
51
|
+
const canBeCollateralInEmode = (symbol) => aaveV3CanBeCollateralInEmode(data, symbol);
|
|
52
|
+
if (collAccountAssets.length === 0)
|
|
53
|
+
return marketAssets.filter(({ canBeSupplied }) => canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: canBeCollateralInEmode(symbol) }));
|
|
45
54
|
if (aaveV3IsInIsolationMode(data)) {
|
|
46
55
|
const collAsset = collAccountAssets[0].symbol;
|
|
47
|
-
return marketAssets.filter(d => d.canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: symbol === collAsset }));
|
|
56
|
+
return marketAssets.filter(d => d.canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: symbol === collAsset && canBeCollateralInEmode(symbol) }));
|
|
48
57
|
}
|
|
49
|
-
return marketAssets.filter(d => d.canBeSupplied).map(({ symbol, isIsolated }) => ({ symbol, canBeCollateral: !isIsolated }));
|
|
58
|
+
return marketAssets.filter(d => d.canBeSupplied).map(({ symbol, isIsolated }) => ({ symbol, canBeCollateral: !isIsolated && canBeCollateralInEmode(symbol) }));
|
|
50
59
|
};
|
|
51
60
|
export const aaveAnyGetSuppliableAsCollAssets = (_a) => {
|
|
52
61
|
var { usedAssets, eModeCategory, assetsData, selectedMarket, network } = _a, rest = __rest(_a, ["usedAssets", "eModeCategory", "assetsData", "selectedMarket", "network"]);
|
|
@@ -56,12 +65,15 @@ export const aaveAnyGetEmodeMutableProps = ({ eModeCategory, eModeCategoriesData
|
|
|
56
65
|
const asset = getNativeAssetFromWrapped(_asset);
|
|
57
66
|
const assetData = assetsData[asset];
|
|
58
67
|
const eModeCategoryData = (eModeCategoriesData === null || eModeCategoriesData === void 0 ? void 0 : eModeCategoriesData[eModeCategory]) || {
|
|
59
|
-
collateralAssets: [], ltvZeroAssets: [], collateralFactor: '0', liquidationRatio: '0',
|
|
68
|
+
collateralAssets: [], ltvZeroAssets: [], collateralFactor: '0', liquidationRatio: '0', isolated: false,
|
|
60
69
|
};
|
|
61
70
|
if (eModeCategory === 0
|
|
62
71
|
|| !eModeCategoryData.collateralAssets.includes(asset)
|
|
63
72
|
|| new Dec(eModeCategoryData.collateralFactor || 0).eq(0)) {
|
|
64
73
|
const { liquidationRatio, collateralFactor } = assetData;
|
|
74
|
+
if (eModeCategory !== 0 && eModeCategoryData.isolated && !eModeCategoryData.collateralAssets.includes(asset)) {
|
|
75
|
+
return ({ liquidationRatio, collateralFactor: '0' });
|
|
76
|
+
}
|
|
65
77
|
return ({ liquidationRatio, collateralFactor });
|
|
66
78
|
}
|
|
67
79
|
if (eModeCategoryData.ltvZeroAssets.includes(asset))
|
|
@@ -96,7 +108,10 @@ export const aaveAnyGetUserReserveLtvAndLltv = ({ eModeCategory, eModeCategories
|
|
|
96
108
|
|| !eModeCategoryData
|
|
97
109
|
|| !eModeCategoryData.collateralAssets.includes(asset)
|
|
98
110
|
|| new Dec(eModeCategoryData.collateralFactor || 0).eq(0)) {
|
|
99
|
-
|
|
111
|
+
const ltv = eModeCategory !== 0 && (eModeCategoryData === null || eModeCategoryData === void 0 ? void 0 : eModeCategoryData.isolated) && !eModeCategoryData.collateralAssets.includes(asset)
|
|
112
|
+
? '0'
|
|
113
|
+
: assetData.collateralFactor;
|
|
114
|
+
return { ltv, lltv: assetData.liquidationRatio };
|
|
100
115
|
}
|
|
101
116
|
const ltv = eModeCategoryData.ltvZeroAssets.includes(asset) ? '0' : eModeCategoryData.collateralFactor;
|
|
102
117
|
return { ltv, lltv: eModeCategoryData.liquidationRatio };
|
|
@@ -125,6 +140,9 @@ export const aaveAnyGetAggregatedPositionData = (_a) => {
|
|
|
125
140
|
return new Dec(suppliedUsd).mul(effectiveLtv);
|
|
126
141
|
});
|
|
127
142
|
payload.safetyRatioWithLtvZeroFallback = +payload.suppliedUsd ? new Dec(payload.borrowLimitWithLtvZeroFallbackUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
143
|
+
// Normalised safety ratio (100 = liquidation on every protocol): the automation ratio above, falling back
|
|
144
|
+
// to the regular ratio when the fallback carries its '0' placeholder.
|
|
145
|
+
payload.safetyRatio = +payload.safetyRatioWithLtvZeroFallback ? payload.safetyRatioWithLtvZeroFallback : payload.ratio;
|
|
128
146
|
payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
|
|
129
147
|
payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
130
148
|
const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
|
|
@@ -208,6 +208,7 @@ export const aaveV4GetAggregatedPositionData = ({ usedAssets, assetsData, networ
|
|
|
208
208
|
payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
209
209
|
payload.minRatio = '100';
|
|
210
210
|
payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
211
|
+
payload.safetyRatio = payload.ratio;
|
|
211
212
|
payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
|
|
212
213
|
payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
213
214
|
const { leveragedType, leveragedAsset } = isLeveragedPosAaveV4(usedAssets);
|
|
@@ -93,6 +93,7 @@ export const getCompoundV2AggregatedData = (_a) => {
|
|
|
93
93
|
payload.collRatio = payload.borrowedUsd && payload.borrowedUsd !== '0'
|
|
94
94
|
? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString()
|
|
95
95
|
: '0';
|
|
96
|
+
payload.safetyRatio = payload.ratio;
|
|
96
97
|
// Calculate borrow limits per asset
|
|
97
98
|
Object.values(usedAssets).forEach((item) => {
|
|
98
99
|
if (item.isBorrowed) {
|
|
@@ -134,6 +135,7 @@ export const getCompoundV3AggregatedData = (_a) => {
|
|
|
134
135
|
payload.incentiveUsd = incentiveUsd;
|
|
135
136
|
payload.totalInterestUsd = totalInterestUsd;
|
|
136
137
|
payload.minRatio = '100';
|
|
138
|
+
payload.safetyRatio = payload.ratio;
|
|
137
139
|
payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
|
|
138
140
|
payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
139
141
|
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;
|
|
@@ -10,11 +10,12 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import Dec from 'decimal.js';
|
|
13
|
-
import { calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
|
|
13
|
+
import { calcLeverageLiqPrice, getAssetsTotal, getExposure, getSafetyRatioFromCollateralRatio, isLeveragedPos, } from '../../moneymarket';
|
|
14
14
|
import { mapRange } from '../../services/utils';
|
|
15
|
+
import { calculateNetApyFromRates } from '../../staking';
|
|
15
16
|
export const getCrvUsdAggregatedData = (_a) => {
|
|
16
|
-
var _b;
|
|
17
|
-
var { loanExists, usedAssets, network, selectedMarket, numOfBands } = _a, rest = __rest(_a, ["loanExists", "usedAssets", "network", "selectedMarket", "numOfBands"]);
|
|
17
|
+
var _b, _c;
|
|
18
|
+
var { loanExists, usedAssets, network, selectedMarket, numOfBands, borrowRate = '0', collStakingApy = '0' } = _a, rest = __rest(_a, ["loanExists", "usedAssets", "network", "selectedMarket", "numOfBands", "borrowRate", "collStakingApy"]);
|
|
18
19
|
const payload = {};
|
|
19
20
|
payload.supplied = getAssetsTotal(usedAssets, ({ isSupplied }) => isSupplied, ({ supplied }) => supplied); // this is wrong if we are in soft-liquidations
|
|
20
21
|
payload.borrowed = getAssetsTotal(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowed }) => borrowed);
|
|
@@ -28,6 +29,7 @@ export const getCrvUsdAggregatedData = (_a) => {
|
|
|
28
29
|
: '0';
|
|
29
30
|
// this is all approximation
|
|
30
31
|
payload.minAllowedRatio = mapRange(numOfBands, 4, 50, 115, 140); // collateral ratio
|
|
32
|
+
payload.safetyRatio = loanExists ? getSafetyRatioFromCollateralRatio(payload.ratio, payload.minAllowedRatio) : '0';
|
|
31
33
|
payload.collFactor = new Dec(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
|
|
32
34
|
// only take in consideration collAsset
|
|
33
35
|
payload.borrowLimitUsd = ((_b = usedAssets === null || usedAssets === void 0 ? void 0 : usedAssets[selectedMarket.collAsset]) === null || _b === void 0 ? void 0 : _b.isSupplied)
|
|
@@ -41,5 +43,16 @@ export const getCrvUsdAggregatedData = (_a) => {
|
|
|
41
43
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, usedAssets[selectedMarket.collAsset].price, payload.borrowedUsd, payload.borrowLimitUsd);
|
|
42
44
|
}
|
|
43
45
|
payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
|
|
46
|
+
// crvUSD debt accrues the market borrow rate. Collateral (including crvUSD held during soft liquidation) earns
|
|
47
|
+
// nothing from the protocol itself; only the native yield of staked collateral is counted, as an incentive.
|
|
48
|
+
const { netApy, totalInterestUsd, incentiveUsd } = calculateNetApyFromRates({
|
|
49
|
+
suppliedUsd: payload.suppliedUsd,
|
|
50
|
+
borrowedUsd: payload.borrowedUsd,
|
|
51
|
+
borrowRate,
|
|
52
|
+
incentives: [{ apy: collStakingApy, amountUsd: ((_c = usedAssets === null || usedAssets === void 0 ? void 0 : usedAssets[selectedMarket.collAsset]) === null || _c === void 0 ? void 0 : _c.suppliedUsd) || '0' }],
|
|
53
|
+
});
|
|
54
|
+
payload.netApy = netApy;
|
|
55
|
+
payload.totalInterestUsd = totalInterestUsd;
|
|
56
|
+
payload.incentiveUsd = incentiveUsd;
|
|
44
57
|
return payload;
|
|
45
58
|
};
|
|
@@ -78,6 +78,7 @@ export const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, },
|
|
|
78
78
|
payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
79
79
|
payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
80
80
|
payload.minRatio = marketData.minRatio;
|
|
81
|
+
payload.safetyRatio = payload.ratio;
|
|
81
82
|
const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
|
|
82
83
|
payload.leveragedType = leveragedType;
|
|
83
84
|
payload.liquidationPrice = '';
|
|
@@ -41,6 +41,7 @@ export const getLiquityV2AggregatedPositionData = ({ usedAssets, assetsData, min
|
|
|
41
41
|
payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
|
|
42
42
|
payload.ratio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
43
43
|
payload.collRatio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new Dec(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
44
|
+
payload.safetyRatio = payload.ratio;
|
|
44
45
|
const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApyLiquityV2(usedAssets, assetsData, interestRate);
|
|
45
46
|
payload.netApy = netApy;
|
|
46
47
|
payload.incentiveUsd = incentiveUsd;
|
|
@@ -10,7 +10,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
12
|
import Dec from 'decimal.js';
|
|
13
|
-
import { calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos, } from '../../moneymarket';
|
|
13
|
+
import { calcLeverageLiqPrice, getAssetsTotal, getExposure, getSafetyRatioFromCollateralRatio, isLeveragedPos, } from '../../moneymarket';
|
|
14
14
|
import { mapRange } from '../../services/utils';
|
|
15
15
|
import { calculateNetApy } from '../../staking';
|
|
16
16
|
export const getLlamaLendAggregatedData = (_a) => {
|
|
@@ -36,6 +36,7 @@ export const getLlamaLendAggregatedData = (_a) => {
|
|
|
36
36
|
: '0';
|
|
37
37
|
// this is all approximation
|
|
38
38
|
payload.minAllowedRatio = mapRange(numOfBands, 4, 50, 115, 140); // collateral ratio
|
|
39
|
+
payload.safetyRatio = loanExists ? getSafetyRatioFromCollateralRatio(payload.ratio, payload.minAllowedRatio) : '0';
|
|
39
40
|
payload.collFactor = new Dec(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
|
|
40
41
|
// only take in consideration collAsset
|
|
41
42
|
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;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import Dec from 'decimal.js';
|
|
2
2
|
import { SECONDS_PER_YEAR } from '../../constants';
|
|
3
3
|
import { bytesToString } from '../../services/utils';
|
|
4
|
-
export const parseCollateralInfo = (ilk, _par, _mat, _art, _rate, _spot, _line, _duty, _futureRate, _chop) => {
|
|
4
|
+
export const parseCollateralInfo = (ilk, _par, _mat, _art, _rate, _spot, _line, _dust, _duty, _futureRate, _chop) => {
|
|
5
5
|
const par = new Dec(_par).div(1e27).toString();
|
|
6
6
|
const mat = new Dec(_mat).div(1e27).toString();
|
|
7
7
|
const art = new Dec(_art).toString();
|
|
8
8
|
const rate = new Dec(_rate).toString();
|
|
9
9
|
const spot = new Dec(_spot).div(1e27).toString();
|
|
10
10
|
const line = new Dec(_line).div(1e45).toString();
|
|
11
|
-
const dust = new Dec(
|
|
11
|
+
const dust = new Dec(_dust).div(1e45).toString(); // Vat.ilks.dust, rad (1e45) -> DAI
|
|
12
12
|
const duty = new Dec(_duty).toString();
|
|
13
13
|
const futureRate = new Dec(_futureRate).toString();
|
|
14
14
|
const chop = new Dec(_chop).div(1e18).toString();
|
|
@@ -40,6 +40,8 @@ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, ma
|
|
|
40
40
|
payload.ltv = new Dec(((_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
|
|
41
41
|
payload.ratio = new Dec(((_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)
|
|
42
42
|
.toString();
|
|
43
|
+
// Borrow limit over debt, so 100 sits on the market's LLTV however low it is (`ratio` is the raw collateral ratio).
|
|
44
|
+
payload.safetyRatio = +payload.borrowedUsd > 0 ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
43
45
|
const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
|
|
44
46
|
payload.leveragedType = leveragedType;
|
|
45
47
|
payload.liquidationPrice = '';
|
|
@@ -58,6 +58,8 @@ export const getMorphoMidnightAggregatedPositionData = ({ usedAssets, assetsData
|
|
|
58
58
|
payload.ltv = new Dec(payload.suppliedCollateralUsd).eq(0) ? '0' : new Dec(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
|
|
59
59
|
payload.ratio = new Dec(payload.borrowedUsd).eq(0) ? '0' : new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString();
|
|
60
60
|
payload.healthRatio = new Dec(payload.borrowedUsd).eq(0) ? 'Infinity' : new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
|
|
61
|
+
// Borrow limit over debt, so 100 sits on the market's LLTV however low it is (`ratio` is the raw collateral ratio).
|
|
62
|
+
payload.safetyRatio = +payload.borrowedUsd > 0 ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
61
63
|
const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
|
|
62
64
|
payload.leveragedType = leveragedType;
|
|
63
65
|
payload.liquidationPrice = '';
|
|
@@ -70,6 +70,7 @@ export const sparkGetAggregatedPositionData = (_a) => {
|
|
|
70
70
|
payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
|
|
71
71
|
payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
72
72
|
payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
73
|
+
payload.safetyRatio = payload.ratio;
|
|
73
74
|
const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({ usedAssets, assetsData });
|
|
74
75
|
payload.netApy = netApy;
|
|
75
76
|
payload.incentiveUsd = incentiveUsd;
|