@defisaver/positions-sdk 2.1.42 → 2.1.43-dev-stats-test-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.mocharc.json +4 -4
- package/.nvmrc +1 -1
- package/README.md +64 -64
- package/cjs/aaveV3/index.js +13 -0
- package/cjs/aaveV3/merit.js +1 -0
- package/cjs/aaveV3/merkl.js +1 -0
- package/cjs/helpers/morphoBlueHelpers/index.js +66 -66
- package/cjs/savings/morphoVaults/index.js +17 -17
- package/esm/aaveV3/index.js +13 -0
- package/esm/aaveV3/merit.js +1 -0
- package/esm/aaveV3/merkl.js +1 -0
- package/esm/helpers/morphoBlueHelpers/index.js +66 -66
- package/esm/savings/morphoVaults/index.js +17 -17
- package/package.json +48 -48
- package/src/aaveV2/index.ts +240 -240
- package/src/aaveV3/index.ts +634 -625
- package/src/aaveV3/merit.ts +98 -97
- package/src/aaveV3/merkl.ts +75 -74
- package/src/claiming/aaveV3.ts +154 -154
- package/src/claiming/compV3.ts +22 -22
- package/src/claiming/ethena.ts +61 -61
- package/src/claiming/index.ts +12 -12
- package/src/claiming/king.ts +66 -66
- package/src/claiming/morphoBlue.ts +118 -118
- package/src/claiming/spark.ts +225 -225
- package/src/compoundV2/index.ts +244 -244
- package/src/compoundV3/index.ts +274 -274
- package/src/config/contracts.ts +1295 -1295
- package/src/constants/index.ts +10 -10
- package/src/contracts.ts +171 -171
- package/src/curveUsd/index.ts +254 -254
- package/src/eulerV2/index.ts +324 -324
- package/src/exchange/index.ts +25 -25
- package/src/fluid/index.ts +1800 -1800
- package/src/helpers/aaveHelpers/index.ts +187 -187
- package/src/helpers/compoundHelpers/index.ts +283 -283
- package/src/helpers/curveUsdHelpers/index.ts +40 -40
- package/src/helpers/eulerHelpers/index.ts +222 -222
- package/src/helpers/fluidHelpers/index.ts +326 -326
- package/src/helpers/index.ts +10 -10
- package/src/helpers/liquityV2Helpers/index.ts +82 -82
- package/src/helpers/llamaLendHelpers/index.ts +53 -53
- package/src/helpers/makerHelpers/index.ts +52 -52
- package/src/helpers/morphoBlueHelpers/index.ts +396 -396
- package/src/helpers/sparkHelpers/index.ts +158 -158
- package/src/index.ts +49 -49
- package/src/liquity/index.ts +159 -159
- package/src/liquityV2/index.ts +703 -703
- package/src/llamaLend/index.ts +305 -305
- package/src/maker/index.ts +223 -223
- package/src/markets/aave/index.ts +118 -118
- package/src/markets/aave/marketAssets.ts +54 -54
- package/src/markets/compound/index.ts +243 -243
- package/src/markets/compound/marketsAssets.ts +97 -97
- package/src/markets/curveUsd/index.ts +69 -69
- package/src/markets/euler/index.ts +26 -26
- package/src/markets/fluid/index.ts +2900 -2900
- package/src/markets/index.ts +25 -25
- package/src/markets/liquityV2/index.ts +102 -102
- package/src/markets/llamaLend/contractAddresses.ts +141 -141
- package/src/markets/llamaLend/index.ts +235 -235
- package/src/markets/morphoBlue/index.ts +971 -971
- package/src/markets/spark/index.ts +29 -29
- package/src/markets/spark/marketAssets.ts +12 -12
- package/src/moneymarket/moneymarketCommonService.ts +85 -85
- package/src/morphoBlue/index.ts +274 -274
- package/src/portfolio/index.ts +598 -598
- package/src/savings/index.ts +95 -95
- package/src/savings/makerDsr/index.ts +53 -53
- package/src/savings/makerDsr/options.ts +9 -9
- package/src/savings/morphoVaults/index.ts +80 -80
- package/src/savings/morphoVaults/options.ts +193 -193
- package/src/savings/skyOptions/index.ts +95 -95
- package/src/savings/skyOptions/options.ts +10 -10
- package/src/savings/sparkSavingsVaults/index.ts +60 -60
- package/src/savings/sparkSavingsVaults/options.ts +35 -35
- package/src/savings/yearnV3Vaults/index.ts +61 -61
- package/src/savings/yearnV3Vaults/options.ts +55 -55
- package/src/savings/yearnVaults/index.ts +73 -73
- package/src/savings/yearnVaults/options.ts +32 -32
- package/src/services/priceService.ts +278 -278
- package/src/services/utils.ts +115 -115
- package/src/services/viem.ts +34 -34
- package/src/setup.ts +8 -8
- package/src/spark/index.ts +458 -458
- package/src/staking/eligibility.ts +53 -53
- package/src/staking/index.ts +1 -1
- package/src/staking/staking.ts +186 -186
- package/src/types/aave.ts +196 -196
- package/src/types/claiming.ts +114 -114
- package/src/types/common.ts +107 -107
- package/src/types/compound.ts +144 -144
- package/src/types/curveUsd.ts +123 -123
- package/src/types/euler.ts +175 -175
- package/src/types/fluid.ts +483 -483
- package/src/types/index.ts +14 -14
- package/src/types/liquity.ts +30 -30
- package/src/types/liquityV2.ts +126 -126
- package/src/types/llamaLend.ts +159 -159
- package/src/types/maker.ts +63 -63
- package/src/types/merit.ts +1 -1
- package/src/types/merkl.ts +70 -70
- package/src/types/morphoBlue.ts +200 -200
- package/src/types/portfolio.ts +60 -60
- package/src/types/savings/index.ts +23 -23
- package/src/types/savings/makerDsr.ts +13 -13
- package/src/types/savings/morphoVaults.ts +32 -32
- package/src/types/savings/sky.ts +14 -14
- package/src/types/savings/sparkSavingsVaults.ts +15 -15
- package/src/types/savings/yearnV3Vaults.ts +17 -17
- package/src/types/savings/yearnVaults.ts +14 -14
- package/src/types/spark.ts +134 -134
- package/src/umbrella/index.ts +69 -69
- package/src/umbrella/umbrellaUtils.ts +29 -29
package/.mocharc.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{
|
|
2
|
-
"require": "ts-node/register",
|
|
3
|
-
"extension": ["ts"]
|
|
4
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"require": "ts-node/register",
|
|
3
|
+
"extension": ["ts"]
|
|
4
|
+
}
|
package/.nvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v20.17.0
|
|
1
|
+
v20.17.0
|
package/README.md
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
# DeFi Saver Positions SDK
|
|
2
|
-
|
|
3
|
-
Supported protocols:
|
|
4
|
-
- [Maker](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/maker)
|
|
5
|
-
- [Spark](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/spark)
|
|
6
|
-
- [CrvUSD](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/curveUsd)
|
|
7
|
-
- [Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV2)
|
|
8
|
-
- [Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV3)
|
|
9
|
-
- [Compound V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV2)
|
|
10
|
-
- [Compound V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV3)
|
|
11
|
-
- [Liquity](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/liquity)
|
|
12
|
-
|
|
13
|
-
## Setup
|
|
14
|
-
Supported Node version is v10.
|
|
15
|
-
|
|
16
|
-
- run `npm install` (first time)
|
|
17
|
-
- run `npm run build`
|
|
18
|
-
|
|
19
|
-
`build` command will generate contracts and build ejs and esm folders
|
|
20
|
-
|
|
21
|
-
## How to use
|
|
22
|
-
[All available imports](https://github.com/defisaver/defisaver-positions-sdk/blob/main/src/index.ts)
|
|
23
|
-
|
|
24
|
-
This is a Compound V3 example, and every other protocol is similar
|
|
25
|
-
```js
|
|
26
|
-
import { compoundV3 } from '@defisaver/positions-sdk';
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// every protocol has market data and user data getters
|
|
30
|
-
const {
|
|
31
|
-
getCompoundV3MarketsData,
|
|
32
|
-
getCompoundV3AccountData,
|
|
33
|
-
} = compoundV3;
|
|
34
|
-
|
|
35
|
-
const provider = 'Your RPC provider';
|
|
36
|
-
|
|
37
|
-
const user = '0x123...';
|
|
38
|
-
|
|
39
|
-
const { assetsData } = await getCompoundV3MarketsData(
|
|
40
|
-
provider, // rpc for the network you are using (note: can be tenderly or any other testnet rpc)
|
|
41
|
-
1, // network
|
|
42
|
-
selectedMarket, // market object like in /src/markets/compound/index.ts
|
|
43
|
-
provider, // this must be mainnet rpc - used for getting prices onchain and calculating apys
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
const userData = await getCompoundV3AccountData(
|
|
47
|
-
provider,
|
|
48
|
-
1, // network
|
|
49
|
-
userAddress, // EOA or DSProxy
|
|
50
|
-
'', // proxy address of the user, or just empty string if checking for EOA
|
|
51
|
-
{
|
|
52
|
-
selectedMarket, // market object as in /src/markets/compound/index.ts
|
|
53
|
-
assetsData,
|
|
54
|
-
}
|
|
55
|
-
);
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
More examples found [here](https://github.com/defisaver/defisaver-positions-sdk/tree/main/tests)
|
|
59
|
-
|
|
60
|
-
## Testing
|
|
61
|
-
|
|
62
|
-
`npm run test` - Run all tests
|
|
63
|
-
|
|
64
|
-
`npm run test-single --name=your_test_name` - Run single test for specified name e.g. for MyTest.js test name is MyTest
|
|
1
|
+
# DeFi Saver Positions SDK
|
|
2
|
+
|
|
3
|
+
Supported protocols:
|
|
4
|
+
- [Maker](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/maker)
|
|
5
|
+
- [Spark](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/spark)
|
|
6
|
+
- [CrvUSD](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/curveUsd)
|
|
7
|
+
- [Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV2)
|
|
8
|
+
- [Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/aaveV3)
|
|
9
|
+
- [Compound V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV2)
|
|
10
|
+
- [Compound V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV3)
|
|
11
|
+
- [Liquity](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/liquity)
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
Supported Node version is v10.
|
|
15
|
+
|
|
16
|
+
- run `npm install` (first time)
|
|
17
|
+
- run `npm run build`
|
|
18
|
+
|
|
19
|
+
`build` command will generate contracts and build ejs and esm folders
|
|
20
|
+
|
|
21
|
+
## How to use
|
|
22
|
+
[All available imports](https://github.com/defisaver/defisaver-positions-sdk/blob/main/src/index.ts)
|
|
23
|
+
|
|
24
|
+
This is a Compound V3 example, and every other protocol is similar
|
|
25
|
+
```js
|
|
26
|
+
import { compoundV3 } from '@defisaver/positions-sdk';
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
// every protocol has market data and user data getters
|
|
30
|
+
const {
|
|
31
|
+
getCompoundV3MarketsData,
|
|
32
|
+
getCompoundV3AccountData,
|
|
33
|
+
} = compoundV3;
|
|
34
|
+
|
|
35
|
+
const provider = 'Your RPC provider';
|
|
36
|
+
|
|
37
|
+
const user = '0x123...';
|
|
38
|
+
|
|
39
|
+
const { assetsData } = await getCompoundV3MarketsData(
|
|
40
|
+
provider, // rpc for the network you are using (note: can be tenderly or any other testnet rpc)
|
|
41
|
+
1, // network
|
|
42
|
+
selectedMarket, // market object like in /src/markets/compound/index.ts
|
|
43
|
+
provider, // this must be mainnet rpc - used for getting prices onchain and calculating apys
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
const userData = await getCompoundV3AccountData(
|
|
47
|
+
provider,
|
|
48
|
+
1, // network
|
|
49
|
+
userAddress, // EOA or DSProxy
|
|
50
|
+
'', // proxy address of the user, or just empty string if checking for EOA
|
|
51
|
+
{
|
|
52
|
+
selectedMarket, // market object as in /src/markets/compound/index.ts
|
|
53
|
+
assetsData,
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
More examples found [here](https://github.com/defisaver/defisaver-positions-sdk/tree/main/tests)
|
|
59
|
+
|
|
60
|
+
## Testing
|
|
61
|
+
|
|
62
|
+
`npm run test` - Run all tests
|
|
63
|
+
|
|
64
|
+
`npm run test-single --name=your_test_name` - Run single test for specified name e.g. for MyTest.js test name is MyTest
|
package/cjs/aaveV3/index.js
CHANGED
|
@@ -59,6 +59,7 @@ exports.aaveV3EmodeCategoriesMapping = aaveV3EmodeCategoriesMapping;
|
|
|
59
59
|
function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
60
60
|
return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest') {
|
|
61
61
|
const _addresses = market.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.getWrappedNativeAssetFromUnwrapped)(a), network).address);
|
|
62
|
+
console.log('Fetched addresses');
|
|
62
63
|
const isL2 = (0, utils_1.isLayer2Network)(network);
|
|
63
64
|
const loanInfoContract = (0, contracts_1.AaveV3ViewContractViem)(provider, network);
|
|
64
65
|
const aaveIncentivesContract = (0, contracts_1.AaveIncentiveDataProviderV3ContractViem)(provider, network);
|
|
@@ -73,6 +74,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
73
74
|
(0, merkl_1.getMerkleCampaigns)(network),
|
|
74
75
|
(0, merit_1.getMeritCampaigns)(network, market.value),
|
|
75
76
|
]);
|
|
77
|
+
console.log('Fetched tokens, emodes, campaigns, incentives');
|
|
76
78
|
isBorrowAllowed = (0, utils_1.isLayer2Network)(network) ? isBorrowAllowed : true;
|
|
77
79
|
const eModeCategoriesData = {};
|
|
78
80
|
for (let i = 0; i < eModesInfo.length; i++) {
|
|
@@ -90,6 +92,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
90
92
|
collateralAssets: [],
|
|
91
93
|
};
|
|
92
94
|
}
|
|
95
|
+
console.log('Parsed e modes info');
|
|
93
96
|
if (networksWithIncentives.includes(network) && rewardInfo) {
|
|
94
97
|
rewardInfo = rewardInfo.reduce((all, _market) => {
|
|
95
98
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -97,6 +100,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
97
100
|
return all;
|
|
98
101
|
}, {});
|
|
99
102
|
}
|
|
103
|
+
console.log('Parsed reward info');
|
|
100
104
|
const assetsData = yield Promise.all(loanInfo
|
|
101
105
|
.map((tokenMarket, i) => __awaiter(this, void 0, void 0, function* () {
|
|
102
106
|
const symbol = market.assets[i];
|
|
@@ -158,6 +162,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
158
162
|
borrowIncentives: [],
|
|
159
163
|
});
|
|
160
164
|
})));
|
|
165
|
+
console.log('Parsed assets data');
|
|
161
166
|
// Get incentives data
|
|
162
167
|
yield Promise.all(assetsData.map((_market, index) => __awaiter(this, void 0, void 0, function* () {
|
|
163
168
|
var _a, _b;
|
|
@@ -165,8 +170,10 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
165
170
|
// @ts-ignore
|
|
166
171
|
const rewardForMarket = rewardInfo === null || rewardInfo === void 0 ? void 0 : rewardInfo[_market.underlyingTokenAddress];
|
|
167
172
|
const isStakingAsset = staking_1.STAKING_ASSETS.includes(_market.symbol);
|
|
173
|
+
console.log('Processing market', _market.symbol);
|
|
168
174
|
if (isStakingAsset) {
|
|
169
175
|
const yieldApy = yield (0, staking_1.getStakingApy)(_market.symbol, network);
|
|
176
|
+
console.log('Got yield apy', yieldApy);
|
|
170
177
|
_market.supplyIncentives.push({
|
|
171
178
|
apy: yieldApy,
|
|
172
179
|
token: _market.symbol,
|
|
@@ -194,6 +201,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
194
201
|
eligibilityId: identifier,
|
|
195
202
|
});
|
|
196
203
|
}
|
|
204
|
+
console.log('Processed merkle a incentives');
|
|
197
205
|
const vTokenAddress = _market.vTokenAddress.toLowerCase(); // DEV: Should vTokenAddress be in AaveV3AssetData type?
|
|
198
206
|
if ((_b = merkleRewardsMap[vTokenAddress]) === null || _b === void 0 ? void 0 : _b.borrow) {
|
|
199
207
|
const { apy, rewardTokenSymbol, description, identifier, } = merkleRewardsMap[vTokenAddress].borrow;
|
|
@@ -205,6 +213,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
205
213
|
eligibilityId: identifier,
|
|
206
214
|
});
|
|
207
215
|
}
|
|
216
|
+
console.log('Processed merkle v incentives');
|
|
208
217
|
if (meritRewardsMap.supply[_market.symbol]) {
|
|
209
218
|
const { apy, rewardTokenSymbol, description } = meritRewardsMap.supply[_market.symbol];
|
|
210
219
|
_market.supplyIncentives.push({
|
|
@@ -214,6 +223,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
214
223
|
description,
|
|
215
224
|
});
|
|
216
225
|
}
|
|
226
|
+
console.log('Processed merit supply incentives');
|
|
217
227
|
if (meritRewardsMap.borrow[_market.symbol]) {
|
|
218
228
|
const { apy, rewardTokenSymbol, description } = meritRewardsMap.borrow[_market.symbol];
|
|
219
229
|
_market.borrowIncentives.push({
|
|
@@ -223,8 +233,10 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
223
233
|
description,
|
|
224
234
|
});
|
|
225
235
|
}
|
|
236
|
+
console.log('Processed merit borrow incentives');
|
|
226
237
|
if (!rewardForMarket)
|
|
227
238
|
return;
|
|
239
|
+
console.log('Reward for market', rewardForMarket);
|
|
228
240
|
// @ts-ignore
|
|
229
241
|
rewardForMarket.aIncentiveData.rewardsTokenInformation.forEach(supplyRewardData => {
|
|
230
242
|
if (supplyRewardData) {
|
|
@@ -291,6 +303,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
291
303
|
collateralAssets: assetsData.map((a) => a.symbol),
|
|
292
304
|
borrowAssets: assetsData.map((a) => a.symbol),
|
|
293
305
|
};
|
|
306
|
+
console.log('Parsed payload');
|
|
294
307
|
return { assetsData: payload, eModeCategoriesData };
|
|
295
308
|
});
|
|
296
309
|
}
|
package/cjs/aaveV3/merit.js
CHANGED
|
@@ -68,6 +68,7 @@ const fetchMeritRewardsData = () => __awaiter(void 0, void 0, void 0, function*
|
|
|
68
68
|
exports.fetchMeritRewardsData = fetchMeritRewardsData;
|
|
69
69
|
const getMeritCampaigns = (chainId, market) => __awaiter(void 0, void 0, void 0, function* () {
|
|
70
70
|
var _a;
|
|
71
|
+
console.log('Fetching Merit campaigns');
|
|
71
72
|
const meritData = yield (0, exports.fetchMeritRewardsData)();
|
|
72
73
|
const relevantCampaigns = {
|
|
73
74
|
supply: {},
|
package/cjs/aaveV3/merkl.js
CHANGED
|
@@ -39,6 +39,7 @@ const formatAaveAsset = (_symbol) => {
|
|
|
39
39
|
};
|
|
40
40
|
exports.formatAaveAsset = formatAaveAsset;
|
|
41
41
|
const getMerkleCampaigns = (chainId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
console.log('Fetching Merkle campaigns');
|
|
42
43
|
try {
|
|
43
44
|
const res = yield fetch('https://api.merkl.xyz/v4/opportunities?mainProtocolId=aave', {
|
|
44
45
|
signal: AbortSignal.timeout(utils_1.DEFAULT_TIMEOUT),
|
|
@@ -128,73 +128,73 @@ const getApyAfterValuesEstimation = (selectedMarket, actions, provider, network)
|
|
|
128
128
|
});
|
|
129
129
|
exports.getApyAfterValuesEstimation = getApyAfterValuesEstimation;
|
|
130
130
|
const API_URL = 'https://blue-api.morpho.org/graphql';
|
|
131
|
-
const MARKET_QUERY = `
|
|
132
|
-
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
133
|
-
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
134
|
-
reallocatableLiquidityAssets
|
|
135
|
-
targetBorrowUtilization
|
|
136
|
-
loanAsset {
|
|
137
|
-
address
|
|
138
|
-
decimals
|
|
139
|
-
priceUsd
|
|
140
|
-
}
|
|
141
|
-
state {
|
|
142
|
-
liquidityAssets
|
|
143
|
-
borrowAssets
|
|
144
|
-
supplyAssets
|
|
145
|
-
}
|
|
146
|
-
publicAllocatorSharedLiquidity {
|
|
147
|
-
assets
|
|
148
|
-
vault {
|
|
149
|
-
address
|
|
150
|
-
name
|
|
151
|
-
}
|
|
152
|
-
allocationMarket {
|
|
153
|
-
uniqueKey
|
|
154
|
-
loanAsset {
|
|
155
|
-
address
|
|
156
|
-
}
|
|
157
|
-
collateralAsset {
|
|
158
|
-
address
|
|
159
|
-
}
|
|
160
|
-
irmAddress
|
|
161
|
-
oracle {
|
|
162
|
-
address
|
|
163
|
-
}
|
|
164
|
-
lltv
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
loanAsset {
|
|
168
|
-
address
|
|
169
|
-
}
|
|
170
|
-
collateralAsset {
|
|
171
|
-
address
|
|
172
|
-
}
|
|
173
|
-
oracle {
|
|
174
|
-
address
|
|
175
|
-
}
|
|
176
|
-
irmAddress
|
|
177
|
-
lltv
|
|
178
|
-
}
|
|
179
|
-
}
|
|
131
|
+
const MARKET_QUERY = `
|
|
132
|
+
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
133
|
+
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
134
|
+
reallocatableLiquidityAssets
|
|
135
|
+
targetBorrowUtilization
|
|
136
|
+
loanAsset {
|
|
137
|
+
address
|
|
138
|
+
decimals
|
|
139
|
+
priceUsd
|
|
140
|
+
}
|
|
141
|
+
state {
|
|
142
|
+
liquidityAssets
|
|
143
|
+
borrowAssets
|
|
144
|
+
supplyAssets
|
|
145
|
+
}
|
|
146
|
+
publicAllocatorSharedLiquidity {
|
|
147
|
+
assets
|
|
148
|
+
vault {
|
|
149
|
+
address
|
|
150
|
+
name
|
|
151
|
+
}
|
|
152
|
+
allocationMarket {
|
|
153
|
+
uniqueKey
|
|
154
|
+
loanAsset {
|
|
155
|
+
address
|
|
156
|
+
}
|
|
157
|
+
collateralAsset {
|
|
158
|
+
address
|
|
159
|
+
}
|
|
160
|
+
irmAddress
|
|
161
|
+
oracle {
|
|
162
|
+
address
|
|
163
|
+
}
|
|
164
|
+
lltv
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
loanAsset {
|
|
168
|
+
address
|
|
169
|
+
}
|
|
170
|
+
collateralAsset {
|
|
171
|
+
address
|
|
172
|
+
}
|
|
173
|
+
oracle {
|
|
174
|
+
address
|
|
175
|
+
}
|
|
176
|
+
irmAddress
|
|
177
|
+
lltv
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
180
|
`;
|
|
181
|
-
const REWARDS_QUERY = `
|
|
182
|
-
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
183
|
-
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
184
|
-
uniqueKey
|
|
185
|
-
state {
|
|
186
|
-
rewards {
|
|
187
|
-
amountPerSuppliedToken
|
|
188
|
-
supplyApr
|
|
189
|
-
amountPerBorrowedToken
|
|
190
|
-
borrowApr
|
|
191
|
-
asset {
|
|
192
|
-
address
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
181
|
+
const REWARDS_QUERY = `
|
|
182
|
+
query MarketByUniqueKey($uniqueKey: String!, $chainId: Int!) {
|
|
183
|
+
marketByUniqueKey(uniqueKey: $uniqueKey, chainId: $chainId) {
|
|
184
|
+
uniqueKey
|
|
185
|
+
state {
|
|
186
|
+
rewards {
|
|
187
|
+
amountPerSuppliedToken
|
|
188
|
+
supplyApr
|
|
189
|
+
amountPerBorrowedToken
|
|
190
|
+
borrowApr
|
|
191
|
+
asset {
|
|
192
|
+
address
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
198
|
`;
|
|
199
199
|
/**
|
|
200
200
|
* Get reallocatable liquidity to a given market and target borrow utilization
|
|
@@ -54,23 +54,23 @@ const morphoVaultsOptions = __importStar(require("./options"));
|
|
|
54
54
|
exports.morphoVaultsOptions = morphoVaultsOptions;
|
|
55
55
|
const viem_1 = require("../../services/viem");
|
|
56
56
|
const contracts_1 = require("../../contracts");
|
|
57
|
-
const vaultDataQuery = (vaultAddress) => `query vaultByAddress {
|
|
58
|
-
vaultByAddress(chainId: 1, address: "${vaultAddress}") {
|
|
59
|
-
id,
|
|
60
|
-
dailyApy,
|
|
61
|
-
dailyApys {
|
|
62
|
-
apy, netApy
|
|
63
|
-
},
|
|
64
|
-
monthlyApys {
|
|
65
|
-
apy, netApy
|
|
66
|
-
},
|
|
67
|
-
liquidity {
|
|
68
|
-
underlying, usd,
|
|
69
|
-
},
|
|
70
|
-
asset {
|
|
71
|
-
priceUsd
|
|
72
|
-
}
|
|
73
|
-
}
|
|
57
|
+
const vaultDataQuery = (vaultAddress) => `query vaultByAddress {
|
|
58
|
+
vaultByAddress(chainId: 1, address: "${vaultAddress}") {
|
|
59
|
+
id,
|
|
60
|
+
dailyApy,
|
|
61
|
+
dailyApys {
|
|
62
|
+
apy, netApy
|
|
63
|
+
},
|
|
64
|
+
monthlyApys {
|
|
65
|
+
apy, netApy
|
|
66
|
+
},
|
|
67
|
+
liquidity {
|
|
68
|
+
underlying, usd,
|
|
69
|
+
},
|
|
70
|
+
asset {
|
|
71
|
+
priceUsd
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
74
|
}`;
|
|
75
75
|
const MORPHO_BLUE_API = 'https://blue-api.morpho.org/graphql';
|
|
76
76
|
const _getMorphoVaultData = (provider, network, morphoVault, accounts) => __awaiter(void 0, void 0, void 0, function* () {
|
package/esm/aaveV3/index.js
CHANGED
|
@@ -48,6 +48,7 @@ export const aaveV3EmodeCategoriesMapping = (extractedState, usedAssets) => {
|
|
|
48
48
|
export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
49
49
|
return __awaiter(this, arguments, void 0, function* (provider, network, market, blockNumber = 'latest') {
|
|
50
50
|
const _addresses = market.assets.map(a => getAssetInfo(getWrappedNativeAssetFromUnwrapped(a), network).address);
|
|
51
|
+
console.log('Fetched addresses');
|
|
51
52
|
const isL2 = isLayer2Network(network);
|
|
52
53
|
const loanInfoContract = AaveV3ViewContractViem(provider, network);
|
|
53
54
|
const aaveIncentivesContract = AaveIncentiveDataProviderV3ContractViem(provider, network);
|
|
@@ -62,6 +63,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
62
63
|
getMerkleCampaigns(network),
|
|
63
64
|
getMeritCampaigns(network, market.value),
|
|
64
65
|
]);
|
|
66
|
+
console.log('Fetched tokens, emodes, campaigns, incentives');
|
|
65
67
|
isBorrowAllowed = isLayer2Network(network) ? isBorrowAllowed : true;
|
|
66
68
|
const eModeCategoriesData = {};
|
|
67
69
|
for (let i = 0; i < eModesInfo.length; i++) {
|
|
@@ -79,6 +81,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
79
81
|
collateralAssets: [],
|
|
80
82
|
};
|
|
81
83
|
}
|
|
84
|
+
console.log('Parsed e modes info');
|
|
82
85
|
if (networksWithIncentives.includes(network) && rewardInfo) {
|
|
83
86
|
rewardInfo = rewardInfo.reduce((all, _market) => {
|
|
84
87
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -86,6 +89,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
86
89
|
return all;
|
|
87
90
|
}, {});
|
|
88
91
|
}
|
|
92
|
+
console.log('Parsed reward info');
|
|
89
93
|
const assetsData = yield Promise.all(loanInfo
|
|
90
94
|
.map((tokenMarket, i) => __awaiter(this, void 0, void 0, function* () {
|
|
91
95
|
const symbol = market.assets[i];
|
|
@@ -147,6 +151,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
147
151
|
borrowIncentives: [],
|
|
148
152
|
});
|
|
149
153
|
})));
|
|
154
|
+
console.log('Parsed assets data');
|
|
150
155
|
// Get incentives data
|
|
151
156
|
yield Promise.all(assetsData.map((_market, index) => __awaiter(this, void 0, void 0, function* () {
|
|
152
157
|
var _a, _b;
|
|
@@ -154,8 +159,10 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
154
159
|
// @ts-ignore
|
|
155
160
|
const rewardForMarket = rewardInfo === null || rewardInfo === void 0 ? void 0 : rewardInfo[_market.underlyingTokenAddress];
|
|
156
161
|
const isStakingAsset = STAKING_ASSETS.includes(_market.symbol);
|
|
162
|
+
console.log('Processing market', _market.symbol);
|
|
157
163
|
if (isStakingAsset) {
|
|
158
164
|
const yieldApy = yield getStakingApy(_market.symbol, network);
|
|
165
|
+
console.log('Got yield apy', yieldApy);
|
|
159
166
|
_market.supplyIncentives.push({
|
|
160
167
|
apy: yieldApy,
|
|
161
168
|
token: _market.symbol,
|
|
@@ -183,6 +190,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
183
190
|
eligibilityId: identifier,
|
|
184
191
|
});
|
|
185
192
|
}
|
|
193
|
+
console.log('Processed merkle a incentives');
|
|
186
194
|
const vTokenAddress = _market.vTokenAddress.toLowerCase(); // DEV: Should vTokenAddress be in AaveV3AssetData type?
|
|
187
195
|
if ((_b = merkleRewardsMap[vTokenAddress]) === null || _b === void 0 ? void 0 : _b.borrow) {
|
|
188
196
|
const { apy, rewardTokenSymbol, description, identifier, } = merkleRewardsMap[vTokenAddress].borrow;
|
|
@@ -194,6 +202,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
194
202
|
eligibilityId: identifier,
|
|
195
203
|
});
|
|
196
204
|
}
|
|
205
|
+
console.log('Processed merkle v incentives');
|
|
197
206
|
if (meritRewardsMap.supply[_market.symbol]) {
|
|
198
207
|
const { apy, rewardTokenSymbol, description } = meritRewardsMap.supply[_market.symbol];
|
|
199
208
|
_market.supplyIncentives.push({
|
|
@@ -203,6 +212,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
203
212
|
description,
|
|
204
213
|
});
|
|
205
214
|
}
|
|
215
|
+
console.log('Processed merit supply incentives');
|
|
206
216
|
if (meritRewardsMap.borrow[_market.symbol]) {
|
|
207
217
|
const { apy, rewardTokenSymbol, description } = meritRewardsMap.borrow[_market.symbol];
|
|
208
218
|
_market.borrowIncentives.push({
|
|
@@ -212,8 +222,10 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
212
222
|
description,
|
|
213
223
|
});
|
|
214
224
|
}
|
|
225
|
+
console.log('Processed merit borrow incentives');
|
|
215
226
|
if (!rewardForMarket)
|
|
216
227
|
return;
|
|
228
|
+
console.log('Reward for market', rewardForMarket);
|
|
217
229
|
// @ts-ignore
|
|
218
230
|
rewardForMarket.aIncentiveData.rewardsTokenInformation.forEach(supplyRewardData => {
|
|
219
231
|
if (supplyRewardData) {
|
|
@@ -280,6 +292,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
280
292
|
collateralAssets: assetsData.map((a) => a.symbol),
|
|
281
293
|
borrowAssets: assetsData.map((a) => a.symbol),
|
|
282
294
|
};
|
|
295
|
+
console.log('Parsed payload');
|
|
283
296
|
return { assetsData: payload, eModeCategoriesData };
|
|
284
297
|
});
|
|
285
298
|
}
|
package/esm/aaveV3/merit.js
CHANGED
|
@@ -64,6 +64,7 @@ export const fetchMeritRewardsData = () => __awaiter(void 0, void 0, void 0, fun
|
|
|
64
64
|
});
|
|
65
65
|
export const getMeritCampaigns = (chainId, market) => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
66
|
var _a;
|
|
67
|
+
console.log('Fetching Merit campaigns');
|
|
67
68
|
const meritData = yield fetchMeritRewardsData();
|
|
68
69
|
const relevantCampaigns = {
|
|
69
70
|
supply: {},
|
package/esm/aaveV3/merkl.js
CHANGED
|
@@ -34,6 +34,7 @@ export const formatAaveAsset = (_symbol) => {
|
|
|
34
34
|
return _symbol;
|
|
35
35
|
};
|
|
36
36
|
export const getMerkleCampaigns = (chainId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
37
|
+
console.log('Fetching Merkle campaigns');
|
|
37
38
|
try {
|
|
38
39
|
const res = yield fetch('https://api.merkl.xyz/v4/opportunities?mainProtocolId=aave', {
|
|
39
40
|
signal: AbortSignal.timeout(DEFAULT_TIMEOUT),
|