@defisaver/positions-sdk 1.0.3 → 1.0.4
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/.mocharc.json +4 -4
- package/.nvmrc +1 -1
- package/README.md +69 -69
- package/cjs/aaveV3/index.js +7 -7
- package/cjs/curveUsd/index.js +8 -1
- package/cjs/fluid/index.d.ts +2 -0
- package/cjs/helpers/aaveHelpers/index.js +6 -0
- package/cjs/helpers/compoundHelpers/index.js +2 -0
- package/cjs/helpers/eulerHelpers/index.js +2 -0
- package/cjs/helpers/fluidHelpers/index.js +2 -0
- package/cjs/helpers/morphoBlueHelpers/index.js +68 -66
- package/cjs/helpers/sparkHelpers/index.js +2 -0
- package/cjs/staking/staking.d.ts +2 -1
- package/cjs/staking/staking.js +3 -7
- package/cjs/types/aave.d.ts +4 -0
- package/cjs/types/compound.d.ts +2 -0
- package/cjs/types/curveUsd.d.ts +1 -0
- package/cjs/types/euler.d.ts +2 -0
- package/cjs/types/fluid.d.ts +2 -0
- package/cjs/types/morphoBlue.d.ts +2 -0
- package/cjs/types/spark.d.ts +2 -0
- package/esm/aaveV3/index.js +7 -7
- package/esm/curveUsd/index.js +10 -3
- package/esm/fluid/index.d.ts +2 -0
- package/esm/helpers/aaveHelpers/index.js +6 -0
- package/esm/helpers/compoundHelpers/index.js +2 -0
- package/esm/helpers/eulerHelpers/index.js +2 -0
- package/esm/helpers/fluidHelpers/index.js +2 -0
- package/esm/helpers/morphoBlueHelpers/index.js +68 -66
- package/esm/helpers/sparkHelpers/index.js +2 -0
- package/esm/staking/staking.d.ts +2 -1
- package/esm/staking/staking.js +3 -6
- package/esm/types/aave.d.ts +4 -0
- package/esm/types/compound.d.ts +2 -0
- package/esm/types/curveUsd.d.ts +1 -0
- package/esm/types/euler.d.ts +2 -0
- package/esm/types/fluid.d.ts +2 -0
- package/esm/types/morphoBlue.d.ts +2 -0
- package/esm/types/spark.d.ts +2 -0
- package/package.json +54 -52
- package/src/aaveV2/index.ts +227 -227
- package/src/aaveV3/index.ts +624 -625
- package/src/assets/index.ts +60 -60
- package/src/chickenBonds/index.ts +123 -123
- package/src/compoundV2/index.ts +220 -220
- package/src/compoundV3/index.ts +291 -291
- package/src/config/contracts.js +1147 -1147
- package/src/constants/index.ts +6 -6
- package/src/contracts.ts +134 -134
- package/src/curveUsd/index.ts +239 -230
- package/src/eulerV2/index.ts +303 -303
- package/src/exchange/index.ts +17 -17
- package/src/fluid/index.ts +354 -354
- package/src/helpers/aaveHelpers/index.ts +204 -198
- package/src/helpers/chickenBondsHelpers/index.ts +23 -23
- package/src/helpers/compoundHelpers/index.ts +248 -246
- package/src/helpers/curveUsdHelpers/index.ts +40 -40
- package/src/helpers/eulerHelpers/index.ts +234 -232
- package/src/helpers/fluidHelpers/index.ts +56 -53
- package/src/helpers/index.ts +11 -11
- package/src/helpers/liquityV2Helpers/index.ts +80 -80
- package/src/helpers/llamaLendHelpers/index.ts +53 -53
- package/src/helpers/makerHelpers/index.ts +94 -94
- package/src/helpers/morphoBlueHelpers/index.ts +367 -365
- package/src/helpers/sparkHelpers/index.ts +152 -150
- package/src/index.ts +52 -52
- package/src/liquity/index.ts +116 -116
- package/src/liquityV2/index.ts +295 -295
- package/src/llamaLend/index.ts +275 -275
- package/src/maker/index.ts +117 -117
- package/src/markets/aave/index.ts +152 -152
- package/src/markets/aave/marketAssets.ts +44 -44
- package/src/markets/compound/index.ts +213 -213
- package/src/markets/compound/marketsAssets.ts +82 -82
- package/src/markets/curveUsd/index.ts +69 -69
- package/src/markets/euler/index.ts +26 -26
- package/src/markets/fluid/index.ts +2012 -2012
- package/src/markets/index.ts +27 -27
- package/src/markets/liquityV2/index.ts +54 -54
- package/src/markets/llamaLend/contractAddresses.ts +141 -141
- package/src/markets/llamaLend/index.ts +235 -235
- package/src/markets/morphoBlue/index.ts +895 -895
- package/src/markets/spark/index.ts +29 -29
- package/src/markets/spark/marketAssets.ts +10 -10
- package/src/moneymarket/moneymarketCommonService.ts +80 -80
- package/src/morphoAaveV2/index.ts +256 -256
- package/src/morphoAaveV3/index.ts +630 -630
- package/src/morphoBlue/index.ts +202 -202
- package/src/multicall/index.ts +33 -33
- package/src/services/priceService.ts +91 -91
- package/src/services/utils.ts +59 -59
- package/src/setup.ts +8 -8
- package/src/spark/index.ts +460 -460
- package/src/staking/staking.ts +217 -220
- package/src/types/aave.ts +275 -271
- package/src/types/chickenBonds.ts +45 -45
- package/src/types/common.ts +84 -84
- package/src/types/compound.ts +133 -131
- package/src/types/curveUsd.ts +119 -118
- package/src/types/euler.ts +173 -171
- package/src/types/fluid.ts +268 -266
- package/src/types/index.ts +11 -11
- package/src/types/liquity.ts +30 -30
- package/src/types/liquityV2.ts +119 -119
- package/src/types/llamaLend.ts +155 -155
- package/src/types/maker.ts +50 -50
- package/src/types/morphoBlue.ts +194 -192
- package/src/types/spark.ts +133 -131
package/.mocharc.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{
|
|
2
|
-
"require": "ts-node/register",
|
|
3
|
-
"extension": ["ts"]
|
|
4
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"require": "ts-node/register",
|
|
3
|
+
"extension": ["ts"]
|
|
4
|
+
}
|
package/.nvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v20.17.0
|
|
1
|
+
v20.17.0
|
package/README.md
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
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)
|
|
64
|
-
|
|
65
|
-
## Testing
|
|
66
|
-
|
|
67
|
-
`npm run test` - Run all tests
|
|
68
|
-
|
|
69
|
-
`npm run test-single --name=your_test_name` - Run single test for specified name e.g. for MyTest.js test name is MyTest
|
|
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)
|
|
64
|
+
|
|
65
|
+
## Testing
|
|
66
|
+
|
|
67
|
+
`npm run test` - Run all tests
|
|
68
|
+
|
|
69
|
+
`npm run test-single --name=your_test_name` - Run single test for specified name e.g. for MyTest.js test name is MyTest
|
package/cjs/aaveV3/index.js
CHANGED
|
@@ -13,17 +13,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.getAaveV3FullPositionData = exports.getAaveV3AccountData = exports.getAaveV3AccountBalances = exports.EMPTY_AAVE_DATA = exports.getAaveV3MarketData = exports.aaveV3EmodeCategoriesMapping = exports.aaveV3CalculateDiscountRate = exports.test = void 0;
|
|
16
|
-
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
17
16
|
const tokens_1 = require("@defisaver/tokens");
|
|
18
|
-
const
|
|
19
|
-
const utils_1 = require("../services/utils");
|
|
20
|
-
const common_1 = require("../types/common");
|
|
21
|
-
const staking_1 = require("../staking");
|
|
22
|
-
const multicall_1 = require("../multicall");
|
|
17
|
+
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
23
18
|
const assets_1 = require("../assets");
|
|
24
|
-
const
|
|
19
|
+
const contracts_1 = require("../contracts");
|
|
25
20
|
const aaveHelpers_1 = require("../helpers/aaveHelpers");
|
|
26
21
|
const aave_1 = require("../markets/aave");
|
|
22
|
+
const moneymarket_1 = require("../moneymarket");
|
|
23
|
+
const multicall_1 = require("../multicall");
|
|
24
|
+
const utils_1 = require("../services/utils");
|
|
25
|
+
const staking_1 = require("../staking");
|
|
26
|
+
const common_1 = require("../types/common");
|
|
27
27
|
const test = (web3, network) => {
|
|
28
28
|
const contract = (0, contracts_1.AaveV3ViewContract)(web3, 1);
|
|
29
29
|
return contract.methods.AAVE_REFERRAL_CODE().call();
|
package/cjs/curveUsd/index.js
CHANGED
|
@@ -79,6 +79,11 @@ const getCurveUsdGlobalData = (web3, network, selectedMarket) => __awaiter(void
|
|
|
79
79
|
abiItem: contract.options.jsonInterface.find(({ name }) => name === 'globalData'),
|
|
80
80
|
params: [selectedMarket.controllerAddress],
|
|
81
81
|
},
|
|
82
|
+
{
|
|
83
|
+
target: selectedMarket.controllerAddress,
|
|
84
|
+
abiItem: (0, utils_1.getAbiItem)((0, contracts_1.getConfigContractAbi)('crvUSDwstETHController'), 'loan_discount'),
|
|
85
|
+
params: [],
|
|
86
|
+
},
|
|
82
87
|
];
|
|
83
88
|
const multiRes = yield (0, multicall_1.multicall)(multicallData, web3, network);
|
|
84
89
|
const data = multiRes[2][0];
|
|
@@ -96,10 +101,12 @@ const getCurveUsdGlobalData = (web3, network, selectedMarket) => __awaiter(void
|
|
|
96
101
|
.toString();
|
|
97
102
|
const bandsData = yield getAndFormatBands(web3, network, selectedMarket, data.minBand, data.maxBand);
|
|
98
103
|
const leftToBorrow = new decimal_js_1.default(debtCeiling).minus(totalDebt).toString();
|
|
104
|
+
const loanDiscount = (0, tokens_1.assetAmountInEth)(multiRes[3][0], debtAsset);
|
|
99
105
|
return Object.assign(Object.assign({}, data), { debtCeiling,
|
|
100
106
|
totalDebt,
|
|
101
107
|
ammPrice, oraclePrice: (0, tokens_1.assetAmountInEth)(data.oraclePrice, debtAsset), basePrice: (0, tokens_1.assetAmountInEth)(data.basePrice, debtAsset), minted: (0, tokens_1.assetAmountInEth)(data.minted, debtAsset), redeemed: (0, tokens_1.assetAmountInEth)(data.redeemed, debtAsset), borrowRate,
|
|
102
|
-
futureBorrowRate, bands: bandsData, leftToBorrow
|
|
108
|
+
futureBorrowRate, bands: bandsData, leftToBorrow,
|
|
109
|
+
loanDiscount });
|
|
103
110
|
});
|
|
104
111
|
exports.getCurveUsdGlobalData = getCurveUsdGlobalData;
|
|
105
112
|
const getStatusForUser = (bandRange, activeBand, crvUSDSupplied, collSupplied, healthPercent) => {
|
package/cjs/fluid/index.d.ts
CHANGED
|
@@ -78,6 +78,8 @@ export declare const getUserPositions: (web3: Web3, network: NetworkNumber, user
|
|
|
78
78
|
leveragedAsset?: string | undefined;
|
|
79
79
|
liquidationPrice?: string | undefined;
|
|
80
80
|
leveragedLsdAssetRatio?: string | undefined;
|
|
81
|
+
minCollRatio?: string | undefined;
|
|
82
|
+
collLiquidationRatio?: string | undefined;
|
|
81
83
|
owner: string;
|
|
82
84
|
vaultId: number;
|
|
83
85
|
usedAssets: FluidUsedAssets;
|
|
@@ -134,6 +134,12 @@ const aaveAnyGetAggregatedPositionData = (_a) => {
|
|
|
134
134
|
}
|
|
135
135
|
payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
136
136
|
}
|
|
137
|
+
payload.minCollRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
138
|
+
payload.collLiquidationRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
139
|
+
payload.healthRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).mul(payload.liqPercent).div(payload.borrowedUsd).div(100)
|
|
140
|
+
.toString();
|
|
141
|
+
payload.healthLiquidationRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).mul(payload.liqRatio).div(payload.borrowLimitUsd)
|
|
142
|
+
.toString();
|
|
137
143
|
return payload;
|
|
138
144
|
};
|
|
139
145
|
exports.aaveAnyGetAggregatedPositionData = aaveAnyGetAggregatedPositionData;
|
|
@@ -135,6 +135,8 @@ const getCompoundV3AggregatedData = (_a) => {
|
|
|
135
135
|
}
|
|
136
136
|
payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
137
137
|
}
|
|
138
|
+
payload.minCollRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
139
|
+
payload.collLiquidationRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
138
140
|
// TO DO: handle strategies
|
|
139
141
|
/* const subscribedStrategies = rest.compoundStrategies
|
|
140
142
|
? compoundV3GetSubscribedStrategies({ selectedMarket, compoundStrategies: rest.compoundStrategies })
|
|
@@ -151,6 +151,8 @@ const getEulerV2AggregatedData = (_a) => {
|
|
|
151
151
|
}
|
|
152
152
|
payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
153
153
|
}
|
|
154
|
+
payload.minCollRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
155
|
+
payload.collLiquidationRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
154
156
|
return payload;
|
|
155
157
|
};
|
|
156
158
|
exports.getEulerV2AggregatedData = getEulerV2AggregatedData;
|
|
@@ -36,6 +36,8 @@ const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, }) => {
|
|
|
36
36
|
}
|
|
37
37
|
payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
38
38
|
}
|
|
39
|
+
payload.minCollRatio = new decimal_js_1.default(payload.suppliedUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
40
|
+
payload.collLiquidationRatio = new decimal_js_1.default(payload.suppliedUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
39
41
|
return payload;
|
|
40
42
|
};
|
|
41
43
|
exports.getFluidAggregatedData = getFluidAggregatedData;
|
|
@@ -57,6 +57,8 @@ const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, marketInf
|
|
|
57
57
|
}
|
|
58
58
|
payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
59
59
|
}
|
|
60
|
+
payload.minCollRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
61
|
+
payload.collLiquidationRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
60
62
|
return payload;
|
|
61
63
|
};
|
|
62
64
|
exports.getMorphoBlueAggregatedPositionData = getMorphoBlueAggregatedPositionData;
|
|
@@ -115,73 +117,73 @@ const getApyAfterValuesEstimation = (selectedMarket, actions, web3, network) =>
|
|
|
115
117
|
});
|
|
116
118
|
exports.getApyAfterValuesEstimation = getApyAfterValuesEstimation;
|
|
117
119
|
const API_URL = 'https://blue-api.morpho.org/graphql';
|
|
118
|
-
const MARKET_QUERY = `
|
|
119
|
-
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
120
|
-
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
121
|
-
reallocatableLiquidityAssets
|
|
122
|
-
targetBorrowUtilization
|
|
123
|
-
loanAsset {
|
|
124
|
-
address
|
|
125
|
-
decimals
|
|
126
|
-
priceUsd
|
|
127
|
-
}
|
|
128
|
-
state {
|
|
129
|
-
liquidityAssets
|
|
130
|
-
borrowAssets
|
|
131
|
-
supplyAssets
|
|
132
|
-
}
|
|
133
|
-
publicAllocatorSharedLiquidity {
|
|
134
|
-
assets
|
|
135
|
-
vault {
|
|
136
|
-
address
|
|
137
|
-
name
|
|
138
|
-
}
|
|
139
|
-
allocationMarket {
|
|
140
|
-
uniqueKey
|
|
141
|
-
loanAsset {
|
|
142
|
-
address
|
|
143
|
-
}
|
|
144
|
-
collateralAsset {
|
|
145
|
-
address
|
|
146
|
-
}
|
|
147
|
-
irmAddress
|
|
148
|
-
oracle {
|
|
149
|
-
address
|
|
150
|
-
}
|
|
151
|
-
lltv
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
loanAsset {
|
|
155
|
-
address
|
|
156
|
-
}
|
|
157
|
-
collateralAsset {
|
|
158
|
-
address
|
|
159
|
-
}
|
|
160
|
-
oracle {
|
|
161
|
-
address
|
|
162
|
-
}
|
|
163
|
-
irmAddress
|
|
164
|
-
lltv
|
|
165
|
-
}
|
|
166
|
-
}
|
|
120
|
+
const MARKET_QUERY = `
|
|
121
|
+
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
122
|
+
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
123
|
+
reallocatableLiquidityAssets
|
|
124
|
+
targetBorrowUtilization
|
|
125
|
+
loanAsset {
|
|
126
|
+
address
|
|
127
|
+
decimals
|
|
128
|
+
priceUsd
|
|
129
|
+
}
|
|
130
|
+
state {
|
|
131
|
+
liquidityAssets
|
|
132
|
+
borrowAssets
|
|
133
|
+
supplyAssets
|
|
134
|
+
}
|
|
135
|
+
publicAllocatorSharedLiquidity {
|
|
136
|
+
assets
|
|
137
|
+
vault {
|
|
138
|
+
address
|
|
139
|
+
name
|
|
140
|
+
}
|
|
141
|
+
allocationMarket {
|
|
142
|
+
uniqueKey
|
|
143
|
+
loanAsset {
|
|
144
|
+
address
|
|
145
|
+
}
|
|
146
|
+
collateralAsset {
|
|
147
|
+
address
|
|
148
|
+
}
|
|
149
|
+
irmAddress
|
|
150
|
+
oracle {
|
|
151
|
+
address
|
|
152
|
+
}
|
|
153
|
+
lltv
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
loanAsset {
|
|
157
|
+
address
|
|
158
|
+
}
|
|
159
|
+
collateralAsset {
|
|
160
|
+
address
|
|
161
|
+
}
|
|
162
|
+
oracle {
|
|
163
|
+
address
|
|
164
|
+
}
|
|
165
|
+
irmAddress
|
|
166
|
+
lltv
|
|
167
|
+
}
|
|
168
|
+
}
|
|
167
169
|
`;
|
|
168
|
-
const REWARDS_QUERY = `
|
|
169
|
-
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
170
|
-
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
171
|
-
uniqueKey
|
|
172
|
-
state {
|
|
173
|
-
rewards {
|
|
174
|
-
amountPerSuppliedToken
|
|
175
|
-
supplyApr
|
|
176
|
-
amountPerBorrowedToken
|
|
177
|
-
borrowApr
|
|
178
|
-
asset {
|
|
179
|
-
address
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
170
|
+
const REWARDS_QUERY = `
|
|
171
|
+
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
172
|
+
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
173
|
+
uniqueKey
|
|
174
|
+
state {
|
|
175
|
+
rewards {
|
|
176
|
+
amountPerSuppliedToken
|
|
177
|
+
supplyApr
|
|
178
|
+
amountPerBorrowedToken
|
|
179
|
+
borrowApr
|
|
180
|
+
asset {
|
|
181
|
+
address
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
185
187
|
`;
|
|
186
188
|
/**
|
|
187
189
|
* Get reallocatable liquidity to a given market and target borrow utilization
|
|
@@ -98,6 +98,8 @@ const sparkGetAggregatedPositionData = (_a) => {
|
|
|
98
98
|
}
|
|
99
99
|
payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
100
100
|
}
|
|
101
|
+
payload.minCollRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
102
|
+
payload.collLiquidationRatio = new decimal_js_1.default(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
101
103
|
return payload;
|
|
102
104
|
};
|
|
103
105
|
exports.sparkGetAggregatedPositionData = sparkGetAggregatedPositionData;
|
package/cjs/staking/staking.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import Web3 from 'web3';
|
|
2
|
+
import memoize from 'memoizee';
|
|
2
3
|
import { MMAssetsData, MMUsedAssets } from '../types/common';
|
|
3
4
|
export declare const STAKING_ASSETS: string[];
|
|
4
|
-
export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => Promise<string
|
|
5
|
+
export declare const getStakingApy: ((asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => Promise<string>) & memoize.Memoized<(asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => Promise<string>>;
|
|
5
6
|
export declare const calculateInterestEarned: (principal: string, interest: string, type: string, apy?: boolean) => number;
|
|
6
7
|
export declare const calculateNetApy: ({ usedAssets, assetsData, isMorpho }: {
|
|
7
8
|
usedAssets: MMUsedAssets;
|
package/cjs/staking/staking.js
CHANGED
|
@@ -14,6 +14,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.getStETHByWstETHMultiple = exports.getStETHByWstETH = exports.getWstETHByStETH = exports.calculateNetApy = exports.calculateInterestEarned = exports.getStakingApy = exports.STAKING_ASSETS = void 0;
|
|
16
16
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
17
|
+
const memoizee_1 = __importDefault(require("memoizee"));
|
|
17
18
|
const contracts_1 = require("../contracts");
|
|
18
19
|
const common_1 = require("../types/common");
|
|
19
20
|
const constants_1 = require("../constants");
|
|
@@ -110,14 +111,10 @@ const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function*
|
|
|
110
111
|
if (!res.ok)
|
|
111
112
|
throw new Error(`Failed to fetch APY for ${asset}`);
|
|
112
113
|
const data = yield res.json();
|
|
113
|
-
// if our server returns apr, transform it into apy
|
|
114
|
-
if (['weETH'].includes(asset)) {
|
|
115
|
-
return (0, moneymarket_1.aprToApy)(data.apy);
|
|
116
|
-
}
|
|
117
114
|
return String(data.apy);
|
|
118
115
|
});
|
|
119
116
|
exports.STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH', 'wrsETH', 'wsuperOETHb', 'sUSDS'];
|
|
120
|
-
|
|
117
|
+
exports.getStakingApy = (0, memoizee_1.default)((asset, web3, blockNumber = 'latest', fromBlock = undefined) => __awaiter(void 0, void 0, void 0, function* () {
|
|
121
118
|
try {
|
|
122
119
|
if (asset === 'stETH' || asset === 'wstETH')
|
|
123
120
|
return yield getStETHApy(web3, fromBlock, blockNumber);
|
|
@@ -150,8 +147,7 @@ const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefine
|
|
|
150
147
|
console.error(`Failed to fetch APY for ${asset}`);
|
|
151
148
|
}
|
|
152
149
|
return '0';
|
|
153
|
-
});
|
|
154
|
-
exports.getStakingApy = getStakingApy;
|
|
150
|
+
}), { promise: true, maxAge: 2 * 60 * 1000 });
|
|
155
151
|
const calculateInterestEarned = (principal, interest, type, apy = false) => {
|
|
156
152
|
let interval = 1;
|
|
157
153
|
if (+interest === 0)
|
package/cjs/types/aave.d.ts
CHANGED
|
@@ -229,6 +229,10 @@ export interface AaveV3AggregatedPositionData {
|
|
|
229
229
|
leveragedAsset?: string;
|
|
230
230
|
leveragedLsdAssetRatio?: string;
|
|
231
231
|
liquidationPrice?: string;
|
|
232
|
+
minCollRatio?: string;
|
|
233
|
+
collLiquidationRatio?: string;
|
|
234
|
+
healthRatio?: string;
|
|
235
|
+
healthLiquidationRatio?: string;
|
|
232
236
|
}
|
|
233
237
|
export interface AaveHelperCommon {
|
|
234
238
|
usedAssets: any;
|
package/cjs/types/compound.d.ts
CHANGED
|
@@ -96,6 +96,8 @@ export interface CompoundAggregatedPositionData {
|
|
|
96
96
|
minRatio: string;
|
|
97
97
|
debtTooLow: boolean;
|
|
98
98
|
minDebt: string;
|
|
99
|
+
minCollRatio: string;
|
|
100
|
+
collLiquidationRatio: string;
|
|
99
101
|
}
|
|
100
102
|
export interface CompoundPositionData extends MMPositionData {
|
|
101
103
|
ratio: string;
|
package/cjs/types/curveUsd.d.ts
CHANGED
package/cjs/types/euler.d.ts
CHANGED
package/cjs/types/fluid.d.ts
CHANGED
|
@@ -240,6 +240,8 @@ export interface FluidAggregatedVaultData {
|
|
|
240
240
|
leveragedAsset?: string;
|
|
241
241
|
liquidationPrice?: string;
|
|
242
242
|
leveragedLsdAssetRatio?: string;
|
|
243
|
+
minCollRatio?: string;
|
|
244
|
+
collLiquidationRatio?: string;
|
|
243
245
|
}
|
|
244
246
|
export interface BaseFluidVaultData {
|
|
245
247
|
owner: string;
|
|
@@ -122,6 +122,8 @@ export interface MorphoBlueAggregatedPositionData {
|
|
|
122
122
|
leveragedAsset?: string;
|
|
123
123
|
leveragedLsdAssetRatio?: string;
|
|
124
124
|
liquidationPrice?: string;
|
|
125
|
+
minCollRatio?: string;
|
|
126
|
+
collLiquidationRatio?: string;
|
|
125
127
|
}
|
|
126
128
|
export interface MorphoBluePositionData {
|
|
127
129
|
usedAssets: MMUsedAssets;
|
package/cjs/types/spark.d.ts
CHANGED
|
@@ -97,6 +97,8 @@ export interface SparkAggregatedPositionData {
|
|
|
97
97
|
leveragedAsset?: string;
|
|
98
98
|
leveragedLsdAssetRatio?: string;
|
|
99
99
|
liquidationPrice?: string;
|
|
100
|
+
minCollRatio: string;
|
|
101
|
+
collLiquidationRatio: string;
|
|
100
102
|
}
|
|
101
103
|
export interface SparkPositionData extends MMPositionData {
|
|
102
104
|
ratio: string;
|
package/esm/aaveV3/index.js
CHANGED
|
@@ -7,17 +7,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import Dec from 'decimal.js';
|
|
11
10
|
import { assetAmountInEth, assetAmountInWei, getAssetInfo } from '@defisaver/tokens';
|
|
12
|
-
import
|
|
13
|
-
import { addToObjectIf, ethToWeth, getAbiItem, isEnabledOnBitmap, isLayer2Network, wethToEth, wethToEthByAddress, } from '../services/utils';
|
|
14
|
-
import { NetworkNumber, } from '../types/common';
|
|
15
|
-
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
16
|
-
import { multicall } from '../multicall';
|
|
11
|
+
import Dec from 'decimal.js';
|
|
17
12
|
import { getAssetsBalances } from '../assets';
|
|
18
|
-
import {
|
|
13
|
+
import { AaveIncentiveDataProviderV3Contract, AaveV3ViewContract, createContractWrapper, getConfigContractAbi, getConfigContractAddress, GhoTokenContract, } from '../contracts';
|
|
19
14
|
import { aaveAnyGetAggregatedPositionData, aaveV3IsInIsolationMode, aaveV3IsInSiloedMode } from '../helpers/aaveHelpers';
|
|
20
15
|
import { AAVE_V3 } from '../markets/aave';
|
|
16
|
+
import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
|
|
17
|
+
import { multicall } from '../multicall';
|
|
18
|
+
import { addToObjectIf, ethToWeth, getAbiItem, isEnabledOnBitmap, isLayer2Network, wethToEth, wethToEthByAddress, } from '../services/utils';
|
|
19
|
+
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
20
|
+
import { NetworkNumber, } from '../types/common';
|
|
21
21
|
export const test = (web3, network) => {
|
|
22
22
|
const contract = AaveV3ViewContract(web3, 1);
|
|
23
23
|
return contract.methods.AAVE_REFERRAL_CODE().call();
|
package/esm/curveUsd/index.js
CHANGED
|
@@ -12,10 +12,10 @@ import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
|
|
|
12
12
|
import { CrvUSDStatus, } from '../types';
|
|
13
13
|
import { multicall } from '../multicall';
|
|
14
14
|
import { NetworkNumber, } from '../types/common';
|
|
15
|
-
import { CrvUSDFactoryContract, CrvUSDViewContract } from '../contracts';
|
|
15
|
+
import { CrvUSDFactoryContract, CrvUSDViewContract, getConfigContractAbi } from '../contracts';
|
|
16
16
|
import { getCrvUsdAggregatedData } from '../helpers/curveUsdHelpers';
|
|
17
17
|
import { CrvUsdMarkets } from '../markets';
|
|
18
|
-
import { wethToEth } from '../services/utils';
|
|
18
|
+
import { getAbiItem, wethToEth } from '../services/utils';
|
|
19
19
|
const getAndFormatBands = (web3, network, selectedMarket, _minBand, _maxBand) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
20
|
const contract = CrvUSDViewContract(web3, network);
|
|
21
21
|
const minBand = parseInt(_minBand, 10);
|
|
@@ -73,6 +73,11 @@ export const getCurveUsdGlobalData = (web3, network, selectedMarket) => __awaite
|
|
|
73
73
|
abiItem: contract.options.jsonInterface.find(({ name }) => name === 'globalData'),
|
|
74
74
|
params: [selectedMarket.controllerAddress],
|
|
75
75
|
},
|
|
76
|
+
{
|
|
77
|
+
target: selectedMarket.controllerAddress,
|
|
78
|
+
abiItem: getAbiItem(getConfigContractAbi('crvUSDwstETHController'), 'loan_discount'),
|
|
79
|
+
params: [],
|
|
80
|
+
},
|
|
76
81
|
];
|
|
77
82
|
const multiRes = yield multicall(multicallData, web3, network);
|
|
78
83
|
const data = multiRes[2][0];
|
|
@@ -90,10 +95,12 @@ export const getCurveUsdGlobalData = (web3, network, selectedMarket) => __awaite
|
|
|
90
95
|
.toString();
|
|
91
96
|
const bandsData = yield getAndFormatBands(web3, network, selectedMarket, data.minBand, data.maxBand);
|
|
92
97
|
const leftToBorrow = new Dec(debtCeiling).minus(totalDebt).toString();
|
|
98
|
+
const loanDiscount = assetAmountInEth(multiRes[3][0], debtAsset);
|
|
93
99
|
return Object.assign(Object.assign({}, data), { debtCeiling,
|
|
94
100
|
totalDebt,
|
|
95
101
|
ammPrice, oraclePrice: assetAmountInEth(data.oraclePrice, debtAsset), basePrice: assetAmountInEth(data.basePrice, debtAsset), minted: assetAmountInEth(data.minted, debtAsset), redeemed: assetAmountInEth(data.redeemed, debtAsset), borrowRate,
|
|
96
|
-
futureBorrowRate, bands: bandsData, leftToBorrow
|
|
102
|
+
futureBorrowRate, bands: bandsData, leftToBorrow,
|
|
103
|
+
loanDiscount });
|
|
97
104
|
});
|
|
98
105
|
const getStatusForUser = (bandRange, activeBand, crvUSDSupplied, collSupplied, healthPercent) => {
|
|
99
106
|
// if bands are equal, that can only be [0,0] which means user doesn't have loan (min number of bands is 4)
|
package/esm/fluid/index.d.ts
CHANGED
|
@@ -78,6 +78,8 @@ export declare const getUserPositions: (web3: Web3, network: NetworkNumber, user
|
|
|
78
78
|
leveragedAsset?: string | undefined;
|
|
79
79
|
liquidationPrice?: string | undefined;
|
|
80
80
|
leveragedLsdAssetRatio?: string | undefined;
|
|
81
|
+
minCollRatio?: string | undefined;
|
|
82
|
+
collLiquidationRatio?: string | undefined;
|
|
81
83
|
owner: string;
|
|
82
84
|
vaultId: number;
|
|
83
85
|
usedAssets: FluidUsedAssets;
|
|
@@ -117,6 +117,12 @@ export const aaveAnyGetAggregatedPositionData = (_a) => {
|
|
|
117
117
|
}
|
|
118
118
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
119
119
|
}
|
|
120
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
121
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
122
|
+
payload.healthRatio = new Dec(payload.suppliedCollateralUsd).mul(payload.liqPercent).div(payload.borrowedUsd).div(100)
|
|
123
|
+
.toString();
|
|
124
|
+
payload.healthLiquidationRatio = new Dec(payload.suppliedCollateralUsd).mul(payload.liqRatio).div(payload.borrowLimitUsd)
|
|
125
|
+
.toString();
|
|
120
126
|
return payload;
|
|
121
127
|
};
|
|
122
128
|
const getApyAfterValuesEstimationInner = (selectedMarket, actions, viewContract, network) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -125,6 +125,8 @@ export const getCompoundV3AggregatedData = (_a) => {
|
|
|
125
125
|
}
|
|
126
126
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
127
127
|
}
|
|
128
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
129
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
128
130
|
// TO DO: handle strategies
|
|
129
131
|
/* const subscribedStrategies = rest.compoundStrategies
|
|
130
132
|
? compoundV3GetSubscribedStrategies({ selectedMarket, compoundStrategies: rest.compoundStrategies })
|