@defisaver/positions-sdk 0.0.52 → 0.0.54

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 (71) hide show
  1. package/README.md +63 -63
  2. package/cjs/curveUsd/index.js +4 -3
  3. package/cjs/llamaLend/index.js +4 -3
  4. package/cjs/markets/morphoBlue/index.d.ts +4 -0
  5. package/cjs/markets/morphoBlue/index.js +35 -1
  6. package/cjs/types/morphoBlue.d.ts +3 -1
  7. package/cjs/types/morphoBlue.js +2 -0
  8. package/esm/curveUsd/index.js +4 -3
  9. package/esm/llamaLend/index.js +4 -3
  10. package/esm/markets/morphoBlue/index.d.ts +4 -0
  11. package/esm/markets/morphoBlue/index.js +32 -0
  12. package/esm/types/morphoBlue.d.ts +3 -1
  13. package/esm/types/morphoBlue.js +2 -0
  14. package/package.json +40 -40
  15. package/src/aaveV2/index.ts +227 -227
  16. package/src/aaveV3/index.ts +561 -561
  17. package/src/assets/index.ts +60 -60
  18. package/src/chickenBonds/index.ts +123 -123
  19. package/src/compoundV2/index.ts +219 -219
  20. package/src/compoundV3/index.ts +273 -273
  21. package/src/config/contracts.js +851 -851
  22. package/src/constants/index.ts +5 -5
  23. package/src/contracts.ts +126 -126
  24. package/src/curveUsd/index.ts +229 -228
  25. package/src/exchange/index.ts +17 -17
  26. package/src/helpers/aaveHelpers/index.ts +134 -134
  27. package/src/helpers/chickenBondsHelpers/index.ts +23 -23
  28. package/src/helpers/compoundHelpers/index.ts +181 -181
  29. package/src/helpers/curveUsdHelpers/index.ts +40 -40
  30. package/src/helpers/index.ts +7 -7
  31. package/src/helpers/llamaLendHelpers/index.ts +45 -45
  32. package/src/helpers/makerHelpers/index.ts +94 -94
  33. package/src/helpers/morphoBlueHelpers/index.ts +56 -56
  34. package/src/helpers/sparkHelpers/index.ts +106 -106
  35. package/src/index.ts +46 -46
  36. package/src/liquity/index.ts +116 -116
  37. package/src/llamaLend/index.ts +279 -278
  38. package/src/maker/index.ts +117 -117
  39. package/src/markets/aave/index.ts +80 -80
  40. package/src/markets/aave/marketAssets.ts +24 -24
  41. package/src/markets/compound/index.ts +141 -141
  42. package/src/markets/compound/marketsAssets.ts +48 -48
  43. package/src/markets/curveUsd/index.ts +69 -69
  44. package/src/markets/index.ts +5 -5
  45. package/src/markets/llamaLend/index.ts +65 -65
  46. package/src/markets/morphoBlue/index.ts +153 -121
  47. package/src/markets/spark/index.ts +29 -29
  48. package/src/markets/spark/marketAssets.ts +10 -10
  49. package/src/moneymarket/moneymarketCommonService.ts +75 -75
  50. package/src/morphoAaveV2/index.ts +256 -256
  51. package/src/morphoAaveV3/index.ts +619 -619
  52. package/src/morphoBlue/index.ts +177 -177
  53. package/src/multicall/index.ts +22 -22
  54. package/src/services/dsrService.ts +15 -15
  55. package/src/services/priceService.ts +21 -21
  56. package/src/services/utils.ts +51 -51
  57. package/src/setup.ts +8 -8
  58. package/src/spark/index.ts +422 -422
  59. package/src/staking/staking.ts +167 -167
  60. package/src/types/aave.ts +256 -256
  61. package/src/types/chickenBonds.ts +45 -45
  62. package/src/types/common.ts +83 -83
  63. package/src/types/compound.ts +128 -128
  64. package/src/types/curveUsd.ts +118 -118
  65. package/src/types/index.ts +8 -8
  66. package/src/types/liquity.ts +30 -30
  67. package/src/types/llamaLend.ts +119 -119
  68. package/src/types/maker.ts +50 -50
  69. package/src/types/morphoBlue.ts +98 -96
  70. package/src/types/spark.ts +106 -106
  71. package/yarn-error.log +0 -64
