@defisaver/positions-sdk 2.1.42 → 2.1.43-dev-stats-test-1-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 (114) hide show
  1. package/.mocharc.json +4 -4
  2. package/.nvmrc +1 -1
  3. package/README.md +64 -64
  4. package/cjs/aaveV3/index.js +31 -9
  5. package/cjs/aaveV3/merit.js +5 -1
  6. package/cjs/aaveV3/merkl.js +1 -0
  7. package/cjs/helpers/morphoBlueHelpers/index.js +66 -66
  8. package/cjs/savings/morphoVaults/index.js +17 -17
  9. package/esm/aaveV3/index.js +31 -9
  10. package/esm/aaveV3/merit.js +5 -1
  11. package/esm/aaveV3/merkl.js +1 -0
  12. package/esm/helpers/morphoBlueHelpers/index.js +66 -66
  13. package/esm/savings/morphoVaults/index.js +17 -17
  14. package/package.json +48 -48
  15. package/src/aaveV2/index.ts +240 -240
  16. package/src/aaveV3/index.ts +648 -625
  17. package/src/aaveV3/merit.ts +99 -97
  18. package/src/aaveV3/merkl.ts +75 -74
  19. package/src/claiming/aaveV3.ts +154 -154
  20. package/src/claiming/compV3.ts +22 -22
  21. package/src/claiming/ethena.ts +61 -61
  22. package/src/claiming/index.ts +12 -12
  23. package/src/claiming/king.ts +66 -66
  24. package/src/claiming/morphoBlue.ts +118 -118
  25. package/src/claiming/spark.ts +225 -225
  26. package/src/compoundV2/index.ts +244 -244
  27. package/src/compoundV3/index.ts +274 -274
  28. package/src/config/contracts.ts +1295 -1295
  29. package/src/constants/index.ts +10 -10
  30. package/src/contracts.ts +171 -171
  31. package/src/curveUsd/index.ts +254 -254
  32. package/src/eulerV2/index.ts +324 -324
  33. package/src/exchange/index.ts +25 -25
  34. package/src/fluid/index.ts +1800 -1800
  35. package/src/helpers/aaveHelpers/index.ts +187 -187
  36. package/src/helpers/compoundHelpers/index.ts +283 -283
  37. package/src/helpers/curveUsdHelpers/index.ts +40 -40
  38. package/src/helpers/eulerHelpers/index.ts +222 -222
  39. package/src/helpers/fluidHelpers/index.ts +326 -326
  40. package/src/helpers/index.ts +10 -10
  41. package/src/helpers/liquityV2Helpers/index.ts +82 -82
  42. package/src/helpers/llamaLendHelpers/index.ts +53 -53
  43. package/src/helpers/makerHelpers/index.ts +52 -52
  44. package/src/helpers/morphoBlueHelpers/index.ts +396 -396
  45. package/src/helpers/sparkHelpers/index.ts +158 -158
  46. package/src/index.ts +49 -49
  47. package/src/liquity/index.ts +159 -159
  48. package/src/liquityV2/index.ts +703 -703
  49. package/src/llamaLend/index.ts +305 -305
  50. package/src/maker/index.ts +223 -223
  51. package/src/markets/aave/index.ts +118 -118
  52. package/src/markets/aave/marketAssets.ts +54 -54
  53. package/src/markets/compound/index.ts +243 -243
  54. package/src/markets/compound/marketsAssets.ts +97 -97
  55. package/src/markets/curveUsd/index.ts +69 -69
  56. package/src/markets/euler/index.ts +26 -26
  57. package/src/markets/fluid/index.ts +2900 -2900
  58. package/src/markets/index.ts +25 -25
  59. package/src/markets/liquityV2/index.ts +102 -102
  60. package/src/markets/llamaLend/contractAddresses.ts +141 -141
  61. package/src/markets/llamaLend/index.ts +235 -235
  62. package/src/markets/morphoBlue/index.ts +971 -971
  63. package/src/markets/spark/index.ts +29 -29
  64. package/src/markets/spark/marketAssets.ts +12 -12
  65. package/src/moneymarket/moneymarketCommonService.ts +85 -85
  66. package/src/morphoBlue/index.ts +274 -274
  67. package/src/portfolio/index.ts +598 -598
  68. package/src/savings/index.ts +95 -95
  69. package/src/savings/makerDsr/index.ts +53 -53
  70. package/src/savings/makerDsr/options.ts +9 -9
  71. package/src/savings/morphoVaults/index.ts +80 -80
  72. package/src/savings/morphoVaults/options.ts +193 -193
  73. package/src/savings/skyOptions/index.ts +95 -95
  74. package/src/savings/skyOptions/options.ts +10 -10
  75. package/src/savings/sparkSavingsVaults/index.ts +60 -60
  76. package/src/savings/sparkSavingsVaults/options.ts +35 -35
  77. package/src/savings/yearnV3Vaults/index.ts +61 -61
  78. package/src/savings/yearnV3Vaults/options.ts +55 -55
  79. package/src/savings/yearnVaults/index.ts +73 -73
  80. package/src/savings/yearnVaults/options.ts +32 -32
  81. package/src/services/priceService.ts +278 -278
  82. package/src/services/utils.ts +115 -115
  83. package/src/services/viem.ts +34 -34
  84. package/src/setup.ts +8 -8
  85. package/src/spark/index.ts +458 -458
  86. package/src/staking/eligibility.ts +53 -53
  87. package/src/staking/index.ts +1 -1
  88. package/src/staking/staking.ts +186 -186
  89. package/src/types/aave.ts +196 -196
  90. package/src/types/claiming.ts +114 -114
  91. package/src/types/common.ts +107 -107
  92. package/src/types/compound.ts +144 -144
  93. package/src/types/curveUsd.ts +123 -123
  94. package/src/types/euler.ts +175 -175
  95. package/src/types/fluid.ts +483 -483
  96. package/src/types/index.ts +14 -14
  97. package/src/types/liquity.ts +30 -30
  98. package/src/types/liquityV2.ts +126 -126
  99. package/src/types/llamaLend.ts +159 -159
  100. package/src/types/maker.ts +63 -63
  101. package/src/types/merit.ts +1 -1
  102. package/src/types/merkl.ts +70 -70
  103. package/src/types/morphoBlue.ts +200 -200
  104. package/src/types/portfolio.ts +60 -60
  105. package/src/types/savings/index.ts +23 -23
  106. package/src/types/savings/makerDsr.ts +13 -13
  107. package/src/types/savings/morphoVaults.ts +32 -32
  108. package/src/types/savings/sky.ts +14 -14
  109. package/src/types/savings/sparkSavingsVaults.ts +15 -15
  110. package/src/types/savings/yearnV3Vaults.ts +17 -17
  111. package/src/types/savings/yearnVaults.ts +14 -14
  112. package/src/types/spark.ts +134 -134
  113. package/src/umbrella/index.ts +69 -69
  114. package/src/umbrella/umbrellaUtils.ts +29 -29
