@defisaver/positions-sdk 0.0.166 → 0.0.167

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.
@@ -66,7 +66,7 @@ const getAaveV2MarketsData = (web3, network, selectedMarket, mainnetWeb3) => __a
66
66
  }));
67
67
  const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
68
68
  if (stEthMarket) {
69
- stEthMarket.incentiveSupplyApy = yield (0, staking_1.getStETHApr)(mainnetWeb3);
69
+ stEthMarket.incentiveSupplyApy = yield (0, staking_1.getStETHApy)(mainnetWeb3);
70
70
  stEthMarket.incentiveSupplyToken = 'stETH';
71
71
  }
72
72
  const payload = {};
@@ -93,7 +93,7 @@ const getMorphoAaveV2MarketsData = (web3, network, mainnetWeb3) => __awaiter(voi
93
93
  });
94
94
  const stEthMarket = assetsData.find(({ symbol }) => symbol === 'stETH');
95
95
  if (stEthMarket) {
96
- stEthMarket.incentiveSupplyApy = yield (0, staking_1.getStETHApr)(mainnetWeb3);
96
+ stEthMarket.incentiveSupplyApy = yield (0, staking_1.getStETHApy)(mainnetWeb3);
97
97
  stEthMarket.incentiveSupplyToken = 'stETH';
98
98
  }
99
99
  const payload = {};
@@ -1,12 +1,12 @@
1
1
  import Web3 from 'web3';
2
2
  import { MMAssetsData, MMUsedAssets } from '../types/common';
3
- export declare const getStETHApr: (web3: Web3, fromBlock?: number, blockNumber?: 'latest' | number) => Promise<any>;
4
- export declare const getCbETHApr: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
5
- export declare const getREthApr: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
3
+ export declare const getStETHApy: (web3: Web3, fromBlock?: number, blockNumber?: 'latest' | number) => Promise<string>;
4
+ export declare const getCbETHApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
5
+ export declare const getREthApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
6
6
  export declare const getDsrApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
7
7
  export declare const getSsrApy: () => Promise<string>;
8
8
  export declare const STAKING_ASSETS: string[];
9
- export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => Promise<any> | "0" | undefined;
9
+ export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => "0" | Promise<any> | undefined;
10
10
  export declare const calculateInterestEarned: (principal: string, interest: string, type: string, apy?: boolean) => number;
11
11
  export declare const calculateNetApy: (usedAssets: MMUsedAssets, assetsData: MMAssetsData, isMorpho?: boolean) => {
12
12
  netApy: string;
@@ -12,13 +12,14 @@ 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.getStETHByWstETHMultiple = exports.getStETHByWstETH = exports.getWstETHByStETH = exports.calculateNetApy = exports.calculateInterestEarned = exports.getStakingApy = exports.STAKING_ASSETS = exports.getSsrApy = exports.getDsrApy = exports.getREthApr = exports.getCbETHApr = exports.getStETHApr = void 0;
15
+ exports.getStETHByWstETHMultiple = exports.getStETHByWstETH = exports.getWstETHByStETH = exports.calculateNetApy = exports.calculateInterestEarned = exports.getStakingApy = exports.STAKING_ASSETS = exports.getSsrApy = exports.getDsrApy = exports.getREthApy = exports.getCbETHApy = exports.getStETHApy = void 0;
16
16
  const decimal_js_1 = __importDefault(require("decimal.js"));
17
17
  const contracts_1 = require("../contracts");
18
18
  const common_1 = require("../types/common");
19
19
  const constants_1 = require("../constants");
20
20
  const multicall_1 = require("../multicall");
21
- const getStETHApr = (web3, fromBlock = 17900000, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
21
+ const moneymarket_1 = require("../moneymarket");
22
+ const getStETHApy = (web3, fromBlock = 17900000, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
22
23
  try {
23
24
  const tokenRebasedEvents = yield (0, contracts_1.LidoContract)(web3, common_1.NetworkNumber.Eth).getPastEvents('TokenRebased', { fromBlock, toBlock: blockNumber });
24
25
  tokenRebasedEvents.sort((a, b) => b.blockNumber - a.blockNumber); // sort from highest to lowest block number
@@ -30,17 +31,17 @@ const getStETHApr = (web3, fromBlock = 17900000, blockNumber = 'latest') => __aw
30
31
  .div(event.timeElapsed.toString()).mul(100)
31
32
  .toNumber();
32
33
  });
33
- return aprs.reduce((a, b) => a + b, 0) / aprs.length;
34
+ return (0, moneymarket_1.aprToApy)(aprs.reduce((a, b) => a + b, 0) / aprs.length);
34
35
  }
35
36
  catch (e) {
36
37
  console.warn('Failed to fetch stETH APY from events, falling back to Lido API');
37
38
  const res = yield fetch('https://eth-api.lido.fi/v1/protocol/steth/apr/sma');
38
39
  const data = yield res.json();
39
- return data.data.smaApr;
40
+ return (0, moneymarket_1.aprToApy)(data.data.smaApr);
40
41
  }
41
42
  });
