@defisaver/positions-sdk 0.0.19 → 0.0.21

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.
Files changed (68) hide show
  1. package/README.md +63 -0
  2. package/cjs/aaveV2/index.js +11 -4
  3. package/cjs/aaveV3/index.js +22 -15
  4. package/cjs/compoundV2/index.d.ts +1 -0
  5. package/cjs/compoundV2/index.js +15 -8
  6. package/cjs/compoundV3/index.js +5 -0
  7. package/cjs/config/contracts.d.ts +373 -201
  8. package/cjs/config/contracts.js +22 -0
  9. package/cjs/helpers/aaveHelpers/index.js +0 -5
  10. package/cjs/helpers/compoundHelpers/index.js +2 -2
  11. package/cjs/markets/compound/index.d.ts +2 -0
  12. package/cjs/markets/compound/index.js +60 -13
  13. package/cjs/markets/compound/marketsAssets.d.ts +8 -2
  14. package/cjs/markets/compound/marketsAssets.js +13 -3
  15. package/cjs/morphoAaveV2/index.js +4 -3
  16. package/cjs/morphoAaveV3/index.js +11 -4
  17. package/cjs/spark/index.js +11 -4
  18. package/cjs/types/aave.d.ts +0 -5
  19. package/cjs/types/compound.d.ts +6 -4
  20. package/cjs/types/compound.js +1 -0
  21. package/cjs/types/contracts/generated/CUSDCev3.d.ts +441 -0
  22. package/cjs/types/contracts/generated/CUSDCev3.js +5 -0
  23. package/cjs/types/contracts/generated/CompV3USDCBulkerArb.d.ts +41 -0
  24. package/cjs/types/contracts/generated/CompV3USDCBulkerArb.js +5 -0
  25. package/cjs/types/contracts/generated/index.d.ts +2 -0
  26. package/esm/aaveV2/index.js +12 -5
  27. package/esm/aaveV3/index.js +12 -5
  28. package/esm/compoundV2/index.d.ts +1 -0
  29. package/esm/compoundV2/index.js +13 -7
  30. package/esm/compoundV3/index.js +6 -1
  31. package/esm/config/contracts.d.ts +373 -201
  32. package/esm/config/contracts.js +22 -0
  33. package/esm/helpers/aaveHelpers/index.js +0 -5
  34. package/esm/helpers/compoundHelpers/index.js +2 -2
  35. package/esm/markets/compound/index.d.ts +2 -0
  36. package/esm/markets/compound/index.js +59 -13
  37. package/esm/markets/compound/marketsAssets.d.ts +8 -2
  38. package/esm/markets/compound/marketsAssets.js +12 -2
  39. package/esm/morphoAaveV2/index.js +4 -3
  40. package/esm/morphoAaveV3/index.js +11 -4
  41. package/esm/spark/index.js +12 -5
  42. package/esm/types/aave.d.ts +0 -5
  43. package/esm/types/compound.d.ts +6 -4
  44. package/esm/types/compound.js +1 -0
  45. package/esm/types/contracts/generated/CUSDCev3.d.ts +441 -0
  46. package/esm/types/contracts/generated/CUSDCev3.js +4 -0
  47. package/esm/types/contracts/generated/CompV3USDCBulkerArb.d.ts +41 -0
  48. package/esm/types/contracts/generated/CompV3USDCBulkerArb.js +4 -0
  49. package/esm/types/contracts/generated/index.d.ts +2 -0
  50. package/package.json +1 -1
  51. package/src/aaveV2/index.ts +16 -5
  52. package/src/aaveV3/index.ts +16 -5
  53. package/src/compoundV2/index.ts +20 -7
  54. package/src/compoundV3/index.ts +6 -1
  55. package/src/config/contracts.js +22 -0
  56. package/src/helpers/aaveHelpers/index.ts +0 -7
  57. package/src/helpers/compoundHelpers/index.ts +2 -2
  58. package/src/markets/compound/index.ts +71 -15
  59. package/src/markets/compound/marketsAssets.ts +13 -2
  60. package/src/morpho/markets.ts +5 -5
  61. package/src/morphoAaveV2/index.ts +4 -3
  62. package/src/morphoAaveV3/index.ts +14 -4
  63. package/src/spark/index.ts +17 -5
  64. package/src/types/aave.ts +0 -5
  65. package/src/types/compound.ts +7 -1
  66. package/src/types/contracts/generated/CUSDCev3.ts +685 -0
  67. package/src/types/contracts/generated/CompV3USDCBulkerArb.ts +85 -0
  68. package/src/types/contracts/generated/index.ts +2 -0
