@defisaver/positions-sdk 2.1.42 → 2.1.43-dev-stats-test-1-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 +31 -9
- package/cjs/aaveV3/merit.js +5 -1
- 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 +31 -9
- package/esm/aaveV3/merit.js +5 -1
- 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 +648 -625
- package/src/aaveV3/merit.ts +99 -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,20 +59,31 @@ 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);
|
|
65
66
|
const marketAddress = market.providerAddress;
|
|
66
67
|
const networksWithIncentives = [common_1.NetworkNumber.Eth, common_1.NetworkNumber.Arb, common_1.NetworkNumber.Opt, common_1.NetworkNumber.Linea, common_1.NetworkNumber.Plasma];
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
]);
|
|
68
|
+
console.log({ marketAddress, blockNumber });
|
|
69
|
+
console.log('Fetching loan info...');
|
|
70
|
+
const loanInfo = yield loanInfoContract.read.getFullTokensInfo([marketAddress, _addresses], (0, viem_1.setViemBlockNumber)(blockNumber));
|
|
71
|
+
console.log('Fetched loan info');
|
|
72
|
+
console.log('Fetching eModes info...');
|
|
73
|
+
const eModesInfo = yield loanInfoContract.read.getAllEmodes([marketAddress], (0, viem_1.setViemBlockNumber)(blockNumber));
|
|
74
|
+
console.log('Fetched eModes info');
|
|
75
|
+
console.log('Fetching borrow allowed status...');
|
|
76
|
+
let isBorrowAllowed = yield loanInfoContract.read.isBorrowAllowed([marketAddress], (0, viem_1.setViemBlockNumber)(blockNumber)); // Used on L2s check for PriceOracleSentinel (mainnet will always return true)
|
|
77
|
+
console.log('Fetched borrow allowed status');
|
|
78
|
+
console.log('Fetching reward info...');
|
|
79
|
+
let rewardInfo = networksWithIncentives.includes(network) ? yield aaveIncentivesContract.read.getReservesIncentivesData([marketAddress], (0, viem_1.setViemBlockNumber)(blockNumber)) : null;
|
|
80
|
+
console.log('Fetched reward info');
|
|
81
|
+
console.log('Fetching Merkle campaigns...');
|
|
82
|
+
const merkleRewardsMap = yield (0, merkl_1.getMerkleCampaigns)(network);
|
|
83
|
+
console.log('Fetched Merkle campaigns');
|
|
84
|
+
console.log('Fetching Merit campaigns...');
|
|
85
|
+
const meritRewardsMap = yield (0, merit_1.getMeritCampaigns)(network, market.value);
|
|
86
|
+
console.log('Fetched Merit campaigns');
|
|
76
87
|
isBorrowAllowed = (0, utils_1.isLayer2Network)(network) ? isBorrowAllowed : true;
|
|
77
88
|
const eModeCategoriesData = {};
|
|
78
89
|
for (let i = 0; i < eModesInfo.length; i++) {
|
|
@@ -90,6 +101,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
90
101
|
collateralAssets: [],
|
|
91
102
|
};
|
|
92
103
|
}
|
|
104
|
+
console.log('Parsed e modes info');
|
|
93
105
|
if (networksWithIncentives.includes(network) && rewardInfo) {
|
|
94
106
|
rewardInfo = rewardInfo.reduce((all, _market) => {
|
|
95
107
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -97,6 +109,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
97
109
|
return all;
|
|
98
110
|
}, {});
|
|
99
111
|
}
|
|
112
|
+
console.log('Parsed reward info');
|
|
100
113
|
const assetsData = yield Promise.all(loanInfo
|
|
101
114
|
.map((tokenMarket, i) => __awaiter(this, void 0, void 0, function* () {
|
|
102
115
|
const symbol = market.assets[i];
|
|
@@ -158,6 +171,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
158
171
|
borrowIncentives: [],
|
|
159
172
|
});
|
|
160
173
|
})));
|
|
174
|
+
console.log('Parsed assets data');
|
|
161
175
|
// Get incentives data
|
|
162
176
|
yield Promise.all(assetsData.map((_market, index) => __awaiter(this, void 0, void 0, function* () {
|
|
163
177
|
var _a, _b;
|
|
@@ -165,8 +179,10 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
165
179
|
// @ts-ignore
|
|
166
180
|
const rewardForMarket = rewardInfo === null || rewardInfo === void 0 ? void 0 : rewardInfo[_market.underlyingTokenAddress];
|
|
167
181
|
const isStakingAsset = staking_1.STAKING_ASSETS.includes(_market.symbol);
|
|
182
|
+
console.log('Processing market', _market.symbol);
|
|
168
183
|
if (isStakingAsset) {
|
|
169
184
|
const yieldApy = yield (0, staking_1.getStakingApy)(_market.symbol, network);
|
|
185
|
+
console.log('Got yield apy', yieldApy);
|
|
170
186
|
_market.supplyIncentives.push({
|
|
171
187
|
apy: yieldApy,
|
|
172
188
|
token: _market.symbol,
|
|
@@ -194,6 +210,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
194
210
|
eligibilityId: identifier,
|
|
195
211
|
});
|
|
196
212
|
}
|
|
213
|
+
console.log('Processed merkle a incentives');
|
|
197
214
|
const vTokenAddress = _market.vTokenAddress.toLowerCase(); // DEV: Should vTokenAddress be in AaveV3AssetData type?
|
|
198
215
|
if ((_b = merkleRewardsMap[vTokenAddress]) === null || _b === void 0 ? void 0 : _b.borrow) {
|
|
199
216
|
const { apy, rewardTokenSymbol, description, identifier, } = merkleRewardsMap[vTokenAddress].borrow;
|
|
@@ -205,6 +222,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
205
222
|
eligibilityId: identifier,
|
|
206
223
|
});
|
|
207
224
|
}
|
|
225
|
+
console.log('Processed merkle v incentives');
|
|
208
226
|
if (meritRewardsMap.supply[_market.symbol]) {
|
|
209
227
|
const { apy, rewardTokenSymbol, description } = meritRewardsMap.supply[_market.symbol];
|
|
210
228
|
_market.supplyIncentives.push({
|
|
@@ -214,6 +232,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
214
232
|
description,
|
|
215
233
|
});
|
|
216
234
|
}
|
|
235
|
+
console.log('Processed merit supply incentives');
|
|
217
236
|
if (meritRewardsMap.borrow[_market.symbol]) {
|
|
218
237
|
const { apy, rewardTokenSymbol, description } = meritRewardsMap.borrow[_market.symbol];
|
|
219
238
|
_market.borrowIncentives.push({
|
|
@@ -223,8 +242,10 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
223
242
|
description,
|
|
224
243
|
});
|
|
225
244
|
}
|
|
245
|
+
console.log('Processed merit borrow incentives');
|
|
226
246
|
if (!rewardForMarket)
|
|
227
247
|
return;
|
|
248
|
+
console.log('Reward for market', rewardForMarket);
|
|
228
249
|
// @ts-ignore
|
|
229
250
|
rewardForMarket.aIncentiveData.rewardsTokenInformation.forEach(supplyRewardData => {
|
|
230
251
|
if (supplyRewardData) {
|
|
@@ -291,6 +312,7 @@ function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
291
312
|
collateralAssets: assetsData.map((a) => a.symbol),
|
|
292
313
|
borrowAssets: assetsData.map((a) => a.symbol),
|
|
293
314
|
};
|
|
315
|
+
console.log('Parsed payload');
|
|
294
316
|
return { assetsData: payload, eModeCategoriesData };
|
|
295
317
|
});
|
|
296
318
|
}
|
package/cjs/aaveV3/merit.js
CHANGED
|
@@ -53,12 +53,15 @@ const MERIT_DATA_MAP = {
|
|
|
53
53
|
* Fetches merit rewards data from Aave API
|
|
54
54
|
*/
|
|
55
55
|
const fetchMeritRewardsData = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
56
|
+
var _a;
|
|
56
57
|
try {
|
|
57
58
|
const response = yield fetch('https://apps.aavechan.com/api/merit/aprs', {
|
|
58
59
|
signal: AbortSignal.timeout(5000),
|
|
59
60
|
});
|
|
61
|
+
if (!response.ok)
|
|
62
|
+
throw new Error('Failed to fetch Merit rewards data');
|
|
60
63
|
const data = yield response.json();
|
|
61
|
-
return data.currentAPR.actionsAPR;
|
|
64
|
+
return ((_a = data === null || data === void 0 ? void 0 : data.currentAPR) === null || _a === void 0 ? void 0 : _a.actionsAPR) || {};
|
|
62
65
|
}
|
|
63
66
|
catch (error) {
|
|
64
67
|
console.error('External API Failure: Failed to fetch merit rewards data:', error);
|
|
@@ -68,6 +71,7 @@ const fetchMeritRewardsData = () => __awaiter(void 0, void 0, void 0, function*
|
|
|
68
71
|
exports.fetchMeritRewardsData = fetchMeritRewardsData;
|
|
69
72
|
const getMeritCampaigns = (chainId, market) => __awaiter(void 0, void 0, void 0, function* () {
|
|
70
73
|
var _a;
|
|
74
|
+
console.log('Fetching Merit campaigns');
|
|
71
75
|
const meritData = yield (0, exports.fetchMeritRewardsData)();
|
|
72
76
|
const relevantCampaigns = {
|
|
73
77
|
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,20 +48,31 @@ 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);
|
|
54
55
|
const marketAddress = market.providerAddress;
|
|
55
56
|
const networksWithIncentives = [NetworkNumber.Eth, NetworkNumber.Arb, NetworkNumber.Opt, NetworkNumber.Linea, NetworkNumber.Plasma];
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
]);
|
|
57
|
+
console.log({ marketAddress, blockNumber });
|
|
58
|
+
console.log('Fetching loan info...');
|
|
59
|
+
const loanInfo = yield loanInfoContract.read.getFullTokensInfo([marketAddress, _addresses], setViemBlockNumber(blockNumber));
|
|
60
|
+
console.log('Fetched loan info');
|
|
61
|
+
console.log('Fetching eModes info...');
|
|
62
|
+
const eModesInfo = yield loanInfoContract.read.getAllEmodes([marketAddress], setViemBlockNumber(blockNumber));
|
|
63
|
+
console.log('Fetched eModes info');
|
|
64
|
+
console.log('Fetching borrow allowed status...');
|
|
65
|
+
let isBorrowAllowed = yield loanInfoContract.read.isBorrowAllowed([marketAddress], setViemBlockNumber(blockNumber)); // Used on L2s check for PriceOracleSentinel (mainnet will always return true)
|
|
66
|
+
console.log('Fetched borrow allowed status');
|
|
67
|
+
console.log('Fetching reward info...');
|
|
68
|
+
let rewardInfo = networksWithIncentives.includes(network) ? yield aaveIncentivesContract.read.getReservesIncentivesData([marketAddress], setViemBlockNumber(blockNumber)) : null;
|
|
69
|
+
console.log('Fetched reward info');
|
|
70
|
+
console.log('Fetching Merkle campaigns...');
|
|
71
|
+
const merkleRewardsMap = yield getMerkleCampaigns(network);
|
|
72
|
+
console.log('Fetched Merkle campaigns');
|
|
73
|
+
console.log('Fetching Merit campaigns...');
|
|
74
|
+
const meritRewardsMap = yield getMeritCampaigns(network, market.value);
|
|
75
|
+
console.log('Fetched Merit campaigns');
|
|
65
76
|
isBorrowAllowed = isLayer2Network(network) ? isBorrowAllowed : true;
|
|
66
77
|
const eModeCategoriesData = {};
|
|
67
78
|
for (let i = 0; i < eModesInfo.length; i++) {
|
|
@@ -79,6 +90,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
79
90
|
collateralAssets: [],
|
|
80
91
|
};
|
|
81
92
|
}
|
|
93
|
+
console.log('Parsed e modes info');
|
|
82
94
|
if (networksWithIncentives.includes(network) && rewardInfo) {
|
|
83
95
|
rewardInfo = rewardInfo.reduce((all, _market) => {
|
|
84
96
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -86,6 +98,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
86
98
|
return all;
|
|
87
99
|
}, {});
|
|
88
100
|
}
|
|
101
|
+
console.log('Parsed reward info');
|
|
89
102
|
const assetsData = yield Promise.all(loanInfo
|
|
90
103
|
.map((tokenMarket, i) => __awaiter(this, void 0, void 0, function* () {
|
|
91
104
|
const symbol = market.assets[i];
|
|
@@ -147,6 +160,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
147
160
|
borrowIncentives: [],
|
|
148
161
|
});
|
|
149
162
|
})));
|
|
163
|
+
console.log('Parsed assets data');
|
|
150
164
|
// Get incentives data
|
|
151
165
|
yield Promise.all(assetsData.map((_market, index) => __awaiter(this, void 0, void 0, function* () {
|
|
152
166
|
var _a, _b;
|
|
@@ -154,8 +168,10 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
154
168
|
// @ts-ignore
|
|
155
169
|
const rewardForMarket = rewardInfo === null || rewardInfo === void 0 ? void 0 : rewardInfo[_market.underlyingTokenAddress];
|
|
156
170
|
const isStakingAsset = STAKING_ASSETS.includes(_market.symbol);
|
|
171
|
+
console.log('Processing market', _market.symbol);
|
|
157
172
|
if (isStakingAsset) {
|
|
158
173
|
const yieldApy = yield getStakingApy(_market.symbol, network);
|
|
174
|
+
console.log('Got yield apy', yieldApy);
|
|
159
175
|
_market.supplyIncentives.push({
|
|
160
176
|
apy: yieldApy,
|
|
161
177
|
token: _market.symbol,
|
|
@@ -183,6 +199,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
183
199
|
eligibilityId: identifier,
|
|
184
200
|
});
|
|
185
201
|
}
|
|
202
|
+
console.log('Processed merkle a incentives');
|
|
186
203
|
const vTokenAddress = _market.vTokenAddress.toLowerCase(); // DEV: Should vTokenAddress be in AaveV3AssetData type?
|
|
187
204
|
if ((_b = merkleRewardsMap[vTokenAddress]) === null || _b === void 0 ? void 0 : _b.borrow) {
|
|
188
205
|
const { apy, rewardTokenSymbol, description, identifier, } = merkleRewardsMap[vTokenAddress].borrow;
|
|
@@ -194,6 +211,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
194
211
|
eligibilityId: identifier,
|
|
195
212
|
});
|
|
196
213
|
}
|
|
214
|
+
console.log('Processed merkle v incentives');
|
|
197
215
|
if (meritRewardsMap.supply[_market.symbol]) {
|
|
198
216
|
const { apy, rewardTokenSymbol, description } = meritRewardsMap.supply[_market.symbol];
|
|
199
217
|
_market.supplyIncentives.push({
|
|
@@ -203,6 +221,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
203
221
|
description,
|
|
204
222
|
});
|
|
205
223
|
}
|
|
224
|
+
console.log('Processed merit supply incentives');
|
|
206
225
|
if (meritRewardsMap.borrow[_market.symbol]) {
|
|
207
226
|
const { apy, rewardTokenSymbol, description } = meritRewardsMap.borrow[_market.symbol];
|
|
208
227
|
_market.borrowIncentives.push({
|
|
@@ -212,8 +231,10 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
212
231
|
description,
|
|
213
232
|
});
|
|
214
233
|
}
|
|
234
|
+
console.log('Processed merit borrow incentives');
|
|
215
235
|
if (!rewardForMarket)
|
|
216
236
|
return;
|
|
237
|
+
console.log('Reward for market', rewardForMarket);
|
|
217
238
|
// @ts-ignore
|
|
218
239
|
rewardForMarket.aIncentiveData.rewardsTokenInformation.forEach(supplyRewardData => {
|
|
219
240
|
if (supplyRewardData) {
|
|
@@ -280,6 +301,7 @@ export function _getAaveV3MarketData(provider_1, network_1, market_1) {
|
|
|
280
301
|
collateralAssets: assetsData.map((a) => a.symbol),
|
|
281
302
|
borrowAssets: assetsData.map((a) => a.symbol),
|
|
282
303
|
};
|
|
304
|
+
console.log('Parsed payload');
|
|
283
305
|
return { assetsData: payload, eModeCategoriesData };
|
|
284
306
|
});
|
|
285
307
|
}
|
package/esm/aaveV3/merit.js
CHANGED
|
@@ -50,12 +50,15 @@ const MERIT_DATA_MAP = {
|
|
|
50
50
|
* Fetches merit rewards data from Aave API
|
|
51
51
|
*/
|
|
52
52
|
export const fetchMeritRewardsData = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
53
|
+
var _a;
|
|
53
54
|
try {
|
|
54
55
|
const response = yield fetch('https://apps.aavechan.com/api/merit/aprs', {
|
|
55
56
|
signal: AbortSignal.timeout(5000),
|
|
56
57
|
});
|
|
58
|
+
if (!response.ok)
|
|
59
|
+
throw new Error('Failed to fetch Merit rewards data');
|
|
57
60
|
const data = yield response.json();
|
|
58
|
-
return data.currentAPR.actionsAPR;
|
|
61
|
+
return ((_a = data === null || data === void 0 ? void 0 : data.currentAPR) === null || _a === void 0 ? void 0 : _a.actionsAPR) || {};
|
|
59
62
|
}
|
|
60
63
|
catch (error) {
|
|
61
64
|
console.error('External API Failure: Failed to fetch merit rewards data:', error);
|
|
@@ -64,6 +67,7 @@ export const fetchMeritRewardsData = () => __awaiter(void 0, void 0, void 0, fun
|
|
|
64
67
|
});
|
|
65
68
|
export const getMeritCampaigns = (chainId, market) => __awaiter(void 0, void 0, void 0, function* () {
|
|
66
69
|
var _a;
|
|
70
|
+
console.log('Fetching Merit campaigns');
|
|
67
71
|
const meritData = yield fetchMeritRewardsData();
|
|
68
72
|
const relevantCampaigns = {
|
|
69
73
|
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),
|