@defisaver/positions-sdk 2.1.160-shifter-v2-dev → 2.1.161-portfolio-api-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.
Files changed (118) hide show
  1. package/cjs/aaveV2/index.js +0 -2
  2. package/cjs/curveUsd/index.d.ts +2 -5
  3. package/cjs/curveUsd/index.js +15 -30
  4. package/cjs/fluid/index.d.ts +0 -5
  5. package/cjs/fluid/index.js +1 -36
  6. package/cjs/helpers/aaveHelpers/index.js +0 -3
  7. package/cjs/helpers/aaveV4Helpers/index.js +0 -1
  8. package/cjs/helpers/compoundHelpers/index.js +0 -2
  9. package/cjs/helpers/curveUsdHelpers/index.d.ts +1 -3
  10. package/cjs/helpers/curveUsdHelpers/index.js +2 -16
  11. package/cjs/helpers/fluidHelpers/index.js +0 -1
  12. package/cjs/helpers/liquityV2Helpers/index.js +0 -1
  13. package/cjs/helpers/llamaLendHelpers/index.js +0 -2
  14. package/cjs/helpers/makerHelpers/index.d.ts +1 -1
  15. package/cjs/helpers/makerHelpers/index.js +2 -2
  16. package/cjs/helpers/morphoBlueHelpers/index.js +0 -2
  17. package/cjs/helpers/morphoMidnightHelpers/index.js +0 -2
  18. package/cjs/helpers/sparkHelpers/index.js +0 -1
  19. package/cjs/liquity/index.js +2 -16
  20. package/cjs/maker/index.d.ts +2 -7
  21. package/cjs/maker/index.js +12 -45
  22. package/cjs/markets/index.d.ts +0 -1
  23. package/cjs/markets/index.js +1 -3
  24. package/cjs/portfolio/index.d.ts +1 -5
  25. package/cjs/portfolio/index.js +7 -277
  26. package/cjs/staking/staking.d.ts +0 -20
  27. package/cjs/staking/staking.js +1 -19
  28. package/cjs/types/aave.d.ts +15 -4
  29. package/cjs/types/aaveV4.d.ts +0 -1
  30. package/cjs/types/compound.d.ts +26 -4
  31. package/cjs/types/curveUsd.d.ts +9 -7
  32. package/cjs/types/fluid.d.ts +0 -1
  33. package/cjs/types/liquity.d.ts +0 -4
  34. package/cjs/types/liquityV2.d.ts +0 -2
  35. package/cjs/types/llamaLend.d.ts +12 -1
  36. package/cjs/types/maker.d.ts +0 -4
  37. package/cjs/types/morphoBlue.d.ts +2 -2
  38. package/cjs/types/morphoMidnight.d.ts +0 -1
  39. package/cjs/types/portfolio.d.ts +10 -26
  40. package/cjs/types/spark.d.ts +21 -3
  41. package/esm/aaveV2/index.js +0 -2
  42. package/esm/curveUsd/index.d.ts +2 -5
  43. package/esm/curveUsd/index.js +15 -30
  44. package/esm/fluid/index.d.ts +0 -5
  45. package/esm/fluid/index.js +0 -33
  46. package/esm/helpers/aaveHelpers/index.js +0 -3
  47. package/esm/helpers/aaveV4Helpers/index.js +0 -1
  48. package/esm/helpers/compoundHelpers/index.js +0 -2
  49. package/esm/helpers/curveUsdHelpers/index.d.ts +1 -3
  50. package/esm/helpers/curveUsdHelpers/index.js +2 -16
  51. package/esm/helpers/fluidHelpers/index.js +0 -1
  52. package/esm/helpers/liquityV2Helpers/index.js +0 -1
  53. package/esm/helpers/llamaLendHelpers/index.js +0 -2
  54. package/esm/helpers/makerHelpers/index.d.ts +1 -1
  55. package/esm/helpers/makerHelpers/index.js +2 -2
  56. package/esm/helpers/morphoBlueHelpers/index.js +0 -2
  57. package/esm/helpers/morphoMidnightHelpers/index.js +0 -2
  58. package/esm/helpers/sparkHelpers/index.js +0 -1
  59. package/esm/liquity/index.js +2 -16
  60. package/esm/maker/index.d.ts +2 -7
  61. package/esm/maker/index.js +13 -44
  62. package/esm/markets/index.d.ts +0 -1
  63. package/esm/markets/index.js +0 -1
  64. package/esm/portfolio/index.d.ts +1 -5
  65. package/esm/portfolio/index.js +10 -279
  66. package/esm/staking/staking.d.ts +0 -20
  67. package/esm/staking/staking.js +0 -17
  68. package/esm/types/aave.d.ts +15 -4
  69. package/esm/types/aaveV4.d.ts +0 -1
  70. package/esm/types/compound.d.ts +26 -4
  71. package/esm/types/curveUsd.d.ts +9 -7
  72. package/esm/types/fluid.d.ts +0 -1
  73. package/esm/types/liquity.d.ts +0 -4
  74. package/esm/types/liquityV2.d.ts +0 -2
  75. package/esm/types/llamaLend.d.ts +12 -1
  76. package/esm/types/maker.d.ts +0 -4
  77. package/esm/types/morphoBlue.d.ts +2 -2
  78. package/esm/types/morphoMidnight.d.ts +0 -1
  79. package/esm/types/portfolio.d.ts +10 -26
  80. package/esm/types/spark.d.ts +21 -3
  81. package/package.json +1 -1
  82. package/src/aaveV2/index.ts +0 -2
  83. package/src/curveUsd/index.ts +16 -33
  84. package/src/fluid/index.ts +0 -40
  85. package/src/helpers/aaveHelpers/index.ts +0 -3
  86. package/src/helpers/aaveV4Helpers/index.ts +0 -1
  87. package/src/helpers/compoundHelpers/index.ts +0 -2
  88. package/src/helpers/curveUsdHelpers/index.ts +2 -23
  89. package/src/helpers/fluidHelpers/index.ts +0 -1
  90. package/src/helpers/liquityV2Helpers/index.ts +0 -1
  91. package/src/helpers/llamaLendHelpers/index.ts +0 -2
  92. package/src/helpers/makerHelpers/index.ts +1 -2
  93. package/src/helpers/morphoBlueHelpers/index.ts +0 -2
  94. package/src/helpers/morphoMidnightHelpers/index.ts +0 -2
  95. package/src/helpers/sparkHelpers/index.ts +0 -1
  96. package/src/liquity/index.ts +2 -17
  97. package/src/maker/index.ts +29 -77
  98. package/src/markets/index.ts +1 -2
  99. package/src/portfolio/index.ts +8 -261
  100. package/src/staking/staking.ts +0 -28
  101. package/src/types/aave.ts +18 -4
  102. package/src/types/aaveV4.ts +0 -1
  103. package/src/types/compound.ts +38 -4
  104. package/src/types/curveUsd.ts +17 -8
  105. package/src/types/fluid.ts +0 -1
  106. package/src/types/liquity.ts +0 -6
  107. package/src/types/liquityV2.ts +0 -2
  108. package/src/types/llamaLend.ts +19 -1
  109. package/src/types/maker.ts +0 -6
  110. package/src/types/morphoBlue.ts +3 -2
  111. package/src/types/morphoMidnight.ts +0 -1
  112. package/src/types/portfolio.ts +12 -31
  113. package/src/types/spark.ts +25 -3
  114. package/cjs/markets/maker/index.d.ts +0 -1
  115. package/cjs/markets/maker/index.js +0 -13
  116. package/esm/markets/maker/index.d.ts +0 -1
  117. package/esm/markets/maker/index.js +0 -10
  118. package/src/markets/maker/index.ts +0 -10