42
- exports.getStETHApr = getStETHApr;
43
- const getCbETHApr = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
43
+ exports.getStETHApy = getStETHApy;
44
+ const getCbETHApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
44
45
  let currentBlock = blockNumber;
45
46
  if (blockNumber === 'latest')
46
47
  currentBlock = yield web3.eth.getBlockNumber();
@@ -55,10 +56,10 @@ const getCbETHApr = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0,
55
56
  .mul(constants_1.BLOCKS_IN_A_YEAR / blockDiff)
56
57
  .mul(100)
57
58
  .toString();
58
- return apr;
59
+ return (0, moneymarket_1.aprToApy)(apr);
59
60
  });
60
- exports.getCbETHApr = getCbETHApr;
61
- const getREthApr = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
61
+ exports.getCbETHApy = getCbETHApy;
62
+ const getREthApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
62
63
  let currentBlock = blockNumber;
63
64
  if (blockNumber === 'latest')
64
65
  currentBlock = yield web3.eth.getBlockNumber();
@@ -73,9 +74,9 @@ const getREthApr = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, v
73
74
  .mul(constants_1.BLOCKS_IN_A_YEAR / blockDiff)
74
75
  .mul(100)
75
76
  .toString();
76
- return apr;
77
+ return (0, moneymarket_1.aprToApy)(apr);
77
78
  });
78
- exports.getREthApr = getREthApr;
79
+ exports.getREthApy = getREthApy;
79
80
  const getDsrApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
80
81
  const potContract = (0, contracts_1.PotContract)(web3, common_1.NetworkNumber.Eth);
81
82
  return new decimal_js_1.default(yield potContract.methods.dsr().call())
@@ -113,6 +114,10 @@ const getSuperOETHApy = () => __awaiter(void 0, void 0, void 0, function* () {
113
114
  const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function* () {
114
115
  const res = yield fetch(`https://app.defisaver.com/api/staking/apy?asset=${asset}`);
115
116
  const data = yield res.json();
117
+ // if our server returns apr, transform it into apy
118
+ if (['weETH'].includes(asset)) {
119
+ return (0, moneymarket_1.aprToApy)(data.apy);
120
+ }
116
121
  return data.apy;
117
122
  });
118
123
  exports.STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH', 'wrsETH', 'wsuperOETHb', 'sUSDS'];
@@ -120,11 +125,11 @@ const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefine
120
125
  console.log('getStakingApy', asset, blockNumber, fromBlock);
121
126
  try {
122
127
  if (asset === 'stETH' || asset === 'wstETH')
123
- return (0, exports.getStETHApr)(web3, fromBlock, blockNumber);
128
+ return (0, exports.getStETHApy)(web3, fromBlock, blockNumber);
124
129
  if (asset === 'cbETH')
125
- return (0, exports.getCbETHApr)(web3, blockNumber);
130
+ return (0, exports.getCbETHApy)(web3, blockNumber);
126
131
  if (asset === 'rETH')
127
- return (0, exports.getREthApr)(web3, blockNumber);
132
+ return (0, exports.getREthApy)(web3, blockNumber);
128
133
  if (asset === 'sDAI')
129
134
  return (0, exports.getDsrApy)(web3);
130
135
  if (asset === 'sUSDe')
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import Dec from 'decimal.js';
11
11
  import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
12
- import { calculateNetApy, getStETHApr } from '../staking';
12
+ import { calculateNetApy, getStETHApy } from '../staking';
13
13
  import { ethToWeth, wethToEth, wethToEthByAddress } from '../services/utils';
14
14
  import { AaveLoanInfoV2Contract, createContractWrapper } from '../contracts';
15
15
  import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
@@ -60,7 +60,7 @@ export const getAaveV2MarketsData = (web3, network, selectedMarket, mainnetWeb3)
60
60
  }));