package/README.md CHANGED
@@ -1,63 +1,63 @@
1
- # DeFi Saver Positions SDK
2
-
3
- Supported protocols:
4
- - [Maker](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/maker)
5
- - [Spark](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/spark)
6
- - [CrvUSD](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/curveUsd)
7
- - [Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV2)
8
- - [Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV3)
9
- - [Morpho Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV2)
10
- - [Morpho Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV3)
11
- - [Compound V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV2)
12
- - [Compound V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV3)
13
- - [Liquity](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/liquity)
14
- - [Chicken Bonds](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/chickenBonds)
15
-
16
- ## Setup
17
- Supported Node version is v10.
18
-
19
- - run `npm install` (first time)
20
- - run `npm run build`
21
-
22
- `build` command will generate contracts and build ejs and esm folders
23
-
24
- ## How to use
25
- [All available imports](https://github.com/defisaver/defisaver-positions-sdk/blob/main/src/index.ts)
26
-
27
- This is a Compound V3 example, and every other protocol is similar
28
- ```js
29
- import Web3 from 'web3';
30
- import { compoundV3 } from '@defisaver/positions-sdk';
31
-
32
-
33
- // every protocol has market data and user data getters
34
- const {
35
- getCompoundV3MarketsData,
36
- getCompoundV3AccountData,
37
- } = compoundV3;
38
-
39
- const provider = 'Your RPC provider';
40
- const web3 = new Web3(provider);
41
-
42
- const user = '0x123...';
43
-
44
- const { assetsData } = await getCompoundV3MarketsData(
45
- web3, // rpc for the network you are using (note: can be tenderly or any other testnet rpc)
46
- 1, // network
47
- selectedMarket, // market object like in /src/markets/compound/index.ts
48
- web3, // this must be mainnet rpc - used for getting prices onchain and calculating apys
49
- );
50
-
51
- const userData = await getCompoundV3AccountData(
52
- web3,
53
- 1, // network
54
- userAddress, // EOA or DSProxy
55
- '', // proxy address of the user, or just empty string if checking for EOA
56
- {
57
- selectedMarket, // market object as in /src/markets/compound/index.ts
58
- assetsData,
59
- }
60
- );
61
- ```
62
-
63
- More examples found [here](https://github.com/defisaver/defisaver-positions-sdk/tree/main/tests)
1
+ # DeFi Saver Positions SDK
2
+
3
+ Supported protocols:
4
+ - [Maker](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/maker)
5
+ - [Spark](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/spark)
6
+ - [CrvUSD](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/curveUsd)
7
+ - [Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV2)
8
+ - [Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV3)
9
+ - [Morpho Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV2)
10
+ - [Morpho Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV3)
11
+ - [Compound V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV2)
12
+ - [Compound V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV3)
13
+ - [Liquity](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/liquity)
14
+ - [Chicken Bonds](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/chickenBonds)
15
+
16
+ ## Setup
17
+ Supported Node version is v10.
18
+
19
+ - run `npm install` (first time)
20
+ - run `npm run build`
21
+
22
+ `build` command will generate contracts and build ejs and esm folders
23
+
24
+ ## How to use
25
+ [All available imports](https://github.com/defisaver/defisaver-positions-sdk/blob/main/src/index.ts)
26
+
27
+ This is a Compound V3 example, and every other protocol is similar
28
+ ```js
29
+ import Web3 from 'web3';
30
+ import { compoundV3 } from '@defisaver/positions-sdk';
31
+
32
+
33
+ // every protocol has market data and user data getters
34
+ const {
35
+ getCompoundV3MarketsData,
36
+ getCompoundV3AccountData,
37
+ } = compoundV3;
38
+
39
+ const provider = 'Your RPC provider';
40
+ const web3 = new Web3(provider);
41
+
42
+ const user = '0x123...';
43
+
44
+ const { assetsData } = await getCompoundV3MarketsData(
45
+ web3, // rpc for the network you are using (note: can be tenderly or any other testnet rpc)
46
+ 1, // network
47
+ selectedMarket, // market object like in /src/markets/compound/index.ts
48
+ web3, // this must be mainnet rpc - used for getting prices onchain and calculating apys
49
+ );
50
+
51
+ const userData = await getCompoundV3AccountData(
52
+ web3,
53
+ 1, // network
54
+ userAddress, // EOA or DSProxy
55
+ '', // proxy address of the user, or just empty string if checking for EOA
56
+ {
57
+ selectedMarket, // market object as in /src/markets/compound/index.ts
58
+ assetsData,
59
+ }
60
+ );
61
+ ```
62
+
63
+ More examples found [here](https://github.com/defisaver/defisaver-positions-sdk/tree/main/tests)
@@ -102,13 +102,14 @@ const getCurveUsdGlobalData = (web3, network, selectedMarket) => __awaiter(void
102
102
  futureBorrowRate, bands: bandsData, leftToBorrow });
103
103
  });
104
104
  exports.getCurveUsdGlobalData = getCurveUsdGlobalData;
105
- const getStatusForUser = (bandRange, activeBand, crvUSDSupplied, collSupplied) => {
105
+ const getStatusForUser = (bandRange, activeBand, crvUSDSupplied, collSupplied, healthPercent) => {
106
106
  // if bands are equal, that can only be [0,0] which means user doesn't have loan (min number of bands is 4)
107
107
  if (new decimal_js_1.default(bandRange[0]).eq(bandRange[1]))
108
108
  return types_1.CrvUSDStatus.Nonexistant;
109
109
  // if user doesn't have crvUSD as collateral, then his position is not in soft liquidation
110
110
  if (new decimal_js_1.default(crvUSDSupplied).lte(0)) {
111
- if (new decimal_js_1.default(bandRange[0]).minus(activeBand).lte(3))
111
+ const isHealthRisky = new decimal_js_1.default(healthPercent).lt(10);
112
+ if (new decimal_js_1.default(bandRange[0]).minus(activeBand).lte(3) || isHealthRisky)
112
113
  return types_1.CrvUSDStatus.Risk; // if user band is less than 3 bands away from active band, his position is at risk
113
114
  return types_1.CrvUSDStatus.Safe;
114
115
  }
@@ -180,7 +181,7 @@ const getCurveUsdUserData = (web3, network, address, selectedMarket, activeBand)
180
181
  const priceHigh = (0, tokens_1.assetAmountInEth)(data.priceHigh);
181
182
  const priceLow = (0, tokens_1.assetAmountInEth)(data.priceLow);
182
183
  const _userBands = data.loanExists ? (yield getAndFormatBands(web3, network, selectedMarket, data.bandRange[0], data.bandRange[1])) : [];
183
- const status = data.loanExists ? getStatusForUser(data.bandRange, activeBand, crvUSDSupplied, collSupplied) : types_1.CrvUSDStatus.Nonexistant;
184
+ const status = data.loanExists ? getStatusForUser(data.bandRange, activeBand, crvUSDSupplied, collSupplied, healthPercent) : types_1.CrvUSDStatus.Nonexistant;
184
185
  const userBands = _userBands.map((band, index) => (Object.assign(Object.assign({}, band), { userDebtAmount: (0, tokens_1.assetAmountInEth)(data.usersBands[0][index], debtAsset), userCollAmount: (0, tokens_1.assetAmountInEth)(data.usersBands[1][index], collAsset) }))).sort((a, b) => parseInt(b.id, 10) - parseInt(a.id, 10));
185
186
  return Object.assign(Object.assign(Object.assign(Object.assign({}, data), { debtAmount: (0, tokens_1.assetAmountInEth)(data.debtAmount, debtAsset), health,
186
187
  healthPercent,
@@ -133,13 +133,14 @@ const getLlamaLendGlobalData = (web3, network, selectedMarket) => __awaiter(void
133
133
  futureBorrowRate, bands: bandsData, leftToBorrow });
134
134
  });
135
135
  exports.getLlamaLendGlobalData = getLlamaLendGlobalData;
136
- const getStatusForUser = (bandRange, activeBand, debtSupplied, collSupplied) => {
136
+ const getStatusForUser = (bandRange, activeBand, debtSupplied, collSupplied, healthPercent) => {
137
137
  // if bands are equal, that can only be [0,0] which means user doesn't have loan (min number of bands is 4)
138
138
  if (new decimal_js_1.default(bandRange[0]).eq(bandRange[1]))
139
139
  return types_1.LlamaLendStatus.Nonexistant;
140
140
  // if user doesn't have debtAsset as collateral, then his position is not in soft liquidation
141
141
  if (new decimal_js_1.default(debtSupplied).lte(0)) {
142
- if (new decimal_js_1.default(bandRange[0]).minus(activeBand).lte(3))
142
+ const isHealthRisky = new decimal_js_1.default(healthPercent).lt(10);
143
+ if (new decimal_js_1.default(bandRange[0]).minus(activeBand).lte(3) || isHealthRisky)
143
144
  return types_1.LlamaLendStatus.Risk; // if user band is less than 3 bands away from active band, his position is at risk
144
145
  return types_1.LlamaLendStatus.Safe;
145
146
  }
@@ -219,7 +220,7 @@ const getLlamaLendUserData = (web3, network, address, selectedMarket, marketData
219
220
  const priceHigh = (0, tokens_1.assetAmountInEth)(data.priceHigh);
220
221
  const priceLow = (0, tokens_1.assetAmountInEth)(data.priceLow);
221
222
  const _userBands = data.loanExists ? (yield getAndFormatBands(web3, network, selectedMarket, data.bandRange[0], data.bandRange[1])) : [];
222
- const status = data.loanExists ? getStatusForUser(data.bandRange, marketData.activeBand, debtSupplied, collSupplied) : types_1.LlamaLendStatus.Nonexistant;
223
+ const status = data.loanExists ? getStatusForUser(data.bandRange, marketData.activeBand, debtSupplied, collSupplied, healthPercent) : types_1.LlamaLendStatus.Nonexistant;
223
224
  const userBands = _userBands.map((band, index) => (Object.assign(Object.assign({}, band), { userDebtAmount: (0, tokens_1.assetAmountInEth)(data.usersBands[0][index], debtAsset), userCollAmount: (0, tokens_1.assetAmountInEth)(data.usersBands[1][index], collAsset) }))).sort((a, b) => parseInt(b.id, 10) - parseInt(a.id, 10));
224
225
  return Object.assign(Object.assign(Object.assign(Object.assign({}, data), { debtAmount: (0, tokens_1.assetAmountInEth)(data.debtAmount, debtAsset), health,
225
226
  healthPercent,
@@ -7,6 +7,8 @@ export declare const MORPHO_BLUE_WBTC_USDC: (networkId?: NetworkNumber) => Morph
7
7
  export declare const MORPHO_BLUE_ETH_USDC: (networkId?: NetworkNumber) => MorphoBlueMarketData;
8
8
  export declare const MORPHO_BLUE_WBTC_USDT: (networkId?: NetworkNumber) => MorphoBlueMarketData;
9
9
  export declare const MORPHO_BLUE_WSTETH_USDT: (networkId?: NetworkNumber) => MorphoBlueMarketData;
10
+ export declare const MORPHO_BLUE_SUSDE_DAI: (networkId?: NetworkNumber) => MorphoBlueMarketData;
11
+ export declare const MORPHO_BLUE_USDE_DAI: (networkId?: NetworkNumber) => MorphoBlueMarketData;
10
12
  export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
11
13
  readonly morphobluewstetheth: MorphoBlueMarketData;
12
14
  readonly morphobluewstethusdc: MorphoBlueMarketData;
@@ -15,4 +17,6 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
15
17
  readonly morphoblueethusdc: MorphoBlueMarketData;
16
18
  readonly morphobluewbtcusdt: MorphoBlueMarketData;
17
19
  readonly morphobluewstethusdt: MorphoBlueMarketData;
20
+ readonly morphobluesusdedai: MorphoBlueMarketData;
21
+ readonly morphoblueusdedai: MorphoBlueMarketData;
18
22
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MorphoBlueMarkets = exports.MORPHO_BLUE_WSTETH_USDT = exports.MORPHO_BLUE_WBTC_USDT = exports.MORPHO_BLUE_ETH_USDC = exports.MORPHO_BLUE_WBTC_USDC = exports.MORPHO_BLUE_SDAI_USDC = exports.MORPHO_BLUE_WSTETH_USDC = exports.MORPHO_BLUE_WSTETH_ETH = void 0;
3
+ exports.MorphoBlueMarkets = exports.MORPHO_BLUE_USDE_DAI = exports.MORPHO_BLUE_SUSDE_DAI = exports.MORPHO_BLUE_WSTETH_USDT = exports.MORPHO_BLUE_WBTC_USDT = exports.MORPHO_BLUE_ETH_USDC = exports.MORPHO_BLUE_WBTC_USDC = exports.MORPHO_BLUE_SDAI_USDC = exports.MORPHO_BLUE_WSTETH_USDC = exports.MORPHO_BLUE_WSTETH_ETH = void 0;
4
4
  const types_1 = require("../../types");
5
5
  const common_1 = require("../../types/common");
6
6
  const MORPHO_BLUE_WSTETH_ETH = (networkId = common_1.NetworkNumber.Eth) => ({
@@ -115,6 +115,38 @@ const MORPHO_BLUE_WSTETH_USDT = (networkId = common_1.NetworkNumber.Eth) => ({
115
115
  protocolName: 'morpho-blue',
116
116
  });
117
117
  exports.MORPHO_BLUE_WSTETH_USDT = MORPHO_BLUE_WSTETH_USDT;
118
+ const MORPHO_BLUE_SUSDE_DAI = (networkId = common_1.NetworkNumber.Eth) => ({
119
+ chainIds: [1],
120
+ label: 'Morpho Blue',
121
+ shortLabel: 'sUSDe/DAI',
122
+ value: types_1.MorphoBlueVersions.MorphoBlueSUSDeDAI,
123
+ url: 'susdedai',
124
+ loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
125
+ collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
126
+ oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
127
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
128
+ lltv: 0.915,
129
+ marketId: '0x1247f1c237eceae0602eab1470a5061a6dd8f734ba88c7cdc5d6109fb0026b28',
130
+ // icon: SvgAdapter(protocolIcons.spark),
131
+ protocolName: 'morpho-blue',
132
+ });
133
+ exports.MORPHO_BLUE_SUSDE_DAI = MORPHO_BLUE_SUSDE_DAI;
134
+ const MORPHO_BLUE_USDE_DAI = (networkId = common_1.NetworkNumber.Eth) => ({
135
+ chainIds: [1],
136
+ label: 'Morpho Blue',
137
+ shortLabel: 'USDe/DAI',
138
+ value: types_1.MorphoBlueVersions.MorphoBlueUSDeDAI,
139
+ url: 'usdedai',
140
+ loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
141
+ collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
142
+ oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
143
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
144
+ lltv: 0.915,
145
+ marketId: '0xe7e9694b754c4d4f7e21faf7223f6fa71abaeb10296a4c43a54a7977149687d2',
146
+ // icon: SvgAdapter(protocolIcons.spark),
147
+ protocolName: 'morpho-blue',
148
+ });
149
+ exports.MORPHO_BLUE_USDE_DAI = MORPHO_BLUE_USDE_DAI;
118
150
  const MorphoBlueMarkets = (networkId) => ({
119
151
  [types_1.MorphoBlueVersions.MorphoBlueWstEthEth]: (0, exports.MORPHO_BLUE_WSTETH_ETH)(networkId),
120
152
  [types_1.MorphoBlueVersions.MorphoBlueWstEthUSDC]: (0, exports.MORPHO_BLUE_WSTETH_USDC)(networkId),
@@ -123,5 +155,7 @@ const MorphoBlueMarkets = (networkId) => ({
123
155
  [types_1.MorphoBlueVersions.MorphoBlueEthUSDC]: (0, exports.MORPHO_BLUE_ETH_USDC)(networkId),
124
156
  [types_1.MorphoBlueVersions.MorphoBlueWBTCUSDT]: (0, exports.MORPHO_BLUE_WBTC_USDT)(networkId),
125
157
  [types_1.MorphoBlueVersions.MorphoBlueWstEthUSDT]: (0, exports.MORPHO_BLUE_WSTETH_USDT)(networkId),
158
+ [types_1.MorphoBlueVersions.MorphoBlueSUSDeDAI]: (0, exports.MORPHO_BLUE_SUSDE_DAI)(networkId),
159
+ [types_1.MorphoBlueVersions.MorphoBlueUSDeDAI]: (0, exports.MORPHO_BLUE_USDE_DAI)(networkId),
126
160
  });
127
161
  exports.MorphoBlueMarkets = MorphoBlueMarkets;
@@ -6,7 +6,9 @@ export declare enum MorphoBlueVersions {
6
6
  MorphoBlueWBTCUSDC = "morphobluewbtcusdc",
7
7
  MorphoBlueEthUSDC = "morphoblueethusdc",
8
8
  MorphoBlueWBTCUSDT = "morphobluewbtcusdt",
9
- MorphoBlueWstEthUSDT = "morphobluewstethusdt"
9
+ MorphoBlueWstEthUSDT = "morphobluewstethusdt",
10
+ MorphoBlueSUSDeDAI = "morphobluesusdedai",
11
+ MorphoBlueUSDeDAI = "morphoblueusdedai"
10
12
  }
11
13
  export interface MorphoBlueMarketData {
12
14
  chainIds: NetworkNumber[];
@@ -10,4 +10,6 @@ var MorphoBlueVersions;
10
10
  MorphoBlueVersions["MorphoBlueEthUSDC"] = "morphoblueethusdc";
11
11
  MorphoBlueVersions["MorphoBlueWBTCUSDT"] = "morphobluewbtcusdt";
12
12
  MorphoBlueVersions["MorphoBlueWstEthUSDT"] = "morphobluewstethusdt";
13
+ MorphoBlueVersions["MorphoBlueSUSDeDAI"] = "morphobluesusdedai";
14
+ MorphoBlueVersions["MorphoBlueUSDeDAI"] = "morphoblueusdedai";
13
15
  })(MorphoBlueVersions || (exports.MorphoBlueVersions = MorphoBlueVersions = {}));
@@ -95,13 +95,14 @@ export const getCurveUsdGlobalData = (web3, network, selectedMarket) => __awaite
95
95
  ammPrice, oraclePrice: assetAmountInEth(data.oraclePrice, debtAsset), basePrice: assetAmountInEth(data.basePrice, debtAsset), minted: assetAmountInEth(data.minted, debtAsset), redeemed: assetAmountInEth(data.redeemed, debtAsset), borrowRate,
96
96
  futureBorrowRate, bands: bandsData, leftToBorrow });
97
97
  });
98
- const getStatusForUser = (bandRange, activeBand, crvUSDSupplied, collSupplied) => {
98
+ const getStatusForUser = (bandRange, activeBand, crvUSDSupplied, collSupplied, healthPercent) => {
99
99
  // if bands are equal, that can only be [0,0] which means user doesn't have loan (min number of bands is 4)
100
100
  if (new Dec(bandRange[0]).eq(bandRange[1]))
101
101
  return CrvUSDStatus.Nonexistant;
102
102
  // if user doesn't have crvUSD as collateral, then his position is not in soft liquidation
103
103
  if (new Dec(crvUSDSupplied).lte(0)) {
104
- if (new Dec(bandRange[0]).minus(activeBand).lte(3))
104
+ const isHealthRisky = new Dec(healthPercent).lt(10);
105
+ if (new Dec(bandRange[0]).minus(activeBand).lte(3) || isHealthRisky)
105
106
  return CrvUSDStatus.Risk; // if user band is less than 3 bands away from active band, his position is at risk
106
107
  return CrvUSDStatus.Safe;
107
108
  }
@@ -172,7 +173,7 @@ export const getCurveUsdUserData = (web3, network, address, selectedMarket, acti
172
173
  const priceHigh = assetAmountInEth(data.priceHigh);
173
174
  const priceLow = assetAmountInEth(data.priceLow);
174
175
  const _userBands = data.loanExists ? (yield getAndFormatBands(web3, network, selectedMarket, data.bandRange[0], data.bandRange[1])) : [];
175
- const status = data.loanExists ? getStatusForUser(data.bandRange, activeBand, crvUSDSupplied, collSupplied) : CrvUSDStatus.Nonexistant;
176
+ const status = data.loanExists ? getStatusForUser(data.bandRange, activeBand, crvUSDSupplied, collSupplied, healthPercent) : CrvUSDStatus.Nonexistant;
176
177
  const userBands = _userBands.map((band, index) => (Object.assign(Object.assign({}, band), { userDebtAmount: assetAmountInEth(data.usersBands[0][index], debtAsset), userCollAmount: assetAmountInEth(data.usersBands[1][index], collAsset) }))).sort((a, b) => parseInt(b.id, 10) - parseInt(a.id, 10));
177
178
  return Object.assign(Object.assign(Object.assign(Object.assign({}, data), { debtAmount: assetAmountInEth(data.debtAmount, debtAsset), health,
178
179
  healthPercent,
@@ -126,13 +126,14 @@ export const getLlamaLendGlobalData = (web3, network, selectedMarket) => __await
126
126
  lendRate,
127
127
  futureBorrowRate, bands: bandsData, leftToBorrow });
128
128
  });
129
- const getStatusForUser = (bandRange, activeBand, debtSupplied, collSupplied) => {
129
+ const getStatusForUser = (bandRange, activeBand, debtSupplied, collSupplied, healthPercent) => {
130
130
  // if bands are equal, that can only be [0,0] which means user doesn't have loan (min number of bands is 4)
131
131
  if (new Dec(bandRange[0]).eq(bandRange[1]))
132
132
  return LlamaLendStatus.Nonexistant;
133
133
  // if user doesn't have debtAsset as collateral, then his position is not in soft liquidation
134
134
  if (new Dec(debtSupplied).lte(0)) {
135
- if (new Dec(bandRange[0]).minus(activeBand).lte(3))
135
+ const isHealthRisky = new Dec(healthPercent).lt(10);
136
+ if (new Dec(bandRange[0]).minus(activeBand).lte(3) || isHealthRisky)
136
137
  return LlamaLendStatus.Risk; // if user band is less than 3 bands away from active band, his position is at risk
137
138
  return LlamaLendStatus.Safe;
138
139
  }
@@ -211,7 +212,7 @@ export const getLlamaLendUserData = (web3, network, address, selectedMarket, mar
211
212
  const priceHigh = assetAmountInEth(data.priceHigh);
212
213
  const priceLow = assetAmountInEth(data.priceLow);
213
214
  const _userBands = data.loanExists ? (yield getAndFormatBands(web3, network, selectedMarket, data.bandRange[0], data.bandRange[1])) : [];
214
- const status = data.loanExists ? getStatusForUser(data.bandRange, marketData.activeBand, debtSupplied, collSupplied) : LlamaLendStatus.Nonexistant;
215
+ const status = data.loanExists ? getStatusForUser(data.bandRange, marketData.activeBand, debtSupplied, collSupplied, healthPercent) : LlamaLendStatus.Nonexistant;
215
216
  const userBands = _userBands.map((band, index) => (Object.assign(Object.assign({}, band), { userDebtAmount: assetAmountInEth(data.usersBands[0][index], debtAsset), userCollAmount: assetAmountInEth(data.usersBands[1][index], collAsset) }))).sort((a, b) => parseInt(b.id, 10) - parseInt(a.id, 10));
216
217
  return Object.assign(Object.assign(Object.assign(Object.assign({}, data), { debtAmount: assetAmountInEth(data.debtAmount, debtAsset), health,
217
218
  healthPercent,
@@ -7,6 +7,8 @@ export declare const MORPHO_BLUE_WBTC_USDC: (networkId?: NetworkNumber) => Morph
7
7
  export declare const MORPHO_BLUE_ETH_USDC: (networkId?: NetworkNumber) => MorphoBlueMarketData;
8
8
  export declare const MORPHO_BLUE_WBTC_USDT: (networkId?: NetworkNumber) => MorphoBlueMarketData;
9
9
  export declare const MORPHO_BLUE_WSTETH_USDT: (networkId?: NetworkNumber) => MorphoBlueMarketData;
10
+ export declare const MORPHO_BLUE_SUSDE_DAI: (networkId?: NetworkNumber) => MorphoBlueMarketData;
11
+ export declare const MORPHO_BLUE_USDE_DAI: (networkId?: NetworkNumber) => MorphoBlueMarketData;
10
12
  export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
11
13
  readonly morphobluewstetheth: MorphoBlueMarketData;
12
14
  readonly morphobluewstethusdc: MorphoBlueMarketData;
@@ -15,4 +17,6 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
15
17
  readonly morphoblueethusdc: MorphoBlueMarketData;
16
18
  readonly morphobluewbtcusdt: MorphoBlueMarketData;
17
19
  readonly morphobluewstethusdt: MorphoBlueMarketData;
20
+ readonly morphobluesusdedai: MorphoBlueMarketData;
21
+ readonly morphoblueusdedai: MorphoBlueMarketData;
18
22
  };
@@ -105,6 +105,36 @@ export const MORPHO_BLUE_WSTETH_USDT = (networkId = NetworkNumber.Eth) => ({
105
105
  // icon: SvgAdapter(protocolIcons.spark),
106
106
  protocolName: 'morpho-blue',
107
107
  });
108
+ export const MORPHO_BLUE_SUSDE_DAI = (networkId = NetworkNumber.Eth) => ({
109
+ chainIds: [1],
110
+ label: 'Morpho Blue',
111
+ shortLabel: 'sUSDe/DAI',
112
+ value: MorphoBlueVersions.MorphoBlueSUSDeDAI,
113
+ url: 'susdedai',
114
+ loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
115
+ collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
116
+ oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
117
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
118
+ lltv: 0.915,
119
+ marketId: '0x1247f1c237eceae0602eab1470a5061a6dd8f734ba88c7cdc5d6109fb0026b28',
120
+ // icon: SvgAdapter(protocolIcons.spark),
121
+ protocolName: 'morpho-blue',
122
+ });
123
+ export const MORPHO_BLUE_USDE_DAI = (networkId = NetworkNumber.Eth) => ({
124
+ chainIds: [1],
125
+ label: 'Morpho Blue',
126
+ shortLabel: 'USDe/DAI',
127
+ value: MorphoBlueVersions.MorphoBlueUSDeDAI,
128
+ url: 'usdedai',
129
+ loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
130
+ collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
131
+ oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
132
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
133
+ lltv: 0.915,
134
+ marketId: '0xe7e9694b754c4d4f7e21faf7223f6fa71abaeb10296a4c43a54a7977149687d2',
135
+ // icon: SvgAdapter(protocolIcons.spark),
136
+ protocolName: 'morpho-blue',
137
+ });
108
138
  export const MorphoBlueMarkets = (networkId) => ({
109
139
  [MorphoBlueVersions.MorphoBlueWstEthEth]: MORPHO_BLUE_WSTETH_ETH(networkId),
110
140
  [MorphoBlueVersions.MorphoBlueWstEthUSDC]: MORPHO_BLUE_WSTETH_USDC(networkId),
@@ -113,4 +143,6 @@ export const MorphoBlueMarkets = (networkId) => ({
113
143
  [MorphoBlueVersions.MorphoBlueEthUSDC]: MORPHO_BLUE_ETH_USDC(networkId),
114
144
  [MorphoBlueVersions.MorphoBlueWBTCUSDT]: MORPHO_BLUE_WBTC_USDT(networkId),
115
145
  [MorphoBlueVersions.MorphoBlueWstEthUSDT]: MORPHO_BLUE_WSTETH_USDT(networkId),
146
+ [MorphoBlueVersions.MorphoBlueSUSDeDAI]: MORPHO_BLUE_SUSDE_DAI(networkId),
147
+ [MorphoBlueVersions.MorphoBlueUSDeDAI]: MORPHO_BLUE_USDE_DAI(networkId),
116
148
  });
@@ -6,7 +6,9 @@ export declare enum MorphoBlueVersions {
6
6
  MorphoBlueWBTCUSDC = "morphobluewbtcusdc",
7
7
  MorphoBlueEthUSDC = "morphoblueethusdc",
8
8
  MorphoBlueWBTCUSDT = "morphobluewbtcusdt",
9
- MorphoBlueWstEthUSDT = "morphobluewstethusdt"
9
+ MorphoBlueWstEthUSDT = "morphobluewstethusdt",
10
+ MorphoBlueSUSDeDAI = "morphobluesusdedai",
11
+ MorphoBlueUSDeDAI = "morphoblueusdedai"
10
12
  }
11
13
  export interface MorphoBlueMarketData {
12
14
  chainIds: NetworkNumber[];
@@ -7,4 +7,6 @@ export var MorphoBlueVersions;
7
7
  MorphoBlueVersions["MorphoBlueEthUSDC"] = "morphoblueethusdc";
8
8
  MorphoBlueVersions["MorphoBlueWBTCUSDT"] = "morphobluewbtcusdt";
9
9
  MorphoBlueVersions["MorphoBlueWstEthUSDT"] = "morphobluewstethusdt";
10
+ MorphoBlueVersions["MorphoBlueSUSDeDAI"] = "morphobluesusdedai";
11
+ MorphoBlueVersions["MorphoBlueUSDeDAI"] = "morphoblueusdedai";
10
12
  })(MorphoBlueVersions || (MorphoBlueVersions = {}));
package/package.json CHANGED
@@ -1,40 +1,40 @@
1
- {
2
- "name": "@defisaver/positions-sdk",
3
- "version": "0.0.52",
4
- "description": "",
5
- "main": "./cjs/index.js",
6
- "module": "./esm/index.js",
7
- "types": "./esm/index.d.ts",
8
- "scripts": {
9
- "build:esm": "rm -rf esm && tsc -p tsconfig.json",
10
- "build:cjs": "rm -rf cjs && tsc -p tsconfig.cjs.json",
11
- "build": "npm run generate-contracts && npm run build:cjs && npm run build:esm",
12
- "dev": "npm run generate-contracts && tsc -p tsconfig.cjs.json --watch",
13
- "lint": "eslint src/ --fix",
14
- "generate-contracts": "node scripts/generateContracts.js",
15
- "test": "mocha tests/*",
16
- "build-test": "npm run build && mocha tests/*"
17
- },
18
- "keywords": [],
19
- "author": "",
20
- "license": "ISC",
21
- "dependencies": {
22
- "@defisaver/tokens": "^1.5.7",
23
- "@ethersproject/bignumber": "^5.7.0",
24
- "@morpho-org/morpho-aave-v3-sdk": "^1.5.3",
25
- "decimal.js": "^10.4.3"
26
- },
27
- "devDependencies": {
28
- "@defisaver/eslint-config": "^1.0.1",
29
- "chai": "^4.3.8",
30
- "dotenv": "^16.3.1",
31
- "eslint": "^8.49.0",
32
- "mocha": "^10.2.0",
33
- "typechain": "^8.3.1",
34
- "typechain-target-web3-v1-3mihai3": "^6.0.2",
35
- "typescript": "^5.2.2"
36
- },
37
- "peerDependencies": {
38
- "web3": "^1.10.2"
39
- }
40
- }
1
+ {
2
+ "name": "@defisaver/positions-sdk",
3
+ "version": "0.0.54",
4
+ "description": "",
5
+ "main": "./cjs/index.js",
6
+ "module": "./esm/index.js",
7
+ "types": "./esm/index.d.ts",
8
+ "scripts": {
9
+ "build:esm": "rm -rf esm && tsc -p tsconfig.json",
10
+ "build:cjs": "rm -rf cjs && tsc -p tsconfig.cjs.json",
11
+ "build": "npm run generate-contracts && npm run build:cjs && npm run build:esm",
12
+ "dev": "npm run generate-contracts && tsc -p tsconfig.cjs.json --watch",
13
+ "lint": "eslint src/ --fix",
14
+ "generate-contracts": "node scripts/generateContracts.js",
15
+ "test": "mocha tests/*",
16
+ "build-test": "npm run build && mocha tests/*"
17
+ },
18
+ "keywords": [],
19
+ "author": "",
20
+ "license": "ISC",
21
+ "dependencies": {
22
+ "@defisaver/tokens": "^1.5.8",
23
+ "@ethersproject/bignumber": "^5.7.0",
24
+ "@morpho-org/morpho-aave-v3-sdk": "^1.5.3",
25
+ "decimal.js": "^10.4.3"
26
+ },
27
+ "devDependencies": {
28
+ "@defisaver/eslint-config": "^1.0.1",
29
+ "chai": "^4.3.8",
30
+ "dotenv": "^16.3.1",
31
+ "eslint": "^8.49.0",
32
+ "mocha": "^10.2.0",
33
+ "typechain": "^8.3.1",
34
+ "typechain-target-web3-v1-3mihai3": "^6.0.2",
35
+ "typescript": "^5.2.2"
36
+ },
37
+ "peerDependencies": {
38
+ "web3": "^1.10.2"
39
+ }
40
+ }