@@ -52,6 +52,7 @@ export interface CompoundAssetData extends MMAssetData {
52
52
  sortIndex?: number;
53
53
  }
54
54
  export interface CompoundV2AssetData extends CompoundAssetData {
55
+ exchangeRate?: string;
55
56
  }
56
57
  export interface CompoundV3AssetData extends CompoundAssetData {
57
58
  borrowCollateralFactor: string;
@@ -63,6 +64,17 @@ export interface CompoundV3AssetData extends CompoundAssetData {
63
64
  supplyCap: string;
64
65
  priceInBaseAsset: string;
65
66
  canBeWithdrawn: boolean;
67
+ tokenAddr?: EthAddress;
68
+ isBase?: boolean;
69
+ baseBorrowMin?: string;
70
+ baseTrackingBorrowRewardsSpeed?: string;
71
+ baseTrackingSupplyRewardsSpeed?: string;
72
+ borrowIndex?: string;
73
+ supplyIndex?: string;
74
+ trackingBorrowIndex?: string;
75
+ trackingSupplyIndex?: string;
76
+ rewardSupplySpeed?: string;
77
+ rewardBorrowSpeed?: string;
66
78
  }
67
79
  export interface CompoundAssetsData<T> {
68
80
  [token: string]: T;
@@ -96,7 +108,6 @@ export interface CompoundAggregatedPositionData {
96
108
  leftToBorrowUsd: string;
97
109
  ratio: string;
98
110
  collRatio: string;
99
- safetyRatio: string;
100
111
  netApy: string;
101
112
  incentiveUsd: string;
102
113
  totalInterestUsd: string;
@@ -116,7 +127,6 @@ export interface CompoundAggregatedPositionData {
116
127
  export interface CompoundPositionData extends MMPositionData {
117
128
  ratio: string;
118
129
  minRatio: string;
119
- safetyRatio?: string;
120
130
  suppliedUsd: string;
121
131
  borrowedUsd: string;
122
132
  borrowLimitUsd: string;
@@ -125,9 +135,21 @@ export interface CompoundPositionData extends MMPositionData {
125
135
  isSubscribedToAutomation?: boolean;
126
136
  automationResubscribeRequired?: boolean;
127
137
  }
128
- export interface CompoundV2PositionData extends CompoundPositionData {
138
+ /**
139
+ * Fields getCompoundV2AggregatedData adds to every Compound V2 position at runtime — a subset of
140
+ * CompoundAggregatedPositionData. Optional, so code that builds a position by hand keeps compiling.
141
+ */
142
+ export type CompoundV2PositionAggregatedFields = Partial<Pick<CompoundAggregatedPositionData, 'suppliedCollateralUsd' | 'liquidationLimitUsd' | 'leftToBorrowUsd' | 'collRatio' | 'leveragedType' | 'leveragedAsset' | 'liquidationPrice'>>;
143
+ /**
144
+ * Fields getCompoundV3AggregatedData adds to every Compound V3 position at runtime, on top of those declared in
145
+ * CompoundPositionData. Optional, so code that builds a position by hand keeps compiling.
146
+ */
147
+ export type CompoundV3PositionAggregatedFields = Partial<Omit<CompoundAggregatedPositionData, keyof MMPositionData | 'ratio' | 'minRatio' | 'suppliedUsd' | 'borrowedUsd' | 'borrowLimitUsd' | 'incentiveUsd' | 'totalInterestUsd'>>;
148
+ export interface CompoundV2PositionData extends CompoundPositionData, CompoundV2PositionAggregatedFields {
129
149
  usedAssets: CompoundV2UsedAssets;
150
+ borrowStableSupplyUnstable?: boolean;
130
151
  }
131
- export interface CompoundV3PositionData extends CompoundPositionData {
152
+ export interface CompoundV3PositionData extends CompoundPositionData, CompoundV3PositionAggregatedFields {
132
153
  usedAssets: CompoundV3UsedAssets;
154
+ isAllowed?: boolean;
133
155
  }
@@ -60,6 +60,7 @@ export interface CrvUSDGlobalMarketData {
60
60
  leftToBorrow: string;
61
61
  bands: BandData[];
62
62
  loanDiscount: string;
63
+ A?: bigint;
63
64
  }
64
65
  export interface CrvUSDAggregatedPositionData {
65
66
  ratio: string;
@@ -73,9 +74,6 @@ export interface CrvUSDAggregatedPositionData {
73
74
  collFactor: string;
74
75
  leveragedType: LeverageType;
75
76
  exposure: string;
76
- netApy: string;
77
- totalInterestUsd: string;
78
- incentiveUsd: string;
79
77
  leveragedAsset?: string;
80
78
  liquidationPrice?: string;
81
79
  }
@@ -94,7 +92,8 @@ export interface CrvUSDUsedAsset {
94
92
  export interface CrvUSDUsedAssets {
95
93
  [key: string]: CrvUSDUsedAsset;
96
94
  }
97
- export interface CrvUSDUserData {
95
+ export type CrvUSDPositionAggregatedFields = Partial<Pick<CrvUSDAggregatedPositionData, 'borrowLimitUsd' | 'minAllowedRatio' | 'collFactor' | 'leveragedType' | 'leveragedAsset' | 'liquidationPrice'>>;
96
+ export interface CrvUSDUserData extends CrvUSDPositionAggregatedFields {
98
97
  debtAmount: string;
99
98
  health: string;
100
99
  healthPercent: string;
@@ -116,7 +115,10 @@ export interface CrvUSDUserData {
116
115
  collateralPrice: string;
117
116
  collRatio: string;
118
117
  exposure: string;
119
- netApy: string;
120
- totalInterestUsd: string;
121
- incentiveUsd: string;
118
+ marketCollateralAmount?: bigint;
119
+ curveUsdCollateralAmount?: bigint;
120
+ N?: bigint;
121
+ bandRange?: readonly [bigint, bigint];
122
+ usersBands?: readonly [readonly bigint[], readonly bigint[]];
123
+ isInSoftLiquidation?: boolean;
122
124
  }
@@ -323,7 +323,6 @@ export interface FluidAggregatedVaultData {
323
323
  merklBorrowIncentives: IncentiveData[];
324
324
  ratio: string;
325
325
  collRatio: string;
326
- safetyRatio: string;
327
326
  minRatio: string;
328
327
  totalInterestUsd: string;
329
328
  leveragedType?: LeverageType;
@@ -24,11 +24,7 @@ export interface LiquityTroveInfo {
24
24
  totalETH: string;
25
25
  totalLUSD: string;
26
26
  minCollateralRatio: number;
27
- safetyRatio: string;
28
27
  priceForRecovery: string;
29
28
  debtInFront: string;
30
29
  exposure: string;
31
- netApy: string;
32
- totalInterestUsd: string;
33
- incentiveUsd: string;
34
30
  }
@@ -94,7 +94,6 @@ export interface LiquityV2AggregatedTroveData {
94
94
  liquidationPrice: string;
95
95
  ratio: string;
96
96
  collRatio: string;
97
- safetyRatio: string;
98
97
  exposure: string;
99
98
  }
100
99
  export interface LiquityV2TroveData {
@@ -102,7 +101,6 @@ export interface LiquityV2TroveData {
102
101
  troveId: string;
103
102
  ratio: string;
104
103
  collRatio: string;
105
- safetyRatio?: string;
106
104
  liqRatio: string;
107
105
  borrowLimitRatio: string;
108
106
  interestRate: string;
@@ -138,7 +138,8 @@ export interface LlamaLendUsedAsset {
138
138
  export interface LlamaLendUsedAssets {
139
139
  [key: string]: LlamaLendUsedAsset;
140
140
  }
141
- export interface LlamaLendUserData {
141
+ export type LlamaLendPositionAggregatedFields = Partial<Pick<LlamaLendAggregatedPositionData, 'borrowLimitUsd' | 'minAllowedRatio' | 'collFactor' | 'leveragedType' | 'leveragedAsset' | 'liquidationPrice' | 'netApy' | 'incentiveUsd' | 'totalInterestUsd'>>;
142
+ export interface LlamaLendUserData extends LlamaLendPositionAggregatedFields {
142
143
  debtAmount: string;
143
144
  health: string;
144
145
  healthPercent: string;
@@ -157,4 +158,14 @@ export interface LlamaLendUserData {
157
158
  loanExists: boolean;
158
159
  borrowRate?: string;
159
160
  exposure: string;
161
+ collateralPrice?: bigint;
162
+ marketCollateralAmount?: bigint;
163
+ debtTokenCollateralAmount?: bigint;
164
+ N?: bigint;
165
+ bandRange?: readonly [bigint, bigint];
166
+ usersBands?: readonly [readonly bigint[], readonly bigint[]];
167
+ collRatio?: bigint;
168
+ isInSoftLiquidation?: boolean;
169
+ debtTokenSuppliedShares?: bigint;
170
+ debtTokenSuppliedAssets?: bigint;
160
171
  }
@@ -43,7 +43,6 @@ export interface CdpData {
43
43
  debtAssetMarketPrice: string;
44
44
  liquidationPrice: string;
45
45
  ratio: string;
46
- safetyRatio: string;
47
46
  liqRatio: string;
48
47
  liqPercent: number;
49
48
  assetPrice: string;
@@ -59,7 +58,4 @@ export interface CdpData {
59
58
  liquidationFee: string;
60
59
  lastUpdated: number;
61
60
  exposure: string;
62
- netApy: string;
63
- totalInterestUsd: string;
64
- incentiveUsd: string;
65
61
  }
@@ -185,7 +185,6 @@ export interface MorphoBlueAggregatedPositionData {
185
185
  totalInterestUsd: string;
186
186
  ltv: string;
187
187
  ratio: string;
188
- safetyRatio: string;
189
188
  leveragedType: LeverageType;
190
189
  leveragedAsset?: string;
191
190
  currentVolatilePairRatio?: string;
@@ -208,7 +207,6 @@ export interface MorphoBluePositionData {
208
207
  totalInterestUsd: string;
209
208
  ltv: string;
210
209
  ratio: string;
211
- safetyRatio?: string;
212
210
  leveragedType: LeverageType;
213
211
  leveragedAsset?: string;
214
212
  currentVolatilePairRatio?: string;
@@ -216,6 +214,8 @@ export interface MorphoBluePositionData {
216
214
  supplyShares: string;
217
215
  borrowShares: string;
218
216
  exposure: string;
217
+ minCollRatio?: string;
218
+ collLiquidationRatio?: string;
219
219
  }
220
220
  export interface MorphoBlueEarnData {
221
221
  apy: string;
@@ -170,7 +170,6 @@ export interface MorphoMidnightAggregatedPositionData {
170
170
  ltv: string;
171
171
  ratio: string;
172
172
  healthRatio: string;
173
- safetyRatio: string;
174
173
  leveragedType: LeverageType;
175
174
  leveragedAsset?: string;
176
175
  currentVolatilePairRatio?: string;
@@ -1,16 +1,15 @@
1
- import { AaveV2MarketData, AaveV2PositionData, AaveV3MarketData, AaveV3PositionData, AaveVersions } from './aave';
2
- import { AaveV4AccountData, AaveV4SpokeData, AaveV4SpokesType } from './aaveV4';
1
+ import { AaveV2PositionData, AaveV3PositionData, AaveVersions } from './aave';
2
+ import { AaveV4AccountData, AaveV4SpokesType } from './aaveV4';
3
3
  import { EthAddress } from './common';
4
- import { CompoundV2MarketsData, CompoundV2PositionData, CompoundV3MarketsData, CompoundV3PositionData, CompoundVersions } from './compound';
5
- import { CrvUSDGlobalMarketData, CrvUSDUserData, CrvUSDVersions } from './curveUsd';
6
- import { FluidMarketData, FluidVaultData } from './fluid';
4
+ import { CompoundV2PositionData, CompoundV3PositionData, CompoundVersions } from './compound';
5
+ import { CrvUSDUserData, CrvUSDVersions } from './curveUsd';
6
+ import { FluidVaultData } from './fluid';
7
7
  import { LiquityTroveInfo } from './liquity';
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';
8
+ import { LlamaLendUserData, LlamaLendVersionsType } from './llamaLend';
9
+ import { CdpData } from './maker';
10
+ import { MorphoBluePositionData, MorphoBlueVersions } from './morphoBlue';
11
+ import { MorphoMidnightPositionData, MorphoMidnightVersions } from './morphoMidnight';
12
+ import { SparkPositionData, SparkVersions } from './spark';
14
13
  export interface PortfolioProtocolData<T> {
15
14
  error: string;
16
15
  data: T | null;
@@ -60,18 +59,3 @@ export interface PortfolioPositionsDataForAddress {
60
59
  export interface PortfolioPositionsData {
61
60
  [key: EthAddress]: PortfolioPositionsDataForAddress;
62
61
  }
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
- }
@@ -46,6 +46,21 @@ export interface SparkAssetData extends MMAssetData {
46
46
  eModeCategory: number;
47
47
  liquidationBonus: string;
48
48
  liquidationRatio: string;
49
+ debtCeilingForIsolationMode?: string;
50
+ isSiloed?: boolean;
51
+ isolationModeTotalDebt?: string;
52
+ isolationModeBorrowingEnabled?: boolean;
53
+ assetId?: number;
54
+ borrowRateStable?: string;
55
+ supplyCap?: string;
56
+ isInactive?: boolean;
57
+ isFrozen?: boolean;
58
+ isPaused?: boolean;
59
+ canBeWithdrawn?: boolean;
60
+ canBePayBacked?: boolean;
61
+ disabledStableBorrowing?: boolean;
62
+ isFlashLoanEnabled?: boolean;
63
+ aTokenAddress?: EthAddress;
49
64
  }
50
65
  export interface SparkAssetsData {
51
66
  [token: string]: SparkAssetData;
@@ -85,7 +100,6 @@ export interface SparkAggregatedPositionData {
85
100
  leftToBorrowUsd: string;
86
101
  ratio: string;
87
102
  collRatio: string;
88
- safetyRatio: string;
89
103
  netApy: string;
90
104
  incentiveUsd: string;
91
105
  totalInterestUsd: string;
@@ -101,11 +115,15 @@ export interface SparkAggregatedPositionData {
101
115
  minHealthRatio: string;
102
116
  exposure: string;
103
117
  }
104
- export interface SparkPositionData extends MMPositionData {
118
+ /**
119
+ * Fields sparkGetAggregatedPositionData adds to every Spark position at runtime, on top of those declared below.
120
+ * Optional, so code that builds a position by hand keeps compiling.
121
+ */
122
+ export type SparkPositionAggregatedFields = Partial<Omit<SparkAggregatedPositionData, keyof MMPositionData | 'ratio' | 'collRatio' | 'suppliedUsd' | 'borrowedUsd' | 'borrowLimitUsd' | 'suppliedCollateralUsd' | 'incentiveUsd' | 'totalInterestUsd'>>;
123
+ export interface SparkPositionData extends MMPositionData, SparkPositionAggregatedFields {
105
124
  ratio: string;
106
125
  minRatio: string;
107
126
  collRatio: string;
108
- safetyRatio?: string;
109
127
  suppliedUsd: string;
110
128
  borrowedUsd: string;
111
129
  borrowLimitUsd: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "2.1.160-shifter-v2-dev",
3
+ "version": "2.1.161-portfolio-api-dev",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -210,8 +210,6 @@ 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;
215
213
 
216
214
  // Calculate borrow limits per asset
217
215
  Object.values(payload.usedAssets).forEach((item) => {
@@ -14,13 +14,6 @@ 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
- };
24
17
 
25
18
  const getAndFormatBands = async (provider: Client, network: NetworkNumber, selectedMarket: CrvUSDMarketData, _minBand: string, _maxBand: string) => {
26
19
  const contract = CrvUSDViewContractViem(provider, network);
@@ -76,8 +69,15 @@ export const _getCurveUsdGlobalData = async (provider: Client, network: NetworkN
76
69
  const totalDebt = assetAmountInEth(data.totalDebt.toString(), debtAsset);
77
70
  const ammPrice = assetAmountInEth(data.ammPrice.toString(), debtAsset);
78
71
 
79
- const borrowRate = ammRateToBorrowApy(data.ammRate.toString());
80
- const futureBorrowRate = ammRateToBorrowApy(data.monetaryPolicyRate.toString());
72
+ const rate = assetAmountInEth(data.ammRate.toString());
73
+ const futureRate = assetAmountInEth(data.monetaryPolicyRate.toString());
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();
81
81
 
82
82
  const bandsData = await getAndFormatBands(provider, network, selectedMarket, data.minBand.toString(), data.maxBand.toString());
83
83
 
@@ -164,22 +164,13 @@ export const getCrvUsdAccountBalances = async (
164
164
  controllerAddress: EthAddress,
165
165
  ): Promise<PositionBalances> => _getCrvUsdAccountBalances(getViemProvider(provider, network), network, block, addressMapping, address, controllerAddress);
166
166
 
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> => {
167
+ export const _getCurveUsdUserData = async (provider: Client, network: NetworkNumber, address: EthAddress, selectedMarket: CrvUSDMarketData, activeBand: string): Promise<CrvUSDUserData> => {
171
168
  const contract = CrvUSDViewContractViem(provider, network);
169
+
170
+ const data = await contract.read.userData([selectedMarket.controllerAddress, address]);
172
171
  const collAsset = selectedMarket.collAsset;
173
172
  const debtAsset = selectedMarket.baseAsset;
174
173
 
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
-
183
174
  const health = assetAmountInEth(data.health.toString());
184
175
  const healthPercent = new Dec(health).mul(100).toString();
185
176
  const collPrice = assetAmountInEth(data.collateralPrice.toString(), debtAsset);
@@ -211,7 +202,7 @@ export const _getCurveUsdUserData = async (provider: Client, network: NetworkNum
211
202
  isBorrowed: new Dec(debtBorrowed).gt('0'),
212
203
  symbol: 'crvUSD',
213
204
  price: '1',
214
- interestRate: marketBorrowRate,
205
+ interestRate: '0',
215
206
  },
216
207
  } : {};
217
208
 
@@ -241,15 +232,8 @@ export const _getCurveUsdUserData = async (provider: Client, network: NetworkNum
241
232
  numOfBands: data.N.toString(),
242
233
  usedAssets,
243
234
  status,
244
- borrowRate: marketBorrowRate,
245
235
  ...getCrvUsdAggregatedData({
246
- loanExists: data.loanExists,
247
- usedAssets,
248
- network: NetworkNumber.Eth,
249
- selectedMarket,
250
- numOfBands: data.N.toString(),
251
- borrowRate: marketBorrowRate,
252
- collStakingApy,
236
+ loanExists: data.loanExists, usedAssets, network: NetworkNumber.Eth, selectedMarket, numOfBands: data.N.toString(),
253
237
  }),
254
238
  userBands,
255
239
  };
@@ -261,11 +245,10 @@ export const getCurveUsdUserData = async (
261
245
  address: EthAddress,
262
246
  selectedMarket: CrvUSDMarketData,
263
247
  activeBand: string,
264
- borrowRate?: string,
265
- ): Promise<CrvUSDUserData> => _getCurveUsdUserData(getViemProvider(provider, network), network, address, selectedMarket, activeBand, borrowRate);
248
+ ): Promise<CrvUSDUserData> => _getCurveUsdUserData(getViemProvider(provider, network), network, address, selectedMarket, activeBand);
266
249
 
267
250
  export const getCurveUsdFullPositionData = async (provider: EthereumProvider, network: NetworkNumber, address: EthAddress, selectedMarket: CrvUSDMarketData): Promise<CrvUSDUserData> => {
268
251
  const marketData = await getCurveUsdGlobalData(provider, network, selectedMarket);
269
- const positionData = await getCurveUsdUserData(provider, network, address, selectedMarket, marketData.activeBand, marketData.borrowRate);
252
+ const positionData = await getCurveUsdUserData(provider, network, address, selectedMarket, marketData.activeBand);
270
253
  return positionData;
271
254
  };
@@ -1830,43 +1830,3 @@ 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,9 +169,6 @@ 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;
175
172
  payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
176
173
  payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
177
174
  const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
@@ -270,7 +270,6 @@ export const aaveV4GetAggregatedPositionData = ({
270
270
  payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
271
271
  payload.minRatio = '100';
272
272
  payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
273
- payload.safetyRatio = payload.ratio;
274
273
  payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
275
274
  payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
276
275
  const { leveragedType, leveragedAsset } = isLeveragedPosAaveV4(usedAssets);
@@ -139,7 +139,6 @@ export const getCompoundV2AggregatedData = ({
139
139
  payload.collRatio = payload.borrowedUsd && payload.borrowedUsd !== '0'
140
140
  ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString()
141
141
  : '0';
142
- payload.safetyRatio = payload.ratio;
143
142
 
144
143
  // Calculate borrow limits per asset
145
144
  Object.values(usedAssets).forEach((item) => {
@@ -186,7 +185,6 @@ export const getCompoundV3AggregatedData = ({
186
185
  payload.incentiveUsd = incentiveUsd;
187
186
  payload.totalInterestUsd = totalInterestUsd;
188
187
  payload.minRatio = '100';
189
- payload.safetyRatio = payload.ratio;
190
188
  payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
191
189
  payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
192
190
  payload.minDebt = assetsData[selectedMarket.baseAsset].minDebt;
@@ -5,18 +5,11 @@ import {
5
5
  calcLeverageLiqPrice, getAssetsTotal, getExposure, isLeveragedPos,
6
6
  } from '../../moneymarket';
7
7
  import { mapRange } from '../../services/utils';
8
- import { calculateNetApyFromRates } from '../../staking';
9
8
 
10
9
  export const getCrvUsdAggregatedData = ({
11
- loanExists, usedAssets, network, selectedMarket, numOfBands, borrowRate = '0', collStakingApy = '0', ...rest
10
+ loanExists, usedAssets, network, selectedMarket, numOfBands, ...rest
12
11
  }:{
13
- loanExists: boolean,
14
- usedAssets: CrvUSDUsedAssets,
15
- network: NetworkNumber,
16
- selectedMarket: CrvUSDMarketData,
17
- numOfBands: number | string,
18
- borrowRate?: string, // market borrow APY in %, see `CrvUSDGlobalMarketData.borrowRate`
19
- collStakingApy?: string, // native yield APY in % of the collateral asset, if it is a staked asset
12
+ loanExists: boolean, usedAssets: CrvUSDUsedAssets, network: NetworkNumber, selectedMarket: CrvUSDMarketData, numOfBands: number | string
20
13
  }): CrvUSDAggregatedPositionData => {
21
14
  const payload = {} as CrvUSDAggregatedPositionData;
22
15
  payload.supplied = getAssetsTotal(usedAssets, ({ isSupplied }: { isSupplied: boolean }) => isSupplied, ({ supplied }: { supplied: string }) => supplied); // this is wrong if we are in soft-liquidations
@@ -33,8 +26,6 @@ export const getCrvUsdAggregatedData = ({
33
26
 
34
27
  // this is all approximation
35
28
  payload.minAllowedRatio = mapRange(numOfBands, 4, 50, 115, 140); // collateral ratio
36
- // Collateral ratio rebased so 100 sits on the band-derived minimum (normalised safety ratio, same scale as the other protocols).
37
- payload.safetyRatio = loanExists && payload.minAllowedRatio ? new Dec(payload.ratio).div(payload.minAllowedRatio).mul(100).toString() : '0';
38
29
  payload.collFactor = new Dec(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
39
30
  // only take in consideration collAsset
40
31
  payload.borrowLimitUsd = usedAssets?.[selectedMarket.collAsset]?.isSupplied
@@ -51,17 +42,5 @@ export const getCrvUsdAggregatedData = ({
51
42
 
52
43
  payload.exposure = getExposure(payload.borrowedUsd, payload.suppliedUsd);
53
44
 
54
- // crvUSD debt accrues the market borrow rate. Collateral (including crvUSD held during soft liquidation) earns
55
- // nothing from the protocol itself; only the native yield of staked collateral is counted, as an incentive.
56
- const { netApy, totalInterestUsd, incentiveUsd } = calculateNetApyFromRates({
57
- suppliedUsd: payload.suppliedUsd,
58
- borrowedUsd: payload.borrowedUsd,
59
- borrowRate,
60
- incentives: [{ apy: collStakingApy, amountUsd: usedAssets?.[selectedMarket.collAsset]?.suppliedUsd || '0' }],
61
- });
62
- payload.netApy = netApy;
63
- payload.totalInterestUsd = totalInterestUsd;
64
- payload.incentiveUsd = incentiveUsd;
65
-
66
45
  return payload;
67
46
  };
@@ -143,7 +143,6 @@ borrowShares?: string,
143
143
  payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
144
144
  payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
145
145
  payload.minRatio = marketData.minRatio;
146
- payload.safetyRatio = payload.ratio;
147
146
  const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
148
147
 
149
148
  payload.leveragedType = leveragedType;
@@ -69,7 +69,6 @@ export const getLiquityV2AggregatedPositionData = ({
69
69
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
70
70
  payload.ratio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
71
71
  payload.collRatio = (+payload.suppliedUsd && +payload.borrowedUsd) ? new Dec(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
72
- payload.safetyRatio = payload.ratio;
73
72
  const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApyLiquityV2(usedAssets, assetsData, interestRate);
74
73
  payload.netApy = netApy;
75
74
  payload.incentiveUsd = incentiveUsd;
@@ -38,8 +38,6 @@ export const getLlamaLendAggregatedData = ({
38
38
 
39
39
  // this is all approximation
40
40
  payload.minAllowedRatio = mapRange(numOfBands, 4, 50, 115, 140); // collateral ratio
41
- // Collateral ratio rebased so 100 sits on the band-derived minimum (normalised safety ratio, same scale as the other protocols).
42
- payload.safetyRatio = loanExists && payload.minAllowedRatio ? new Dec(payload.ratio).div(payload.minAllowedRatio).mul(100).toString() : '0';
43
41
  payload.collFactor = new Dec(1).div(payload.minAllowedRatio).mul(100).toString(); // collateral factor = 1 / collateral ratio
44
42
  // only take in consideration collAsset
45
43
  payload.borrowLimitUsd = usedAssets?.[collAsset]?.isSupplied
@@ -10,7 +10,6 @@ export const parseCollateralInfo = (
10
10
  _rate: string,
11
11
  _spot: string,
12
12
  _line: string,
13
- _dust: string,
14
13
  _duty: string,
15
14
  _futureRate: string,
16
15
  _chop: string,
@@ -21,7 +20,7 @@ export const parseCollateralInfo = (
21
20
  const rate = new Dec(_rate).toString();
22
21
  const spot = new Dec(_spot).div(1e27).toString();
23
22
  const line = new Dec(_line).div(1e45).toString();
24
- const dust = new Dec(_dust).div(1e45).toString(); // Vat.ilks.dust, rad (1e45) -> DAI
23
+ const dust = new Dec(_rate).div(1e45).toString();
25
24
  const duty = new Dec(_duty).toString();
26
25
  const futureRate = new Dec(_futureRate).toString();
27
26
  const chop = new Dec(_chop).div(1e18).toString();
@@ -54,8 +54,6 @@ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, ma
54
54
  payload.ltv = new Dec(usedAssets[loanToken]?.borrowed || 0).div(oracle).div(usedAssets[collateralToken]?.supplied || 1).toString(); // default to 1 because can't div 0
55
55
  payload.ratio = new Dec(usedAssets[collateralToken]?.supplied || 0).mul(oracle).div(usedAssets[loanToken]?.borrowed || 1).mul(100)
56
56
  .toString();
57
- // Borrow limit over debt, so 100 sits on the market's LLTV however low it is (`ratio` is the raw collateral ratio).
58
- payload.safetyRatio = +payload.borrowedUsd > 0 ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
59
57
 
60
58
  const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
61
59
  payload.leveragedType = leveragedType;
@@ -102,8 +102,6 @@ export const getMorphoMidnightAggregatedPositionData = ({
102
102
  payload.ltv = new Dec(payload.suppliedCollateralUsd).eq(0) ? '0' : new Dec(payload.borrowedUsd).div(payload.suppliedCollateralUsd).toString();
103
103
  payload.ratio = new Dec(payload.borrowedUsd).eq(0) ? '0' : new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString();
104
104
  payload.healthRatio = new Dec(payload.borrowedUsd).eq(0) ? 'Infinity' : new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
105
- // Borrow limit over debt, so 100 sits on the market's LLTV however low it is (`ratio` is the raw collateral ratio).
106
- payload.safetyRatio = +payload.borrowedUsd > 0 ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
107
105
 
108
106
  const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
109
107
  payload.leveragedType = leveragedType;
@@ -96,7 +96,6 @@ export const sparkGetAggregatedPositionData = ({
96
96
  payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
97
97
  payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
98
98
  payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
99
- payload.safetyRatio = payload.ratio;
100
99
  const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({ usedAssets, assetsData });
101
100
  payload.netApy = netApy;
102
101
  payload.incentiveUsd = incentiveUsd;