package/README.md ADDED
@@ -0,0 +1,63 @@
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
+ - [Morpho Aave V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV2)
10
+ - [Morpho Aave V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/morphoAaveV3)
11
+ - [Compound V2](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV2)
12
+ - [Compound V3](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/compoundV3)
13
+ - [Liquity](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/liquity)
14
+ - [Chicken Bonds](https://github.com/defisaver/defisaver-positions-sdk/tree/main/src/chickenBonds)
15
+
16
+ ## Setup
17
+ Supported Node version is v10.
18
+
19
+ - run `npm install` (first time)
20
+ - run `npm run build`
21
+
22
+ `build` command will generate contracts and build ejs and esm folders
23
+
24
+ ## How to use
25
+ [All available imports](https://github.com/defisaver/defisaver-positions-sdk/blob/main/src/index.ts)
26
+
27
+ This is a Compound V3 example, and every other protocol is similar
28
+ ```js
29
+ import Web3 from 'web3';
30
+ import { compoundV3 } from '@defisaver/positions-sdk';
31
+
32
+
33
+ // every protocol has market data and user data getters
34
+ const {
35
+ getCompoundV3MarketsData,
36
+ getCompoundV3AccountData,
37
+ } = compoundV3;
38
+
39
+ const provider = 'Your RPC provider';
40
+ const web3 = new Web3(provider);
41
+
42
+ const user = '0x123...';
43
+
44
+ const { assetsData } = await getCompoundV3MarketsData(
45
+ web3, // rpc for the network you are using (note: can be tenderly or any other testnet rpc)
46
+ 1, // network
47
+ selectedMarket, // market object like in /src/markets/compound/index.ts
48
+ web3, // this must be mainnet rpc - used for getting prices onchain and calculating apys
49
+ );
50
+
51
+ const userData = await getCompoundV3AccountData(
52
+ web3,
53
+ 1, // network
54
+ userAddress, // EOA or DSProxy
55
+ '', // proxy address of the user, or just empty string if checking for EOA
56
+ {
57
+ selectedMarket, // market object as in /src/markets/compound/index.ts
58
+ assetsData,
59
+ }
60
+ );
61
+ ```
62
+
63
+ More examples found [here](https://github.com/defisaver/defisaver-positions-sdk/tree/main/tests)
@@ -23,6 +23,7 @@ const aaveV3_1 = require("../aaveV3");
23
23
  const aave_1 = require("../markets/aave");
24
24
  const aaveHelpers_1 = require("../helpers/aaveHelpers");
25
25
  const priceService_1 = require("../services/priceService");
26
+ const contracts_2 = __importDefault(require("../config/contracts"));
26
27
  const getAaveV2MarketsData = (web3, network, selectedMarket, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
27
28
  const ethPrice = yield (0, priceService_1.getEthPrice)(mainnetWeb3);
28
29
  const _addresses = selectedMarket.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a)).address);
@@ -94,18 +95,24 @@ const getAaveV2AccountBalances = (web3, network, block, addressMapping, address)
94
95
  const market = aave_1.AAVE_V2;
95
96
  const loanInfoContract = (0, contracts_1.AaveLoanInfoV2Contract)(web3, network, block);
96
97
  const marketAddress = market.providerAddress;
97
- const _addresses = market.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a), network).address);
98
+ const protocolDataProviderContract = new web3.eth.Contract(
99
+ // @ts-ignore
100
+ contracts_2.default[market.protocolData].abi, market.protocolDataAddress);
101
+ const reserveTokens = yield protocolDataProviderContract.methods.getAllReservesTokens().call({}, block);
102
+ const symbols = reserveTokens.map(({ symbol }) => symbol);
103
+ const _addresses = reserveTokens.map(({ tokenAddress }) => tokenAddress);
98
104
  const loanInfo = yield loanInfoContract.methods.getTokenBalances(marketAddress, address, _addresses).call({}, block);
99
105
  loanInfo.forEach((_tokenInfo, i) => {
100
- const asset = (0, utils_1.wethToEth)(market.assets[i]);
106
+ const asset = (0, utils_1.wethToEth)(symbols[i]);
107
+ const assetAddr = (0, utils_1.wethToEthByAddress)(_addresses[i], network).toLowerCase();
101
108
  const tokenInfo = Object.assign({}, _tokenInfo);
102
109
  // known bug: stETH leaves 1 wei on every transfer
103
110
  if (asset === 'stETH' && tokenInfo.balance.toString() === '1') {
104
111
  tokenInfo.balance = '0';
105
112
  }
106
113
  balances = {
107
- collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: tokenInfo.balance.toString() }),
108
- debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: new decimal_js_1.default(tokenInfo.borrowsStable.toString()).add(tokenInfo.borrowsVariable.toString()).toString() }),
114
+ collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ? assetAddr : asset]: tokenInfo.balance.toString() }),
115
+ debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? assetAddr : asset]: new decimal_js_1.default(tokenInfo.borrowsStable.toString()).add(tokenInfo.borrowsVariable.toString()).toString() }),
109
116
  };
