@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.
- package/README.md +63 -63
- package/cjs/curveUsd/index.js +4 -3
- package/cjs/llamaLend/index.js +4 -3
- package/cjs/markets/morphoBlue/index.d.ts +4 -0
- package/cjs/markets/morphoBlue/index.js +35 -1
- package/cjs/types/morphoBlue.d.ts +3 -1
- package/cjs/types/morphoBlue.js +2 -0
- package/esm/curveUsd/index.js +4 -3
- package/esm/llamaLend/index.js +4 -3
- package/esm/markets/morphoBlue/index.d.ts +4 -0
- package/esm/markets/morphoBlue/index.js +32 -0
- package/esm/types/morphoBlue.d.ts +3 -1
- package/esm/types/morphoBlue.js +2 -0
- package/package.json +40 -40
- package/src/aaveV2/index.ts +227 -227
- package/src/aaveV3/index.ts +561 -561
- package/src/assets/index.ts +60 -60
- package/src/chickenBonds/index.ts +123 -123
- package/src/compoundV2/index.ts +219 -219
- package/src/compoundV3/index.ts +273 -273
- package/src/config/contracts.js +851 -851
- package/src/constants/index.ts +5 -5
- package/src/contracts.ts +126 -126
- package/src/curveUsd/index.ts +229 -228
- package/src/exchange/index.ts +17 -17
- package/src/helpers/aaveHelpers/index.ts +134 -134
- package/src/helpers/chickenBondsHelpers/index.ts +23 -23
- package/src/helpers/compoundHelpers/index.ts +181 -181
- package/src/helpers/curveUsdHelpers/index.ts +40 -40
- package/src/helpers/index.ts +7 -7
- package/src/helpers/llamaLendHelpers/index.ts +45 -45
- package/src/helpers/makerHelpers/index.ts +94 -94
- package/src/helpers/morphoBlueHelpers/index.ts +56 -56
- package/src/helpers/sparkHelpers/index.ts +106 -106
- package/src/index.ts +46 -46
- package/src/liquity/index.ts +116 -116
- package/src/llamaLend/index.ts +279 -278
- package/src/maker/index.ts +117 -117
- package/src/markets/aave/index.ts +80 -80
- package/src/markets/aave/marketAssets.ts +24 -24
- package/src/markets/compound/index.ts +141 -141
- package/src/markets/compound/marketsAssets.ts +48 -48
- package/src/markets/curveUsd/index.ts +69 -69
- package/src/markets/index.ts +5 -5
- package/src/markets/llamaLend/index.ts +65 -65
- package/src/markets/morphoBlue/index.ts +153 -121
- package/src/markets/spark/index.ts +29 -29
- package/src/markets/spark/marketAssets.ts +10 -10
- package/src/moneymarket/moneymarketCommonService.ts +75 -75
- package/src/morphoAaveV2/index.ts +256 -256
- package/src/morphoAaveV3/index.ts +619 -619
- package/src/morphoBlue/index.ts +177 -177
- package/src/multicall/index.ts +22 -22
- package/src/services/dsrService.ts +15 -15
- package/src/services/priceService.ts +21 -21
- package/src/services/utils.ts +51 -51
- package/src/setup.ts +8 -8
- package/src/spark/index.ts +422 -422
- package/src/staking/staking.ts +167 -167
- package/src/types/aave.ts +256 -256
- package/src/types/chickenBonds.ts +45 -45
- package/src/types/common.ts +83 -83
- package/src/types/compound.ts +128 -128
- package/src/types/curveUsd.ts +118 -118
- package/src/types/index.ts +8 -8
- package/src/types/liquity.ts +30 -30
- package/src/types/llamaLend.ts +119 -119
- package/src/types/maker.ts +50 -50
- package/src/types/morphoBlue.ts +98 -96
- package/src/types/spark.ts +106 -106
- 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)
|
package/cjs/curveUsd/index.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
package/cjs/llamaLend/index.js
CHANGED
|
@@ -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
|
-
|
|
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[];
|
package/cjs/types/morphoBlue.js
CHANGED
|
@@ -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 = {}));
|
package/esm/curveUsd/index.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
package/esm/llamaLend/index.js
CHANGED
|
@@ -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
|
-
|
|
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[];
|
package/esm/types/morphoBlue.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
+
}
|