61
61
  const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
62
62
  if (stEthMarket) {
63
- stEthMarket.incentiveSupplyApy = yield getStETHApr(mainnetWeb3);
63
+ stEthMarket.incentiveSupplyApy = yield getStETHApy(mainnetWeb3);
64
64
  stEthMarket.incentiveSupplyToken = 'stETH';
65
65
  }
66
66
  const payload = {};
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { assetAmountInEth, getAssetInfoByAddress } from '@defisaver/tokens';
11
11
  import Dec from 'decimal.js';
12
12
  import { wethToEthByAddress } from '../services/utils';
13
- import { getStETHApr } from '../staking';
13
+ import { getStETHApy } from '../staking';
14
14
  import { MorphoAaveV2ViewContract } from '../contracts';
15
15
  import { AaveVersions, } from '../types';
16
16
  import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
@@ -87,7 +87,7 @@ export const getMorphoAaveV2MarketsData = (web3, network, mainnetWeb3) => __awai
87
87
  });
88
88
  const stEthMarket = assetsData.find(({ symbol }) => symbol === 'stETH');
89
89
  if (stEthMarket) {
90
- stEthMarket.incentiveSupplyApy = yield getStETHApr(mainnetWeb3);
90
+ stEthMarket.incentiveSupplyApy = yield getStETHApy(mainnetWeb3);
91
91
  stEthMarket.incentiveSupplyToken = 'stETH';
92
92
  }
93
93
  const payload = {};
@@ -1,12 +1,12 @@
1
1
  import Web3 from 'web3';
2
2
  import { MMAssetsData, MMUsedAssets } from '../types/common';
3
- export declare const getStETHApr: (web3: Web3, fromBlock?: number, blockNumber?: 'latest' | number) => Promise<any>;
4
- export declare const getCbETHApr: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
5
- export declare const getREthApr: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
3
+ export declare const getStETHApy: (web3: Web3, fromBlock?: number, blockNumber?: 'latest' | number) => Promise<string>;
4
+ export declare const getCbETHApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
5
+ export declare const getREthApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
6
6
  export declare const getDsrApy: (web3: Web3, blockNumber?: 'latest' | number) => Promise<string>;
7
7
  export declare const getSsrApy: () => Promise<string>;
8
8
  export declare const STAKING_ASSETS: string[];
9
- export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => Promise<any> | "0" | undefined;
9
+ export declare const getStakingApy: (asset: string, web3: Web3, blockNumber?: 'latest' | number, fromBlock?: number | undefined) => "0" | Promise<any> | undefined;
10
10
  export declare const calculateInterestEarned: (principal: string, interest: string, type: string, apy?: boolean) => number;