110
117
  });
111
118
  return balances;
@@ -15,7 +15,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.getAaveV3FullPositionData = exports.getAaveV3AccountData = exports.getAaveV3AccountBalances = exports.EMPTY_AAVE_DATA = exports.getAaveV3MarketData = exports.aaveV3EmodeCategoriesMapping = exports.aaveV3CalculateDiscountRate = exports.test = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const tokens_1 = require("@defisaver/tokens");
18
- const contracts_1 = require("../contracts");
18
+ const contracts_1 = __importDefault(require("../config/contracts"));
19
+ const contracts_2 = require("../contracts");
19
20
  const utils_1 = require("../services/utils");
20
21
  const common_1 = require("../types/common");
21
22
  const staking_1 = require("../staking");
@@ -25,7 +26,7 @@ const moneymarket_1 = require("../moneymarket");
25
26
  const aaveHelpers_1 = require("../helpers/aaveHelpers");
26
27
  const aave_1 = require("../markets/aave");
27
28
  const test = (web3, network) => {
28
- const contract = (0, contracts_1.AaveV3ViewContract)(web3, 1);
29
+ const contract = (0, contracts_2.AaveV3ViewContract)(web3, 1);
29
30
  return contract.methods.AAVE_REFERRAL_CODE().call();
30
31
  };
31
32
  exports.test = test;
@@ -79,12 +80,12 @@ function getAaveV3MarketData(web3, network, market, defaultWeb3) {
79
80
  return __awaiter(this, void 0, void 0, function* () {
80
81
  const _addresses = market.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a), network).address);
81
82
  const isL2 = (0, utils_1.isLayer2Network)(network);
82
- const loanInfoContract = (0, contracts_1.AaveV3ViewContract)(web3, network);
83
- const aaveIncentivesContract = (0, contracts_1.AaveIncentiveDataProviderV3Contract)(web3, network);
83
+ const loanInfoContract = (0, contracts_2.AaveV3ViewContract)(web3, network);
84
+ const aaveIncentivesContract = (0, contracts_2.AaveIncentiveDataProviderV3Contract)(web3, network);
84
85
  const marketAddress = market.providerAddress;
