@defisaver/positions-sdk 1.0.3-dev → 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/cjs/aaveV3/index.js +7 -7
- 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 +2 -0
- package/cjs/helpers/sparkHelpers/index.js +2 -0
- package/cjs/markets/compound/marketsAssets.js +1 -1
- package/cjs/markets/spark/marketAssets.js +1 -1
- 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/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/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 +2 -0
- package/esm/helpers/sparkHelpers/index.js +2 -0
- package/esm/markets/compound/marketsAssets.js +1 -1
- package/esm/markets/spark/marketAssets.js +1 -1
- 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/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 +4 -2
- package/src/aaveV3/index.ts +8 -9
- package/src/helpers/aaveHelpers/index.ts +6 -0
- package/src/helpers/compoundHelpers/index.ts +2 -0
- package/src/helpers/eulerHelpers/index.ts +2 -0
- package/src/helpers/fluidHelpers/index.ts +3 -0
- package/src/helpers/morphoBlueHelpers/index.ts +2 -0
- package/src/helpers/sparkHelpers/index.ts +2 -0
- package/src/markets/compound/marketsAssets.ts +1 -1
- package/src/markets/spark/marketAssets.ts +1 -1
- package/src/staking/staking.ts +3 -6
- package/src/types/aave.ts +4 -0
- package/src/types/compound.ts +2 -0
- package/src/types/euler.ts +2 -0
- package/src/types/fluid.ts +2 -0
- package/src/types/morphoBlue.ts +2 -0
- package/src/types/spark.ts +2 -0
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/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;
|
|
@@ -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;
|
|
@@ -27,7 +27,7 @@ exports.v3USDCeCollAssets = {
|
|
|
27
27
|
[common_1.NetworkNumber.Base]: [],
|
|
28
28
|
};
|
|
29
29
|
exports.v3ETHCollAssetsEth = ['cbETH', 'wstETH', 'rETH', 'rsETH', 'weETH', 'osETH', 'WBTC', 'ezETH', 'cbBTC', 'rswETH', 'tBTC', 'ETHx'];
|
|
30
|
-
exports.v3ETHCollAssetsBase = ['cbETH', 'ezETH', 'wstETH', 'USDC', 'weETH', 'wrsETH', 'cbBTC'];
|
|
30
|
+
exports.v3ETHCollAssetsBase = ['cbETH', 'ezETH', 'wstETH', 'USDC', 'weETH', 'wrsETH', 'cbBTC', 'wsuperOETHb'];
|
|
31
31
|
exports.v3ETHCollAssetsArb = ['weETH', 'rETH', 'wstETH', 'WBTC', 'rsETH', 'ezETH', 'USDC', 'USDT'];
|
|
32
32
|
exports.v3ETHCollAssetsOpt = ['rETH', 'wstETH', 'WBTC', 'ezETH', 'USDC', 'USDT', 'weETH', 'wrsETH'];
|
|
33
33
|
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sparkAssetsDefaultMarket = exports.sparkAssetsDefaultMarketEth = void 0;
|
|
4
4
|
const common_1 = require("../../types/common");
|
|
5
|
-
exports.sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT', 'weETH', 'cbBTC', 'sUSDS', 'USDS'];
|
|
5
|
+
exports.sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT', 'weETH', 'cbBTC', 'sUSDS', 'USDS', 'LBTC', 'tBTC', 'ezETH', 'rsETH'];
|
|
6
6
|
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
7
7
|
exports.sparkAssetsDefaultMarket = {
|
|
8
8
|
[common_1.NetworkNumber.Eth]: exports.sparkAssetsDefaultMarketEth,
|
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/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/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 })
|
|
@@ -143,6 +143,8 @@ export const getEulerV2AggregatedData = (_a) => {
|
|
|
143
143
|
}
|
|
144
144
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
145
145
|
}
|
|
146
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
147
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
146
148
|
return payload;
|
|
147
149
|
};
|
|
148
150
|
export const getEulerV2BorrowRate = (interestRate) => {
|
|
@@ -30,5 +30,7 @@ export const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, })
|
|
|
30
30
|
}
|
|
31
31
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
32
32
|
}
|
|
33
|
+
payload.minCollRatio = new Dec(payload.suppliedUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
34
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
33
35
|
return payload;
|
|
34
36
|
};
|
|
@@ -51,6 +51,8 @@ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, ma
|
|
|
51
51
|
}
|
|
52
52
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
53
53
|
}
|
|
54
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
55
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
54
56
|
return payload;
|
|
55
57
|
};
|
|
56
58
|
const compound = (ratePerSeconds) => {
|
|
@@ -87,6 +87,8 @@ export const sparkGetAggregatedPositionData = (_a) => {
|
|
|
87
87
|
}
|
|
88
88
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
89
89
|
}
|
|
90
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
91
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
90
92
|
return payload;
|
|
91
93
|
};
|
|
92
94
|
export const getApyAfterValuesEstimation = (selectedMarket, actions, web3) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -24,7 +24,7 @@ export const v3USDCeCollAssets = {
|
|
|
24
24
|
[NetworkNumber.Base]: [],
|
|
25
25
|
};
|
|
26
26
|
export const v3ETHCollAssetsEth = ['cbETH', 'wstETH', 'rETH', 'rsETH', 'weETH', 'osETH', 'WBTC', 'ezETH', 'cbBTC', 'rswETH', 'tBTC', 'ETHx'];
|
|
27
|
-
export const v3ETHCollAssetsBase = ['cbETH', 'ezETH', 'wstETH', 'USDC', 'weETH', 'wrsETH', 'cbBTC'];
|
|
27
|
+
export const v3ETHCollAssetsBase = ['cbETH', 'ezETH', 'wstETH', 'USDC', 'weETH', 'wrsETH', 'cbBTC', 'wsuperOETHb'];
|
|
28
28
|
export const v3ETHCollAssetsArb = ['weETH', 'rETH', 'wstETH', 'WBTC', 'rsETH', 'ezETH', 'USDC', 'USDT'];
|
|
29
29
|
export const v3ETHCollAssetsOpt = ['rETH', 'wstETH', 'WBTC', 'ezETH', 'USDC', 'USDT', 'weETH', 'wrsETH'];
|
|
30
30
|
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NetworkNumber } from '../../types/common';
|
|
2
|
-
export const sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT', 'weETH', 'cbBTC', 'sUSDS', 'USDS'];
|
|
2
|
+
export const sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT', 'weETH', 'cbBTC', 'sUSDS', 'USDS', 'LBTC', 'tBTC', 'ezETH', 'rsETH'];
|
|
3
3
|
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
4
4
|
export const sparkAssetsDefaultMarket = {
|
|
5
5
|
[NetworkNumber.Eth]: sparkAssetsDefaultMarketEth,
|
package/esm/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/esm/staking/staking.js
CHANGED
|
@@ -8,6 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
|
+
import memoize from 'memoizee';
|
|
11
12
|
import { CbEthContract, LidoContract, PotContract, REthContract, wstETHContract, } from '../contracts';
|
|
12
13
|
import { NetworkNumber } from '../types/common';
|
|
13
14
|
import { BLOCKS_IN_A_YEAR, SECONDS_PER_YEAR, AVG_BLOCK_TIME } from '../constants';
|
|
@@ -104,14 +105,10 @@ const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function*
|
|
|
104
105
|
if (!res.ok)
|
|
105
106
|
throw new Error(`Failed to fetch APY for ${asset}`);
|
|
106
107
|
const data = yield res.json();
|
|
107
|
-
// if our server returns apr, transform it into apy
|
|
108
|
-
if (['weETH'].includes(asset)) {
|
|
109
|
-
return aprToApy(data.apy);
|
|
110
|
-
}
|
|
111
108
|
return String(data.apy);
|
|
112
109
|
});
|
|
113
110
|
export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH', 'wrsETH', 'wsuperOETHb', 'sUSDS'];
|
|
114
|
-
export const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefined) => __awaiter(void 0, void 0, void 0, function* () {
|
|
111
|
+
export const getStakingApy = memoize((asset, web3, blockNumber = 'latest', fromBlock = undefined) => __awaiter(void 0, void 0, void 0, function* () {
|
|
115
112
|
try {
|
|
116
113
|
if (asset === 'stETH' || asset === 'wstETH')
|
|
117
114
|
return yield getStETHApy(web3, fromBlock, blockNumber);
|
|
@@ -144,7 +141,7 @@ export const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = u
|
|
|
144
141
|
console.error(`Failed to fetch APY for ${asset}`);
|
|
145
142
|
}
|
|
146
143
|
return '0';
|
|
147
|
-
});
|
|
144
|
+
}), { promise: true, maxAge: 2 * 60 * 1000 });
|
|
148
145
|
export const calculateInterestEarned = (principal, interest, type, apy = false) => {
|
|
149
146
|
let interval = 1;
|
|
150
147
|
if (+interest === 0)
|
package/esm/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/esm/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/esm/types/euler.d.ts
CHANGED
package/esm/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/esm/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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defisaver/positions-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./cjs/index.js",
|
|
6
6
|
"module": "./esm/index.js",
|
|
@@ -27,8 +27,10 @@
|
|
|
27
27
|
"@ethersproject/bignumber": "^5.7.0",
|
|
28
28
|
"@morpho-org/morpho-aave-v3-sdk": "^1.5.3",
|
|
29
29
|
"@types/lodash": "^4.17.15",
|
|
30
|
+
"@types/memoizee": "^0.4.12",
|
|
30
31
|
"decimal.js": "^10.4.3",
|
|
31
|
-
"lodash": "^4.17.21"
|
|
32
|
+
"lodash": "^4.17.21",
|
|
33
|
+
"memoizee": "^0.4.17"
|
|
32
34
|
},
|
|
33
35
|
"devDependencies": {
|
|
34
36
|
"@defisaver/eslint-config": "^1.0.1",
|
package/src/aaveV3/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import Web3 from 'web3';
|
|
2
|
-
import Dec from 'decimal.js';
|
|
3
1
|
import { assetAmountInEth, assetAmountInWei, getAssetInfo } from '@defisaver/tokens';
|
|
2
|
+
import Dec from 'decimal.js';
|
|
3
|
+
import Web3 from 'web3';
|
|
4
|
+
import { getAssetsBalances } from '../assets';
|
|
4
5
|
import {
|
|
5
6
|
AaveIncentiveDataProviderV3Contract,
|
|
6
7
|
AaveV3ViewContract,
|
|
@@ -9,9 +10,14 @@ import {
|
|
|
9
10
|
getConfigContractAddress,
|
|
10
11
|
GhoTokenContract,
|
|
11
12
|
} from '../contracts';
|
|
13
|
+
import { aaveAnyGetAggregatedPositionData, aaveV3IsInIsolationMode, aaveV3IsInSiloedMode } from '../helpers/aaveHelpers';
|
|
14
|
+
import { AAVE_V3 } from '../markets/aave';
|
|
15
|
+
import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
|
|
16
|
+
import { multicall } from '../multicall';
|
|
12
17
|
import {
|
|
13
18
|
addToObjectIf, ethToWeth, getAbiItem, isEnabledOnBitmap, isLayer2Network, wethToEth, wethToEthByAddress,
|
|
14
19
|
} from '../services/utils';
|
|
20
|
+
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
15
21
|
import {
|
|
16
22
|
AaveMarketInfo,
|
|
17
23
|
AaveV3AssetData,
|
|
@@ -21,7 +27,6 @@ import {
|
|
|
21
27
|
AaveV3PositionData,
|
|
22
28
|
AaveV3UsedAsset,
|
|
23
29
|
AaveV3UsedAssets,
|
|
24
|
-
AaveVersions,
|
|
25
30
|
EModeCategoriesData,
|
|
26
31
|
EModeCategoryData,
|
|
27
32
|
EModeCategoryDataMapping,
|
|
@@ -29,13 +34,7 @@ import {
|
|
|
29
34
|
import {
|
|
30
35
|
Blockish, EthAddress, NetworkNumber, PositionBalances,
|
|
31
36
|
} from '../types/common';
|
|
32
|
-
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
33
|
-
import { multicall } from '../multicall';
|
|
34
37
|
import { IUiIncentiveDataProviderV3 } from '../types/contracts/generated/AaveUiIncentiveDataProviderV3';
|
|
35
|
-
import { getAssetsBalances } from '../assets';
|
|
36
|
-
import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
|
|
37
|
-
import { aaveAnyGetAggregatedPositionData, aaveV3IsInIsolationMode, aaveV3IsInSiloedMode } from '../helpers/aaveHelpers';
|
|
38
|
-
import { AAVE_V3 } from '../markets/aave';
|
|
39
38
|
|
|
40
39
|
export const test = (web3: Web3, network: NetworkNumber) => {
|
|
41
40
|
const contract = AaveV3ViewContract(web3, 1);
|
|
@@ -148,6 +148,12 @@ export const aaveAnyGetAggregatedPositionData = ({
|
|
|
148
148
|
}
|
|
149
149
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
150
150
|
}
|
|
151
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
152
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
153
|
+
payload.healthRatio = new Dec(payload.suppliedCollateralUsd).mul(payload.liqPercent).div(payload.borrowedUsd).div(100)
|
|
154
|
+
.toString();
|
|
155
|
+
payload.healthLiquidationRatio = new Dec(payload.suppliedCollateralUsd).mul(payload.liqRatio).div(payload.borrowLimitUsd)
|
|
156
|
+
.toString();
|
|
151
157
|
return payload;
|
|
152
158
|
};
|
|
153
159
|
|
|
@@ -162,6 +162,8 @@ export const getCompoundV3AggregatedData = ({
|
|
|
162
162
|
}
|
|
163
163
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
164
164
|
}
|
|
165
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
166
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
165
167
|
|
|
166
168
|
// TO DO: handle strategies
|
|
167
169
|
/* const subscribedStrategies = rest.compoundStrategies
|
|
@@ -147,6 +147,8 @@ export const getEulerV2AggregatedData = ({
|
|
|
147
147
|
}
|
|
148
148
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
149
149
|
}
|
|
150
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
151
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
150
152
|
return payload;
|
|
151
153
|
};
|
|
152
154
|
|
|
@@ -50,5 +50,8 @@ export const getFluidAggregatedData = ({
|
|
|
50
50
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
payload.minCollRatio = new Dec(payload.suppliedUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
54
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
55
|
+
|
|
53
56
|
return payload;
|
|
54
57
|
};
|
|
@@ -64,6 +64,8 @@ export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, ma
|
|
|
64
64
|
}
|
|
65
65
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
66
66
|
}
|
|
67
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
68
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
67
69
|
|
|
68
70
|
return payload;
|
|
69
71
|
};
|
|
@@ -110,6 +110,8 @@ export const sparkGetAggregatedPositionData = ({
|
|
|
110
110
|
}
|
|
111
111
|
payload.liquidationPrice = calcLeverageLiqPrice(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
|
|
112
112
|
}
|
|
113
|
+
payload.minCollRatio = new Dec(payload.suppliedCollateralUsd).div(payload.borrowLimitUsd).mul(100).toString();
|
|
114
|
+
payload.collLiquidationRatio = new Dec(payload.suppliedCollateralUsd).div(payload.liquidationLimitUsd).mul(100).toString();
|
|
113
115
|
return payload;
|
|
114
116
|
};
|
|
115
117
|
|
|
@@ -30,7 +30,7 @@ export const v3USDCeCollAssets = {
|
|
|
30
30
|
} as const;
|
|
31
31
|
|
|
32
32
|
export const v3ETHCollAssetsEth = ['cbETH', 'wstETH', 'rETH', 'rsETH', 'weETH', 'osETH', 'WBTC', 'ezETH', 'cbBTC', 'rswETH', 'tBTC', 'ETHx'];
|
|
33
|
-
export const v3ETHCollAssetsBase = ['cbETH', 'ezETH', 'wstETH', 'USDC', 'weETH', 'wrsETH', 'cbBTC'];
|
|
33
|
+
export const v3ETHCollAssetsBase = ['cbETH', 'ezETH', 'wstETH', 'USDC', 'weETH', 'wrsETH', 'cbBTC', 'wsuperOETHb'];
|
|
34
34
|
export const v3ETHCollAssetsArb = ['weETH', 'rETH', 'wstETH', 'WBTC', 'rsETH', 'ezETH', 'USDC', 'USDT'];
|
|
35
35
|
export const v3ETHCollAssetsOpt = ['rETH', 'wstETH', 'WBTC', 'ezETH', 'USDC', 'USDT', 'weETH', 'wrsETH'];
|
|
36
36
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NetworkNumber } from '../../types/common';
|
|
2
2
|
|
|
3
|
-
export const sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT', 'weETH', 'cbBTC', 'sUSDS', 'USDS'];
|
|
3
|
+
export const sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT', 'weETH', 'cbBTC', 'sUSDS', 'USDS', 'LBTC', 'tBTC', 'ezETH', 'rsETH'];
|
|
4
4
|
|
|
5
5
|
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
6
6
|
export const sparkAssetsDefaultMarket = {
|
package/src/staking/staking.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Dec from 'decimal.js';
|
|
2
2
|
import Web3 from 'web3';
|
|
3
|
+
import memoize from 'memoizee';
|
|
3
4
|
import {
|
|
4
5
|
CbEthContract, LidoContract, PotContract, REthContract, wstETHContract,
|
|
5
6
|
} from '../contracts';
|
|
@@ -105,16 +106,12 @@ const getApyFromDfsApi = async (asset: string) => {
|
|
|
105
106
|
const res = await fetch(`https://fe.defisaver.com/api/staking/apy?asset=${asset}`);
|
|
106
107
|
if (!res.ok) throw new Error(`Failed to fetch APY for ${asset}`);
|
|
107
108
|
const data = await res.json();
|
|
108
|
-
// if our server returns apr, transform it into apy
|
|
109
|
-
if (['weETH'].includes(asset)) {
|
|
110
|
-
return aprToApy(data.apy);
|
|
111
|
-
}
|
|
112
109
|
return String(data.apy);
|
|
113
110
|
};
|
|
114
111
|
|
|
115
112
|
export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH', 'wrsETH', 'wsuperOETHb', 'sUSDS'];
|
|
116
113
|
|
|
117
|
-
export const getStakingApy = async (asset: string, web3: Web3, blockNumber: 'latest' | number = 'latest', fromBlock: number | undefined = undefined) => {
|
|
114
|
+
export const getStakingApy = memoize(async (asset: string, web3: Web3, blockNumber: 'latest' | number = 'latest', fromBlock: number | undefined = undefined) => {
|
|
118
115
|
try {
|
|
119
116
|
if (asset === 'stETH' || asset === 'wstETH') return await getStETHApy(web3, fromBlock, blockNumber);
|
|
120
117
|
if (asset === 'cbETH') return await getCbETHApy(web3, blockNumber);
|
|
@@ -133,7 +130,7 @@ export const getStakingApy = async (asset: string, web3: Web3, blockNumber: 'lat
|
|
|
133
130
|
console.error(`Failed to fetch APY for ${asset}`);
|
|
134
131
|
}
|
|
135
132
|
return '0';
|
|
136
|
-
};
|
|
133
|
+
}, { promise: true, maxAge: 2 * 60 * 1000 });
|
|
137
134
|
|
|
138
135
|
export const calculateInterestEarned = (principal: string, interest: string, type: string, apy = false) => {
|
|
139
136
|
let interval = 1;
|
package/src/types/aave.ts
CHANGED
|
@@ -252,6 +252,10 @@ export interface AaveV3AggregatedPositionData {
|
|
|
252
252
|
leveragedAsset?: string,
|
|
253
253
|
leveragedLsdAssetRatio?: string,
|
|
254
254
|
liquidationPrice?: string,
|
|
255
|
+
minCollRatio?: string,
|
|
256
|
+
collLiquidationRatio?: string,
|
|
257
|
+
healthRatio?: string,
|
|
258
|
+
healthLiquidationRatio?: string,
|
|
255
259
|
}
|
|
256
260
|
|
|
257
261
|
export interface AaveHelperCommon {
|
package/src/types/compound.ts
CHANGED
|
@@ -110,6 +110,8 @@ export interface CompoundAggregatedPositionData {
|
|
|
110
110
|
minRatio: string,
|
|
111
111
|
debtTooLow: boolean,
|
|
112
112
|
minDebt: string,
|
|
113
|
+
minCollRatio: string,
|
|
114
|
+
collLiquidationRatio: string,
|
|
113
115
|
}
|
|
114
116
|
|
|
115
117
|
export interface CompoundPositionData extends MMPositionData {
|
package/src/types/euler.ts
CHANGED
package/src/types/fluid.ts
CHANGED
|
@@ -253,6 +253,8 @@ export interface FluidAggregatedVaultData {
|
|
|
253
253
|
leveragedAsset?: string,
|
|
254
254
|
liquidationPrice?: string,
|
|
255
255
|
leveragedLsdAssetRatio?: string,
|
|
256
|
+
minCollRatio?: string,
|
|
257
|
+
collLiquidationRatio?: string,
|
|
256
258
|
}
|
|
257
259
|
|
|
258
260
|
export interface BaseFluidVaultData {
|
package/src/types/morphoBlue.ts
CHANGED
|
@@ -136,6 +136,8 @@ export interface MorphoBlueAggregatedPositionData {
|
|
|
136
136
|
leveragedAsset?: string,
|
|
137
137
|
leveragedLsdAssetRatio?: string,
|
|
138
138
|
liquidationPrice?: string,
|
|
139
|
+
minCollRatio?: string,
|
|
140
|
+
collLiquidationRatio?: string,
|
|
139
141
|
}
|
|
140
142
|
|
|
141
143
|
export interface MorphoBluePositionData {
|
package/src/types/spark.ts
CHANGED
|
@@ -109,6 +109,8 @@ export interface SparkAggregatedPositionData {
|
|
|
109
109
|
leveragedAsset?: string,
|
|
110
110
|
leveragedLsdAssetRatio?: string,
|
|
111
111
|
liquidationPrice?: string,
|
|
112
|
+
minCollRatio: string,
|
|
113
|
+
collLiquidationRatio: string,
|
|
112
114
|
}
|
|
113
115
|
|
|
114
116
|
export interface SparkPositionData extends MMPositionData {
|