@defisaver/positions-sdk 0.0.53 → 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/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/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 -229
- 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 -279
- 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
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
import { getConfigContractAddress } from '../../contracts';
|
|
2
|
-
import { LlamaLendMarketData, LlamaLendVersions } from '../../types';
|
|
3
|
-
import { NetworkNumber } from '../../types/common';
|
|
4
|
-
|
|
5
|
-
export const LLAMALEND_WSTETH_CRVUSD_MARKET = (networkId: NetworkNumber): LlamaLendMarketData => ({
|
|
6
|
-
chainIds: [1],
|
|
7
|
-
label: 'LlamaLend - wstETH/crvUSD',
|
|
8
|
-
shortLabel: 'wstETH/crvUSD',
|
|
9
|
-
value: LlamaLendVersions.LlamaLendwstETHcrvUSD,
|
|
10
|
-
collAsset: 'wstETH',
|
|
11
|
-
baseAsset: 'crvUSD',
|
|
12
|
-
controllerAddress: getConfigContractAddress('LlamaLendWstETHCrvUSDController', networkId),
|
|
13
|
-
vaultAddress: '0x8cf1DE26729cfB7137AF1A6B2a665e099EC319b5',
|
|
14
|
-
url: 'wstethcrvusd',
|
|
15
|
-
});
|
|
16
|
-
export const LLAMALEND_CRVUSD_CRV_MARKET = (networkId: NetworkNumber): LlamaLendMarketData => ({
|
|
17
|
-
chainIds: [1],
|
|
18
|
-
label: 'LlamaLend - crvUSD/CRV',
|
|
19
|
-
shortLabel: 'crvUSD/CRV',
|
|
20
|
-
value: LlamaLendVersions.LlamaLendcrvUSDCRV,
|
|
21
|
-
collAsset: 'crvUSD',
|
|
22
|
-
baseAsset: 'CRV',
|
|
23
|
-
controllerAddress: getConfigContractAddress('LlamaLendCrvUSDCRVController', networkId),
|
|
24
|
-
vaultAddress: '0x4D2f44B0369f3C20c3d670D2C26b048985598450',
|
|
25
|
-
url: 'crvusdcrv',
|
|
26
|
-
});
|
|
27
|
-
export const LLAMALEND_CRV_CRVUSD_MARKET = (networkId: NetworkNumber): LlamaLendMarketData => ({
|
|
28
|
-
chainIds: [1],
|
|
29
|
-
label: 'LlamaLend - CRV/crvUSD',
|
|
30
|
-
shortLabel: 'CRV/crvUSD',
|
|
31
|
-
value: LlamaLendVersions.LlamaLendCRVcrvUSD,
|
|
32
|
-
collAsset: 'CRV',
|
|
33
|
-
baseAsset: 'crvUSD',
|
|
34
|
-
controllerAddress: getConfigContractAddress('LlamaLendCRVCrvUSDController', networkId),
|
|
35
|
-
vaultAddress: '0xCeA18a8752bb7e7817F9AE7565328FE415C0f2cA',
|
|
36
|
-
url: 'crvcrvusd',
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
export const LLAMALEND_TBTC_CRVUSD_MARKET = (networkId: NetworkNumber): LlamaLendMarketData => ({
|
|
40
|
-
chainIds: [1],
|
|
41
|
-
label: 'LlamaLend - TBTC/crvUSD',
|
|
42
|
-
shortLabel: 'TBTC/crvUSD',
|
|
43
|
-
value: LlamaLendVersions.LlamaLendTBTCcrvUSD,
|
|
44
|
-
collAsset: 'tBTC',
|
|
45
|
-
baseAsset: 'crvUSD',
|
|
46
|
-
controllerAddress: getConfigContractAddress('LlamaLendTBTCCrvUSDController', networkId),
|
|
47
|
-
vaultAddress: '0xb2b23C87a4B6d1b03Ba603F7C3EB9A81fDC0AAC9',
|
|
48
|
-
url: 'tbtccrvusd',
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
export const LlamaLendMarkets = (networkId: NetworkNumber) => ({
|
|
52
|
-
[LlamaLendVersions.LlamaLendwstETHcrvUSD]: LLAMALEND_WSTETH_CRVUSD_MARKET(networkId),
|
|
53
|
-
[LlamaLendVersions.LlamaLendcrvUSDCRV]: LLAMALEND_CRVUSD_CRV_MARKET(networkId),
|
|
54
|
-
[LlamaLendVersions.LlamaLendCRVcrvUSD]: LLAMALEND_CRV_CRVUSD_MARKET(networkId),
|
|
55
|
-
[LlamaLendVersions.LlamaLendTBTCcrvUSD]: LLAMALEND_TBTC_CRVUSD_MARKET(networkId),
|
|
56
|
-
}) as const;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
export const LLAMALEND_ALL_VERSIONS = [
|
|
60
|
-
LlamaLendVersions.LlamaLendwstETHcrvUSD,
|
|
61
|
-
LlamaLendVersions.LlamaLendcrvUSDCRV,
|
|
62
|
-
LlamaLendVersions.LlamaLendCRVcrvUSD,
|
|
63
|
-
LlamaLendVersions.LlamaLendTBTCcrvUSD,
|
|
64
|
-
];
|
|
65
|
-
export const getLlamaLendMarketData = (market: LlamaLendVersions, network: NetworkNumber = 1) => LlamaLendMarkets(network)[market];
|
|
1
|
+
import { getConfigContractAddress } from '../../contracts';
|
|
2
|
+
import { LlamaLendMarketData, LlamaLendVersions } from '../../types';
|
|
3
|
+
import { NetworkNumber } from '../../types/common';
|
|
4
|
+
|
|
5
|
+
export const LLAMALEND_WSTETH_CRVUSD_MARKET = (networkId: NetworkNumber): LlamaLendMarketData => ({
|
|
6
|
+
chainIds: [1],
|
|
7
|
+
label: 'LlamaLend - wstETH/crvUSD',
|
|
8
|
+
shortLabel: 'wstETH/crvUSD',
|
|
9
|
+
value: LlamaLendVersions.LlamaLendwstETHcrvUSD,
|
|
10
|
+
collAsset: 'wstETH',
|
|
11
|
+
baseAsset: 'crvUSD',
|
|
12
|
+
controllerAddress: getConfigContractAddress('LlamaLendWstETHCrvUSDController', networkId),
|
|
13
|
+
vaultAddress: '0x8cf1DE26729cfB7137AF1A6B2a665e099EC319b5',
|
|
14
|
+
url: 'wstethcrvusd',
|
|
15
|
+
});
|
|
16
|
+
export const LLAMALEND_CRVUSD_CRV_MARKET = (networkId: NetworkNumber): LlamaLendMarketData => ({
|
|
17
|
+
chainIds: [1],
|
|
18
|
+
label: 'LlamaLend - crvUSD/CRV',
|
|
19
|
+
shortLabel: 'crvUSD/CRV',
|
|
20
|
+
value: LlamaLendVersions.LlamaLendcrvUSDCRV,
|
|
21
|
+
collAsset: 'crvUSD',
|
|
22
|
+
baseAsset: 'CRV',
|
|
23
|
+
controllerAddress: getConfigContractAddress('LlamaLendCrvUSDCRVController', networkId),
|
|
24
|
+
vaultAddress: '0x4D2f44B0369f3C20c3d670D2C26b048985598450',
|
|
25
|
+
url: 'crvusdcrv',
|
|
26
|
+
});
|
|
27
|
+
export const LLAMALEND_CRV_CRVUSD_MARKET = (networkId: NetworkNumber): LlamaLendMarketData => ({
|
|
28
|
+
chainIds: [1],
|
|
29
|
+
label: 'LlamaLend - CRV/crvUSD',
|
|
30
|
+
shortLabel: 'CRV/crvUSD',
|
|
31
|
+
value: LlamaLendVersions.LlamaLendCRVcrvUSD,
|
|
32
|
+
collAsset: 'CRV',
|
|
33
|
+
baseAsset: 'crvUSD',
|
|
34
|
+
controllerAddress: getConfigContractAddress('LlamaLendCRVCrvUSDController', networkId),
|
|
35
|
+
vaultAddress: '0xCeA18a8752bb7e7817F9AE7565328FE415C0f2cA',
|
|
36
|
+
url: 'crvcrvusd',
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
export const LLAMALEND_TBTC_CRVUSD_MARKET = (networkId: NetworkNumber): LlamaLendMarketData => ({
|
|
40
|
+
chainIds: [1],
|
|
41
|
+
label: 'LlamaLend - TBTC/crvUSD',
|
|
42
|
+
shortLabel: 'TBTC/crvUSD',
|
|
43
|
+
value: LlamaLendVersions.LlamaLendTBTCcrvUSD,
|
|
44
|
+
collAsset: 'tBTC',
|
|
45
|
+
baseAsset: 'crvUSD',
|
|
46
|
+
controllerAddress: getConfigContractAddress('LlamaLendTBTCCrvUSDController', networkId),
|
|
47
|
+
vaultAddress: '0xb2b23C87a4B6d1b03Ba603F7C3EB9A81fDC0AAC9',
|
|
48
|
+
url: 'tbtccrvusd',
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export const LlamaLendMarkets = (networkId: NetworkNumber) => ({
|
|
52
|
+
[LlamaLendVersions.LlamaLendwstETHcrvUSD]: LLAMALEND_WSTETH_CRVUSD_MARKET(networkId),
|
|
53
|
+
[LlamaLendVersions.LlamaLendcrvUSDCRV]: LLAMALEND_CRVUSD_CRV_MARKET(networkId),
|
|
54
|
+
[LlamaLendVersions.LlamaLendCRVcrvUSD]: LLAMALEND_CRV_CRVUSD_MARKET(networkId),
|
|
55
|
+
[LlamaLendVersions.LlamaLendTBTCcrvUSD]: LLAMALEND_TBTC_CRVUSD_MARKET(networkId),
|
|
56
|
+
}) as const;
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
export const LLAMALEND_ALL_VERSIONS = [
|
|
60
|
+
LlamaLendVersions.LlamaLendwstETHcrvUSD,
|
|
61
|
+
LlamaLendVersions.LlamaLendcrvUSDCRV,
|
|
62
|
+
LlamaLendVersions.LlamaLendCRVcrvUSD,
|
|
63
|
+
LlamaLendVersions.LlamaLendTBTCcrvUSD,
|
|
64
|
+
];
|
|
65
|
+
export const getLlamaLendMarketData = (market: LlamaLendVersions, network: NetworkNumber = 1) => LlamaLendMarkets(network)[market];
|
|
@@ -1,122 +1,154 @@
|
|
|
1
|
-
import { MorphoBlueMarketData, MorphoBlueVersions } from '../../types';
|
|
2
|
-
import { NetworkNumber } from '../../types/common';
|
|
3
|
-
|
|
4
|
-
export const MORPHO_BLUE_WSTETH_ETH = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
5
|
-
chainIds: [1],
|
|
6
|
-
label: 'Morpho Blue',
|
|
7
|
-
shortLabel: 'wstETH/ETH',
|
|
8
|
-
value: MorphoBlueVersions.MorphoBlueWstEthEth,
|
|
9
|
-
url: 'wstetheth',
|
|
10
|
-
loanToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
11
|
-
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
12
|
-
oracle: '0x2a01eb9496094da03c4e364def50f5ad1280ad72',
|
|
13
|
-
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
14
|
-
lltv: 0.945,
|
|
15
|
-
marketId: '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41',
|
|
16
|
-
// icon: SvgAdapter(protocolIcons.spark),
|
|
17
|
-
protocolName: 'morpho-blue',
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
export const MORPHO_BLUE_WSTETH_USDC = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
21
|
-
chainIds: [1],
|
|
22
|
-
label: 'Morpho Blue',
|
|
23
|
-
shortLabel: 'wstETH/USDC',
|
|
24
|
-
value: MorphoBlueVersions.MorphoBlueWstEthUSDC,
|
|
25
|
-
url: 'wstethusdc',
|
|
26
|
-
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
27
|
-
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
28
|
-
oracle: '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
|
|
29
|
-
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
30
|
-
lltv: 0.86,
|
|
31
|
-
marketId: '0xb323495f7e4148be5643a4ea4a8221eef163e4bccfdedc2a6f4696baacbc86cc',
|
|
32
|
-
// icon: SvgAdapter(protocolIcons.spark),
|
|
33
|
-
protocolName: 'morpho-blue',
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
export const MORPHO_BLUE_SDAI_USDC = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
37
|
-
chainIds: [1],
|
|
38
|
-
label: 'Morpho Blue',
|
|
39
|
-
shortLabel: 'sDAI/USDC',
|
|
40
|
-
value: MorphoBlueVersions.MorphoBlueSDAIUSDC,
|
|
41
|
-
url: 'sdaiusdc',
|
|
42
|
-
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
43
|
-
collateralToken: '0x83F20F44975D03b1b09e64809B757c47f942BEeA',
|
|
44
|
-
oracle: '0x6CAFE228eC0B0bC2D076577d56D35Fe704318f6d',
|
|
45
|
-
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
46
|
-
lltv: 0.965,
|
|
47
|
-
marketId: '0x06f2842602373d247c4934f7656e513955ccc4c377f0febc0d9ca2c3bcc191b1',
|
|
48
|
-
// icon: SvgAdapter(protocolIcons.spark),
|
|
49
|
-
protocolName: 'morpho-blue',
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
export const MORPHO_BLUE_WBTC_USDC = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
53
|
-
chainIds: [1],
|
|
54
|
-
label: 'Morpho Blue',
|
|
55
|
-
shortLabel: 'WBTC/USDC',
|
|
56
|
-
value: MorphoBlueVersions.MorphoBlueWBTCUSDC,
|
|
57
|
-
url: 'wbtcusdc',
|
|
58
|
-
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
59
|
-
collateralToken: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',
|
|
60
|
-
oracle: '0xDddd770BADd886dF3864029e4B377B5F6a2B6b83',
|
|
61
|
-
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
62
|
-
lltv: 0.86,
|
|
63
|
-
marketId: '0x3a85e619751152991742810df6ec69ce473daef99e28a64ab2340d7b7ccfee49',
|
|
64
|
-
// icon: SvgAdapter(protocolIcons.spark),
|
|
65
|
-
protocolName: 'morpho-blue',
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
export const MORPHO_BLUE_ETH_USDC = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
69
|
-
chainIds: [1],
|
|
70
|
-
label: 'Morpho Blue',
|
|
71
|
-
shortLabel: 'ETH/USDC',
|
|
72
|
-
value: MorphoBlueVersions.MorphoBlueEthUSDC,
|
|
73
|
-
url: 'ethusdc',
|
|
74
|
-
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
75
|
-
collateralToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
76
|
-
oracle: '0xdC6fd5831277c693b1054e19E94047cB37c77615',
|
|
77
|
-
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
78
|
-
lltv: 0.915,
|
|
79
|
-
marketId: '0xf9acc677910cc17f650416a22e2a14d5da7ccb9626db18f1bf94efe64f92b372',
|
|
80
|
-
// icon: SvgAdapter(protocolIcons.spark),
|
|
81
|
-
protocolName: 'morpho-blue',
|
|
82
|
-
});
|
|
83
|
-
export const MORPHO_BLUE_WBTC_USDT = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
84
|
-
chainIds: [1],
|
|
85
|
-
label: 'Morpho Blue',
|
|
86
|
-
shortLabel: 'WBTC/USDT',
|
|
87
|
-
value: MorphoBlueVersions.MorphoBlueWBTCUSDT,
|
|
88
|
-
url: 'wbtcusdt',
|
|
89
|
-
loanToken: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
|
|
90
|
-
collateralToken: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',
|
|
91
|
-
oracle: '0x008bF4B1cDA0cc9f0e882E0697f036667652E1ef',
|
|
92
|
-
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
93
|
-
lltv: 0.86,
|
|
94
|
-
marketId: '0xa921ef34e2fc7a27ccc50ae7e4b154e16c9799d3387076c421423ef52ac4df99',
|
|
95
|
-
// icon: SvgAdapter(protocolIcons.spark),
|
|
96
|
-
protocolName: 'morpho-blue',
|
|
97
|
-
});
|
|
98
|
-
export const MORPHO_BLUE_WSTETH_USDT = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
99
|
-
chainIds: [1],
|
|
100
|
-
label: 'Morpho Blue',
|
|
101
|
-
shortLabel: 'wstETH/USDT',
|
|
102
|
-
value: MorphoBlueVersions.MorphoBlueWstEthUSDT,
|
|
103
|
-
url: 'wstethusdt',
|
|
104
|
-
loanToken: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
|
|
105
|
-
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
106
|
-
oracle: '0x95DB30fAb9A3754e42423000DF27732CB2396992',
|
|
107
|
-
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
108
|
-
lltv: 0.86,
|
|
109
|
-
marketId: '0xe7e9694b754c4d4f7e21faf7223f6fa71abaeb10296a4c43a54a7977149687d2',
|
|
110
|
-
// icon: SvgAdapter(protocolIcons.spark),
|
|
111
|
-
protocolName: 'morpho-blue',
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
1
|
+
import { MorphoBlueMarketData, MorphoBlueVersions } from '../../types';
|
|
2
|
+
import { NetworkNumber } from '../../types/common';
|
|
3
|
+
|
|
4
|
+
export const MORPHO_BLUE_WSTETH_ETH = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
5
|
+
chainIds: [1],
|
|
6
|
+
label: 'Morpho Blue',
|
|
7
|
+
shortLabel: 'wstETH/ETH',
|
|
8
|
+
value: MorphoBlueVersions.MorphoBlueWstEthEth,
|
|
9
|
+
url: 'wstetheth',
|
|
10
|
+
loanToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
11
|
+
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
12
|
+
oracle: '0x2a01eb9496094da03c4e364def50f5ad1280ad72',
|
|
13
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
14
|
+
lltv: 0.945,
|
|
15
|
+
marketId: '0xc54d7acf14de29e0e5527cabd7a576506870346a78a11a6762e2cca66322ec41',
|
|
16
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
17
|
+
protocolName: 'morpho-blue',
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export const MORPHO_BLUE_WSTETH_USDC = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
21
|
+
chainIds: [1],
|
|
22
|
+
label: 'Morpho Blue',
|
|
23
|
+
shortLabel: 'wstETH/USDC',
|
|
24
|
+
value: MorphoBlueVersions.MorphoBlueWstEthUSDC,
|
|
25
|
+
url: 'wstethusdc',
|
|
26
|
+
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
27
|
+
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
28
|
+
oracle: '0x48F7E36EB6B826B2dF4B2E630B62Cd25e89E40e2',
|
|
29
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
30
|
+
lltv: 0.86,
|
|
31
|
+
marketId: '0xb323495f7e4148be5643a4ea4a8221eef163e4bccfdedc2a6f4696baacbc86cc',
|
|
32
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
33
|
+
protocolName: 'morpho-blue',
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export const MORPHO_BLUE_SDAI_USDC = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
37
|
+
chainIds: [1],
|
|
38
|
+
label: 'Morpho Blue',
|
|
39
|
+
shortLabel: 'sDAI/USDC',
|
|
40
|
+
value: MorphoBlueVersions.MorphoBlueSDAIUSDC,
|
|
41
|
+
url: 'sdaiusdc',
|
|
42
|
+
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
43
|
+
collateralToken: '0x83F20F44975D03b1b09e64809B757c47f942BEeA',
|
|
44
|
+
oracle: '0x6CAFE228eC0B0bC2D076577d56D35Fe704318f6d',
|
|
45
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
46
|
+
lltv: 0.965,
|
|
47
|
+
marketId: '0x06f2842602373d247c4934f7656e513955ccc4c377f0febc0d9ca2c3bcc191b1',
|
|
48
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
49
|
+
protocolName: 'morpho-blue',
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export const MORPHO_BLUE_WBTC_USDC = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
53
|
+
chainIds: [1],
|
|
54
|
+
label: 'Morpho Blue',
|
|
55
|
+
shortLabel: 'WBTC/USDC',
|
|
56
|
+
value: MorphoBlueVersions.MorphoBlueWBTCUSDC,
|
|
57
|
+
url: 'wbtcusdc',
|
|
58
|
+
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
59
|
+
collateralToken: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',
|
|
60
|
+
oracle: '0xDddd770BADd886dF3864029e4B377B5F6a2B6b83',
|
|
61
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
62
|
+
lltv: 0.86,
|
|
63
|
+
marketId: '0x3a85e619751152991742810df6ec69ce473daef99e28a64ab2340d7b7ccfee49',
|
|
64
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
65
|
+
protocolName: 'morpho-blue',
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
export const MORPHO_BLUE_ETH_USDC = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
69
|
+
chainIds: [1],
|
|
70
|
+
label: 'Morpho Blue',
|
|
71
|
+
shortLabel: 'ETH/USDC',
|
|
72
|
+
value: MorphoBlueVersions.MorphoBlueEthUSDC,
|
|
73
|
+
url: 'ethusdc',
|
|
74
|
+
loanToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
|
|
75
|
+
collateralToken: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
|
|
76
|
+
oracle: '0xdC6fd5831277c693b1054e19E94047cB37c77615',
|
|
77
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
78
|
+
lltv: 0.915,
|
|
79
|
+
marketId: '0xf9acc677910cc17f650416a22e2a14d5da7ccb9626db18f1bf94efe64f92b372',
|
|
80
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
81
|
+
protocolName: 'morpho-blue',
|
|
82
|
+
});
|
|
83
|
+
export const MORPHO_BLUE_WBTC_USDT = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
84
|
+
chainIds: [1],
|
|
85
|
+
label: 'Morpho Blue',
|
|
86
|
+
shortLabel: 'WBTC/USDT',
|
|
87
|
+
value: MorphoBlueVersions.MorphoBlueWBTCUSDT,
|
|
88
|
+
url: 'wbtcusdt',
|
|
89
|
+
loanToken: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
|
|
90
|
+
collateralToken: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',
|
|
91
|
+
oracle: '0x008bF4B1cDA0cc9f0e882E0697f036667652E1ef',
|
|
92
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
93
|
+
lltv: 0.86,
|
|
94
|
+
marketId: '0xa921ef34e2fc7a27ccc50ae7e4b154e16c9799d3387076c421423ef52ac4df99',
|
|
95
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
96
|
+
protocolName: 'morpho-blue',
|
|
97
|
+
});
|
|
98
|
+
export const MORPHO_BLUE_WSTETH_USDT = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
99
|
+
chainIds: [1],
|
|
100
|
+
label: 'Morpho Blue',
|
|
101
|
+
shortLabel: 'wstETH/USDT',
|
|
102
|
+
value: MorphoBlueVersions.MorphoBlueWstEthUSDT,
|
|
103
|
+
url: 'wstethusdt',
|
|
104
|
+
loanToken: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
|
|
105
|
+
collateralToken: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
|
|
106
|
+
oracle: '0x95DB30fAb9A3754e42423000DF27732CB2396992',
|
|
107
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
108
|
+
lltv: 0.86,
|
|
109
|
+
marketId: '0xe7e9694b754c4d4f7e21faf7223f6fa71abaeb10296a4c43a54a7977149687d2',
|
|
110
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
111
|
+
protocolName: 'morpho-blue',
|
|
112
|
+
});
|
|
113
|
+
export const MORPHO_BLUE_SUSDE_DAI = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
114
|
+
chainIds: [1],
|
|
115
|
+
label: 'Morpho Blue',
|
|
116
|
+
shortLabel: 'sUSDe/DAI',
|
|
117
|
+
value: MorphoBlueVersions.MorphoBlueSUSDeDAI,
|
|
118
|
+
url: 'susdedai',
|
|
119
|
+
loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
|
120
|
+
collateralToken: '0x9D39A5DE30e57443BfF2A8307A4256c8797A3497',
|
|
121
|
+
oracle: '0x5D916980D5Ae1737a8330Bf24dF812b2911Aae25',
|
|
122
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
123
|
+
lltv: 0.915,
|
|
124
|
+
marketId: '0x1247f1c237eceae0602eab1470a5061a6dd8f734ba88c7cdc5d6109fb0026b28',
|
|
125
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
126
|
+
protocolName: 'morpho-blue',
|
|
127
|
+
});
|
|
128
|
+
export const MORPHO_BLUE_USDE_DAI = (networkId: NetworkNumber = NetworkNumber.Eth): MorphoBlueMarketData => ({
|
|
129
|
+
chainIds: [1],
|
|
130
|
+
label: 'Morpho Blue',
|
|
131
|
+
shortLabel: 'USDe/DAI',
|
|
132
|
+
value: MorphoBlueVersions.MorphoBlueUSDeDAI,
|
|
133
|
+
url: 'usdedai',
|
|
134
|
+
loanToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F',
|
|
135
|
+
collateralToken: '0x4c9EDD5852cd905f086C759E8383e09bff1E68B3',
|
|
136
|
+
oracle: '0xaE4750d0813B5E37A51f7629beedd72AF1f9cA35',
|
|
137
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
138
|
+
lltv: 0.915,
|
|
139
|
+
marketId: '0xe7e9694b754c4d4f7e21faf7223f6fa71abaeb10296a4c43a54a7977149687d2',
|
|
140
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
141
|
+
protocolName: 'morpho-blue',
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
export const MorphoBlueMarkets = (networkId: NetworkNumber) => ({
|
|
145
|
+
[MorphoBlueVersions.MorphoBlueWstEthEth]: MORPHO_BLUE_WSTETH_ETH(networkId),
|
|
146
|
+
[MorphoBlueVersions.MorphoBlueWstEthUSDC]: MORPHO_BLUE_WSTETH_USDC(networkId),
|
|
147
|
+
[MorphoBlueVersions.MorphoBlueSDAIUSDC]: MORPHO_BLUE_SDAI_USDC(networkId),
|
|
148
|
+
[MorphoBlueVersions.MorphoBlueWBTCUSDC]: MORPHO_BLUE_WBTC_USDC(networkId),
|
|
149
|
+
[MorphoBlueVersions.MorphoBlueEthUSDC]: MORPHO_BLUE_ETH_USDC(networkId),
|
|
150
|
+
[MorphoBlueVersions.MorphoBlueWBTCUSDT]: MORPHO_BLUE_WBTC_USDT(networkId),
|
|
151
|
+
[MorphoBlueVersions.MorphoBlueWstEthUSDT]: MORPHO_BLUE_WSTETH_USDT(networkId),
|
|
152
|
+
[MorphoBlueVersions.MorphoBlueSUSDeDAI]: MORPHO_BLUE_SUSDE_DAI(networkId),
|
|
153
|
+
[MorphoBlueVersions.MorphoBlueUSDeDAI]: MORPHO_BLUE_USDE_DAI(networkId),
|
|
122
154
|
}) as const;
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { getConfigContractAddress } from '../../contracts';
|
|
2
|
-
import { SparkMarketData, SparkVersions } from '../../types';
|
|
3
|
-
import { NetworkNumber } from '../../types/common';
|
|
4
|
-
import { sparkAssetsDefaultMarket } from './marketAssets';
|
|
5
|
-
|
|
6
|
-
export const sparkEthEmodeId = {
|
|
7
|
-
[NetworkNumber.Eth]: 1,
|
|
8
|
-
} as const;
|
|
9
|
-
|
|
10
|
-
export const SPARK_V1 = (networkId: NetworkNumber = NetworkNumber.Eth): SparkMarketData => ({
|
|
11
|
-
chainIds: [1],
|
|
12
|
-
label: 'Spark',
|
|
13
|
-
shortLabel: 'v1',
|
|
14
|
-
value: SparkVersions.SparkV1,
|
|
15
|
-
url: 'default',
|
|
16
|
-
assets: networkId ? sparkAssetsDefaultMarket[networkId] : [],
|
|
17
|
-
provider: 'SparkPoolAddressesProvider',
|
|
18
|
-
providerAddress: getConfigContractAddress('SparkPoolAddressesProvider', networkId),
|
|
19
|
-
lendingPool: 'SparkLendingPool',
|
|
20
|
-
lendingPoolAddress: getConfigContractAddress('SparkLendingPool', networkId),
|
|
21
|
-
protocolData: 'SparkProtocolDataProvider',
|
|
22
|
-
protocolDataAddress: getConfigContractAddress('SparkProtocolDataProvider', networkId),
|
|
23
|
-
// icon: SvgAdapter(protocolIcons.spark),
|
|
24
|
-
protocolName: 'spark',
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
export const SparkMarkets = (networkId: NetworkNumber) => ({
|
|
29
|
-
[SparkVersions.SparkV1]: SPARK_V1(networkId),
|
|
1
|
+
import { getConfigContractAddress } from '../../contracts';
|
|
2
|
+
import { SparkMarketData, SparkVersions } from '../../types';
|
|
3
|
+
import { NetworkNumber } from '../../types/common';
|
|
4
|
+
import { sparkAssetsDefaultMarket } from './marketAssets';
|
|
5
|
+
|
|
6
|
+
export const sparkEthEmodeId = {
|
|
7
|
+
[NetworkNumber.Eth]: 1,
|
|
8
|
+
} as const;
|
|
9
|
+
|
|
10
|
+
export const SPARK_V1 = (networkId: NetworkNumber = NetworkNumber.Eth): SparkMarketData => ({
|
|
11
|
+
chainIds: [1],
|
|
12
|
+
label: 'Spark',
|
|
13
|
+
shortLabel: 'v1',
|
|
14
|
+
value: SparkVersions.SparkV1,
|
|
15
|
+
url: 'default',
|
|
16
|
+
assets: networkId ? sparkAssetsDefaultMarket[networkId] : [],
|
|
17
|
+
provider: 'SparkPoolAddressesProvider',
|
|
18
|
+
providerAddress: getConfigContractAddress('SparkPoolAddressesProvider', networkId),
|
|
19
|
+
lendingPool: 'SparkLendingPool',
|
|
20
|
+
lendingPoolAddress: getConfigContractAddress('SparkLendingPool', networkId),
|
|
21
|
+
protocolData: 'SparkProtocolDataProvider',
|
|
22
|
+
protocolDataAddress: getConfigContractAddress('SparkProtocolDataProvider', networkId),
|
|
23
|
+
// icon: SvgAdapter(protocolIcons.spark),
|
|
24
|
+
protocolName: 'spark',
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
export const SparkMarkets = (networkId: NetworkNumber) => ({
|
|
29
|
+
[SparkVersions.SparkV1]: SPARK_V1(networkId),
|
|
30
30
|
}) as const;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { NetworkNumber } from '../../types/common';
|
|
2
|
-
|
|
3
|
-
export const sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT'];
|
|
4
|
-
|
|
5
|
-
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
6
|
-
export const sparkAssetsDefaultMarket = {
|
|
7
|
-
[NetworkNumber.Eth]: sparkAssetsDefaultMarketEth,
|
|
8
|
-
[NetworkNumber.Opt]: [],
|
|
9
|
-
[NetworkNumber.Base]: [],
|
|
10
|
-
[NetworkNumber.Arb]: [],
|
|
1
|
+
import { NetworkNumber } from '../../types/common';
|
|
2
|
+
|
|
3
|
+
export const sparkAssetsDefaultMarketEth = ['DAI', 'sDAI', 'USDC', 'ETH', 'wstETH', 'WBTC', 'GNO', 'rETH', 'USDT'];
|
|
4
|
+
|
|
5
|
+
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
6
|
+
export const sparkAssetsDefaultMarket = {
|
|
7
|
+
[NetworkNumber.Eth]: sparkAssetsDefaultMarketEth,
|
|
8
|
+
[NetworkNumber.Opt]: [],
|
|
9
|
+
[NetworkNumber.Base]: [],
|
|
10
|
+
[NetworkNumber.Arb]: [],
|
|
11
11
|
} as const;
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
import Dec from 'decimal.js';
|
|
2
|
-
import { BLOCKS_IN_A_YEAR } from '../constants';
|
|
3
|
-
import { MMUsedAssets } from '../types/common';
|
|
4
|
-
|
|
5
|
-
export const getAssetsTotal = (assets: object, filter: any, transform: any) => (Object.values(assets) as any)
|
|
6
|
-
.filter(filter)
|
|
7
|
-
.map(transform)
|
|
8
|
-
.reduce((acc: any, data: any) => new Dec(acc).add(data), '0')
|
|
9
|
-
.toString();
|
|
10
|
-
|
|
11
|
-
export const calcLongLiqPrice = (assetPrice: string, borrowedUsd: string, borrowLimitUsd: string) => new Dec(assetPrice).mul(borrowedUsd).div(borrowLimitUsd).toString();
|
|
12
|
-
export const calcShortLiqPrice = (assetPrice: string, borrowedUsd: string, borrowLimitUsd: string) => new Dec(assetPrice).div(borrowedUsd).mul(borrowLimitUsd).toString();
|
|
13
|
-
|
|
14
|
-
export const calcLeverageLiqPrice = (leverageType: string, assetPrice: string, borrowedUsd: string, borrowLimitUsd: string) => {
|
|
15
|
-
if (leverageType === 'short') return calcShortLiqPrice(assetPrice, borrowedUsd, borrowLimitUsd);
|
|
16
|
-
if (leverageType === 'long' || leverageType === 'lsd-leverage') return calcLongLiqPrice(assetPrice, borrowedUsd, borrowLimitUsd);
|
|
17
|
-
console.error('invalid leverageType', leverageType);
|
|
18
|
-
return '0';
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export const calculateBorrowingAssetLimit = (assetBorrowedUsd: string, borrowLimitUsd: string) => new Dec(assetBorrowedUsd).div(borrowLimitUsd).times(100).toString();
|
|
22
|
-
|
|
23
|
-
export const STABLE_ASSETS = ['DAI', 'USDC', 'USDT', 'TUSD', 'USDP', 'GUSD', 'BUSD', 'SUSD', 'FRAX', 'LUSD', 'USDC.e', 'GHO', 'sDAI', 'crvUSD'];
|
|
24
|
-
|
|
25
|
-
export const isLeveragedPos = (usedAssets: MMUsedAssets, dustLimit = 5) => {
|
|
26
|
-
let borrowUnstable = 0;
|
|
27
|
-
let supplyStable = 0;
|
|
28
|
-
let borrowStable = 0;
|
|
29
|
-
let supplyUnstable = 0;
|
|
30
|
-
let longAsset = '';
|
|
31
|
-
let shortAsset = '';
|
|
32
|
-
Object.values(usedAssets).forEach(({
|
|
33
|
-
symbol, suppliedUsd, borrowedUsd, collateral,
|
|
34
|
-
}) => {
|
|
35
|
-
const isSupplied = (+suppliedUsd) > dustLimit; // ignore dust like <limit leftover supply
|
|
36
|
-
const isBorrowed = (+borrowedUsd) > dustLimit; // ignore dust like <limit leftover supply
|
|
37
|
-
if (isSupplied && STABLE_ASSETS.includes(symbol) && collateral) supplyStable += 1;
|
|
38
|
-
if (isBorrowed && STABLE_ASSETS.includes(symbol)) borrowStable += 1;
|
|
39
|
-
if (isBorrowed && !STABLE_ASSETS.includes(symbol)) {
|
|
40
|
-
borrowUnstable += 1;
|
|
41
|
-
shortAsset = symbol;
|
|
42
|
-
}
|
|
43
|
-
if (isSupplied && !STABLE_ASSETS.includes(symbol) && collateral) {
|
|
44
|
-
supplyUnstable += 1;
|
|
45
|
-
longAsset = symbol;
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
const isLong = borrowStable > 0 && borrowUnstable === 0 && supplyUnstable === 1 && supplyStable === 0;
|
|
49
|
-
const isShort = supplyStable > 0 && supplyUnstable === 0 && borrowUnstable === 1 && borrowStable === 0;
|
|
50
|
-
// lsd -> liquid staking derivative
|
|
51
|
-
const isLsdLeveraged = supplyUnstable === 1 && borrowUnstable === 1 && shortAsset === 'ETH' && ['stETH', 'wstETH', 'cbETH', 'rETH'].includes(longAsset);
|
|
52
|
-
if (isLong) {
|
|
53
|
-
return {
|
|
54
|
-
leveragedType: 'long',
|
|
55
|
-
leveragedAsset: longAsset,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
if (isShort) {
|
|
59
|
-
return {
|
|
60
|
-
leveragedType: 'short',
|
|
61
|
-
leveragedAsset: shortAsset,
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
if (isLsdLeveraged) {
|
|
65
|
-
return {
|
|
66
|
-
leveragedType: 'lsd-leverage',
|
|
67
|
-
leveragedAsset: longAsset,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
return {
|
|
71
|
-
leveragedType: '',
|
|
72
|
-
leveragedAsset: '',
|
|
73
|
-
};
|
|
74
|
-
};
|
|
75
|
-
|
|
1
|
+
import Dec from 'decimal.js';
|
|
2
|
+
import { BLOCKS_IN_A_YEAR } from '../constants';
|
|
3
|
+
import { MMUsedAssets } from '../types/common';
|
|
4
|
+
|
|
5
|
+
export const getAssetsTotal = (assets: object, filter: any, transform: any) => (Object.values(assets) as any)
|
|
6
|
+
.filter(filter)
|
|
7
|
+
.map(transform)
|
|
8
|
+
.reduce((acc: any, data: any) => new Dec(acc).add(data), '0')
|
|
9
|
+
.toString();
|
|
10
|
+
|
|
11
|
+
export const calcLongLiqPrice = (assetPrice: string, borrowedUsd: string, borrowLimitUsd: string) => new Dec(assetPrice).mul(borrowedUsd).div(borrowLimitUsd).toString();
|
|
12
|
+
export const calcShortLiqPrice = (assetPrice: string, borrowedUsd: string, borrowLimitUsd: string) => new Dec(assetPrice).div(borrowedUsd).mul(borrowLimitUsd).toString();
|
|
13
|
+
|
|
14
|
+
export const calcLeverageLiqPrice = (leverageType: string, assetPrice: string, borrowedUsd: string, borrowLimitUsd: string) => {
|
|
15
|
+
if (leverageType === 'short') return calcShortLiqPrice(assetPrice, borrowedUsd, borrowLimitUsd);
|
|
16
|
+
if (leverageType === 'long' || leverageType === 'lsd-leverage') return calcLongLiqPrice(assetPrice, borrowedUsd, borrowLimitUsd);
|
|
17
|
+
console.error('invalid leverageType', leverageType);
|
|
18
|
+
return '0';
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const calculateBorrowingAssetLimit = (assetBorrowedUsd: string, borrowLimitUsd: string) => new Dec(assetBorrowedUsd).div(borrowLimitUsd).times(100).toString();
|
|
22
|
+
|
|
23
|
+
export const STABLE_ASSETS = ['DAI', 'USDC', 'USDT', 'TUSD', 'USDP', 'GUSD', 'BUSD', 'SUSD', 'FRAX', 'LUSD', 'USDC.e', 'GHO', 'sDAI', 'crvUSD'];
|
|
24
|
+
|
|
25
|
+
export const isLeveragedPos = (usedAssets: MMUsedAssets, dustLimit = 5) => {
|
|
26
|
+
let borrowUnstable = 0;
|
|
27
|
+
let supplyStable = 0;
|
|
28
|
+
let borrowStable = 0;
|
|
29
|
+
let supplyUnstable = 0;
|
|
30
|
+
let longAsset = '';
|
|
31
|
+
let shortAsset = '';
|
|
32
|
+
Object.values(usedAssets).forEach(({
|
|
33
|
+
symbol, suppliedUsd, borrowedUsd, collateral,
|
|
34
|
+
}) => {
|
|
35
|
+
const isSupplied = (+suppliedUsd) > dustLimit; // ignore dust like <limit leftover supply
|
|
36
|
+
const isBorrowed = (+borrowedUsd) > dustLimit; // ignore dust like <limit leftover supply
|
|
37
|
+
if (isSupplied && STABLE_ASSETS.includes(symbol) && collateral) supplyStable += 1;
|
|
38
|
+
if (isBorrowed && STABLE_ASSETS.includes(symbol)) borrowStable += 1;
|
|
39
|
+
if (isBorrowed && !STABLE_ASSETS.includes(symbol)) {
|
|
40
|
+
borrowUnstable += 1;
|
|
41
|
+
shortAsset = symbol;
|
|
42
|
+
}
|
|
43
|
+
if (isSupplied && !STABLE_ASSETS.includes(symbol) && collateral) {
|
|
44
|
+
supplyUnstable += 1;
|
|
45
|
+
longAsset = symbol;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const isLong = borrowStable > 0 && borrowUnstable === 0 && supplyUnstable === 1 && supplyStable === 0;
|
|
49
|
+
const isShort = supplyStable > 0 && supplyUnstable === 0 && borrowUnstable === 1 && borrowStable === 0;
|
|
50
|
+
// lsd -> liquid staking derivative
|
|
51
|
+
const isLsdLeveraged = supplyUnstable === 1 && borrowUnstable === 1 && shortAsset === 'ETH' && ['stETH', 'wstETH', 'cbETH', 'rETH'].includes(longAsset);
|
|
52
|
+
if (isLong) {
|
|
53
|
+
return {
|
|
54
|
+
leveragedType: 'long',
|
|
55
|
+
leveragedAsset: longAsset,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (isShort) {
|
|
59
|
+
return {
|
|
60
|
+
leveragedType: 'short',
|
|
61
|
+
leveragedAsset: shortAsset,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
if (isLsdLeveraged) {
|
|
65
|
+
return {
|
|
66
|
+
leveragedType: 'lsd-leverage',
|
|
67
|
+
leveragedAsset: longAsset,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
leveragedType: '',
|
|
72
|
+
leveragedAsset: '',
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
|
|
76
76
|
export const aprToApy = (interest: string | number, frequency = BLOCKS_IN_A_YEAR) => ((1 + (+interest / 100) / frequency) ** frequency - 1) * 100; // eslint-disable-line
|