11
11
  export declare const calculateNetApy: (usedAssets: MMUsedAssets, assetsData: MMAssetsData, isMorpho?: boolean) => {
12
12
  netApy: string;
@@ -12,7 +12,8 @@ import { CbEthContract, LidoContract, PotContract, REthContract, wstETHContract,
12
12
  import { NetworkNumber } from '../types/common';
13
13
  import { BLOCKS_IN_A_YEAR, SECONDS_PER_YEAR, AVG_BLOCK_TIME } from '../constants';
14
14
  import { multicall } from '../multicall';
15
- export const getStETHApr = (web3, fromBlock = 17900000, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
15
+ import { aprToApy } from '../moneymarket';
16
+ export const getStETHApy = (web3, fromBlock = 17900000, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
16
17
  try {
17
18
  const tokenRebasedEvents = yield LidoContract(web3, NetworkNumber.Eth).getPastEvents('TokenRebased', { fromBlock, toBlock: blockNumber });
18
19
  tokenRebasedEvents.sort((a, b) => b.blockNumber - a.blockNumber); // sort from highest to lowest block number
@@ -24,16 +25,16 @@ export const getStETHApr = (web3, fromBlock = 17900000, blockNumber = 'latest')
24
25
  .div(event.timeElapsed.toString()).mul(100)
25
26
  .toNumber();
26
27
  });
27
- return aprs.reduce((a, b) => a + b, 0) / aprs.length;
28
+ return aprToApy(aprs.reduce((a, b) => a + b, 0) / aprs.length);
28
29
  }
29
30
  catch (e) {
30
31
  console.warn('Failed to fetch stETH APY from events, falling back to Lido API');
31
32
  const res = yield fetch('https://eth-api.lido.fi/v1/protocol/steth/apr/sma');
32
33
  const data = yield res.json();
33
- return data.data.smaApr;
34
+ return aprToApy(data.data.smaApr);
34
35
  }
35
36
  });
36
- export const getCbETHApr = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
37
+ export const getCbETHApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
37
38
  let currentBlock = blockNumber;
38
39
  if (blockNumber === 'latest')
39
40
  currentBlock = yield web3.eth.getBlockNumber();
@@ -48,9 +49,9 @@ export const getCbETHApr = (web3, blockNumber = 'latest') => __awaiter(void 0, v
48
49
  .mul(BLOCKS_IN_A_YEAR / blockDiff)
49
50
  .mul(100)
50
51
  .toString();
51
- return apr;
52
+ return aprToApy(apr);
52
53
  });
53
- export const getREthApr = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
54
+ export const getREthApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
54
55
  let currentBlock = blockNumber;
55
56
  if (blockNumber === 'latest')
56
57
  currentBlock = yield web3.eth.getBlockNumber();
@@ -65,7 +66,7 @@ export const getREthApr = (web3, blockNumber = 'latest') => __awaiter(void 0, vo
65
66
  .mul(BLOCKS_IN_A_YEAR / blockDiff)
66
67
  .mul(100)
67
68
  .toString();
68
- return apr;
69
+ return aprToApy(apr);
69
70
  });