85
- const GhoDiscountRateStrategyAddress = (0, contracts_1.getConfigContractAddress)('GhoDiscountRateStrategy', common_1.NetworkNumber.Eth);
86
- const GhoDiscountRateStrategyAbi = (0, contracts_1.getConfigContractAbi)('GhoDiscountRateStrategy');
87
- const GhoTokenAbi = (0, contracts_1.getConfigContractAbi)('GHO');
86
+ const GhoDiscountRateStrategyAddress = (0, contracts_2.getConfigContractAddress)('GhoDiscountRateStrategy', common_1.NetworkNumber.Eth);
87
+ const GhoDiscountRateStrategyAbi = (0, contracts_2.getConfigContractAbi)('GhoDiscountRateStrategy');
88
+ const GhoTokenAbi = (0, contracts_2.getConfigContractAbi)('GHO');
88
89
  const multicallCallsObject = [
89
90
  {
90
91
  target: GhoDiscountRateStrategyAddress,
@@ -112,7 +113,7 @@ function getAaveV3MarketData(web3, network, market, defaultWeb3) {
112
113
  params: [],
113
114
  },
114
115
  ];
115
- const ghoContract = (0, contracts_1.GhoTokenContract)(web3, network);
116
+ const ghoContract = (0, contracts_2.GhoTokenContract)(web3, network);
116
117
  // eslint-disable-next-line prefer-const
117
118
  let [loanInfo, isBorrowAllowed, multiRes] = yield Promise.all([
118
119
  loanInfoContract.methods.getFullTokensInfo(marketAddress, _addresses).call(),
@@ -258,10 +259,15 @@ const getAaveV3AccountBalances = (web3, network, block, addressMapping, address)
258
259
  if (!address) {
259
260
  return balances;
260
261
  }
261
- const loanInfoContract = (0, contracts_1.AaveV3ViewContract)(web3, network, block);
262
+ const loanInfoContract = (0, contracts_2.AaveV3ViewContract)(web3, network, block);
262
263
  const market = (0, aave_1.AAVE_V3)(network);
263
264
  const marketAddress = market.providerAddress;
264
- const _addresses = market.assets.map(a => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a), network).address);
265
+ const protocolDataProviderContract = new web3.eth.Contract(
266
+ // @ts-ignore
267
+ contracts_1.default[market.protocolData].abi, market.protocolDataAddress);
268
+ const reserveTokens = yield protocolDataProviderContract.methods.getAllReservesTokens().call({}, block);
269
+ const symbols = reserveTokens.map(({ symbol }) => symbol);
270
+ const _addresses = reserveTokens.map(({ tokenAddress }) => tokenAddress);
265
271
  // split addresses in half to avoid gas limit by multicall
266
272
  const middleAddressIndex = Math.floor(_addresses.length / 2);
267
273
  const multicallData = [
@@ -279,10 +285,11 @@ const getAaveV3AccountBalances = (web3, network, block, addressMapping, address)
279
285
  const multicallRes = yield (0, multicall_1.multicall)(multicallData, web3, network, block);
280
286
  const loanInfo = [...multicallRes[0][0], ...multicallRes[1][0]];
281
287
  loanInfo.forEach((tokenInfo, i) => {
282
- const asset = (0, utils_1.wethToEth)(market.assets[i]);
288
+ const asset = (0, utils_1.wethToEth)(symbols[i]);
289
+ const assetAddr = (0, utils_1.wethToEthByAddress)(_addresses[i], network).toLowerCase();
283
290
  balances = {
284
- collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: tokenInfo.balance.toString() }),
285
- debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: new decimal_js_1.default(tokenInfo.borrowsStable.toString()).add(tokenInfo.borrowsVariable.toString()).toString() }),
291
+ collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ? assetAddr : asset]: tokenInfo.balance.toString() }),
292
+ debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? assetAddr : asset]: new decimal_js_1.default(tokenInfo.borrowsStable.toString()).add(tokenInfo.borrowsVariable.toString()).toString() }),
286
293
  };
287
294
  });
288
295
  return balances;
@@ -299,11 +306,11 @@ const getAaveV3AccountData = (web3, network, address, extractedState) => __await
299
306
  return payload;
300
307
  }
301
308
  const isL2 = (0, utils_1.isLayer2Network)(network);
302
- const loanInfoContract = (0, contracts_1.AaveV3ViewContract)(web3, network);
309
+ const loanInfoContract = (0, contracts_2.AaveV3ViewContract)(web3, network);
303
310
  const marketAddress = market.providerAddress;
304
311
  const _addresses = market.assets.map((a) => (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(a), network).address);
305
312
  const middleAddressIndex = Math.floor(_addresses.length / 2); // split addresses in half to avoid gas limit by multicall
