@defisaver/positions-sdk 2.1.160-morpho-stakehouse-dev → 2.1.160-shifter-v2-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/curveUsd/index.d.ts +5 -2
- package/cjs/curveUsd/index.js +30 -15
- package/cjs/fluid/index.d.ts +5 -0
- package/cjs/fluid/index.js +36 -1
- package/cjs/helpers/aaveHelpers/index.js +3 -0
- 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 +16 -2
- package/cjs/helpers/fluidHelpers/index.js +1 -0
- package/cjs/helpers/liquityV2Helpers/index.js +1 -0
- package/cjs/helpers/llamaLendHelpers/index.js +2 -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.js +16 -2
- package/cjs/maker/index.d.ts +7 -2
- package/cjs/maker/index.js +45 -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/portfolio/index.d.ts +5 -1
- package/cjs/portfolio/index.js +274 -2
- package/cjs/savings/index.js +2 -5
- package/cjs/savings/morphoVaults/index.d.ts +1 -1
- package/cjs/savings/morphoVaults/index.js +18 -56
- package/cjs/savings/morphoVaults/options.d.ts +0 -2
- package/cjs/savings/morphoVaults/options.js +1 -61
- package/cjs/staking/staking.d.ts +20 -0
- package/cjs/staking/staking.js +19 -1
- package/cjs/types/aave.d.ts +2 -0
- package/cjs/types/aaveV4.d.ts +1 -0
- package/cjs/types/compound.d.ts +2 -0
- package/cjs/types/curveUsd.d.ts +6 -0
- package/cjs/types/fluid.d.ts +1 -0
- package/cjs/types/liquity.d.ts +4 -0
- package/cjs/types/liquityV2.d.ts +2 -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 +26 -10
- package/cjs/types/savings/morphoVaults.d.ts +2 -10
- package/cjs/types/savings/morphoVaults.js +1 -9
- package/cjs/types/spark.d.ts +2 -0
- package/esm/aaveV2/index.js +2 -0
- package/esm/curveUsd/index.d.ts +5 -2
- package/esm/curveUsd/index.js +30 -15
- package/esm/fluid/index.d.ts +5 -0
- package/esm/fluid/index.js +33 -0
- package/esm/helpers/aaveHelpers/index.js +3 -0
- 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 -2
- package/esm/helpers/fluidHelpers/index.js +1 -0
- package/esm/helpers/liquityV2Helpers/index.js +1 -0
- package/esm/helpers/llamaLendHelpers/index.js +2 -0
- 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.js +16 -2
- package/esm/maker/index.d.ts +7 -2
- package/esm/maker/index.js +44 -13
- 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/portfolio/index.d.ts +5 -1
- package/esm/portfolio/index.js +276 -5
- package/esm/savings/index.js +2 -5
- package/esm/savings/morphoVaults/index.d.ts +1 -1
- package/esm/savings/morphoVaults/index.js +19 -57
- package/esm/savings/morphoVaults/options.d.ts +0 -2
- package/esm/savings/morphoVaults/options.js +1 -61
- package/esm/staking/staking.d.ts +20 -0
- package/esm/staking/staking.js +17 -0
- package/esm/types/aave.d.ts +2 -0
- package/esm/types/aaveV4.d.ts +1 -0
- package/esm/types/compound.d.ts +2 -0
- package/esm/types/curveUsd.d.ts +6 -0
- package/esm/types/fluid.d.ts +1 -0
- package/esm/types/liquity.d.ts +4 -0
- package/esm/types/liquityV2.d.ts +2 -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 +26 -10
- package/esm/types/savings/morphoVaults.d.ts +2 -10
- package/esm/types/savings/morphoVaults.js +0 -8
- package/esm/types/spark.d.ts +2 -0
- package/package.json +1 -1
- package/src/aaveV2/index.ts +2 -0
- package/src/curveUsd/index.ts +33 -16
- package/src/fluid/index.ts +40 -0
- package/src/helpers/aaveHelpers/index.ts +3 -0
- package/src/helpers/aaveV4Helpers/index.ts +1 -0
- package/src/helpers/compoundHelpers/index.ts +2 -0
- package/src/helpers/curveUsdHelpers/index.ts +23 -2
- package/src/helpers/fluidHelpers/index.ts +1 -0
- package/src/helpers/liquityV2Helpers/index.ts +1 -0
- package/src/helpers/llamaLendHelpers/index.ts +2 -0
- 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 +17 -2
- package/src/maker/index.ts +77 -29
- package/src/markets/index.ts +2 -1
- package/src/markets/maker/index.ts +10 -0
- package/src/portfolio/index.ts +259 -4
- package/src/savings/index.ts +2 -5
- package/src/savings/morphoVaults/index.ts +21 -73
- package/src/savings/morphoVaults/options.ts +1 -67
- package/src/staking/staking.ts +28 -0
- package/src/types/aave.ts +3 -0
- package/src/types/aaveV4.ts +1 -0
- package/src/types/compound.ts +2 -0
- package/src/types/curveUsd.ts +7 -0
- package/src/types/fluid.ts +1 -0
- package/src/types/liquity.ts +6 -0
- package/src/types/liquityV2.ts +2 -0
- 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 +31 -12
- package/src/types/savings/morphoVaults.ts +1 -11
- package/src/types/spark.ts +2 -0
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { MorphoVaultType
|
|
1
|
+
import { MorphoVaultType } from '../../types';
|
|
2
2
|
export const MORPHO_VAULT_FLAGSHIP_ETH = {
|
|
3
3
|
type: MorphoVaultType.MorphoVaultFlagshipEth,
|
|
4
4
|
name: 'Flagship ETH',
|
|
5
5
|
address: '0x38989BBA00BDF8181F4082995b3DEAe96163aC5D',
|
|
6
6
|
asset: 'WETH',
|
|
7
|
-
network: NetworkNumber.Eth,
|
|
8
|
-
version: MorphoVaultVersion.V1,
|
|
9
7
|
deploymentBlock: 18927491,
|
|
10
8
|
isLegacy: true,
|
|
11
9
|
};
|
|
@@ -14,8 +12,6 @@ export const MORPHO_VAULT_GAUNTLET_USDC_CORE = {
|
|
|
14
12
|
name: 'Gauntlet USDC Core',
|
|
15
13
|
address: '0x8eB67A509616cd6A7c1B3c8C21D48FF57df3d458',
|
|
16
14
|
asset: 'USDC',
|
|
17
|
-
network: NetworkNumber.Eth,
|
|
18
|
-
version: MorphoVaultVersion.V1,
|
|
19
15
|
deploymentBlock: 19777569,
|
|
20
16
|
isLegacy: true,
|
|
21
17
|
};
|
|
@@ -24,8 +20,6 @@ export const MORPHO_VAULT_GAUNTLET_USDC_PRIME = {
|
|
|
24
20
|
name: 'Gauntlet USDC Prime',
|
|
25
21
|
address: '0xdd0f28e19C1780eb6396170735D45153D261490d',
|
|
26
22
|
asset: 'USDC',
|
|
27
|
-
network: NetworkNumber.Eth,
|
|
28
|
-
version: MorphoVaultVersion.V1,
|
|
29
23
|
deploymentBlock: 19777569,
|
|
30
24
|
isLegacy: true,
|
|
31
25
|
};
|
|
@@ -34,8 +28,6 @@ export const MORPHO_VAULT_RE7_WETH = {
|
|
|
34
28
|
name: 'RE7 WETH',
|
|
35
29
|
address: '0x78Fc2c2eD1A4cDb5402365934aE5648aDAd094d0',
|
|
36
30
|
asset: 'WETH',
|
|
37
|
-
network: NetworkNumber.Eth,
|
|
38
|
-
version: MorphoVaultVersion.V1,
|
|
39
31
|
deploymentBlock: 19121118,
|
|
40
32
|
isLegacy: true,
|
|
41
33
|
};
|
|
@@ -44,8 +36,6 @@ export const MORPHO_VAULT_GAUNTLET_WETH_CORE = {
|
|
|
44
36
|
name: 'Gauntlet WETH Core',
|
|
45
37
|
address: '0x4881Ef0BF6d2365D3dd6499ccd7532bcdBCE0658',
|
|
46
38
|
asset: 'WETH',
|
|
47
|
-
network: NetworkNumber.Eth,
|
|
48
|
-
version: MorphoVaultVersion.V1,
|
|
49
39
|
deploymentBlock: 19541126,
|
|
50
40
|
isLegacy: true,
|
|
51
41
|
};
|
|
@@ -54,8 +44,6 @@ export const MORPHO_VAULT_GAUNTLET_WETH_PRIME = {
|
|
|
54
44
|
name: 'Gauntlet WETH Prime',
|
|
55
45
|
address: '0x2371e134e3455e0593363cBF89d3b6cf53740618',
|
|
56
46
|
asset: 'WETH',
|
|
57
|
-
network: NetworkNumber.Eth,
|
|
58
|
-
version: MorphoVaultVersion.V1,
|
|
59
47
|
deploymentBlock: 19372149,
|
|
60
48
|
isLegacy: true,
|
|
61
49
|
};
|
|
@@ -64,8 +52,6 @@ export const MORPHO_VAULT_BOOSTED_USDC = {
|
|
|
64
52
|
name: 'Boosted USDC',
|
|
65
53
|
address: '0xd63070114470f685b75B74D60EEc7c1113d33a3D',
|
|
66
54
|
asset: 'USDC',
|
|
67
|
-
network: NetworkNumber.Eth,
|
|
68
|
-
version: MorphoVaultVersion.V1,
|
|
69
55
|
deploymentBlock: 20377233,
|
|
70
56
|
isLegacy: true,
|
|
71
57
|
};
|
|
@@ -74,8 +60,6 @@ export const MORPHO_VAULT_FLAGSHIP_USDT = {
|
|
|
74
60
|
name: 'Flagship USDT',
|
|
75
61
|
address: '0x2C25f6C25770fFEC5959D34B94Bf898865e5D6b1',
|
|
76
62
|
asset: 'USDT',
|
|
77
|
-
network: NetworkNumber.Eth,
|
|
78
|
-
version: MorphoVaultVersion.V1,
|
|
79
63
|
deploymentBlock: 19127039,
|
|
80
64
|
isLegacy: true,
|
|
81
65
|
};
|
|
@@ -84,8 +68,6 @@ export const MORPHO_VAULT_GAUNTLET_USDA_CORE = {
|
|
|
84
68
|
name: 'Gauntlet USDA Core',
|
|
85
69
|
address: '0x125D41A6e5dbf455cD9Df8F80BCC6fd172D52Cc6',
|
|
86
70
|
asset: 'USDA',
|
|
87
|
-
network: NetworkNumber.Eth,
|
|
88
|
-
version: MorphoVaultVersion.V1,
|
|
89
71
|
deploymentBlock: 19633608,
|
|
90
72
|
isLegacy: true,
|
|
91
73
|
};
|
|
@@ -94,8 +76,6 @@ export const MORPHO_VAULT_GAUNTLET_USDT_PRIME = {
|
|
|
94
76
|
name: 'Gauntlet USDT Prime',
|
|
95
77
|
address: '0x8CB3649114051cA5119141a34C200D65dc0Faa73',
|
|
96
78
|
asset: 'USDT',
|
|
97
|
-
network: NetworkNumber.Eth,
|
|
98
|
-
version: MorphoVaultVersion.V1,
|
|
99
79
|
deploymentBlock: 19486541,
|
|
100
80
|
isLegacy: true,
|
|
101
81
|
};
|
|
@@ -104,8 +84,6 @@ export const MORPHO_VAULT_GAUNTLET_RESOLV_USDC = {
|
|
|
104
84
|
name: 'Gauntlet Resolv USDC',
|
|
105
85
|
address: '0x132E6C9C33A62D7727cd359b1f51e5B566E485Eb',
|
|
106
86
|
asset: 'USDC',
|
|
107
|
-
network: NetworkNumber.Eth,
|
|
108
|
-
version: MorphoVaultVersion.V1,
|
|
109
87
|
deploymentBlock: 21487882,
|
|
110
88
|
isLegacy: true,
|
|
111
89
|
};
|
|
@@ -115,8 +93,6 @@ export const MORPHO_VAULT_STEAKHOUSE_USDT = {
|
|
|
115
93
|
name: 'Steakhouse USDT',
|
|
116
94
|
address: '0xbEef047a543E45807105E51A8BBEFCc5950fcfBa',
|
|
117
95
|
asset: 'USDT',
|
|
118
|
-
network: NetworkNumber.Eth,
|
|
119
|
-
version: MorphoVaultVersion.V1,
|
|
120
96
|
deploymentBlock: 19043398,
|
|
121
97
|
isLegacy: false,
|
|
122
98
|
};
|
|
@@ -125,8 +101,6 @@ export const MORPHO_VAULT_STEAKHOUSE_USDC = {
|
|
|
125
101
|
name: 'Steakhouse USDC',
|
|
126
102
|
address: '0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB',
|
|
127
103
|
asset: 'USDC',
|
|
128
|
-
network: NetworkNumber.Eth,
|
|
129
|
-
version: MorphoVaultVersion.V1,
|
|
130
104
|
deploymentBlock: 18928285,
|
|
131
105
|
isLegacy: false,
|
|
132
106
|
};
|
|
@@ -135,8 +109,6 @@ export const MORPHO_VAULT_STEAKHOUSE_ETH = {
|
|
|
135
109
|
name: 'Steakhouse WETH',
|
|
136
110
|
address: '0xBEEf050ecd6a16c4e7bfFbB52Ebba7846C4b8cD4',
|
|
137
111
|
asset: 'WETH',
|
|
138
|
-
network: NetworkNumber.Eth,
|
|
139
|
-
version: MorphoVaultVersion.V1,
|
|
140
112
|
deploymentBlock: 19380443,
|
|
141
113
|
isLegacy: false,
|
|
142
114
|
};
|
|
@@ -145,8 +117,6 @@ export const MORPHO_VAULT_STEAKHOUSE_PYUSD = {
|
|
|
145
117
|
name: 'Steakhouse PYUSD',
|
|
146
118
|
address: '0xbEEF02e5E13584ab96848af90261f0C8Ee04722a',
|
|
147
119
|
asset: 'PYUSD',
|
|
148
|
-
network: NetworkNumber.Eth,
|
|
149
|
-
version: MorphoVaultVersion.V1,
|
|
150
120
|
deploymentBlock: 19043398,
|
|
151
121
|
isLegacy: false,
|
|
152
122
|
};
|
|
@@ -156,8 +126,6 @@ export const MORPHO_VAULT_SMOKEHOUSE_USDT = {
|
|
|
156
126
|
name: 'Smokehouse USDT',
|
|
157
127
|
address: '0xA0804346780b4c2e3bE118ac957D1DB82F9d7484',
|
|
158
128
|
asset: 'USDT',
|
|
159
|
-
network: NetworkNumber.Eth,
|
|
160
|
-
version: MorphoVaultVersion.V1,
|
|
161
129
|
deploymentBlock: 21522238,
|
|
162
130
|
isLegacy: false,
|
|
163
131
|
};
|
|
@@ -166,8 +134,6 @@ export const MORPHO_VAULT_SMOKEHOUSE_USDC = {
|
|
|
166
134
|
name: 'Smokehouse USDC',
|
|
167
135
|
address: '0xBEeFFF209270748ddd194831b3fa287a5386f5bC',
|
|
168
136
|
asset: 'USDC',
|
|
169
|
-
network: NetworkNumber.Eth,
|
|
170
|
-
version: MorphoVaultVersion.V1,
|
|
171
137
|
deploymentBlock: 21337719,
|
|
172
138
|
isLegacy: false,
|
|
173
139
|
};
|
|
@@ -176,32 +142,9 @@ export const MORPHO_VAULT_SMOKEHOUSE_DAI = {
|
|
|
176
142
|
name: 'Smokehouse DAI',
|
|
177
143
|
address: '0xbeeFfF68CC520D68f82641EFF84330C631E2490E',
|
|
178
144
|
asset: 'DAI',
|
|
179
|
-
network: NetworkNumber.Eth,
|
|
180
|
-
version: MorphoVaultVersion.V1,
|
|
181
145
|
deploymentBlock: 21343808,
|
|
182
146
|
isLegacy: false,
|
|
183
147
|
};
|
|
184
|
-
// Vault V2
|
|
185
|
-
export const MORPHO_VAULT_GAUNTLET_USDG_PREMIUM = {
|
|
186
|
-
type: MorphoVaultType.MorphoVaultGauntletUSDGPremium,
|
|
187
|
-
name: 'Gauntlet USDG Premium',
|
|
188
|
-
address: '0x390c1bb01F3F627144a40617e287d4cE3D5aBCfa',
|
|
189
|
-
asset: 'USDG',
|
|
190
|
-
network: NetworkNumber.Arb,
|
|
191
|
-
version: MorphoVaultVersion.V2,
|
|
192
|
-
deploymentBlock: 510799903,
|
|
193
|
-
isLegacy: false,
|
|
194
|
-
};
|
|
195
|
-
export const MORPHO_VAULT_STEAKHOUSE_USDG_PRO = {
|
|
196
|
-
type: MorphoVaultType.MorphoVaultSteakhouseUSDGPro,
|
|
197
|
-
name: 'Steakhouse USDG Pro',
|
|
198
|
-
address: '0xbeeFf72B77e7584a450E887125F25E8D8819016a',
|
|
199
|
-
asset: 'USDG',
|
|
200
|
-
network: NetworkNumber.Arb,
|
|
201
|
-
version: MorphoVaultVersion.V2,
|
|
202
|
-
deploymentBlock: 512247107,
|
|
203
|
-
isLegacy: false,
|
|
204
|
-
};
|
|
205
148
|
export const MORPHO_VAULTS = {
|
|
206
149
|
[MorphoVaultType.MorphoVaultFlagshipEth]: MORPHO_VAULT_FLAGSHIP_ETH,
|
|
207
150
|
[MorphoVaultType.MorphoVaultGauntletUSDCCore]: MORPHO_VAULT_GAUNTLET_USDC_CORE,
|
|
@@ -223,8 +166,5 @@ export const MORPHO_VAULTS = {
|
|
|
223
166
|
[MorphoVaultType.MorphoVaultSmokehouseUSDT]: MORPHO_VAULT_SMOKEHOUSE_USDT,
|
|
224
167
|
[MorphoVaultType.MorphoVaultSmokehouseUSDC]: MORPHO_VAULT_SMOKEHOUSE_USDC,
|
|
225
168
|
[MorphoVaultType.MorphoVaultSmokehouseDAI]: MORPHO_VAULT_SMOKEHOUSE_DAI,
|
|
226
|
-
// Vault V2
|
|
227
|
-
[MorphoVaultType.MorphoVaultGauntletUSDGPremium]: MORPHO_VAULT_GAUNTLET_USDG_PREMIUM,
|
|
228
|
-
[MorphoVaultType.MorphoVaultSteakhouseUSDGPro]: MORPHO_VAULT_STEAKHOUSE_USDG_PRO,
|
|
229
169
|
};
|
|
230
170
|
export const getMorphoVault = (type) => MORPHO_VAULTS[type];
|
package/esm/staking/staking.d.ts
CHANGED
|
@@ -3,6 +3,26 @@ import { MMAssetsData, MMUsedAssets } from '../types/common';
|
|
|
3
3
|
export declare const STAKING_ASSETS: string[];
|
|
4
4
|
export declare const getStakingApy: ((asset: string, network?: number) => Promise<string>) & memoize.Memoized<(asset: string, network?: number) => Promise<string>>;
|
|
5
5
|
export declare const calculateInterestEarned: (principal: string, interest: string, type: string, apy?: boolean) => number;
|
|
6
|
+
/**
|
|
7
|
+
* Net APY for positions that have a single known borrow rate (and optionally a single supply rate)
|
|
8
|
+
* instead of per-asset `assetsData` to feed into `calculateNetApy` (Maker, crvUSD, Liquity v1).
|
|
9
|
+
* All rates are yearly percentages that are already compounded. `incentives` are extra yields
|
|
10
|
+
* (e.g. the native staking yield of the collateral) applied to their own USD base and summed into `incentiveUsd`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const calculateNetApyFromRates: ({ suppliedUsd, borrowedUsd, supplyRate, borrowRate, incentives, }: {
|
|
13
|
+
suppliedUsd: string;
|
|
14
|
+
borrowedUsd: string;
|
|
15
|
+
supplyRate?: string;
|
|
16
|
+
borrowRate?: string;
|
|
17
|
+
incentives?: {
|
|
18
|
+
apy: string;
|
|
19
|
+
amountUsd: string;
|
|
20
|
+
}[];
|
|
21
|
+
}) => {
|
|
22
|
+
netApy: string;
|
|
23
|
+
totalInterestUsd: string;
|
|
24
|
+
incentiveUsd: string;
|
|
25
|
+
};
|
|
6
26
|
export declare const calculateNetApy: ({ usedAssets, assetsData, optionalData, }: {
|
|
7
27
|
usedAssets: MMUsedAssets;
|
|
8
28
|
assetsData: MMAssetsData;
|
package/esm/staking/staking.js
CHANGED
|
@@ -182,6 +182,23 @@ export const calculateInterestEarned = (principal, interest, type, apy = false)
|
|
|
182
182
|
}
|
|
183
183
|
return (+principal * (Math.pow(((1 + (+interest / 100) / BLOCKS_IN_A_YEAR)), (BLOCKS_IN_A_YEAR * interval)))) - +principal; // eslint-disable-line
|
|
184
184
|
};
|
|
185
|
+
/**
|
|
186
|
+
* Net APY for positions that have a single known borrow rate (and optionally a single supply rate)
|
|
187
|
+
* instead of per-asset `assetsData` to feed into `calculateNetApy` (Maker, crvUSD, Liquity v1).
|
|
188
|
+
* All rates are yearly percentages that are already compounded. `incentives` are extra yields
|
|
189
|
+
* (e.g. the native staking yield of the collateral) applied to their own USD base and summed into `incentiveUsd`.
|
|
190
|
+
*/
|
|
191
|
+
export const calculateNetApyFromRates = ({ suppliedUsd, borrowedUsd, supplyRate = '0', borrowRate = '0', incentives = [], }) => {
|
|
192
|
+
const supplyInterest = new Dec(calculateInterestEarned(suppliedUsd, supplyRate, 'year', true));
|
|
193
|
+
const borrowInterest = new Dec(calculateInterestEarned(borrowedUsd, borrowRate, 'year', true));
|
|
194
|
+
const incentiveUsd = incentives
|
|
195
|
+
.reduce((acc, { apy, amountUsd }) => acc.add(calculateInterestEarned(amountUsd, apy, 'year', true)), new Dec(0))
|
|
196
|
+
.toString();
|
|
197
|
+
const totalInterestUsd = supplyInterest.sub(borrowInterest).add(incentiveUsd).toString();
|
|
198
|
+
const balance = new Dec(suppliedUsd).sub(borrowedUsd);
|
|
199
|
+
const netApy = balance.isZero() ? '0' : new Dec(totalInterestUsd).div(balance).times(100).toString();
|
|
200
|
+
return { netApy, totalInterestUsd, incentiveUsd };
|
|
201
|
+
};
|
|
185
202
|
export const calculateNetApy = ({ usedAssets, assetsData, optionalData, }) => {
|
|
186
203
|
const sumValues = Object.values(usedAssets).reduce((_acc, usedAsset) => {
|
|
187
204
|
const acc = Object.assign({}, _acc);
|
package/esm/types/aave.d.ts
CHANGED
|
@@ -126,6 +126,7 @@ export interface AavePositionData extends MMPositionData {
|
|
|
126
126
|
minRatio: string;
|
|
127
127
|
collRatio: string;
|
|
128
128
|
safetyRatioWithLtvZeroFallback?: string;
|
|
129
|
+
safetyRatio?: string;
|
|
129
130
|
suppliedUsd: string;
|
|
130
131
|
borrowedUsd: string;
|
|
131
132
|
borrowLimitUsd: string;
|
|
@@ -159,6 +160,7 @@ export interface AaveV3AggregatedPositionData {
|
|
|
159
160
|
collRatio: string;
|
|
160
161
|
borrowLimitWithLtvZeroFallbackUsd: string;
|
|
161
162
|
safetyRatioWithLtvZeroFallback: string;
|
|
163
|
+
safetyRatio: string;
|
|
162
164
|
netApy: string;
|
|
163
165
|
incentiveUsd: string;
|
|
164
166
|
totalInterestUsd: string;
|
package/esm/types/aaveV4.d.ts
CHANGED
package/esm/types/compound.d.ts
CHANGED
|
@@ -96,6 +96,7 @@ export interface CompoundAggregatedPositionData {
|
|
|
96
96
|
leftToBorrowUsd: string;
|
|
97
97
|
ratio: string;
|
|
98
98
|
collRatio: string;
|
|
99
|
+
safetyRatio: string;
|
|
99
100
|
netApy: string;
|
|
100
101
|
incentiveUsd: string;
|
|
101
102
|
totalInterestUsd: string;
|
|
@@ -115,6 +116,7 @@ export interface CompoundAggregatedPositionData {
|
|
|
115
116
|
export interface CompoundPositionData extends MMPositionData {
|
|
116
117
|
ratio: string;
|
|
117
118
|
minRatio: string;
|
|
119
|
+
safetyRatio?: string;
|
|
118
120
|
suppliedUsd: string;
|
|
119
121
|
borrowedUsd: string;
|
|
120
122
|
borrowLimitUsd: string;
|
package/esm/types/curveUsd.d.ts
CHANGED
|
@@ -73,6 +73,9 @@ export interface CrvUSDAggregatedPositionData {
|
|
|
73
73
|
collFactor: string;
|
|
74
74
|
leveragedType: LeverageType;
|
|
75
75
|
exposure: string;
|
|
76
|
+
netApy: string;
|
|
77
|
+
totalInterestUsd: string;
|
|
78
|
+
incentiveUsd: string;
|
|
76
79
|
leveragedAsset?: string;
|
|
77
80
|
liquidationPrice?: string;
|
|
78
81
|
}
|
|
@@ -113,4 +116,7 @@ export interface CrvUSDUserData {
|
|
|
113
116
|
collateralPrice: string;
|
|
114
117
|
collRatio: string;
|
|
115
118
|
exposure: string;
|
|
119
|
+
netApy: string;
|
|
120
|
+
totalInterestUsd: string;
|
|
121
|
+
incentiveUsd: string;
|
|
116
122
|
}
|
package/esm/types/fluid.d.ts
CHANGED
package/esm/types/liquity.d.ts
CHANGED
|
@@ -24,7 +24,11 @@ export interface LiquityTroveInfo {
|
|
|
24
24
|
totalETH: string;
|
|
25
25
|
totalLUSD: string;
|
|
26
26
|
minCollateralRatio: number;
|
|
27
|
+
safetyRatio: string;
|
|
27
28
|
priceForRecovery: string;
|
|
28
29
|
debtInFront: string;
|
|
29
30
|
exposure: string;
|
|
31
|
+
netApy: string;
|
|
32
|
+
totalInterestUsd: string;
|
|
33
|
+
incentiveUsd: string;
|
|
30
34
|
}
|
package/esm/types/liquityV2.d.ts
CHANGED
|
@@ -94,6 +94,7 @@ export interface LiquityV2AggregatedTroveData {
|
|
|
94
94
|
liquidationPrice: string;
|
|
95
95
|
ratio: string;
|
|
96
96
|
collRatio: string;
|
|
97
|
+
safetyRatio: string;
|
|
97
98
|
exposure: string;
|
|
98
99
|
}
|
|
99
100
|
export interface LiquityV2TroveData {
|
|
@@ -101,6 +102,7 @@ export interface LiquityV2TroveData {
|
|
|
101
102
|
troveId: string;
|
|
102
103
|
ratio: string;
|
|
103
104
|
collRatio: string;
|
|
105
|
+
safetyRatio?: string;
|
|
104
106
|
liqRatio: string;
|
|
105
107
|
borrowLimitRatio: string;
|
|
106
108
|
interestRate: string;
|
package/esm/types/maker.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ export interface CdpData {
|
|
|
43
43
|
debtAssetMarketPrice: string;
|
|
44
44
|
liquidationPrice: string;
|
|
45
45
|
ratio: string;
|
|
46
|
+
safetyRatio: string;
|
|
46
47
|
liqRatio: string;
|
|
47
48
|
liqPercent: number;
|
|
48
49
|
assetPrice: string;
|
|
@@ -58,4 +59,7 @@ export interface CdpData {
|
|
|
58
59
|
liquidationFee: string;
|
|
59
60
|
lastUpdated: number;
|
|
60
61
|
exposure: string;
|
|
62
|
+
netApy: string;
|
|
63
|
+
totalInterestUsd: string;
|
|
64
|
+
incentiveUsd: string;
|
|
61
65
|
}
|
|
@@ -185,6 +185,7 @@ export interface MorphoBlueAggregatedPositionData {
|
|
|
185
185
|
totalInterestUsd: string;
|
|
186
186
|
ltv: string;
|
|
187
187
|
ratio: string;
|
|
188
|
+
safetyRatio: string;
|
|
188
189
|
leveragedType: LeverageType;
|
|
189
190
|
leveragedAsset?: string;
|
|
190
191
|
currentVolatilePairRatio?: string;
|
|
@@ -207,6 +208,7 @@ export interface MorphoBluePositionData {
|
|
|
207
208
|
totalInterestUsd: string;
|
|
208
209
|
ltv: string;
|
|
209
210
|
ratio: string;
|
|
211
|
+
safetyRatio?: string;
|
|
210
212
|
leveragedType: LeverageType;
|
|
211
213
|
leveragedAsset?: string;
|
|
212
214
|
currentVolatilePairRatio?: string;
|
package/esm/types/portfolio.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { AaveV2PositionData, AaveV3PositionData, AaveVersions } from './aave';
|
|
2
|
-
import { AaveV4AccountData, AaveV4SpokesType } from './aaveV4';
|
|
1
|
+
import { AaveV2MarketData, AaveV2PositionData, AaveV3MarketData, AaveV3PositionData, AaveVersions } from './aave';
|
|
2
|
+
import { AaveV4AccountData, AaveV4SpokeData, AaveV4SpokesType } from './aaveV4';
|
|
3
3
|
import { EthAddress } from './common';
|
|
4
|
-
import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
|
|
5
|
-
import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
|
|
6
|
-
import { FluidVaultData } from './fluid';
|
|
4
|
+
import { CompoundV2MarketsData, CompoundV2PositionData, CompoundV3MarketsData, CompoundV3PositionData, CompoundVersions } from './compound';
|
|
5
|
+
import { CrvUSDGlobalMarketData, CrvUSDUserData, CrvUSDVersions } from './curveUsd';
|
|
6
|
+
import { FluidMarketData, FluidVaultData } from './fluid';
|
|
7
7
|
import { LiquityTroveInfo } from './liquity';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
8
|
+
import { LiquityV2MarketData } from './liquityV2';
|
|
9
|
+
import { LlamaLendGlobalMarketData, LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
|
|
10
|
+
import { CdpData, IlkInfo } from './maker';
|
|
11
|
+
import { MorphoBlueMarketInfo, MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
|
|
12
|
+
import { MorphoMidnightMarketInfo, MorphoMidnightPositionData, MorphoMidnightVersions } from './morphoMidnight';
|
|
13
|
+
import { SparkMarketsData, SparkPositionData, SparkVersions } from './spark';
|
|
13
14
|
export interface PortfolioProtocolData<T> {
|
|
14
15
|
error: string;
|
|
15
16
|
data: T | null;
|
|
@@ -59,3 +60,18 @@ export interface PortfolioPositionsDataForAddress {
|
|
|
59
60
|
export interface PortfolioPositionsData {
|
|
60
61
|
[key: EthAddress]: PortfolioPositionsDataForAddress;
|
|
61
62
|
}
|
|
63
|
+
export interface PortfolioMarketsData {
|
|
64
|
+
morphoMarketsData: Record<string, MorphoBlueMarketInfo>;
|
|
65
|
+
morphoMidnightMarketsData: Record<string, MorphoMidnightMarketInfo>;
|
|
66
|
+
compoundV3MarketsData: Record<string, CompoundV3MarketsData>;
|
|
67
|
+
sparkMarketsData: Record<string, SparkMarketsData>;
|
|
68
|
+
aaveV3MarketsData: Record<string, AaveV3MarketData>;
|
|
69
|
+
aaveV2MarketsData: Record<string, AaveV2MarketData>;
|
|
70
|
+
compoundV2MarketsData: Record<string, CompoundV2MarketsData>;
|
|
71
|
+
crvUsdMarketsData: Record<string, CrvUSDGlobalMarketData>;
|
|
72
|
+
llamaLendMarketsData: Record<string, LlamaLendGlobalMarketData>;
|
|
73
|
+
liquityV2MarketsData: Record<string, LiquityV2MarketData>;
|
|
74
|
+
aaveV4SpokesData: Record<string, AaveV4SpokeData>;
|
|
75
|
+
fluidMarketsData: Record<string, FluidMarketData>;
|
|
76
|
+
makerMarketsData: Record<string, IlkInfo>;
|
|
77
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EthAddress
|
|
1
|
+
import { EthAddress } from '../common';
|
|
2
2
|
export declare enum MorphoVaultType {
|
|
3
3
|
MorphoVaultFlagshipEth = "morpho_vault_flagship_eth",
|
|
4
4
|
MorphoVaultGauntletUSDCCore = "morpho_vault_gauntlet_usdc_core",
|
|
@@ -17,21 +17,13 @@ export declare enum MorphoVaultType {
|
|
|
17
17
|
MorphoVaultSteakhousePYUSD = "morpho_vault_steakhouse_pyusd",
|
|
18
18
|
MorphoVaultSmokehouseUSDT = "morpho_vault_smokehouse_usdt",
|
|
19
19
|
MorphoVaultSmokehouseUSDC = "morpho_vault_smokehouse_usdc",
|
|
20
|
-
MorphoVaultSmokehouseDAI = "morpho_vault_smokehouse_dai"
|
|
21
|
-
MorphoVaultGauntletUSDGPremium = "morpho_vault_gauntlet_usdg_premium",
|
|
22
|
-
MorphoVaultSteakhouseUSDGPro = "morpho_vault_steakhouse_usdg_pro"
|
|
23
|
-
}
|
|
24
|
-
export declare enum MorphoVaultVersion {
|
|
25
|
-
V1 = 1,
|
|
26
|
-
V2 = 2
|
|
20
|
+
MorphoVaultSmokehouseDAI = "morpho_vault_smokehouse_dai"
|
|
27
21
|
}
|
|
28
22
|
export interface MorphoVault {
|
|
29
23
|
type: MorphoVaultType;
|
|
30
24
|
name: string;
|
|
31
25
|
address: EthAddress;
|
|
32
26
|
asset: string;
|
|
33
|
-
network: NetworkNumber;
|
|
34
|
-
version: MorphoVaultVersion;
|
|
35
27
|
deploymentBlock: number;
|
|
36
28
|
isLegacy: boolean;
|
|
37
29
|
}
|
|
@@ -20,12 +20,4 @@ export var MorphoVaultType;
|
|
|
20
20
|
MorphoVaultType["MorphoVaultSmokehouseUSDT"] = "morpho_vault_smokehouse_usdt";
|
|
21
21
|
MorphoVaultType["MorphoVaultSmokehouseUSDC"] = "morpho_vault_smokehouse_usdc";
|
|
22
22
|
MorphoVaultType["MorphoVaultSmokehouseDAI"] = "morpho_vault_smokehouse_dai";
|
|
23
|
-
// Vault V2
|
|
24
|
-
MorphoVaultType["MorphoVaultGauntletUSDGPremium"] = "morpho_vault_gauntlet_usdg_premium";
|
|
25
|
-
MorphoVaultType["MorphoVaultSteakhouseUSDGPro"] = "morpho_vault_steakhouse_usdg_pro";
|
|
26
23
|
})(MorphoVaultType || (MorphoVaultType = {}));
|
|
27
|
-
export var MorphoVaultVersion;
|
|
28
|
-
(function (MorphoVaultVersion) {
|
|
29
|
-
MorphoVaultVersion[MorphoVaultVersion["V1"] = 1] = "V1";
|
|
30
|
-
MorphoVaultVersion[MorphoVaultVersion["V2"] = 2] = "V2";
|
|
31
|
-
})(MorphoVaultVersion || (MorphoVaultVersion = {}));
|
package/esm/types/spark.d.ts
CHANGED
|
@@ -85,6 +85,7 @@ export interface SparkAggregatedPositionData {
|
|
|
85
85
|
leftToBorrowUsd: string;
|
|
86
86
|
ratio: string;
|
|
87
87
|
collRatio: string;
|
|
88
|
+
safetyRatio: string;
|
|
88
89
|
netApy: string;
|
|
89
90
|
incentiveUsd: string;
|
|
90
91
|
totalInterestUsd: string;
|
|
@@ -104,6 +105,7 @@ export interface SparkPositionData extends MMPositionData {
|
|
|
104
105
|
ratio: string;
|
|
105
106
|
minRatio: string;
|
|
106
107
|
collRatio: string;
|
|
108
|
+
safetyRatio?: string;
|
|
107
109
|
suppliedUsd: string;
|
|
108
110
|
borrowedUsd: string;
|
|
109
111
|
borrowLimitUsd: string;
|
package/package.json
CHANGED
package/src/aaveV2/index.ts
CHANGED
|
@@ -210,6 +210,8 @@ export const _getAaveV2AccountData = async (provider: Client, network: NetworkNu
|
|
|
210
210
|
payload.collRatio = payload.borrowedUsd && payload.borrowedUsd !== '0'
|
|
211
211
|
? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString()
|
|
212
212
|
: '0';
|
|
213
|
+
// Aave v2 has no LTV-0 fallback (AaveV3View only), so its safety ratio is the plain ratio.
|
|
214
|
+
payload.safetyRatio = payload.ratio;
|
|
213
215
|
|
|
214
216
|
// Calculate borrow limits per asset
|
|
215
217
|
Object.values(payload.usedAssets).forEach((item) => {
|
package/src/curveUsd/index.ts
CHANGED
|
@@ -14,6 +14,13 @@ import { getCrvUsdAggregatedData } from '../helpers/curveUsdHelpers';
|
|
|
14
14
|
import { CrvUsdMarkets } from '../markets';
|
|
15
15
|
import { wethToEth } from '../services/utils';
|
|
16
16
|
import { getViemProvider, setViemBlockNumber } from '../services/viem';
|
|
17
|
+
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
18
|
+
|
|
19
|
+
/** Converts a per-second AMM rate (wei, 18 decimals) into a yearly compounded borrow APY in %. */
|
|
20
|
+
const ammRateToBorrowApy = (rateWei: string) => {
|
|
21
|
+
const exponent = new Dec(assetAmountInEth(rateWei)).mul(365).mul(86400);
|
|
22
|
+
return new Dec(new Dec(2.718281828459).pow(exponent).minus(1)).mul(100).toString();
|
|
23
|
+
};
|
|
17
24
|
|
|
18
25
|
const getAndFormatBands = async (provider: Client, network: NetworkNumber, selectedMarket: CrvUSDMarketData, _minBand: string, _maxBand: string) => {
|
|
19
26
|
const contract = CrvUSDViewContractViem(provider, network);
|
|
@@ -69,15 +76,8 @@ export const _getCurveUsdGlobalData = async (provider: Client, network: NetworkN
|
|
|
69
76
|
const totalDebt = assetAmountInEth(data.totalDebt.toString(), debtAsset);
|
|
70
77
|
const ammPrice = assetAmountInEth(data.ammPrice.toString(), debtAsset);
|
|
71
78
|
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
const exponentRate = new Dec(rate).mul(365).mul(86400);
|
|
76
|
-
const exponentFutureRate = new Dec(futureRate).mul(365).mul(86400);
|
|
77
|
-
const borrowRate = new Dec(new Dec(2.718281828459).pow(exponentRate).minus(1)).mul(100)
|
|
78
|
-
.toString();
|
|
79
|
-
const futureBorrowRate = new Dec(new Dec(2.718281828459).pow(exponentFutureRate).minus(1)).mul(100)
|
|
80
|
-
.toString();
|
|
79
|
+
const borrowRate = ammRateToBorrowApy(data.ammRate.toString());
|
|
80
|
+
const futureBorrowRate = ammRateToBorrowApy(data.monetaryPolicyRate.toString());
|
|
81
81
|
|
|
82
82
|
const bandsData = await getAndFormatBands(provider, network, selectedMarket, data.minBand.toString(), data.maxBand.toString());
|
|
83
83
|
|
|
@@ -164,13 +164,22 @@ export const getCrvUsdAccountBalances = async (
|
|
|
164
164
|
controllerAddress: EthAddress,
|
|
165
165
|
): Promise<PositionBalances> => _getCrvUsdAccountBalances(getViemProvider(provider, network), network, block, addressMapping, address, controllerAddress);
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
/**
|
|
168
|
+
* @param borrowRate market borrow APY in % (`CrvUSDGlobalMarketData.borrowRate`); when omitted it is read from the view contract
|
|
169
|
+
*/
|
|
170
|
+
export const _getCurveUsdUserData = async (provider: Client, network: NetworkNumber, address: EthAddress, selectedMarket: CrvUSDMarketData, activeBand: string, borrowRate?: string): Promise<CrvUSDUserData> => {
|
|
168
171
|
const contract = CrvUSDViewContractViem(provider, network);
|
|
169
|
-
|
|
170
|
-
const data = await contract.read.userData([selectedMarket.controllerAddress, address]);
|
|
171
172
|
const collAsset = selectedMarket.collAsset;
|
|
172
173
|
const debtAsset = selectedMarket.baseAsset;
|
|
173
174
|
|
|
175
|
+
const [data, collStakingApy, marketBorrowRate] = await Promise.all([
|
|
176
|
+
contract.read.userData([selectedMarket.controllerAddress, address]),
|
|
177
|
+
STAKING_ASSETS.includes(collAsset) ? getStakingApy(collAsset) : Promise.resolve('0'),
|
|
178
|
+
borrowRate !== undefined
|
|
179
|
+
? Promise.resolve(borrowRate)
|
|
180
|
+
: contract.read.globalData([selectedMarket.controllerAddress]).then((globalData) => ammRateToBorrowApy(globalData.ammRate.toString())),
|
|
181
|
+
]);
|
|
182
|
+
|
|
174
183
|
const health = assetAmountInEth(data.health.toString());
|
|
175
184
|
const healthPercent = new Dec(health).mul(100).toString();
|
|
176
185
|
const collPrice = assetAmountInEth(data.collateralPrice.toString(), debtAsset);
|
|
@@ -202,7 +211,7 @@ export const _getCurveUsdUserData = async (provider: Client, network: NetworkNum
|
|
|
202
211
|
isBorrowed: new Dec(debtBorrowed).gt('0'),
|
|
203
212
|
symbol: 'crvUSD',
|
|
204
213
|
price: '1',
|
|
205
|
-
interestRate:
|
|
214
|
+
interestRate: marketBorrowRate,
|
|
206
215
|
},
|
|
207
216
|
} : {};
|
|
208
217
|
|
|
@@ -232,8 +241,15 @@ export const _getCurveUsdUserData = async (provider: Client, network: NetworkNum
|
|
|
232
241
|
numOfBands: data.N.toString(),
|
|
233
242
|
usedAssets,
|
|
234
243
|
status,
|
|
244
|
+
borrowRate: marketBorrowRate,
|
|
235
245
|
...getCrvUsdAggregatedData({
|
|
236
|
-
loanExists: data.loanExists,
|
|
246
|
+
loanExists: data.loanExists,
|
|
247
|
+
usedAssets,
|
|
248
|
+
network: NetworkNumber.Eth,
|
|
249
|
+
selectedMarket,
|
|
250
|
+
numOfBands: data.N.toString(),
|
|
251
|
+
borrowRate: marketBorrowRate,
|
|
252
|
+
collStakingApy,
|
|
237
253
|
}),
|
|
238
254
|
userBands,
|
|
239
255
|
};
|
|
@@ -245,10 +261,11 @@ export const getCurveUsdUserData = async (
|
|
|
245
261
|
address: EthAddress,
|
|
246
262
|
selectedMarket: CrvUSDMarketData,
|
|
247
263
|
activeBand: string,
|
|
248
|
-
|
|
264
|
+
borrowRate?: string,
|
|
265
|
+
): Promise<CrvUSDUserData> => _getCurveUsdUserData(getViemProvider(provider, network), network, address, selectedMarket, activeBand, borrowRate);
|
|
249
266
|
|
|
250
267
|
export const getCurveUsdFullPositionData = async (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, selectedMarket: CrvUSDMarketData): Promise<CrvUSDUserData> => {
|
|
251
268
|
const marketData = await getCurveUsdGlobalData(provider, network, selectedMarket);
|
|
252
|
-
const positionData = await getCurveUsdUserData(provider, network, address, selectedMarket, marketData.activeBand);
|
|
269
|
+
const positionData = await getCurveUsdUserData(provider, network, address, selectedMarket, marketData.activeBand, marketData.borrowRate);
|
|
253
270
|
return positionData;
|
|
254
271
|
};
|
package/src/fluid/index.ts
CHANGED
|
@@ -1830,3 +1830,43 @@ export const _getUserPositionsPortfolio = async (provider: PublicClient, network
|
|
|
1830
1830
|
userData: userData[i],
|
|
1831
1831
|
})).filter(md => md.marketData !== undefined);
|
|
1832
1832
|
};
|
|
1833
|
+
|
|
1834
|
+
|
|
1835
|
+
export const _getAllFluidMarketDataPortfolio = async (provider: PublicClient, network: NetworkNumber): Promise<Record<string, FluidMarketData>> => {
|
|
1836
|
+
const versions = getFluidVersionsDataForNetwork(network);
|
|
1837
|
+
if (versions.length === 0) return {};
|
|
1838
|
+
|
|
1839
|
+
const view = FluidViewContractViem(provider, network);
|
|
1840
|
+
const vaultsData = await Promise.all(versions.map((version) => view.read.getVaultData([version.marketAddress])));
|
|
1841
|
+
|
|
1842
|
+
const tokens = Array.from(new Set(vaultsData.map((vaultData) => {
|
|
1843
|
+
const vaultTokens = [getAssetInfoByAddress(vaultData.supplyToken0, network).symbol, getAssetInfoByAddress(vaultData.borrowToken0, network).symbol];
|
|
1844
|
+
if (vaultData.supplyToken1 && !compareAddresses(ZERO_ADDRESS, vaultData.supplyToken1)) vaultTokens.push(getAssetInfoByAddress(vaultData.supplyToken1, network).symbol);
|
|
1845
|
+
if (vaultData.borrowToken1 && !compareAddresses(ZERO_ADDRESS, vaultData.borrowToken1)) vaultTokens.push(getAssetInfoByAddress(vaultData.borrowToken1, network).symbol);
|
|
1846
|
+
return vaultTokens;
|
|
1847
|
+
}).flat()));
|
|
1848
|
+
|
|
1849
|
+
// ETH and WBTC needed for other tokens prices
|
|
1850
|
+
if (!tokens.includes('ETH')) tokens.push('ETH');
|
|
1851
|
+
if (!tokens.includes('WBTC')) tokens.push('WBTC');
|
|
1852
|
+
|
|
1853
|
+
const [tokenPrices, merklCampaigns] = await Promise.all([
|
|
1854
|
+
getTokensPricesForPortfolio(tokens, provider, network),
|
|
1855
|
+
getFluidMerklCampaigns(network),
|
|
1856
|
+
]);
|
|
1857
|
+
|
|
1858
|
+
const parsedMarketsData = await Promise.all(vaultsData.map(async (vaultData) => parseMarketData(provider, vaultData, network, tokenPrices)));
|
|
1859
|
+
|
|
1860
|
+
const marketsData: Record<string, FluidMarketData> = {};
|
|
1861
|
+
parsedMarketsData.forEach((marketData, i) => {
|
|
1862
|
+
if (!marketData) return;
|
|
1863
|
+
marketsData[versions[i].value] = attachFluidMerklIncentives(marketData, merklCampaigns);
|
|
1864
|
+
});
|
|
1865
|
+
|
|
1866
|
+
return marketsData;
|
|
1867
|
+
};
|
|
1868
|
+
|
|
1869
|
+
export const getAllFluidMarketDataPortfolio = async (
|
|
1870
|
+
provider: EthereumProvider,
|
|
1871
|
+
network: NetworkNumber,
|
|
1872
|
+
): Promise<Record<string, FluidMarketData>> => _getAllFluidMarketDataPortfolio(getViemProvider(provider, network, { batch: { multicall: true } }), network);
|
|
@@ -169,6 +169,9 @@ export const aaveAnyGetAggregatedPositionData = ({
|
|
|
169
169
|
},
|
|
170
170
|
);
|
|
171
171
|
payload.safetyRatioWithLtvZeroFallback = +payload.suppliedUsd ? new Dec(payload.borrowLimitWithLtvZeroFallbackUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
|
|
172
|
+
// Normalised safety ratio (100 = liquidation on every protocol): the automation ratio above, falling back
|
|
173
|
+
// to the regular ratio when the fallback carries its '0' placeholder.
|
|
174
|
+
payload.safetyRatio = +payload.safetyRatioWithLtvZeroFallback ? payload.safetyRatioWithLtvZeroFallback : payload.ratio;
|
|
172
175
|
payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
|
|
173
176
|
payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
174
177
|
const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
|