70
71
  export const getDsrApy = (web3, blockNumber = 'latest') => __awaiter(void 0, void 0, void 0, function* () {
71
72
  const potContract = PotContract(web3, NetworkNumber.Eth);
@@ -102,6 +103,10 @@ const getSuperOETHApy = () => __awaiter(void 0, void 0, void 0, function* () {
102
103
  const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function* () {
103
104
  const res = yield fetch(`https://app.defisaver.com/api/staking/apy?asset=${asset}`);
104
105
  const data = yield res.json();
106
+ // if our server returns apr, transform it into apy
107
+ if (['weETH'].includes(asset)) {
108
+ return aprToApy(data.apy);
109
+ }
105
110
  return data.apy;
106
111
  });
107
112
  export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH', 'wrsETH', 'wsuperOETHb', 'sUSDS'];
@@ -109,11 +114,11 @@ export const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = u
109
114
  console.log('getStakingApy', asset, blockNumber, fromBlock);
110
115
  try {
111
116
  if (asset === 'stETH' || asset === 'wstETH')
112
- return getStETHApr(web3, fromBlock, blockNumber);
117
+ return getStETHApy(web3, fromBlock, blockNumber);
113
118
  if (asset === 'cbETH')
114
- return getCbETHApr(web3, blockNumber);
119
+ return getCbETHApy(web3, blockNumber);
115
120
  if (asset === 'rETH')
116
- return getREthApr(web3, blockNumber);
121
+ return getREthApy(web3, blockNumber);
117
122
  if (asset === 'sDAI')
118
123
  return getDsrApy(web3);
119
124
  if (asset === 'sUSDe')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "0.0.166",
3
+ "version": "0.0.167",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -4,7 +4,7 @@ import { assetAmountInEth, getAssetInfo } from '@defisaver/tokens';
4
4
  import {
5
5
  Blockish, EthAddress, NetworkNumber, PositionBalances,
6
6
  } from '../types/common';
7
- import { calculateNetApy, getStETHApr } from '../staking';
7
+ import { calculateNetApy, getStETHApy } from '../staking';
8
8
  import { ethToWeth, wethToEth, wethToEthByAddress } from '../services/utils';
9
9
  import { AaveLoanInfoV2Contract, createContractWrapper } from '../contracts';
10
10
  import { aprToApy, calculateBorrowingAssetLimit } from '../moneymarket';
@@ -60,7 +60,7 @@ export const getAaveV2MarketsData = async (web3: Web3, network: NetworkNumber, s
60
60
 
61
61
  const stEthMarket = markets.find(({ symbol }) => symbol === 'stETH');
62
62
  if (stEthMarket) {
63
- stEthMarket.incentiveSupplyApy = await getStETHApr(mainnetWeb3);
63
+ stEthMarket.incentiveSupplyApy = await getStETHApy(mainnetWeb3);
64
64
  stEthMarket.incentiveSupplyToken = 'stETH';
65
65
  }
66
66
 
@@ -5,7 +5,7 @@ import { wethToEthByAddress } from '../services/utils';
5
5
  import {
6
6
  Blockish, EthAddress, NetworkNumber, PositionBalances,
7
7
  } from '../types/common';
8
- import { getStETHApr } from '../staking';
8
+ import { getStETHApy } from '../staking';
9
9
  import { MorphoAaveV2ViewContract } from '../contracts';
10
10
  import {
11
11
  AavePositionData,
@@ -103,7 +103,7 @@ export const getMorphoAaveV2MarketsData = async (web3: Web3, network: NetworkNum
103
103
 
104
104
  const stEthMarket = assetsData.find(({ symbol }) => symbol === 'stETH');
105
105
  if (stEthMarket) {
106
- stEthMarket.incentiveSupplyApy = await getStETHApr(mainnetWeb3);
106
+ stEthMarket.incentiveSupplyApy = await getStETHApy(mainnetWeb3);
107
107
  stEthMarket.incentiveSupplyToken = 'stETH';
108
108
  }
109
109
 
@@ -7,9 +7,10 @@ import { MMAssetsData, MMUsedAssets, NetworkNumber } from '../types/common';
7
7
  import { ContractEventLog } from '../types/contracts/generated/types';
8
8
  import { BLOCKS_IN_A_YEAR, SECONDS_PER_YEAR, AVG_BLOCK_TIME } from '../constants';
9
9
  import { multicall } from '../multicall';
10
+ import { aprToApy } from '../moneymarket';
10
11
 
11
12
 
12
- export const getStETHApr = async (web3: Web3, fromBlock = 17900000, blockNumber: 'latest' | number = 'latest') => {
13
+ export const getStETHApy = async (web3: Web3, fromBlock = 17900000, blockNumber: 'latest' | number = 'latest') => {
13
14
  try {
14
15
  const tokenRebasedEvents: ContractEventLog<{ [key: string]: any }>[] = await LidoContract(web3, NetworkNumber.Eth).getPastEvents('TokenRebased', { fromBlock, toBlock: blockNumber });
15
16
  tokenRebasedEvents.sort((a, b) => b.blockNumber - a.blockNumber); // sort from highest to lowest block number
@@ -21,17 +22,16 @@ export const getStETHApr = async (web3: Web3, fromBlock = 17900000, blockNumber:
21
22
  .div(event.timeElapsed.toString()).mul(100)
22
23
  .toNumber();
23
24
  });
24
- return aprs.reduce((a, b) => a + b, 0) / aprs.length;
25
+ return aprToApy(aprs.reduce((a, b) => a + b, 0) / aprs.length);
25
26
  } catch (e) {
26
27
  console.warn('Failed to fetch stETH APY from events, falling back to Lido API');
27
28
  const res = await fetch('https://eth-api.lido.fi/v1/protocol/steth/apr/sma');
28
29
  const data = await res.json();
29
- return data.data.smaApr;
30
+ return aprToApy(data.data.smaApr);
30
31
  }
31
32
  };
32
33
 
33
-
34
- export const getCbETHApr = async (web3: Web3, blockNumber: 'latest' | number = 'latest') => {
34
+ export const getCbETHApy = async (web3: Web3, blockNumber: 'latest' | number = 'latest') => {
35
35
  let currentBlock = blockNumber;
36
36
  if (blockNumber === 'latest') currentBlock = await web3.eth.getBlockNumber();
37
37
  const blockDiff = 6 * 24 * 60 * 60 / AVG_BLOCK_TIME;
@@ -45,11 +45,11 @@ export const getCbETHApr = async (web3: Web3, blockNumber: 'latest' | number = '
45
45
  .mul(BLOCKS_IN_A_YEAR / blockDiff)
46
46
  .mul(100)
47
47
  .toString();
48
- return apr;
48
+ return aprToApy(apr);
49
49
  };
50
50
 
51
51
 
52
- export const getREthApr = async (web3: Web3, blockNumber: 'latest' | number = 'latest') => {
52
+ export const getREthApy = async (web3: Web3, blockNumber: 'latest' | number = 'latest') => {
53
53
  let currentBlock = blockNumber;
54
54
  if (blockNumber === 'latest') currentBlock = await web3.eth.getBlockNumber();
55
55
  const blockDiff = 8 * 24 * 60 * 60 / AVG_BLOCK_TIME;
@@ -64,7 +64,7 @@ export const getREthApr = async (web3: Web3, blockNumber: 'latest' | number = 'l
64
64
  .mul(100)
65
65
  .toString();
66
66
 
67
- return apr;
67
+ return aprToApy(apr);
68
68
  };
69
69
 
70
70
  export const getDsrApy = async (web3: Web3, blockNumber: 'latest' | number = 'latest') => {
@@ -106,6 +106,10 @@ const getSuperOETHApy = async () => {
106
106
  const getApyFromDfsApi = async (asset: string) => {
107
107
  const res = await fetch(`https://app.defisaver.com/api/staking/apy?asset=${asset}`);
108
108
  const data = await res.json();
109
+ // if our server returns apr, transform it into apy
110
+ if (['weETH'].includes(asset)) {
111
+ return aprToApy(data.apy);
112
+ }
109
113
  return data.apy;
110
114
  };
111
115
 
@@ -114,9 +118,9 @@ export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weET
114
118
  export const getStakingApy = (asset: string, web3: Web3, blockNumber: 'latest' | number = 'latest', fromBlock: number | undefined = undefined) => {
115
119
  console.log('getStakingApy', asset, blockNumber, fromBlock);
116
120
  try {
117
- if (asset === 'stETH' || asset === 'wstETH') return getStETHApr(web3, fromBlock, blockNumber);
118
- if (asset === 'cbETH') return getCbETHApr(web3, blockNumber);
119
- if (asset === 'rETH') return getREthApr(web3, blockNumber);
121
+ if (asset === 'stETH' || asset === 'wstETH') return getStETHApy(web3, fromBlock, blockNumber);
122
+ if (asset === 'cbETH') return getCbETHApy(web3, blockNumber);
123
+ if (asset === 'rETH') return getREthApy(web3, blockNumber);
120
124
  if (asset === 'sDAI') return getDsrApy(web3);
121
125
  if (asset === 'sUSDe') return getApyFromDfsApi('sUSDe');
122
126
  if (asset === 'weETH') return getApyFromDfsApi('weETH');