306
- const LendingPoolAbi = (0, contracts_1.getConfigContractAbi)(market.lendingPool);
313
+ const LendingPoolAbi = (0, contracts_2.getConfigContractAbi)(market.lendingPool);
307
314
  const multicallData = [
308
315
  {
309
316
  target: market.lendingPoolAddress,
@@ -16,6 +16,7 @@ export declare const EMPTY_COMPOUND_DATA: {
16
16
  borrowStableSupplyUnstable: boolean;
17
17
  };
18
18
  export declare const getCollateralAssetsAddresses: (web3: Web3, network: NetworkNumber, account: string) => Promise<string[]>;
19
+ export declare const getAllMarketAddresses: (web3: Web3, network: NetworkNumber, block: Blockish) => Promise<string[]>;
19
20
  export declare const getCompoundV2AccountBalances: (web3: Web3, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress) => Promise<PositionBalances>;
20
21
  export declare const getCompoundV2AccountData: (web3: Web3, network: NetworkNumber, address: string, assetsData: CompoundV2AssetsData) => Promise<CompoundV2PositionData>;
21
22
  export declare const getCompoundV2FullPositionData: (web3: Web3, network: NetworkNumber, address: string) => Promise<CompoundV2PositionData>;
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getCompoundV2FullPositionData = exports.getCompoundV2AccountData = exports.getCompoundV2AccountBalances = exports.getCollateralAssetsAddresses = exports.EMPTY_COMPOUND_DATA = exports.getCompoundV2MarketsData = void 0;
15
+ exports.getCompoundV2FullPositionData = exports.getCompoundV2AccountData = exports.getCompoundV2AccountBalances = exports.getAllMarketAddresses = exports.getCollateralAssetsAddresses = exports.EMPTY_COMPOUND_DATA = exports.getCompoundV2MarketsData = void 0;
16
16
  const tokens_1 = require("@defisaver/tokens");
17
17
  const decimal_js_1 = __importDefault(require("decimal.js"));
18
18
  const constants_1 = require("../constants");
@@ -96,6 +96,11 @@ const getCollateralAssetsAddresses = (web3, network, account) => __awaiter(void
96
96
  return contract.methods.getAssetsIn(account).call();
97
97
  });
98
98
  exports.getCollateralAssetsAddresses = getCollateralAssetsAddresses;
99
+ const getAllMarketAddresses = (web3, network, block) => __awaiter(void 0, void 0, void 0, function* () {
100
+ const contract = (0, contracts_1.ComptrollerContract)(web3, network);
101
+ return contract.methods.getAllMarkets().call({}, block);
102
+ });
103
+ exports.getAllMarketAddresses = getAllMarketAddresses;
99
104
  const getCompoundV2AccountBalances = (web3, network, block, addressMapping, address) => __awaiter(void 0, void 0, void 0, function* () {
100
105
  let balances = {
101
106
  collateral: {},
@@ -104,20 +109,22 @@ const getCompoundV2AccountBalances = (web3, network, block, addressMapping, addr
104
109
  if (!address) {
105
110
  return balances;
106
111
  }
112
+ const assets = yield (0, exports.getAllMarketAddresses)(web3, network, block);
113
+ const assetInfo = assets.map(a => (0, tokens_1.getAssetInfoByAddress)(a, network));
107
114
  const loanInfoContract = (0, contracts_1.CompoundLoanInfoContract)(web3, network, block);
108
- const loanInfo = yield loanInfoContract.methods.getTokenBalances(address, marketsAssets_1.compoundV2CollateralAssets.map(a => a.address)).call({}, block);
115
+ const loanInfo = yield loanInfoContract.methods.getTokenBalances(address, assets).call({}, block);
109
116
  loanInfo.balances.forEach((weiAmount, i) => {
110
- const asset = (0, utils_1.wethToEth)(marketsAssets_1.compoundV2CollateralAssets[i].symbol === 'cWBTC Legacy'
111
- ? `${marketsAssets_1.compoundV2CollateralAssets[i].underlyingAsset} Legacy`
112
- : marketsAssets_1.compoundV2CollateralAssets[i].underlyingAsset);
117
+ const asset = (0, utils_1.wethToEth)(assetInfo[i].symbol === 'cWBTC Legacy'
118
+ ? `${assetInfo[i].underlyingAsset} Legacy`
119
+ : assetInfo[i].underlyingAsset);
113
120
  balances = {
114
121
  collateral: Object.assign(Object.assign({}, balances.collateral), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: weiAmount.toString() }),
115
122
  };
116
123
  });
117
124
  loanInfo.borrows.forEach((weiAmount, i) => {
118
- const asset = (0, utils_1.wethToEth)(marketsAssets_1.compoundV2CollateralAssets[i].symbol === 'cWBTC Legacy'
119
- ? `${marketsAssets_1.compoundV2CollateralAssets[i].underlyingAsset} Legacy`
120
- : marketsAssets_1.compoundV2CollateralAssets[i].underlyingAsset);
125
+ const asset = (0, utils_1.wethToEth)(assetInfo[i].symbol === 'cWBTC Legacy'
126
+ ? `${assetInfo[i].underlyingAsset} Legacy`
127
+ : assetInfo[i].underlyingAsset);
121
128
  balances = Object.assign(Object.assign({}, balances), { debt: Object.assign(Object.assign({}, balances.debt), { [addressMapping ? (0, tokens_1.getAssetInfo)(asset, network).address.toLowerCase() : asset]: weiAmount.toString() }) });
122
129
  });
123
130
  return balances;
@@ -68,6 +68,11 @@ const getCompoundV3MarketsData = (web3, network, selectedMarket, defaultWeb3) =>
68
68
  coll.incentiveSupplyApy = yield (0, staking_1.getCbETHApr)(defaultWeb3);
69
69
  coll.incentiveSupplyToken = 'cbETH';
70
70
  }
71
+ if (coll.symbol === 'rETH') {
72
+ // eslint-disable-next-line no-await-in-loop
73
+ coll.incentiveSupplyApy = yield (0, staking_1.getREthApr)(defaultWeb3);
74
+ coll.incentiveSupplyToken = 'rETH';
75
+ }
71
76
  }
72
77
  }
73
78
  const base = (0, compoundHelpers_1.formatBaseData)(data[0].baseToken, network, baseAssetPrice);