@defisaver/positions-sdk 0.0.186 → 0.0.188-dev-markets
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/compoundV3/index.js +14 -9
- package/cjs/config/contracts.d.ts +670 -228
- package/cjs/config/contracts.js +41 -5
- package/cjs/contracts.d.ts +2 -0
- package/cjs/contracts.js +3 -1
- package/cjs/helpers/morphoBlueHelpers/index.d.ts +42 -1
- package/cjs/helpers/morphoBlueHelpers/index.js +203 -20
- package/cjs/markets/compound/index.d.ts +4 -0
- package/cjs/markets/compound/index.js +41 -1
- package/cjs/markets/compound/marketsAssets.d.ts +14 -0
- package/cjs/markets/compound/marketsAssets.js +17 -3
- package/cjs/markets/morphoBlue/index.d.ts +8 -0
- package/cjs/markets/morphoBlue/index.js +71 -2
- package/cjs/morphoBlue/index.js +27 -10
- package/cjs/services/priceService.d.ts +3 -0
- package/cjs/services/priceService.js +33 -1
- package/cjs/types/compound.d.ts +3 -1
- package/cjs/types/compound.js +2 -0
- package/cjs/types/contracts/generated/CUSDSv3.d.ts +441 -0
- package/cjs/types/contracts/generated/CUSDSv3.js +5 -0
- package/cjs/types/contracts/generated/CWstETHv3.d.ts +441 -0
- package/cjs/types/contracts/generated/CWstETHv3.js +5 -0
- package/cjs/types/contracts/generated/DFSFeedRegistry.d.ts +40 -0
- package/cjs/types/contracts/generated/DFSFeedRegistry.js +5 -0
- package/cjs/types/contracts/generated/MorphoBlueView.d.ts +5 -5
- package/cjs/types/contracts/generated/WstETHPriceFeed.d.ts +39 -0
- package/cjs/types/contracts/generated/WstETHPriceFeed.js +5 -0
- package/cjs/types/contracts/generated/index.d.ts +4 -0
- package/cjs/types/morphoBlue.d.ts +37 -1
- package/cjs/types/morphoBlue.js +4 -0
- package/esm/compoundV3/index.js +15 -10
- package/esm/config/contracts.d.ts +670 -228
- package/esm/config/contracts.js +41 -5
- package/esm/contracts.d.ts +2 -0
- package/esm/contracts.js +2 -0
- package/esm/helpers/morphoBlueHelpers/index.d.ts +42 -1
- package/esm/helpers/morphoBlueHelpers/index.js +200 -20
- package/esm/markets/compound/index.d.ts +4 -0
- package/esm/markets/compound/index.js +39 -1
- package/esm/markets/compound/marketsAssets.d.ts +14 -0
- package/esm/markets/compound/marketsAssets.js +16 -2
- package/esm/markets/morphoBlue/index.d.ts +8 -0
- package/esm/markets/morphoBlue/index.js +65 -1
- package/esm/morphoBlue/index.js +30 -13
- package/esm/services/priceService.d.ts +3 -0
- package/esm/services/priceService.js +31 -1
- package/esm/types/compound.d.ts +3 -1
- package/esm/types/compound.js +2 -0
- package/esm/types/contracts/generated/CUSDSv3.d.ts +441 -0
- package/esm/types/contracts/generated/CUSDSv3.js +4 -0
- package/esm/types/contracts/generated/CWstETHv3.d.ts +441 -0
- package/esm/types/contracts/generated/CWstETHv3.js +4 -0
- package/esm/types/contracts/generated/DFSFeedRegistry.d.ts +40 -0
- package/esm/types/contracts/generated/DFSFeedRegistry.js +4 -0
- package/esm/types/contracts/generated/MorphoBlueView.d.ts +5 -5
- package/esm/types/contracts/generated/WstETHPriceFeed.d.ts +39 -0
- package/esm/types/contracts/generated/WstETHPriceFeed.js +4 -0
- package/esm/types/contracts/generated/index.d.ts +4 -0
- package/esm/types/morphoBlue.d.ts +37 -1
- package/esm/types/morphoBlue.js +4 -0
- package/package.json +2 -2
- package/src/compoundV3/index.ts +20 -11
- package/src/config/contracts.js +41 -5
- package/src/contracts.ts +2 -0
- package/src/helpers/morphoBlueHelpers/index.ts +228 -19
- package/src/markets/compound/index.ts +42 -2
- package/src/markets/compound/marketsAssets.ts +20 -2
- package/src/markets/morphoBlue/index.ts +70 -1
- package/src/morphoBlue/index.ts +33 -16
- package/src/services/priceService.ts +41 -2
- package/src/types/compound.ts +2 -0
- package/src/types/contracts/generated/CUSDSv3.ts +685 -0
- package/src/types/contracts/generated/CWstETHv3.ts +685 -0
- package/src/types/contracts/generated/DFSFeedRegistry.ts +77 -0
- package/src/types/contracts/generated/MorphoBlueView.ts +9 -5
- package/src/types/contracts/generated/WstETHPriceFeed.ts +59 -0
- package/src/types/contracts/generated/index.ts +4 -0
- package/src/types/morphoBlue.ts +35 -0
|
@@ -8,7 +8,48 @@ export declare const getMorphoBlueAggregatedPositionData: ({ usedAssets, assetsD
|
|
|
8
8
|
}) => MorphoBlueAggregatedPositionData;
|
|
9
9
|
export declare const getSupplyRate: (totalSupplyAssets: string, totalBorrowAssets: string, borrowRate: string, fee: string) => string;
|
|
10
10
|
export declare const getBorrowRate: (borrowRate: string, totalBorrowShares: string) => string;
|
|
11
|
-
export declare const getApyAfterValuesEstimation: (selectedMarket: MorphoBlueMarketData,
|
|
11
|
+
export declare const getApyAfterValuesEstimation: (selectedMarket: MorphoBlueMarketData, actions: {
|
|
12
|
+
action: string;
|
|
13
|
+
amount: string;
|
|
14
|
+
asset: string;
|
|
15
|
+
}[], web3: Web3, network: NetworkNumber) => Promise<{
|
|
12
16
|
borrowRate: string;
|
|
13
17
|
supplyRate: string;
|
|
14
18
|
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Get reallocatable liquidity to a given market and target borrow utilization
|
|
21
|
+
* @param marketId - Unique key of the market liquidity is reallocated to
|
|
22
|
+
* @param network - The network number
|
|
23
|
+
* @returns The reallocatable liquidity and target borrow utilization
|
|
24
|
+
*/
|
|
25
|
+
export declare const getReallocatableLiquidity: (marketId: string, network?: NetworkNumber) => Promise<{
|
|
26
|
+
reallocatableLiquidity: string;
|
|
27
|
+
targetBorrowUtilization: string;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Get liquidity to allocate for a given amount to borrow.
|
|
31
|
+
* First, the function will try to calculate the amount of liquidity to allocate to be able to
|
|
32
|
+
* hit the target utilization. If it is not possible to allocate enough liquidity to hit the
|
|
33
|
+
* target utilization, the function will allocate the amount of liquidity needed to be able to
|
|
34
|
+
* borrow the selected amount.
|
|
35
|
+
* @param amountToBorrow - The amount to borrow
|
|
36
|
+
* @param totalBorrow - The total amount borrowed from market
|
|
37
|
+
* @param totalSupply - The total amount supplied to market
|
|
38
|
+
* @param targetBorrowUtilization - The target borrow utilization of market
|
|
39
|
+
* @param reallocatableLiquidityAssets - The amount of liquidity that can be reallocated from other markets
|
|
40
|
+
* @returns The amount of liquidity to allocate
|
|
41
|
+
*/
|
|
42
|
+
export declare const getLiquidityToAllocate: (amountToBorrow: string, totalBorrow: string, totalSupply: string, targetBorrowUtilization: string, reallocatableLiquidityAssets: string) => string;
|
|
43
|
+
/**
|
|
44
|
+
* Get the vaults and withdrawals needed to reallocate liquidity for a given amount to borrow.
|
|
45
|
+
* Amount to be reallocated is calculated in `getLiquidityToAllocate`
|
|
46
|
+
* @param market - The market data
|
|
47
|
+
* @param assetsData - The assets data
|
|
48
|
+
* @param amountToBorrow - Amount being borrowed (not the amount being reallocated)
|
|
49
|
+
* @param network - The network number
|
|
50
|
+
* @returns The vaults and withdrawals needed to reallocate liquidity
|
|
51
|
+
*/
|
|
52
|
+
export declare const getReallocation: (market: MorphoBlueMarketData, assetsData: MorphoBlueAssetsData, amountToBorrow: string, network?: NetworkNumber) => Promise<{
|
|
53
|
+
vaults: string[];
|
|
54
|
+
withdrawals: (string | string[])[][][];
|
|
55
|
+
}>;
|
|
@@ -8,11 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
|
-
import { assetAmountInWei } from '@defisaver/tokens';
|
|
11
|
+
import { assetAmountInWei, getAssetInfoByAddress } from '@defisaver/tokens';
|
|
12
12
|
import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
|
|
13
13
|
import { calculateNetApy } from '../../staking';
|
|
14
|
+
import { NetworkNumber } from '../../types/common';
|
|
14
15
|
import { borrowOperations, SECONDS_PER_YEAR, WAD } from '../../constants';
|
|
15
16
|
import { MorphoBlueViewContract } from '../../contracts';
|
|
17
|
+
import { compareAddresses } from '../../services/utils';
|
|
16
18
|
export const getMorphoBlueAggregatedPositionData = ({ usedAssets, assetsData, marketInfo }) => {
|
|
17
19
|
var _a, _b, _c, _d, _e, _f;
|
|
18
20
|
const payload = {};
|
|
@@ -74,29 +76,207 @@ export const getBorrowRate = (borrowRate, totalBorrowShares) => {
|
|
|
74
76
|
}
|
|
75
77
|
return new Dec(compound(borrowRate)).div(1e18).mul(100).toString();
|
|
76
78
|
};
|
|
77
|
-
export const getApyAfterValuesEstimation = (selectedMarket,
|
|
79
|
+
export const getApyAfterValuesEstimation = (selectedMarket, actions, web3, network) => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
80
|
const morphoBlueViewContract = MorphoBlueViewContract(web3, network);
|
|
79
81
|
const lltvInWei = assetAmountInWei(selectedMarket.lltv, 'ETH');
|
|
80
82
|
const marketData = [selectedMarket.loanToken, selectedMarket.collateralToken, selectedMarket.oracle, selectedMarket.irm, lltvInWei];
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
83
|
+
const params = actions.map(({ action, asset, amount }) => {
|
|
84
|
+
const isBorrowOperation = borrowOperations.includes(action);
|
|
85
|
+
const amountInWei = assetAmountInWei(amount, asset);
|
|
86
|
+
let liquidityAdded;
|
|
87
|
+
let liquidityRemoved;
|
|
88
|
+
if (isBorrowOperation) {
|
|
89
|
+
liquidityAdded = action === 'payback' ? amountInWei : '0';
|
|
90
|
+
liquidityRemoved = action === 'borrow' ? amountInWei : '0';
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
liquidityAdded = action === 'collateral' ? amountInWei : '0';
|
|
94
|
+
liquidityRemoved = action === 'withdraw' ? amountInWei : '0';
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
liquidityAdded,
|
|
98
|
+
liquidityRemoved,
|
|
99
|
+
isBorrowOperation,
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
const data = yield morphoBlueViewContract.methods.getApyAfterValuesEstimation(marketData, params).call();
|
|
99
103
|
const borrowRate = getBorrowRate(data.borrowRate, data.market.totalBorrowShares);
|
|
100
104
|
const supplyRate = getSupplyRate(data.market.totalSupplyAssets, data.market.totalBorrowAssets, data.borrowRate, data.market.fee);
|
|
101
105
|
return { borrowRate, supplyRate };
|
|
102
106
|
});
|
|
107
|
+
const API_URL = 'https://blue-api.morpho.org/graphql';
|
|
108
|
+
const MARKET_QUERY = `
|
|
109
|
+
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
110
|
+
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
111
|
+
reallocatableLiquidityAssets
|
|
112
|
+
targetBorrowUtilization
|
|
113
|
+
loanAsset {
|
|
114
|
+
address
|
|
115
|
+
decimals
|
|
116
|
+
priceUsd
|
|
117
|
+
}
|
|
118
|
+
state {
|
|
119
|
+
liquidityAssets
|
|
120
|
+
borrowAssets
|
|
121
|
+
supplyAssets
|
|
122
|
+
}
|
|
123
|
+
publicAllocatorSharedLiquidity {
|
|
124
|
+
assets
|
|
125
|
+
vault {
|
|
126
|
+
address
|
|
127
|
+
name
|
|
128
|
+
}
|
|
129
|
+
allocationMarket {
|
|
130
|
+
uniqueKey
|
|
131
|
+
loanAsset {
|
|
132
|
+
address
|
|
133
|
+
}
|
|
134
|
+
collateralAsset {
|
|
135
|
+
address
|
|
136
|
+
}
|
|
137
|
+
irmAddress
|
|
138
|
+
oracle {
|
|
139
|
+
address
|
|
140
|
+
}
|
|
141
|
+
lltv
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
loanAsset {
|
|
145
|
+
address
|
|
146
|
+
}
|
|
147
|
+
collateralAsset {
|
|
148
|
+
address
|
|
149
|
+
}
|
|
150
|
+
oracle {
|
|
151
|
+
address
|
|
152
|
+
}
|
|
153
|
+
irmAddress
|
|
154
|
+
lltv
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
`;
|
|
158
|
+
/**
|
|
159
|
+
* Get reallocatable liquidity to a given market and target borrow utilization
|
|
160
|
+
* @param marketId - Unique key of the market liquidity is reallocated to
|
|
161
|
+
* @param network - The network number
|
|
162
|
+
* @returns The reallocatable liquidity and target borrow utilization
|
|
163
|
+
*/
|
|
164
|
+
export const getReallocatableLiquidity = (marketId, network = NetworkNumber.Eth) => __awaiter(void 0, void 0, void 0, function* () {
|
|
165
|
+
var _a;
|
|
166
|
+
const response = yield fetch(API_URL, {
|
|
167
|
+
method: 'POST',
|
|
168
|
+
headers: { 'Content-Type': 'application/json' },
|
|
169
|
+
body: JSON.stringify({
|
|
170
|
+
query: MARKET_QUERY,
|
|
171
|
+
variables: { uniqueKey: marketId, chainId: network },
|
|
172
|
+
}),
|
|
173
|
+
});
|
|
174
|
+
const data = yield response.json();
|
|
175
|
+
const marketData = (_a = data === null || data === void 0 ? void 0 : data.data) === null || _a === void 0 ? void 0 : _a.marketByUniqueKey;
|
|
176
|
+
if (!marketData)
|
|
177
|
+
throw new Error('Market data not found');
|
|
178
|
+
return { reallocatableLiquidity: marketData.reallocatableLiquidityAssets, targetBorrowUtilization: marketData.targetBorrowUtilization };
|
|
179
|
+
});
|
|
180
|
+
/**
|
|
181
|
+
* Get liquidity to allocate for a given amount to borrow.
|
|
182
|
+
* First, the function will try to calculate the amount of liquidity to allocate to be able to
|
|
183
|
+
* hit the target utilization. If it is not possible to allocate enough liquidity to hit the
|
|
184
|
+
* target utilization, the function will allocate the amount of liquidity needed to be able to
|
|
185
|
+
* borrow the selected amount.
|
|
186
|
+
* @param amountToBorrow - The amount to borrow
|
|
187
|
+
* @param totalBorrow - The total amount borrowed from market
|
|
188
|
+
* @param totalSupply - The total amount supplied to market
|
|
189
|
+
* @param targetBorrowUtilization - The target borrow utilization of market
|
|
190
|
+
* @param reallocatableLiquidityAssets - The amount of liquidity that can be reallocated from other markets
|
|
191
|
+
* @returns The amount of liquidity to allocate
|
|
192
|
+
*/
|
|
193
|
+
export const getLiquidityToAllocate = (amountToBorrow, totalBorrow, totalSupply, targetBorrowUtilization, reallocatableLiquidityAssets) => {
|
|
194
|
+
const newTotalBorrowAssets = new Dec(totalBorrow).add(amountToBorrow).toString();
|
|
195
|
+
const leftToBorrow = new Dec(totalSupply).sub(totalBorrow).toString();
|
|
196
|
+
let liquidityToAllocate = new Dec(newTotalBorrowAssets).div(targetBorrowUtilization).mul(1e18).sub(totalSupply)
|
|
197
|
+
.toFixed(0)
|
|
198
|
+
.toString();
|
|
199
|
+
if (new Dec(reallocatableLiquidityAssets).lt(liquidityToAllocate) || new Dec(liquidityToAllocate).lt('0')) {
|
|
200
|
+
liquidityToAllocate = new Dec(amountToBorrow).lt(leftToBorrow) ? '0' : new Dec(amountToBorrow).sub(leftToBorrow).toString();
|
|
201
|
+
if (new Dec(reallocatableLiquidityAssets).lt(liquidityToAllocate))
|
|
202
|
+
throw new Error('Not enough liquidity available to allocate');
|
|
203
|
+
}
|
|
204
|
+
return liquidityToAllocate;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Get the vaults and withdrawals needed to reallocate liquidity for a given amount to borrow.
|
|
208
|
+
* Amount to be reallocated is calculated in `getLiquidityToAllocate`
|
|
209
|
+
* @param market - The market data
|
|
210
|
+
* @param assetsData - The assets data
|
|
211
|
+
* @param amountToBorrow - Amount being borrowed (not the amount being reallocated)
|
|
212
|
+
* @param network - The network number
|
|
213
|
+
* @returns The vaults and withdrawals needed to reallocate liquidity
|
|
214
|
+
*/
|
|
215
|
+
export const getReallocation = (market, assetsData, amountToBorrow, network = NetworkNumber.Eth) => __awaiter(void 0, void 0, void 0, function* () {
|
|
216
|
+
var _b, _c, _d;
|
|
217
|
+
const { marketId, loanToken } = market;
|
|
218
|
+
const response = yield fetch(API_URL, {
|
|
219
|
+
method: 'POST',
|
|
220
|
+
headers: { 'Content-Type': 'application/json' },
|
|
221
|
+
body: JSON.stringify({
|
|
222
|
+
query: MARKET_QUERY,
|
|
223
|
+
variables: { uniqueKey: marketId, chainId: network },
|
|
224
|
+
}),
|
|
225
|
+
});
|
|
226
|
+
const data = yield response.json();
|
|
227
|
+
const marketData = (_b = data === null || data === void 0 ? void 0 : data.data) === null || _b === void 0 ? void 0 : _b.marketByUniqueKey;
|
|
228
|
+
if (!marketData)
|
|
229
|
+
throw new Error('Market data not found');
|
|
230
|
+
const loanAssetInfo = getAssetInfoByAddress(loanToken, network);
|
|
231
|
+
const { totalBorrow, totalSupply } = assetsData[loanAssetInfo.symbol] || { totalBorrow: '0', totalSupply: '0' };
|
|
232
|
+
const totalBorrowWei = assetAmountInWei(totalBorrow, loanAssetInfo.symbol);
|
|
233
|
+
const totalSupplyWei = assetAmountInWei(totalSupply, loanAssetInfo.symbol);
|
|
234
|
+
const newTotalBorrowAssets = new Dec(totalBorrowWei).add(amountToBorrow).toString();
|
|
235
|
+
const newUtil = new Dec(newTotalBorrowAssets).div(totalSupplyWei).toString();
|
|
236
|
+
const newUtilScaled = new Dec(newUtil).mul(1e18).toString();
|
|
237
|
+
if (new Dec(newUtilScaled).lt(marketData.targetBorrowUtilization))
|
|
238
|
+
return { vaults: [], withdrawals: [] };
|
|
239
|
+
const liquidityToAllocate = getLiquidityToAllocate(amountToBorrow, totalBorrowWei, totalSupplyWei, marketData.targetBorrowUtilization, marketData.reallocatableLiquidityAssets);
|
|
240
|
+
const vaultTotalAssets = marketData.publicAllocatorSharedLiquidity.reduce((acc, item) => {
|
|
241
|
+
const vaultAddress = item.vault.address;
|
|
242
|
+
acc[vaultAddress] = new Dec(acc[vaultAddress] || '0').add(item.assets).toString();
|
|
243
|
+
return acc;
|
|
244
|
+
}, {});
|
|
245
|
+
const sortedVaults = Object.entries(vaultTotalAssets).sort(([, a], [, b]) => new Dec(b || '0').sub(a || '0').toNumber());
|
|
246
|
+
const withdrawalsPerVault = {};
|
|
247
|
+
let totalReallocated = '0';
|
|
248
|
+
for (const [vaultAddress] of sortedVaults) {
|
|
249
|
+
if (new Dec(totalReallocated).gte(liquidityToAllocate))
|
|
250
|
+
break;
|
|
251
|
+
const vaultAllocations = marketData.publicAllocatorSharedLiquidity.filter((item) => compareAddresses(item.vault.address, vaultAddress));
|
|
252
|
+
for (const item of vaultAllocations) {
|
|
253
|
+
if (new Dec(totalReallocated).gte(liquidityToAllocate))
|
|
254
|
+
break;
|
|
255
|
+
const itemAmount = item.assets;
|
|
256
|
+
const leftToAllocate = new Dec(liquidityToAllocate).sub(totalReallocated).toString();
|
|
257
|
+
const amountToTake = new Dec(itemAmount).lt(leftToAllocate) ? itemAmount : leftToAllocate;
|
|
258
|
+
totalReallocated = new Dec(totalReallocated).add(amountToTake).toString();
|
|
259
|
+
const withdrawal = [
|
|
260
|
+
[
|
|
261
|
+
item.allocationMarket.loanAsset.address,
|
|
262
|
+
(_c = item.allocationMarket.collateralAsset) === null || _c === void 0 ? void 0 : _c.address,
|
|
263
|
+
(_d = item.allocationMarket.oracle) === null || _d === void 0 ? void 0 : _d.address,
|
|
264
|
+
item.allocationMarket.irmAddress,
|
|
265
|
+
item.allocationMarket.lltv,
|
|
266
|
+
],
|
|
267
|
+
amountToTake.toString(),
|
|
268
|
+
item.allocationMarket.uniqueKey,
|
|
269
|
+
];
|
|
270
|
+
if (!withdrawalsPerVault[vaultAddress]) {
|
|
271
|
+
withdrawalsPerVault[vaultAddress] = [];
|
|
272
|
+
}
|
|
273
|
+
withdrawalsPerVault[vaultAddress].push(withdrawal);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
const vaults = Object.keys(withdrawalsPerVault);
|
|
277
|
+
const withdrawals = vaults.map((vaultAddress) => withdrawalsPerVault[vaultAddress].sort((a, b) => a[2].localeCompare(b[2])).map(w => [w[0], w[1]]));
|
|
278
|
+
return {
|
|
279
|
+
vaults,
|
|
280
|
+
withdrawals,
|
|
281
|
+
};
|
|
282
|
+
});
|
|
@@ -8,6 +8,8 @@ export declare const COMPOUND_V3_USDCe: (networkId: NetworkNumber) => CompoundMa
|
|
|
8
8
|
export declare const COMPOUND_V3_ETH: (networkId: NetworkNumber) => CompoundMarketData;
|
|
9
9
|
export declare const COMPOUND_V3_USDBC: (networkId: NetworkNumber) => CompoundMarketData;
|
|
10
10
|
export declare const COMPOUND_V3_USDT: (networkId: NetworkNumber) => CompoundMarketData;
|
|
11
|
+
export declare const COMPOUND_V3_WSTETH: (networkId: NetworkNumber) => CompoundMarketData;
|
|
12
|
+
export declare const COMPOUND_V3_USDS: (networkId: NetworkNumber) => CompoundMarketData;
|
|
11
13
|
export declare const CompoundMarkets: (networkId: NetworkNumber) => {
|
|
12
14
|
readonly v2: CompoundMarketData;
|
|
13
15
|
readonly "v3-ETH": CompoundMarketData;
|
|
@@ -15,4 +17,6 @@ export declare const CompoundMarkets: (networkId: NetworkNumber) => {
|
|
|
15
17
|
readonly "v3-USDbC": CompoundMarketData;
|
|
16
18
|
readonly "v3-USDC.e": CompoundMarketData;
|
|
17
19
|
readonly "v3-USDT": CompoundMarketData;
|
|
20
|
+
readonly "v3-wstETH": CompoundMarketData;
|
|
21
|
+
readonly "v3-USDS": CompoundMarketData;
|
|
18
22
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getConfigContractAddress } from '../../contracts';
|
|
2
2
|
import { CompoundVersions } from '../../types';
|
|
3
3
|
import { NetworkNumber } from '../../types/common';
|
|
4
|
-
import { compoundV2CollateralAssets, v3ETHCollAssets, v3USDbCCollAssets, v3USDCCollAssets, v3USDCeCollAssets, v3USDTCollAssets, } from './marketsAssets';
|
|
4
|
+
import { compoundV2CollateralAssets, v3ETHCollAssets, v3USDbCCollAssets, v3USDCCollAssets, v3USDCeCollAssets, v3USDSCollAssets, v3USDTCollAssets, v3wstETHCollAssets, } from './marketsAssets';
|
|
5
5
|
export { compoundV2CollateralAssets, v3ETHCollAssets, v3USDbCCollAssets, v3USDCCollAssets, v3USDCeCollAssets, v3USDTCollAssets, };
|
|
6
6
|
const EMPTY_BULKER_OPTIONS = { supply: '', withdraw: '' };
|
|
7
7
|
const STANDARD_BULKER_OPTIONS = {
|
|
@@ -13,6 +13,8 @@ const BULKER_OPTIONS = {
|
|
|
13
13
|
[CompoundVersions.CompoundV3USDC]: { supply: 2, withdraw: 5 },
|
|
14
14
|
[CompoundVersions.CompoundV3ETH]: STANDARD_BULKER_OPTIONS,
|
|
15
15
|
[CompoundVersions.CompoundV3USDT]: STANDARD_BULKER_OPTIONS,
|
|
16
|
+
[CompoundVersions.CompoundV3wstETH]: STANDARD_BULKER_OPTIONS,
|
|
17
|
+
[CompoundVersions.CompoundV3USDS]: STANDARD_BULKER_OPTIONS,
|
|
16
18
|
// Non-existing markets, keeping it because of typescript
|
|
17
19
|
[CompoundVersions.CompoundV2]: EMPTY_BULKER_OPTIONS,
|
|
18
20
|
[CompoundVersions.CompoundV3USDCe]: EMPTY_BULKER_OPTIONS,
|
|
@@ -26,6 +28,8 @@ const BULKER_OPTIONS = {
|
|
|
26
28
|
// Non-existing markets, keeping it because of typescript
|
|
27
29
|
[CompoundVersions.CompoundV2]: EMPTY_BULKER_OPTIONS,
|
|
28
30
|
[CompoundVersions.CompoundV3USDbC]: EMPTY_BULKER_OPTIONS,
|
|
31
|
+
[CompoundVersions.CompoundV3wstETH]: EMPTY_BULKER_OPTIONS,
|
|
32
|
+
[CompoundVersions.CompoundV3USDS]: EMPTY_BULKER_OPTIONS,
|
|
29
33
|
},
|
|
30
34
|
[NetworkNumber.Base]: {
|
|
31
35
|
[CompoundVersions.CompoundV3ETH]: STANDARD_BULKER_OPTIONS,
|
|
@@ -35,6 +39,8 @@ const BULKER_OPTIONS = {
|
|
|
35
39
|
[CompoundVersions.CompoundV2]: EMPTY_BULKER_OPTIONS,
|
|
36
40
|
[CompoundVersions.CompoundV3USDCe]: EMPTY_BULKER_OPTIONS,
|
|
37
41
|
[CompoundVersions.CompoundV3USDT]: EMPTY_BULKER_OPTIONS,
|
|
42
|
+
[CompoundVersions.CompoundV3wstETH]: EMPTY_BULKER_OPTIONS,
|
|
43
|
+
[CompoundVersions.CompoundV3USDS]: EMPTY_BULKER_OPTIONS,
|
|
38
44
|
},
|
|
39
45
|
[NetworkNumber.Opt]: {
|
|
40
46
|
[CompoundVersions.CompoundV3USDC]: STANDARD_BULKER_OPTIONS,
|
|
@@ -44,6 +50,8 @@ const BULKER_OPTIONS = {
|
|
|
44
50
|
[CompoundVersions.CompoundV3USDbC]: EMPTY_BULKER_OPTIONS,
|
|
45
51
|
[CompoundVersions.CompoundV2]: EMPTY_BULKER_OPTIONS,
|
|
46
52
|
[CompoundVersions.CompoundV3USDCe]: EMPTY_BULKER_OPTIONS,
|
|
53
|
+
[CompoundVersions.CompoundV3wstETH]: EMPTY_BULKER_OPTIONS,
|
|
54
|
+
[CompoundVersions.CompoundV3USDS]: EMPTY_BULKER_OPTIONS,
|
|
47
55
|
},
|
|
48
56
|
};
|
|
49
57
|
export const COMPOUND_V2 = {
|
|
@@ -136,6 +144,34 @@ export const COMPOUND_V3_USDT = (networkId) => ({
|
|
|
136
144
|
bulkerOptions: BULKER_OPTIONS[networkId][CompoundVersions.CompoundV3USDT],
|
|
137
145
|
// icon: SvgAdapter(protocolIcons.compoundv3),
|
|
138
146
|
});
|
|
147
|
+
export const COMPOUND_V3_WSTETH = (networkId) => ({
|
|
148
|
+
chainIds: [NetworkNumber.Eth],
|
|
149
|
+
label: 'Compound V3 - wstETH',
|
|
150
|
+
shortLabel: 'v3',
|
|
151
|
+
value: CompoundVersions.CompoundV3wstETH,
|
|
152
|
+
baseAsset: 'wstETH',
|
|
153
|
+
collAssets: networkId ? v3wstETHCollAssets[networkId] : [],
|
|
154
|
+
baseMarket: 'cWstETHv3',
|
|
155
|
+
baseMarketAddress: getConfigContractAddress('cWstETHv3', networkId),
|
|
156
|
+
secondLabel: 'Market',
|
|
157
|
+
bulkerName: networkId === NetworkNumber.Eth ? 'CompV3BulkerMainnetETH' : 'CompV3BulkerL2',
|
|
158
|
+
bulkerAddress: getConfigContractAddress(networkId === NetworkNumber.Eth ? 'CompV3BulkerMainnetETH' : 'CompV3BulkerL2', networkId),
|
|
159
|
+
bulkerOptions: BULKER_OPTIONS[networkId][CompoundVersions.CompoundV3wstETH],
|
|
160
|
+
});
|
|
161
|
+
export const COMPOUND_V3_USDS = (networkId) => ({
|
|
162
|
+
chainIds: [NetworkNumber.Eth],
|
|
163
|
+
label: 'Compound V3 - USDS',
|
|
164
|
+
shortLabel: 'v3',
|
|
165
|
+
value: CompoundVersions.CompoundV3USDS,
|
|
166
|
+
baseAsset: 'USDS',
|
|
167
|
+
collAssets: networkId ? v3USDSCollAssets[networkId] : [],
|
|
168
|
+
baseMarket: 'cUSDSv3',
|
|
169
|
+
baseMarketAddress: getConfigContractAddress('cUSDSv3', networkId),
|
|
170
|
+
secondLabel: 'Market',
|
|
171
|
+
bulkerName: networkId === NetworkNumber.Eth ? 'CompV3BulkerMainnetETH' : 'CompV3BulkerL2',
|
|
172
|
+
bulkerAddress: getConfigContractAddress(networkId === NetworkNumber.Eth ? 'CompV3BulkerMainnetETH' : 'CompV3BulkerL2', networkId),
|
|
173
|
+
bulkerOptions: BULKER_OPTIONS[networkId][CompoundVersions.CompoundV3USDS],
|
|
174
|
+
});
|
|
139
175
|
export const CompoundMarkets = (networkId) => ({
|
|
140
176
|
[CompoundVersions.CompoundV2]: COMPOUND_V2,
|
|
141
177
|
[CompoundVersions.CompoundV3ETH]: COMPOUND_V3_ETH(networkId),
|
|
@@ -143,4 +179,6 @@ export const CompoundMarkets = (networkId) => ({
|
|
|
143
179
|
[CompoundVersions.CompoundV3USDbC]: COMPOUND_V3_USDBC(networkId),
|
|
144
180
|
[CompoundVersions.CompoundV3USDCe]: COMPOUND_V3_USDCe(networkId),
|
|
145
181
|
[CompoundVersions.CompoundV3USDT]: COMPOUND_V3_USDT(networkId),
|
|
182
|
+
[CompoundVersions.CompoundV3wstETH]: COMPOUND_V3_WSTETH(networkId),
|
|
183
|
+
[CompoundVersions.CompoundV3USDS]: COMPOUND_V3_USDS(networkId),
|
|
146
184
|
});
|
|
@@ -42,3 +42,17 @@ export declare const v3USDTCollAssets: {
|
|
|
42
42
|
42161: string[];
|
|
43
43
|
8453: never[];
|
|
44
44
|
};
|
|
45
|
+
export declare const v3USDSCollAssetsEth: string[];
|
|
46
|
+
export declare const v3USDSCollAssets: {
|
|
47
|
+
1: string[];
|
|
48
|
+
10: never[];
|
|
49
|
+
42161: never[];
|
|
50
|
+
8453: never[];
|
|
51
|
+
};
|
|
52
|
+
export declare const v3wstETHCollAssetsEth: string[];
|
|
53
|
+
export declare const v3wstETHCollAssets: {
|
|
54
|
+
1: string[];
|
|
55
|
+
10: never[];
|
|
56
|
+
42161: never[];
|
|
57
|
+
8453: never[];
|
|
58
|
+
};
|
|
@@ -5,7 +5,7 @@ export const compoundV2CollateralAssets = [
|
|
|
5
5
|
'cTUSD', 'cLINK', 'cUSDP', 'cUNI', 'cCOMP', 'cMKR', 'cSUSHI', 'cAAVE', 'cYFI',
|
|
6
6
|
].map((symbol) => getAssetInfo(symbol));
|
|
7
7
|
export const v3USDCCollAssetsEth = ['COMP', 'WBTC', 'ETH', 'UNI', 'LINK', 'wstETH', 'cbBTC', 'tBTC'];
|
|
8
|
-
export const v3USDCCollAssetsArb = ['ARB', 'ETH', 'GMX', 'WBTC', 'wstETH', 'ezETH'];
|
|
8
|
+
export const v3USDCCollAssetsArb = ['ARB', 'ETH', 'GMX', 'WBTC', 'wstETH', 'ezETH', 'wUSDM'];
|
|
9
9
|
export const v3USDCCollAssetsBase = ['ETH', 'cbETH', 'wstETH', 'cbBTC'];
|
|
10
10
|
export const v3USDCCollAssetsOpt = ['ETH', 'OP', 'WBTC', 'wstETH'];
|
|
11
11
|
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
@@ -42,7 +42,7 @@ export const v3USDbCCollAssets = {
|
|
|
42
42
|
[NetworkNumber.Arb]: [],
|
|
43
43
|
[NetworkNumber.Base]: v3USDbCCollAssetsBase,
|
|
44
44
|
};
|
|
45
|
-
export const v3USDTCollAssetsEth = ['COMP', 'ETH', 'WBTC', 'UNI', 'LINK', 'wstETH', 'cbBTC', 'tBTC', 'wUSDM', 'sFRAX'];
|
|
45
|
+
export const v3USDTCollAssetsEth = ['COMP', 'ETH', 'WBTC', 'UNI', 'LINK', 'wstETH', 'cbBTC', 'tBTC', 'wUSDM', 'sFRAX', 'mETH'];
|
|
46
46
|
export const v3USDTCollAssetsArb = ['ETH', 'WBTC', 'wstETH', 'ARB', 'GMX'];
|
|
47
47
|
export const v3USDTCollAssetsOpt = ['ETH', 'WBTC', 'OP', 'wstETH'];
|
|
48
48
|
// @dev Keep assets in array, do not assign directly, so we can parse it and edit it programmatically with `scripts/updateMarkets`
|
|
@@ -52,3 +52,17 @@ export const v3USDTCollAssets = {
|
|
|
52
52
|
[NetworkNumber.Arb]: v3USDTCollAssetsArb,
|
|
53
53
|
[NetworkNumber.Base]: [],
|
|
54
54
|
};
|
|
55
|
+
export const v3USDSCollAssetsEth = ['wstETH', 'ETH', 'sUSDS', 'cbETH', 'tBTC', 'USDe'];
|
|
56
|
+
export const v3USDSCollAssets = {
|
|
57
|
+
[NetworkNumber.Eth]: v3USDSCollAssetsEth,
|
|
58
|
+
[NetworkNumber.Opt]: [],
|
|
59
|
+
[NetworkNumber.Arb]: [],
|
|
60
|
+
[NetworkNumber.Base]: [],
|
|
61
|
+
};
|
|
62
|
+
export const v3wstETHCollAssetsEth = ['rsETH', 'ezETH'];
|
|
63
|
+
export const v3wstETHCollAssets = {
|
|
64
|
+
[NetworkNumber.Eth]: v3wstETHCollAssetsEth,
|
|
65
|
+
[NetworkNumber.Opt]: [],
|
|
66
|
+
[NetworkNumber.Arb]: [],
|
|
67
|
+
[NetworkNumber.Base]: [],
|
|
68
|
+
};
|
|
@@ -48,6 +48,10 @@ export declare const MORPHO_BLUE_RETH_ETH_945_BASE: (networkId?: NetworkNumber)
|
|
|
48
48
|
export declare const MORPHO_BLUE_CBBTC_ETH_915_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
49
49
|
export declare const MORPHO_BLUE_CBBTC_USDC_860_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
50
50
|
export declare const MORPHO_BLUE_WSUPEROETHB_WETH_915_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
51
|
+
export declare const MORPHO_BLUE_LBTC_WBTC_945: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
52
|
+
export declare const MORPHO_BLUE_LBTC_CBBTC_945_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
53
|
+
export declare const MORPHO_BLUE_WSTETH_EURC_860_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
54
|
+
export declare const MORPHO_BLUE_CBBTC_EURC_860_BASE: (networkId?: NetworkNumber) => MorphoBlueMarketData;
|
|
51
55
|
export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
52
56
|
readonly morphobluewstethusdc: MorphoBlueMarketData;
|
|
53
57
|
readonly morphobluesdaiusdc: MorphoBlueMarketData;
|
|
@@ -72,6 +76,7 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
|
72
76
|
readonly morphobluecbbtcusdc: MorphoBlueMarketData;
|
|
73
77
|
readonly morphoblueretheth_945: MorphoBlueMarketData;
|
|
74
78
|
readonly morphobluesusdeusdc_915: MorphoBlueMarketData;
|
|
79
|
+
readonly morphobluelbtcwbtc_945: MorphoBlueMarketData;
|
|
75
80
|
readonly morphobluewstetheth_945: MorphoBlueMarketData;
|
|
76
81
|
readonly morphobluewstetheth_945_exchange_rate: MorphoBlueMarketData;
|
|
77
82
|
readonly morphobluewstetheth_965_exchange_rate: MorphoBlueMarketData;
|
|
@@ -92,6 +97,9 @@ export declare const MorphoBlueMarkets: (networkId: NetworkNumber) => {
|
|
|
92
97
|
readonly morphoblueretheth_945_base: MorphoBlueMarketData;
|
|
93
98
|
readonly morphobluecbbtceth_915_base: MorphoBlueMarketData;
|
|
94
99
|
readonly morphobluecbbtcusdc_860_base: MorphoBlueMarketData;
|
|
100
|
+
readonly morphobluecbbtceurc_860_base: MorphoBlueMarketData;
|
|
101
|
+
readonly morphobluewstetheurc_860_base: MorphoBlueMarketData;
|
|
102
|
+
readonly morphobluelbtccbbtc_945_base: MorphoBlueMarketData;
|
|
95
103
|
readonly morphobluewsuperoethbweth_915_base: MorphoBlueMarketData;
|
|
96
104
|
readonly morphobluecbetheth_945_base: MorphoBlueMarketData;
|
|
97
105
|
readonly morphobluecbetheth_965_base: MorphoBlueMarketData;
|
|
@@ -715,7 +715,7 @@ export const MORPHO_BLUE_CBBTC_USDC_860_BASE = (networkId = NetworkNumber.Eth) =
|
|
|
715
715
|
export const MORPHO_BLUE_WSUPEROETHB_WETH_915_BASE = (networkId = NetworkNumber.Eth) => ({
|
|
716
716
|
chainIds: [NetworkNumber.Base],
|
|
717
717
|
label: 'Morpho',
|
|
718
|
-
shortLabel: 'wsuperOETHb/
|
|
718
|
+
shortLabel: 'wsuperOETHb/ETH',
|
|
719
719
|
value: MorphoBlueVersions.MorphoBlueWsuperOETHbWETH_915_Base,
|
|
720
720
|
url: 'wsuperoethbweth-144bf18d',
|
|
721
721
|
loanToken: '0x4200000000000000000000000000000000000006',
|
|
@@ -727,6 +727,66 @@ export const MORPHO_BLUE_WSUPEROETHB_WETH_915_BASE = (networkId = NetworkNumber.
|
|
|
727
727
|
marketId: '0x144bf18d6bf4c59602548a825034f73bf1d20177fc5f975fc69d5a5eba929b45',
|
|
728
728
|
protocolName: 'morpho-blue',
|
|
729
729
|
});
|
|
730
|
+
export const MORPHO_BLUE_LBTC_WBTC_945 = (networkId = NetworkNumber.Eth) => ({
|
|
731
|
+
chainIds: [NetworkNumber.Eth],
|
|
732
|
+
label: 'Morpho',
|
|
733
|
+
shortLabel: 'LBTC/WBTC',
|
|
734
|
+
value: MorphoBlueVersions.MorphoBlueLBTCWBTC_945,
|
|
735
|
+
url: 'lbtcwbtc-f6a05662',
|
|
736
|
+
loanToken: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',
|
|
737
|
+
collateralToken: '0x8236a87084f8B84306f72007F36F2618A5634494',
|
|
738
|
+
oracle: '0xa98105B8227E0f2157816Feb7A331364A9B74F80',
|
|
739
|
+
oracleType: MorphoBlueOracleType.MARKET_RATE,
|
|
740
|
+
irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
|
|
741
|
+
lltv: 0.945,
|
|
742
|
+
marketId: '0xf6a056627a51e511ec7f48332421432ea6971fc148d8f3c451e14ea108026549',
|
|
743
|
+
protocolName: 'morpho-blue',
|
|
744
|
+
});
|
|
745
|
+
export const MORPHO_BLUE_LBTC_CBBTC_945_BASE = (networkId = NetworkNumber.Eth) => ({
|
|
746
|
+
chainIds: [NetworkNumber.Base],
|
|
747
|
+
label: 'Morpho',
|
|
748
|
+
shortLabel: 'LBTC/cbBTC',
|
|
749
|
+
value: MorphoBlueVersions.MorphoBlueLBTCCbBTC_945_Base,
|
|
750
|
+
url: 'lbtccbbtc-30767836',
|
|
751
|
+
loanToken: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf',
|
|
752
|
+
collateralToken: '0xecAc9C5F704e954931349Da37F60E39f515c11c1',
|
|
753
|
+
oracle: '0x9Ae0E86e88AEE94B700240eBE0BD17D969BAD0EA',
|
|
754
|
+
oracleType: MorphoBlueOracleType.MARKET_RATE,
|
|
755
|
+
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
756
|
+
lltv: 0.945,
|
|
757
|
+
marketId: '0x30767836635facec1282e6ef4a5981406ed4e72727b3a63a3a72c74e8279a8d7',
|
|
758
|
+
protocolName: 'morpho-blue',
|
|
759
|
+
});
|
|
760
|
+
export const MORPHO_BLUE_WSTETH_EURC_860_BASE = (networkId = NetworkNumber.Eth) => ({
|
|
761
|
+
chainIds: [NetworkNumber.Base],
|
|
762
|
+
label: 'Morpho',
|
|
763
|
+
shortLabel: 'wstETH/EURC',
|
|
764
|
+
value: MorphoBlueVersions.MorphoBlueWstEthEURC_860_Base,
|
|
765
|
+
url: 'wstetheurc-f7e40290',
|
|
766
|
+
loanToken: '0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42',
|
|
767
|
+
collateralToken: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',
|
|
768
|
+
oracle: '0xa54122f0E0766258377Ffe732e454A3248f454F4',
|
|
769
|
+
oracleType: MorphoBlueOracleType.MARKET_RATE,
|
|
770
|
+
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
771
|
+
lltv: 0.86,
|
|
772
|
+
marketId: '0xf7e40290f8ca1d5848b3c129502599aa0f0602eb5f5235218797a34242719561',
|
|
773
|
+
protocolName: 'morpho-blue',
|
|
774
|
+
});
|
|
775
|
+
export const MORPHO_BLUE_CBBTC_EURC_860_BASE = (networkId = NetworkNumber.Eth) => ({
|
|
776
|
+
chainIds: [NetworkNumber.Base],
|
|
777
|
+
label: 'Morpho',
|
|
778
|
+
shortLabel: 'cbBTC/EURC',
|
|
779
|
+
value: MorphoBlueVersions.MorphoBlueCbBTCEURC_860_Base,
|
|
780
|
+
url: 'cbbtceurc-67ebd84b',
|
|
781
|
+
loanToken: '0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42',
|
|
782
|
+
collateralToken: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf',
|
|
783
|
+
oracle: '0xA857411CB2231a6A87a3bEF987a4cED8A067d799',
|
|
784
|
+
oracleType: MorphoBlueOracleType.MARKET_RATE,
|
|
785
|
+
irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
|
|
786
|
+
lltv: 0.86,
|
|
787
|
+
marketId: '0x67ebd84b2fb39e3bc5a13d97e4c07abe1ea617e40654826e9abce252e95f049e',
|
|
788
|
+
protocolName: 'morpho-blue',
|
|
789
|
+
});
|
|
730
790
|
export const MorphoBlueMarkets = (networkId) => ({
|
|
731
791
|
[MorphoBlueVersions.MorphoBlueWstEthUSDC]: MORPHO_BLUE_WSTETH_USDC(networkId),
|
|
732
792
|
[MorphoBlueVersions.MorphoBlueSDAIUSDC]: MORPHO_BLUE_SDAI_USDC(networkId),
|
|
@@ -751,6 +811,7 @@ export const MorphoBlueMarkets = (networkId) => ({
|
|
|
751
811
|
[MorphoBlueVersions.MorphoBlueCbBTCUSDC_860]: MORPHO_BLUE_CBBTC_USDC_860(networkId),
|
|
752
812
|
[MorphoBlueVersions.MorphoBlueREthEth_945]: MORPHO_BLUE_RETH_ETH_945(networkId),
|
|
753
813
|
[MorphoBlueVersions.MorphoBlueSUSDeUSDC_915]: MORPHO_BLUE_SUSDE_USDC_915(networkId),
|
|
814
|
+
[MorphoBlueVersions.MorphoBlueLBTCWBTC_945]: MORPHO_BLUE_LBTC_WBTC_945(networkId),
|
|
754
815
|
// wstETH/WETH
|
|
755
816
|
[MorphoBlueVersions.MorphoBlueWstEthEth_945]: MORPHO_BLUE_WSTETH_ETH_945(networkId),
|
|
756
817
|
[MorphoBlueVersions.MorphoBlueWstEthEth_945_Exchange_Rate]: MORPHO_BLUE_WSTETH_ETH_945_EXCHANGE_RATE(networkId),
|
|
@@ -775,6 +836,9 @@ export const MorphoBlueMarkets = (networkId) => ({
|
|
|
775
836
|
[MorphoBlueVersions.MorphoBlueREthEth_945_Base]: MORPHO_BLUE_RETH_ETH_945_BASE(networkId),
|
|
776
837
|
[MorphoBlueVersions.MorphoBlueCbBTCEth_915_Base]: MORPHO_BLUE_CBBTC_ETH_915_BASE(networkId),
|
|
777
838
|
[MorphoBlueVersions.MorphoBlueCbBTCUSDC_860_Base]: MORPHO_BLUE_CBBTC_USDC_860_BASE(networkId),
|
|
839
|
+
[MorphoBlueVersions.MorphoBlueCbBTCEURC_860_Base]: MORPHO_BLUE_CBBTC_EURC_860_BASE(networkId),
|
|
840
|
+
[MorphoBlueVersions.MorphoBlueWstEthEURC_860_Base]: MORPHO_BLUE_WSTETH_EURC_860_BASE(networkId),
|
|
841
|
+
[MorphoBlueVersions.MorphoBlueLBTCCbBTC_945_Base]: MORPHO_BLUE_LBTC_CBBTC_945_BASE(networkId),
|
|
778
842
|
// wsuperOETHb/WETH Base
|
|
779
843
|
[MorphoBlueVersions.MorphoBlueWsuperOETHbWETH_915_Base]: MORPHO_BLUE_WSUPEROETHB_WETH_915_BASE(networkId),
|
|
780
844
|
// cbETH/WETH Base
|
package/esm/morphoBlue/index.js
CHANGED
|
@@ -8,30 +8,47 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import Dec from 'decimal.js';
|
|
11
|
-
import { assetAmountInEth,
|
|
11
|
+
import { assetAmountInEth, getAssetInfoByAddress } from '@defisaver/tokens';
|
|
12
12
|
import { NetworkNumber, } from '../types/common';
|
|
13
|
-
import { FeedRegistryContract, MorphoBlueViewContract
|
|
14
|
-
import {
|
|
13
|
+
import { DFSFeedRegistryContract, FeedRegistryContract, MorphoBlueViewContract } from '../contracts';
|
|
14
|
+
import { USD_QUOTE, WAD } from '../constants';
|
|
15
15
|
import { getStakingApy, STAKING_ASSETS } from '../staking';
|
|
16
16
|
import { wethToEth } from '../services/utils';
|
|
17
17
|
import { getBorrowRate, getMorphoBlueAggregatedPositionData, getSupplyRate } from '../helpers/morphoBlueHelpers';
|
|
18
|
+
import { getChainlinkAssetAddress } from '../services/priceService';
|
|
19
|
+
const isMainnetNetwork = (network) => network === NetworkNumber.Eth;
|
|
18
20
|
export function getMorphoBlueMarketData(web3, network, selectedMarket, mainnetWeb3) {
|
|
19
21
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20
22
|
const { loanToken, collateralToken, oracle, irm, lltv, oracleType, } = selectedMarket;
|
|
21
23
|
const lltvInWei = new Dec(lltv).mul(WAD).toString();
|
|
22
24
|
const loanTokenInfo = getAssetInfoByAddress(loanToken, network);
|
|
23
25
|
const collateralTokenInfo = getAssetInfoByAddress(collateralToken, network);
|
|
24
|
-
|
|
25
|
-
if (loanTokenInfo.symbol === 'WETH') {
|
|
26
|
-
const ethAddress = getAssetInfo('ETH').address;
|
|
27
|
-
loanTokenFeedAddress = ethAddress;
|
|
28
|
-
}
|
|
29
|
-
const feedRegistryContract = FeedRegistryContract(mainnetWeb3, NetworkNumber.Eth);
|
|
26
|
+
const loanTokenFeedAddress = getChainlinkAssetAddress(loanTokenInfo.symbol, network);
|
|
30
27
|
const morphoBlueViewContract = MorphoBlueViewContract(web3, network);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
let marketInfo;
|
|
29
|
+
let loanTokenPrice;
|
|
30
|
+
const isTokenUSDA = loanTokenInfo.symbol === 'USDA';
|
|
31
|
+
const isMainnet = isMainnetNetwork(network);
|
|
32
|
+
if (isMainnet) {
|
|
33
|
+
const feedRegistryContract = FeedRegistryContract(mainnetWeb3, NetworkNumber.Eth);
|
|
34
|
+
const [_loanTokenPrice, _marketInfo] = yield Promise.all([
|
|
35
|
+
isTokenUSDA ? Promise.resolve('100000000') : feedRegistryContract.methods.latestAnswer(loanTokenFeedAddress, USD_QUOTE).call(),
|
|
36
|
+
morphoBlueViewContract.methods.getMarketInfoNotTuple(loanToken, collateralToken, oracle, irm, lltvInWei).call(),
|
|
37
|
+
]);
|
|
38
|
+
marketInfo = _marketInfo;
|
|
39
|
+
loanTokenPrice = _loanTokenPrice;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Currently only base network is supported
|
|
43
|
+
const feedRegistryContract = DFSFeedRegistryContract(web3, network);
|
|
44
|
+
const [loanTokenPriceRound, _marketInfo] = yield Promise.all([
|
|
45
|
+
isTokenUSDA ? Promise.resolve({ answer: '100000000' }) // Normalize to match the expected object structure
|
|
46
|
+
: feedRegistryContract.methods.latestRoundData(loanTokenFeedAddress, USD_QUOTE).call(),
|
|
47
|
+
morphoBlueViewContract.methods.getMarketInfoNotTuple(loanToken, collateralToken, oracle, irm, lltvInWei).call(),
|
|
48
|
+
]);
|
|
49
|
+
marketInfo = _marketInfo;
|
|
50
|
+
loanTokenPrice = loanTokenPriceRound.answer;
|
|
51
|
+
}
|
|
35
52
|
const supplyRate = getSupplyRate(marketInfo.totalSupplyAssets, marketInfo.totalBorrowAssets, marketInfo.borrowRate, marketInfo.fee);
|
|
36
53
|
const compoundedBorrowRate = getBorrowRate(marketInfo.borrowRate, marketInfo.totalBorrowShares);
|
|
37
54
|
const utillization = new Dec(marketInfo.totalBorrowAssets).div(marketInfo.totalSupplyAssets).mul(100).toString();
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import Web3 from 'web3';
|
|
2
|
+
import { NetworkNumber } from '../types/common';
|
|
2
3
|
export declare const getEthPrice: (web3: Web3) => Promise<string>;
|
|
3
4
|
export declare const getUSDCPrice: (web3: Web3) => Promise<string>;
|
|
4
5
|
export declare const getCompPrice: (web3: Web3) => Promise<string>;
|
|
6
|
+
export declare const getWstETHPrice: (web3: Web3) => Promise<string>;
|
|
7
|
+
export declare const getChainlinkAssetAddress: (symbol: string, network: NetworkNumber) => string;
|