@@ -1,158 +1,158 @@
1
- import Dec from 'decimal.js';
2
- import { assetAmountInWei, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
3
- import {
4
- aprToApy, calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos,
5
- } from '../../moneymarket';
6
- import {
7
- SparkAggregatedPositionData,
8
- SparkAssetsData, SparkHelperCommon, SparkMarketData, SparkUsedAssets,
9
- } from '../../types';
10
- import { calculateNetApy } from '../../staking';
11
- import { ethToWeth, getNativeAssetFromWrapped, wethToEth } from '../../services/utils';
12
- import { SparkViewContractViem } from '../../contracts';
13
- import { EthAddress, EthereumProvider, NetworkNumber } from '../../types/common';
14
- import { borrowOperations } from '../../constants';
15
- import { getViemProvider } from '../../services/viem';
16
-
17
- export const sparkIsInIsolationMode = ({ usedAssets, assetsData }: { usedAssets: SparkUsedAssets, assetsData: SparkAssetsData }) => Object.values(usedAssets).some(({ symbol, collateral }) => collateral && assetsData[symbol].isIsolated);
18
-
19
- export const sparkGetCollSuppliedAssets = ({ usedAssets }: { usedAssets: SparkUsedAssets }) => Object.values(usedAssets).filter(({ isSupplied, collateral }) => isSupplied && collateral);
20
-
21
- export const sparkGetSuppliableAssets = ({
22
- usedAssets, eModeCategory, assetsData, selectedMarket, network, ...rest
23
- }: SparkHelperCommon) => {
24
- const data = {
25
- usedAssets, eModeCategory, assetsData, selectedMarket, network, ...rest,
26
- };
27
-
28
- const collAccountAssets = sparkGetCollSuppliedAssets(data);
29
- const marketAssets = Object.values(assetsData);
30
-
31
- if (sparkIsInIsolationMode(data)) {
32
- const collAsset = collAccountAssets[0].symbol;
33
- return marketAssets.filter(d => d.canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: symbol === collAsset }));
34
- }
35
-
36
- return marketAssets.filter(d => d.canBeSupplied).map(({ symbol, isIsolated }) => ({ symbol, canBeCollateral: !isIsolated }));
37
- };
38
-
39
- export const sparkGetSuppliableAsCollAssets = ({
40
- usedAssets, eModeCategory, assetsData, selectedMarket, network, ...rest
41
- }: SparkHelperCommon) => sparkGetSuppliableAssets({
42
- usedAssets, eModeCategory, assetsData, selectedMarket, network, ...rest,
43
- }).filter(({ canBeCollateral }) => canBeCollateral);
44
-
45
- export const sparkGetEmodeMutableProps = ({
46
- eModeCategory,
47
- eModeCategoriesData,
48
- assetsData,
49
- }: SparkHelperCommon, _asset: string) => {
50
- const asset = getNativeAssetFromWrapped(_asset);
51
-
52
- const assetData = assetsData[asset];
53
- const eModeCategoryData: { collateralAssets: string[], collateralFactor: string, liquidationRatio: string } = eModeCategoriesData?.[eModeCategory] || { collateralAssets: [], collateralFactor: '0', liquidationRatio: '0' };
54
-
55
- if (
56
- eModeCategory === 0
57
- || !eModeCategoryData.collateralAssets.includes(asset)
58
- || new Dec(eModeCategoryData.collateralFactor || 0).eq(0)
59
- ) {
60
- const { liquidationRatio, collateralFactor } = assetData;
61
- return ({ liquidationRatio, collateralFactor });
62
- }
63
- const { liquidationRatio, collateralFactor } = eModeCategoryData;
64
- return ({ liquidationRatio, collateralFactor });
65
- };
66
-
67
- export const sparkGetAggregatedPositionData = ({
68
- usedAssets,
69
- eModeCategory,
70
- eModeCategoriesData,
71
- assetsData,
72
- selectedMarket,
73
- network,
74
- ...rest
75
- }: SparkHelperCommon): SparkAggregatedPositionData => {
76
- const data = {
77
- usedAssets, eModeCategory, eModeCategoriesData, assetsData, selectedMarket, network, ...rest,
78
- };
79
- const payload = {} as SparkAggregatedPositionData;
80
- payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }: { isSupplied: boolean }) => isSupplied, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
81
- payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }: { isSupplied: boolean, collateral: boolean }) => isSupplied && collateral, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
82
- payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ borrowedUsd }: { borrowedUsd: string }) => borrowedUsd);
83
- payload.borrowLimitUsd = getAssetsTotal(
84
- usedAssets,
85
- ({ isSupplied, collateral }: { isSupplied: boolean, collateral: boolean }) => isSupplied && collateral,
86
- ({ symbol, suppliedUsd }: { symbol: string, suppliedUsd: string }) => new Dec(suppliedUsd).mul(sparkGetEmodeMutableProps(data, symbol).collateralFactor),
87
- );
88
- payload.liquidationLimitUsd = getAssetsTotal(
89
- usedAssets,
90
- ({ isSupplied, collateral }: { isSupplied: boolean, collateral: boolean }) => isSupplied && collateral,
91
- ({ symbol, suppliedUsd }: { symbol: string, suppliedUsd: string }) => new Dec(suppliedUsd).mul(sparkGetEmodeMutableProps(data, symbol).liquidationRatio),
92
- );
93
- const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
94
- payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
95
- payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
96
- payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
97
- const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({ usedAssets, assetsData });
98
- payload.netApy = netApy;
99
- payload.incentiveUsd = incentiveUsd;
100
- payload.totalInterestUsd = totalInterestUsd;
101
- payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
102
- payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
103
- const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
104
- payload.leveragedType = leveragedType;
105
- if (leveragedType !== '') {
106
- payload.leveragedAsset = leveragedAsset;
107
- let assetPrice = data.assetsData[leveragedAsset].price; // TODO sparkPrice or price??
108
- if (leveragedType === 'lsd-leverage') {
109
- // Treat ETH like a stablecoin in a long stETH position
110
- payload.leveragedLsdAssetRatio = new Dec(assetsData[leveragedAsset].price).div(assetsData.ETH.price).toDP(18).toString();
111
- assetPrice = new Dec(assetPrice).div(assetsData.ETH.price).toString();
112
- }
113
- payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
114
- }
115
- payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
116
- payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
117
- payload.healthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
118
- payload.minHealthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowLimitUsd).toDP(4).toString();
119
- return payload;
120
- };
121
-
122
- export const getApyAfterValuesEstimation = async (selectedMarket: SparkMarketData, actions: [{ action: string, amount: string, asset: string }], provider: EthereumProvider) => {
123
- const client = getViemProvider(provider, NetworkNumber.Eth);
124
- const sparkViewContract = SparkViewContractViem(client, NetworkNumber.Eth);
125
- const params = actions.map(({ action, asset, amount }: { action: string, amount: string, asset: string }) => {
126
- const isDebtAsset = borrowOperations.includes(action);
127
- const amountInWei = assetAmountInWei(amount, asset);
128
- const assetInfo = getAssetInfo(ethToWeth(asset));
129
- let liquidityAdded;
130
- let liquidityTaken;
131
- if (isDebtAsset) {
132
- liquidityAdded = action === 'payback' ? amountInWei : '0';
133
- liquidityTaken = action === 'borrow' ? amountInWei : '0';
134
- } else {
135
- liquidityAdded = action === 'collateral' ? amountInWei : '0';
136
- liquidityTaken = action === 'withdraw' ? amountInWei : '0';
137
- }
138
- return {
139
- reserveAddress: assetInfo.address as EthAddress,
140
- liquidityAdded: BigInt(liquidityAdded),
141
- liquidityTaken: BigInt(liquidityTaken),
142
- isDebtAsset,
143
- };
144
- });
145
- const data = await sparkViewContract.read.getApyAfterValuesEstimation([
146
- selectedMarket.providerAddress,
147
- params,
148
- ]);
149
- const rates: { [key: string]: { supplyRate: string, borrowRate: string } } = {};
150
- data.forEach((d) => {
151
- const asset = wethToEth(getAssetInfoByAddress(d.reserveAddress).symbol);
152
- rates[asset] = {
153
- supplyRate: aprToApy(new Dec(d.supplyRate.toString()).div(1e25).toString()),
154
- borrowRate: aprToApy(new Dec(d.variableBorrowRate.toString()).div(1e25).toString()),
155
- };
156
- });
157
- return rates;
158
- };
1
+ import Dec from 'decimal.js';
2
+ import { assetAmountInWei, getAssetInfo, getAssetInfoByAddress } from '@defisaver/tokens';
3
+ import {
4
+ aprToApy, calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos,
5
+ } from '../../moneymarket';
6
+ import {
7
+ SparkAggregatedPositionData,
8
+ SparkAssetsData, SparkHelperCommon, SparkMarketData, SparkUsedAssets,
9
+ } from '../../types';
10
+ import { calculateNetApy } from '../../staking';
11
+ import { ethToWeth, getNativeAssetFromWrapped, wethToEth } from '../../services/utils';
12
+ import { SparkViewContractViem } from '../../contracts';
13
+ import { EthAddress, EthereumProvider, NetworkNumber } from '../../types/common';
14
+ import { borrowOperations } from '../../constants';
15
+ import { getViemProvider } from '../../services/viem';
16
+
17
+ export const sparkIsInIsolationMode = ({ usedAssets, assetsData }: { usedAssets: SparkUsedAssets, assetsData: SparkAssetsData }) => Object.values(usedAssets).some(({ symbol, collateral }) => collateral && assetsData[symbol].isIsolated);
18
+
19
+ export const sparkGetCollSuppliedAssets = ({ usedAssets }: { usedAssets: SparkUsedAssets }) => Object.values(usedAssets).filter(({ isSupplied, collateral }) => isSupplied && collateral);
20
+
21
+ export const sparkGetSuppliableAssets = ({
22
+ usedAssets, eModeCategory, assetsData, selectedMarket, network, ...rest
23
+ }: SparkHelperCommon) => {
24
+ const data = {
25
+ usedAssets, eModeCategory, assetsData, selectedMarket, network, ...rest,
26
+ };
27
+
28
+ const collAccountAssets = sparkGetCollSuppliedAssets(data);
29
+ const marketAssets = Object.values(assetsData);
30
+
31
+ if (sparkIsInIsolationMode(data)) {
32
+ const collAsset = collAccountAssets[0].symbol;
33
+ return marketAssets.filter(d => d.canBeSupplied).map(({ symbol }) => ({ symbol, canBeCollateral: symbol === collAsset }));
34
+ }
35
+
36
+ return marketAssets.filter(d => d.canBeSupplied).map(({ symbol, isIsolated }) => ({ symbol, canBeCollateral: !isIsolated }));
37
+ };
38
+
39
+ export const sparkGetSuppliableAsCollAssets = ({
40
+ usedAssets, eModeCategory, assetsData, selectedMarket, network, ...rest
41
+ }: SparkHelperCommon) => sparkGetSuppliableAssets({
42
+ usedAssets, eModeCategory, assetsData, selectedMarket, network, ...rest,
43
+ }).filter(({ canBeCollateral }) => canBeCollateral);
44
+
45
+ export const sparkGetEmodeMutableProps = ({
46
+ eModeCategory,
47
+ eModeCategoriesData,
48
+ assetsData,
49
+ }: SparkHelperCommon, _asset: string) => {
50
+ const asset = getNativeAssetFromWrapped(_asset);
51
+
52
+ const assetData = assetsData[asset];
53
+ const eModeCategoryData: { collateralAssets: string[], collateralFactor: string, liquidationRatio: string } = eModeCategoriesData?.[eModeCategory] || { collateralAssets: [], collateralFactor: '0', liquidationRatio: '0' };
54
+
55
+ if (
56
+ eModeCategory === 0
57
+ || !eModeCategoryData.collateralAssets.includes(asset)
58
+ || new Dec(eModeCategoryData.collateralFactor || 0).eq(0)
59
+ ) {
60
+ const { liquidationRatio, collateralFactor } = assetData;
61
+ return ({ liquidationRatio, collateralFactor });
62
+ }
63
+ const { liquidationRatio, collateralFactor } = eModeCategoryData;
64
+ return ({ liquidationRatio, collateralFactor });
65
+ };
66
+
67
+ export const sparkGetAggregatedPositionData = ({
68
+ usedAssets,
69
+ eModeCategory,
70
+ eModeCategoriesData,
71
+ assetsData,
72
+ selectedMarket,
73
+ network,
74
+ ...rest
75
+ }: SparkHelperCommon): SparkAggregatedPositionData => {
76
+ const data = {
77
+ usedAssets, eModeCategory, eModeCategoriesData, assetsData, selectedMarket, network, ...rest,
78
+ };
79
+ const payload = {} as SparkAggregatedPositionData;
80
+ payload.suppliedUsd = getAssetsTotal(usedAssets, ({ isSupplied }: { isSupplied: boolean }) => isSupplied, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
81
+ payload.suppliedCollateralUsd = getAssetsTotal(usedAssets, ({ isSupplied, collateral }: { isSupplied: boolean, collateral: boolean }) => isSupplied && collateral, ({ suppliedUsd }: { suppliedUsd: string }) => suppliedUsd);
82
+ payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ borrowedUsd }: { borrowedUsd: string }) => borrowedUsd);
83
+ payload.borrowLimitUsd = getAssetsTotal(
84
+ usedAssets,
85
+ ({ isSupplied, collateral }: { isSupplied: boolean, collateral: boolean }) => isSupplied && collateral,
86
+ ({ symbol, suppliedUsd }: { symbol: string, suppliedUsd: string }) => new Dec(suppliedUsd).mul(sparkGetEmodeMutableProps(data, symbol).collateralFactor),
87
+ );
88
+ payload.liquidationLimitUsd = getAssetsTotal(
89
+ usedAssets,
90
+ ({ isSupplied, collateral }: { isSupplied: boolean, collateral: boolean }) => isSupplied && collateral,
91
+ ({ symbol, suppliedUsd }: { symbol: string, suppliedUsd: string }) => new Dec(suppliedUsd).mul(sparkGetEmodeMutableProps(data, symbol).liquidationRatio),
92
+ );
93
+ const leftToBorrowUsd = new Dec(payload.borrowLimitUsd).sub(payload.borrowedUsd);
94
+ payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
95
+ payload.ratio = +payload.suppliedUsd ? new Dec(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
96
+ payload.collRatio = +payload.suppliedUsd ? new Dec(payload.suppliedCollateralUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
97
+ const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy({ usedAssets, assetsData });
98
+ payload.netApy = netApy;
99
+ payload.incentiveUsd = incentiveUsd;
100
+ payload.totalInterestUsd = totalInterestUsd;
101
+ payload.liqRatio = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).toString();
102
+ payload.liqPercent = new Dec(payload.borrowLimitUsd).div(payload.liquidationLimitUsd).mul(100).toString();
103
+ const { leveragedType, leveragedAsset } = isLeveragedPos(usedAssets);
104
+ payload.leveragedType = leveragedType;
105
+ if (leveragedType !== '') {
106
+ payload.leveragedAsset = leveragedAsset;
107
+ let assetPrice = data.assetsData[leveragedAsset].price; // TODO sparkPrice or price??
108
+ if (leveragedType === 'lsd-leverage') {
109
+ // Treat ETH like a stablecoin in a long stETH position
110
+ payload.leveragedLsdAssetRatio = new Dec(assetsData[leveragedAsset].price).div(assetsData.ETH.price).toDP(18).toString();
111
+ assetPrice = new Dec(assetPrice).div(assetsData.ETH.price).toString();
112
+ }
113
+ payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
114
+ }
115
+ payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
116
+ payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
117
+ payload.healthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowedUsd).toDP(4).toString();
118
+ payload.minHealthRatio = new Dec(payload.liquidationLimitUsd).div(payload.borrowLimitUsd).toDP(4).toString();
119
+ return payload;
120
+ };
121
+
122
+ export const getApyAfterValuesEstimation = async (selectedMarket: SparkMarketData, actions: [{ action: string, amount: string, asset: string }], provider: EthereumProvider) => {
123
+ const client = getViemProvider(provider, NetworkNumber.Eth);
124
+ const sparkViewContract = SparkViewContractViem(client, NetworkNumber.Eth);
125
+ const params = actions.map(({ action, asset, amount }: { action: string, amount: string, asset: string }) => {
126
+ const isDebtAsset = borrowOperations.includes(action);
127
+ const amountInWei = assetAmountInWei(amount, asset);
128
+ const assetInfo = getAssetInfo(ethToWeth(asset));
129
+ let liquidityAdded;
130
+ let liquidityTaken;
131
+ if (isDebtAsset) {
132
+ liquidityAdded = action === 'payback' ? amountInWei : '0';
133
+ liquidityTaken = action === 'borrow' ? amountInWei : '0';
134
+ } else {
135
+ liquidityAdded = action === 'collateral' ? amountInWei : '0';
136
+ liquidityTaken = action === 'withdraw' ? amountInWei : '0';
137
+ }
138
+ return {
139
+ reserveAddress: assetInfo.address as EthAddress,
140
+ liquidityAdded: BigInt(liquidityAdded),
141
+ liquidityTaken: BigInt(liquidityTaken),
142
+ isDebtAsset,
143
+ };
144
+ });
145
+ const data = await sparkViewContract.read.getApyAfterValuesEstimation([
146
+ selectedMarket.providerAddress,
147
+ params,
148
+ ]);
149
+ const rates: { [key: string]: { supplyRate: string, borrowRate: string } } = {};
150
+ data.forEach((d) => {
151
+ const asset = wethToEth(getAssetInfoByAddress(d.reserveAddress).symbol);
152
+ rates[asset] = {
153
+ supplyRate: aprToApy(new Dec(d.supplyRate.toString()).div(1e25).toString()),
154
+ borrowRate: aprToApy(new Dec(d.variableBorrowRate.toString()).div(1e25).toString()),
155
+ };
156
+ });
157
+ return rates;
158
+ };
package/src/index.ts CHANGED
@@ -1,49 +1,49 @@
1
- import './setup';
2
-
3
- import * as fluid from './fluid';
4
- import * as aaveV3 from './aaveV3';
5
- import * as aaveV2 from './aaveV2';
6
- import * as compoundV3 from './compoundV3';
7
- import * as compoundV2 from './compoundV2';
8
- import * as spark from './spark';
9
- import * as curveUsd from './curveUsd';
10
- import * as liquity from './liquity';
11
- import * as liquityV2 from './liquityV2';
12
- import * as maker from './maker';
13
- import * as staking from './staking';
14
- import * as moneymarket from './moneymarket';
15
- import * as markets from './markets';
16
- import * as helpers from './helpers';
17
- import * as exchange from './exchange';
18
- import * as morphoBlue from './morphoBlue';
19
- import * as llamaLend from './llamaLend';
20
- import * as eulerV2 from './eulerV2';
21
- import * as portfolio from './portfolio';
22
- import * as claiming from './claiming';
23
- import * as savings from './savings';
24
-
25
- export * from './types';
26
-
27
- export {
28
- aaveV2,
29
- aaveV3,
30
- compoundV2,
31
- compoundV3,
32
- spark,
33
- curveUsd,
34
- liquity,
35
- liquityV2,
36
- maker,
37
- exchange,
38
- staking,
39
- moneymarket,
40
- markets,
41
- helpers,
42
- morphoBlue,
43
- llamaLend,
44
- eulerV2,
45
- fluid,
46
- portfolio,
47
- claiming,
48
- savings,
49
- };
1
+ import './setup';
2
+
3
+ import * as fluid from './fluid';
4
+ import * as aaveV3 from './aaveV3';
5
+ import * as aaveV2 from './aaveV2';
6
+ import * as compoundV3 from './compoundV3';
7
+ import * as compoundV2 from './compoundV2';
8
+ import * as spark from './spark';
9
+ import * as curveUsd from './curveUsd';
10
+ import * as liquity from './liquity';
11
+ import * as liquityV2 from './liquityV2';
12
+ import * as maker from './maker';
13
+ import * as staking from './staking';
14
+ import * as moneymarket from './moneymarket';
15
+ import * as markets from './markets';
16
+ import * as helpers from './helpers';
17
+ import * as exchange from './exchange';
18
+ import * as morphoBlue from './morphoBlue';
19
+ import * as llamaLend from './llamaLend';
20
+ import * as eulerV2 from './eulerV2';
21
+ import * as portfolio from './portfolio';
22
+ import * as claiming from './claiming';
23
+ import * as savings from './savings';
24
+
25
+ export * from './types';
26
+
27
+ export {
28
+ aaveV2,
29
+ aaveV3,
30
+ compoundV2,
31
+ compoundV3,
32
+ spark,
33
+ curveUsd,
34
+ liquity,
35
+ liquityV2,
36
+ maker,
37
+ exchange,
38
+ staking,
39
+ moneymarket,
40
+ markets,
41
+ helpers,
42
+ morphoBlue,
43
+ llamaLend,
44
+ eulerV2,
45
+ fluid,
46
+ portfolio,
47
+ claiming,
48
+ savings,
49
+ };