@defisaver/positions-sdk 0.0.102 → 0.0.103

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.
@@ -1,9 +1,10 @@
1
- import { LlamaLendAggregatedPositionData, LlamaLendMarketData, LlamaLendUsedAssets } from '../../types';
1
+ import { LlamaLendAggregatedPositionData, LlamaLendAssetsData, LlamaLendMarketData, LlamaLendUsedAssets } from '../../types';
2
2
  import { NetworkNumber } from '../../types/common';
3
- export declare const getLlamaLendAggregatedData: ({ loanExists, usedAssets, network, selectedMarket, numOfBands, ...rest }: {
3
+ export declare const getLlamaLendAggregatedData: ({ loanExists, usedAssets, network, selectedMarket, numOfBands, assetsData, ...rest }: {
4
4
  loanExists: boolean;
5
5
  usedAssets: LlamaLendUsedAssets;
6
6
  network: NetworkNumber;
7
7
  selectedMarket: LlamaLendMarketData;
8
8
  numOfBands: number | string;
9
+ assetsData: LlamaLendAssetsData;
9
10
  }) => LlamaLendAggregatedPositionData;
@@ -18,9 +18,10 @@ exports.getLlamaLendAggregatedData = void 0;
18
18
  const decimal_js_1 = __importDefault(require("decimal.js"));
19
19
  const moneymarket_1 = require("../../moneymarket");
20
20
  const utils_1 = require("../../services/utils");
21
+ const staking_1 = require("../../staking");
21
22
  const getLlamaLendAggregatedData = (_a) => {
22
23
  var _b;
23
- var { loanExists, usedAssets, network, selectedMarket, numOfBands } = _a, rest = __rest(_a, ["loanExists", "usedAssets", "network", "selectedMarket", "numOfBands"]);
24
+ var { loanExists, usedAssets, network, selectedMarket, numOfBands, assetsData } = _a, rest = __rest(_a, ["loanExists", "usedAssets", "network", "selectedMarket", "numOfBands", "assetsData"]);
24
25
  const collAsset = selectedMarket.collAsset;
25
26
  const debtAsset = selectedMarket.baseAsset;
26
27
  const payload = {};
@@ -29,6 +30,10 @@ const getLlamaLendAggregatedData = (_a) => {
29
30
  payload.suppliedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ collateral }) => collateral, ({ suppliedUsd }) => suppliedUsd);
30
31
  payload.borrowedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
31
32
  payload.suppliedForYieldUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedForYield }) => suppliedForYield || '0');
33
+ const { netApy, incentiveUsd, totalInterestUsd } = (0, staking_1.calculateNetApy)(usedAssets, assetsData);
34
+ payload.netApy = netApy;
35
+ payload.incentiveUsd = incentiveUsd;
36
+ payload.totalInterestUsd = totalInterestUsd;
32
37
  payload.ratio = loanExists
33
38
  ? new decimal_js_1.default(payload.suppliedUsd)
34
39
  .dividedBy(payload.borrowedUsd)
@@ -1,7 +1,7 @@
1
1
  import Web3 from 'web3';
2
2
  import { LlamaLendGlobalMarketData, LlamaLendMarketData, LlamaLendUserData } from '../types';
3
3
  import { Blockish, EthAddress, NetworkNumber, PositionBalances } from '../types/common';
4
- export declare const getLlamaLendGlobalData: (web3: Web3, network: NetworkNumber, selectedMarket: LlamaLendMarketData) => Promise<LlamaLendGlobalMarketData>;
4
+ export declare const getLlamaLendGlobalData: (web3: Web3, network: NetworkNumber, selectedMarket: LlamaLendMarketData, defaultWeb3: Web3) => Promise<LlamaLendGlobalMarketData>;
5
5
  export declare const getLlamaLendAccountBalances: (web3: Web3, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress) => Promise<PositionBalances>;
6
6
  export declare const getLlamaLendUserData: (web3: Web3, network: NetworkNumber, address: string, selectedMarket: LlamaLendMarketData, marketData: LlamaLendGlobalMarketData) => Promise<LlamaLendUserData>;
7
- export declare const getLlamaLendFullPositionData: (web3: Web3, network: NetworkNumber, address: string, selectedMarket: LlamaLendMarketData) => Promise<LlamaLendUserData>;
7
+ export declare const getLlamaLendFullPositionData: (web3: Web3, network: NetworkNumber, address: string, selectedMarket: LlamaLendMarketData, defaultWeb3: Web3) => Promise<LlamaLendUserData>;
@@ -21,6 +21,7 @@ const contracts_1 = require("../contracts");
21
21
  const llamaLendHelpers_1 = require("../helpers/llamaLendHelpers");
22
22
  const utils_1 = require("../services/utils");
23
23
  const llamaLend_1 = require("../markets/llamaLend");
24
+ const staking_1 = require("../staking");
24
25
  const getAndFormatBands = (web3, network, selectedMarket, _minBand, _maxBand) => __awaiter(void 0, void 0, void 0, function* () {
25
26
  const contract = (0, contracts_1.LlamaLendViewContract)(web3, network);
26
27
  const minBand = parseInt(_minBand, 10);
@@ -57,7 +58,7 @@ const getAndFormatBands = (web3, network, selectedMarket, _minBand, _maxBand) =>
57
58
  highPrice: (0, tokens_1.assetAmountInEth)(band.highPrice),
58
59
  }));
59
60
  });
60
- const getLlamaLendGlobalData = (web3, network, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
61
+ const getLlamaLendGlobalData = (web3, network, selectedMarket, defaultWeb3) => __awaiter(void 0, void 0, void 0, function* () {
61
62
  const contract = (0, contracts_1.LlamaLendViewContract)(web3, network);
62
63
  const collAsset = selectedMarket.collAsset;
63
64
  const debtAsset = selectedMarket.baseAsset;
@@ -104,6 +105,10 @@ const getLlamaLendGlobalData = (web3, network, selectedMarket) => __awaiter(void
104
105
  canBeSupplied: true,
105
106
  canBeBorrowed: false,
106
107
  };
108
+ if (staking_1.STAKING_ASSETS.includes(collAsset)) {
109
+ assetsData[collAsset].incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collAsset, defaultWeb3);
110
+ assetsData[collAsset].incentiveSupplyToken = collAsset;
111
+ }
107
112
  return {
108
113
  A: data.A,
109
114
  loanDiscount: data.loanDiscount,
@@ -224,12 +229,12 @@ const getLlamaLendUserData = (web3, network, address, selectedMarket, marketData
224
229
  priceHigh,
225
230
  priceLow, liquidationDiscount: (0, tokens_1.assetAmountInEth)(data.liquidationDiscount), numOfBands: data.N, usedAssets,
226
231
  status }), (0, llamaLendHelpers_1.getLlamaLendAggregatedData)({
227
- loanExists: data.loanExists, usedAssets, network: common_1.NetworkNumber.Eth, selectedMarket, numOfBands: data.N,
232
+ loanExists: data.loanExists, usedAssets, network: common_1.NetworkNumber.Eth, selectedMarket, numOfBands: data.N, assetsData,
228
233
  })), { userBands });
229
234
  });
230
235
  exports.getLlamaLendUserData = getLlamaLendUserData;
231
- const getLlamaLendFullPositionData = (web3, network, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
232
- const marketData = yield (0, exports.getLlamaLendGlobalData)(web3, network, selectedMarket);
236
+ const getLlamaLendFullPositionData = (web3, network, address, selectedMarket, defaultWeb3) => __awaiter(void 0, void 0, void 0, function* () {
237
+ const marketData = yield (0, exports.getLlamaLendGlobalData)(web3, network, selectedMarket, defaultWeb3);
233
238
  const positionData = yield (0, exports.getLlamaLendUserData)(web3, network, address, selectedMarket, marketData);
234
239
  return positionData;
235
240
  });
@@ -10,9 +10,9 @@ const ethAddresses = {
10
10
  vaultAddress: '0x8cf1DE26729cfB7137AF1A6B2a665e099EC319b5',
11
11
  },
12
12
  [types_1.LlamaLendVersions.LLWstethCrvusd2]: {
13
- controllerId: 11,
14
- controllerAddress: '0xB536FEa3a01c95Dd09932440eC802A75410139D6',
15
- vaultAddress: '0x4a7999c55d3a93dAf72EA112985e57c2E3b9e95D',
13
+ controllerId: 13,
14
+ controllerAddress: '0x5756A035F276a8095A922931F224F4ed06149608',
15
+ vaultAddress: '0x21CF1c5Dc48C603b89907FE6a7AE83EA5e3709aF',
16
16
  },
17
17
  [types_1.LlamaLendVersions.LLSusdeCrvusd]: {
18
18
  controllerId: 7,
@@ -91,7 +91,7 @@ const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function*
91
91
  const data = yield res.json();
92
92
  return data.apy;
93
93
  });
94
- exports.STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx'];
94
+ exports.STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH'];
95
95
  const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefined) => {
96
96
  try {
97
97
  if (asset === 'stETH' || asset === 'wstETH')
@@ -112,6 +112,10 @@ const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefine
112
112
  return getApyFromDfsApi('osETH');
113
113
  if (asset === 'ETHx')
114
114
  return getApyFromDfsApi('ETHx');
115
+ if (asset === 'rsETH')
116
+ return getApyFromDfsApi('rsETH');
117
+ if (asset === 'pufETH')
118
+ return getApyFromDfsApi('pufETH');
115
119
  }
116
120
  catch (e) {
117
121
  console.error(`Failed to fetch APY for ${asset}`);
@@ -24,7 +24,7 @@ export declare enum LLVersionsArb {
24
24
  LLWbtcCrvusd2 = "llamaLendWBTCcrvUSD2",
25
25
  LLCrvCrvusd = "llamaLendCRVcrvUSD",
26
26
  LLWethCrvusd = "llamaLendWETHcrvUSD",
27
- LLWeth2Crvusd = "llamaLendWETHcrvUSD2"
27
+ LLWethCrvusd2 = "llamaLendWETHcrvUSD2"
28
28
  }
29
29
  export declare const LlamaLendVersions: {
30
30
  readonly LLArbCrvusd: LLVersionsArb.LLArbCrvusd;
@@ -34,14 +34,13 @@ export declare const LlamaLendVersions: {
34
34
  readonly LLWbtcCrvusd2: LLVersionsArb.LLWbtcCrvusd2;
35
35
  readonly LLCrvCrvusd: LLVersionsArb.LLCrvCrvusd;
36
36
  readonly LLWethCrvusd: LLVersionsArb.LLWethCrvusd;
37
- readonly LLWeth2Crvusd: LLVersionsArb.LLWeth2Crvusd;
37
+ readonly LLWethCrvusd2: LLVersionsArb.LLWethCrvusd2;
38
38
  readonly LLWstethCrvusd: LLVersionsEth.LLWstethCrvusd;
39
39
  readonly LLWstethCrvusd2: LLVersionsEth.LLWstethCrvusd2;
40
40
  readonly LLSusdeCrvusd: LLVersionsEth.LLSusdeCrvusd;
41
41
  readonly LLSusdeCrvusd2: LLVersionsEth.LLSusdeCrvusd2;
42
42
  readonly LLPufethCrvusd: LLVersionsEth.LLPufethCrvusd;
43
43
  readonly LLUsdeCrvusd: LLVersionsEth.LLUsdeCrvusd;
44
- readonly LLWethCrvusd2: LLVersionsEth.LLWethCrvusd2;
45
44
  readonly LLCrvusdCrv: LLVersionsEth.LLCrvusdCrv;
46
45
  readonly LLTbtcCrvusd: LLVersionsEth.LLTbtcCrvusd;
47
46
  readonly LLCrvusdTbtc: LLVersionsEth.LLCrvusdTbtc;
@@ -116,6 +115,9 @@ export interface LlamaLendAggregatedPositionData {
116
115
  leveragedType: string;
117
116
  leveragedAsset?: string;
118
117
  liquidationPrice?: string;
118
+ netApy: string;
119
+ incentiveUsd: string;
120
+ totalInterestUsd: string;
119
121
  }
120
122
  export interface LlamaLendUsedAsset {
121
123
  isSupplied: boolean;
@@ -32,7 +32,7 @@ var LLVersionsArb;
32
32
  LLVersionsArb["LLWbtcCrvusd2"] = "llamaLendWBTCcrvUSD2";
33
33
  LLVersionsArb["LLCrvCrvusd"] = "llamaLendCRVcrvUSD";
34
34
  LLVersionsArb["LLWethCrvusd"] = "llamaLendWETHcrvUSD";
35
- LLVersionsArb["LLWeth2Crvusd"] = "llamaLendWETHcrvUSD2";
35
+ LLVersionsArb["LLWethCrvusd2"] = "llamaLendWETHcrvUSD2";
36
36
  })(LLVersionsArb || (exports.LLVersionsArb = LLVersionsArb = {}));
37
37
  exports.LlamaLendVersions = Object.assign(Object.assign({}, LLVersionsEth), LLVersionsArb);
38
38
  var LlamaLendStatus;
@@ -1,9 +1,10 @@
1
- import { LlamaLendAggregatedPositionData, LlamaLendMarketData, LlamaLendUsedAssets } from '../../types';
1
+ import { LlamaLendAggregatedPositionData, LlamaLendAssetsData, LlamaLendMarketData, LlamaLendUsedAssets } from '../../types';
2
2
  import { NetworkNumber } from '../../types/common';
3
- export declare const getLlamaLendAggregatedData: ({ loanExists, usedAssets, network, selectedMarket, numOfBands, ...rest }: {
3
+ export declare const getLlamaLendAggregatedData: ({ loanExists, usedAssets, network, selectedMarket, numOfBands, assetsData, ...rest }: {
4
4
  loanExists: boolean;
5
5
  usedAssets: LlamaLendUsedAssets;
6
6
  network: NetworkNumber;
7
7
  selectedMarket: LlamaLendMarketData;
8
8
  numOfBands: number | string;
9
+ assetsData: LlamaLendAssetsData;
9
10
  }) => LlamaLendAggregatedPositionData;
@@ -12,9 +12,10 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  import Dec from 'decimal.js';
13
13
  import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
14
14
  import { mapRange } from '../../services/utils';
15
+ import { calculateNetApy } from '../../staking';
15
16
  export const getLlamaLendAggregatedData = (_a) => {
16
17
  var _b;
17
- var { loanExists, usedAssets, network, selectedMarket, numOfBands } = _a, rest = __rest(_a, ["loanExists", "usedAssets", "network", "selectedMarket", "numOfBands"]);
18
+ var { loanExists, usedAssets, network, selectedMarket, numOfBands, assetsData } = _a, rest = __rest(_a, ["loanExists", "usedAssets", "network", "selectedMarket", "numOfBands", "assetsData"]);
18
19
  const collAsset = selectedMarket.collAsset;
19
20
  const debtAsset = selectedMarket.baseAsset;
20
21
  const payload = {};
@@ -23,6 +24,10 @@ export const getLlamaLendAggregatedData = (_a) => {
23
24
  payload.suppliedUsd = getAssetsTotal(usedAssets, ({ collateral }) => collateral, ({ suppliedUsd }) => suppliedUsd);
24
25
  payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
25
26
  payload.suppliedForYieldUsd = getAssetsTotal(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedForYield }) => suppliedForYield || '0');
27
+ const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy(usedAssets, assetsData);
28
+ payload.netApy = netApy;
29
+ payload.incentiveUsd = incentiveUsd;
30
+ payload.totalInterestUsd = totalInterestUsd;
26
31
  payload.ratio = loanExists
27
32
  ? new Dec(payload.suppliedUsd)
28
33
  .dividedBy(payload.borrowedUsd)
@@ -1,7 +1,7 @@
1
1
  import Web3 from 'web3';
2
2
  import { LlamaLendGlobalMarketData, LlamaLendMarketData, LlamaLendUserData } from '../types';
3
3
  import { Blockish, EthAddress, NetworkNumber, PositionBalances } from '../types/common';
4
- export declare const getLlamaLendGlobalData: (web3: Web3, network: NetworkNumber, selectedMarket: LlamaLendMarketData) => Promise<LlamaLendGlobalMarketData>;
4
+ export declare const getLlamaLendGlobalData: (web3: Web3, network: NetworkNumber, selectedMarket: LlamaLendMarketData, defaultWeb3: Web3) => Promise<LlamaLendGlobalMarketData>;
5
5
  export declare const getLlamaLendAccountBalances: (web3: Web3, network: NetworkNumber, block: Blockish, addressMapping: boolean, address: EthAddress, controllerAddress: EthAddress) => Promise<PositionBalances>;
6
6
  export declare const getLlamaLendUserData: (web3: Web3, network: NetworkNumber, address: string, selectedMarket: LlamaLendMarketData, marketData: LlamaLendGlobalMarketData) => Promise<LlamaLendUserData>;
7
- export declare const getLlamaLendFullPositionData: (web3: Web3, network: NetworkNumber, address: string, selectedMarket: LlamaLendMarketData) => Promise<LlamaLendUserData>;
7
+ export declare const getLlamaLendFullPositionData: (web3: Web3, network: NetworkNumber, address: string, selectedMarket: LlamaLendMarketData, defaultWeb3: Web3) => Promise<LlamaLendUserData>;
@@ -15,6 +15,7 @@ import { LlamaLendViewContract } from '../contracts';
15
15
  import { getLlamaLendAggregatedData } from '../helpers/llamaLendHelpers';
16
16
  import { getEthAmountForDecimals, wethToEth } from '../services/utils';
17
17
  import { getLlamaLendMarketFromControllerAddress } from '../markets/llamaLend';
18
+ import { getStakingApy, STAKING_ASSETS } from '../staking';
18
19
  const getAndFormatBands = (web3, network, selectedMarket, _minBand, _maxBand) => __awaiter(void 0, void 0, void 0, function* () {
19
20
  const contract = LlamaLendViewContract(web3, network);
20
21
  const minBand = parseInt(_minBand, 10);
@@ -51,7 +52,7 @@ const getAndFormatBands = (web3, network, selectedMarket, _minBand, _maxBand) =>
51
52
  highPrice: assetAmountInEth(band.highPrice),
52
53
  }));
53
54
  });
54
- export const getLlamaLendGlobalData = (web3, network, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
55
+ export const getLlamaLendGlobalData = (web3, network, selectedMarket, defaultWeb3) => __awaiter(void 0, void 0, void 0, function* () {
55
56
  const contract = LlamaLendViewContract(web3, network);
56
57
  const collAsset = selectedMarket.collAsset;
57
58
  const debtAsset = selectedMarket.baseAsset;
@@ -98,6 +99,10 @@ export const getLlamaLendGlobalData = (web3, network, selectedMarket) => __await
98
99
  canBeSupplied: true,
99
100
  canBeBorrowed: false,
100
101
  };
102
+ if (STAKING_ASSETS.includes(collAsset)) {
103
+ assetsData[collAsset].incentiveSupplyApy = yield getStakingApy(collAsset, defaultWeb3);
104
+ assetsData[collAsset].incentiveSupplyToken = collAsset;
105
+ }
101
106
  return {
102
107
  A: data.A,
103
108
  loanDiscount: data.loanDiscount,
@@ -216,11 +221,11 @@ export const getLlamaLendUserData = (web3, network, address, selectedMarket, mar
216
221
  priceHigh,
217
222
  priceLow, liquidationDiscount: assetAmountInEth(data.liquidationDiscount), numOfBands: data.N, usedAssets,
218
223
  status }), getLlamaLendAggregatedData({
219
- loanExists: data.loanExists, usedAssets, network: NetworkNumber.Eth, selectedMarket, numOfBands: data.N,
224
+ loanExists: data.loanExists, usedAssets, network: NetworkNumber.Eth, selectedMarket, numOfBands: data.N, assetsData,
220
225
  })), { userBands });
221
226
  });
222
- export const getLlamaLendFullPositionData = (web3, network, address, selectedMarket) => __awaiter(void 0, void 0, void 0, function* () {
223
- const marketData = yield getLlamaLendGlobalData(web3, network, selectedMarket);
227
+ export const getLlamaLendFullPositionData = (web3, network, address, selectedMarket, defaultWeb3) => __awaiter(void 0, void 0, void 0, function* () {
228
+ const marketData = yield getLlamaLendGlobalData(web3, network, selectedMarket, defaultWeb3);
224
229
  const positionData = yield getLlamaLendUserData(web3, network, address, selectedMarket, marketData);
225
230
  return positionData;
226
231
  });
@@ -7,9 +7,9 @@ const ethAddresses = {
7
7
  vaultAddress: '0x8cf1DE26729cfB7137AF1A6B2a665e099EC319b5',
8
8
  },
9
9
  [LlamaLendVersions.LLWstethCrvusd2]: {
10
- controllerId: 11,
11
- controllerAddress: '0xB536FEa3a01c95Dd09932440eC802A75410139D6',
12
- vaultAddress: '0x4a7999c55d3a93dAf72EA112985e57c2E3b9e95D',
10
+ controllerId: 13,
11
+ controllerAddress: '0x5756A035F276a8095A922931F224F4ed06149608',
12
+ vaultAddress: '0x21CF1c5Dc48C603b89907FE6a7AE83EA5e3709aF',
13
13
  },
14
14
  [LlamaLendVersions.LLSusdeCrvusd]: {
15
15
  controllerId: 7,
@@ -81,7 +81,7 @@ const getApyFromDfsApi = (asset) => __awaiter(void 0, void 0, void 0, function*
81
81
  const data = yield res.json();
82
82
  return data.apy;
83
83
  });
84
- export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx'];
84
+ export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH'];
85
85
  export const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = undefined) => {
86
86
  try {
87
87
  if (asset === 'stETH' || asset === 'wstETH')
@@ -102,6 +102,10 @@ export const getStakingApy = (asset, web3, blockNumber = 'latest', fromBlock = u
102
102
  return getApyFromDfsApi('osETH');
103
103
  if (asset === 'ETHx')
104
104
  return getApyFromDfsApi('ETHx');
105
+ if (asset === 'rsETH')
106
+ return getApyFromDfsApi('rsETH');
107
+ if (asset === 'pufETH')
108
+ return getApyFromDfsApi('pufETH');
105
109
  }
106
110
  catch (e) {
107
111
  console.error(`Failed to fetch APY for ${asset}`);
@@ -24,7 +24,7 @@ export declare enum LLVersionsArb {
24
24
  LLWbtcCrvusd2 = "llamaLendWBTCcrvUSD2",
25
25
  LLCrvCrvusd = "llamaLendCRVcrvUSD",
26
26
  LLWethCrvusd = "llamaLendWETHcrvUSD",
27
- LLWeth2Crvusd = "llamaLendWETHcrvUSD2"
27
+ LLWethCrvusd2 = "llamaLendWETHcrvUSD2"
28
28
  }
29
29
  export declare const LlamaLendVersions: {
30
30
  readonly LLArbCrvusd: LLVersionsArb.LLArbCrvusd;
@@ -34,14 +34,13 @@ export declare const LlamaLendVersions: {
34
34
  readonly LLWbtcCrvusd2: LLVersionsArb.LLWbtcCrvusd2;
35
35
  readonly LLCrvCrvusd: LLVersionsArb.LLCrvCrvusd;
36
36
  readonly LLWethCrvusd: LLVersionsArb.LLWethCrvusd;
37
- readonly LLWeth2Crvusd: LLVersionsArb.LLWeth2Crvusd;
37
+ readonly LLWethCrvusd2: LLVersionsArb.LLWethCrvusd2;
38
38
  readonly LLWstethCrvusd: LLVersionsEth.LLWstethCrvusd;
39
39
  readonly LLWstethCrvusd2: LLVersionsEth.LLWstethCrvusd2;
40
40
  readonly LLSusdeCrvusd: LLVersionsEth.LLSusdeCrvusd;
41
41
  readonly LLSusdeCrvusd2: LLVersionsEth.LLSusdeCrvusd2;
42
42
  readonly LLPufethCrvusd: LLVersionsEth.LLPufethCrvusd;
43
43
  readonly LLUsdeCrvusd: LLVersionsEth.LLUsdeCrvusd;
44
- readonly LLWethCrvusd2: LLVersionsEth.LLWethCrvusd2;
45
44
  readonly LLCrvusdCrv: LLVersionsEth.LLCrvusdCrv;
46
45
  readonly LLTbtcCrvusd: LLVersionsEth.LLTbtcCrvusd;
47
46
  readonly LLCrvusdTbtc: LLVersionsEth.LLCrvusdTbtc;
@@ -116,6 +115,9 @@ export interface LlamaLendAggregatedPositionData {
116
115
  leveragedType: string;
117
116
  leveragedAsset?: string;
118
117
  liquidationPrice?: string;
118
+ netApy: string;
119
+ incentiveUsd: string;
120
+ totalInterestUsd: string;
119
121
  }
120
122
  export interface LlamaLendUsedAsset {
121
123
  isSupplied: boolean;
@@ -29,7 +29,7 @@ export var LLVersionsArb;
29
29
  LLVersionsArb["LLWbtcCrvusd2"] = "llamaLendWBTCcrvUSD2";
30
30
  LLVersionsArb["LLCrvCrvusd"] = "llamaLendCRVcrvUSD";
31
31
  LLVersionsArb["LLWethCrvusd"] = "llamaLendWETHcrvUSD";
32
- LLVersionsArb["LLWeth2Crvusd"] = "llamaLendWETHcrvUSD2";
32
+ LLVersionsArb["LLWethCrvusd2"] = "llamaLendWETHcrvUSD2";
33
33
  })(LLVersionsArb || (LLVersionsArb = {}));
34
34
  export const LlamaLendVersions = Object.assign(Object.assign({}, LLVersionsEth), LLVersionsArb);
35
35
  export var LlamaLendStatus;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "0.0.102",
3
+ "version": "0.0.103",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -1,13 +1,16 @@
1
1
  import Dec from 'decimal.js';
2
- import { LlamaLendAggregatedPositionData, LlamaLendMarketData, LlamaLendUsedAssets } from '../../types';
2
+ import {
3
+ LlamaLendAggregatedPositionData, LlamaLendAssetsData, LlamaLendMarketData, LlamaLendUsedAssets,
4
+ } from '../../types';
3
5
  import { MMUsedAssets, NetworkNumber } from '../../types/common';
4
6
  import { calcLeverageLiqPrice, getAssetsTotal, isLeveragedPos } from '../../moneymarket';
5
7
  import { mapRange } from '../../services/utils';
8
+ import { calculateNetApy } from '../../staking';
6
9
 
7
10
  export const getLlamaLendAggregatedData = ({
8
- loanExists, usedAssets, network, selectedMarket, numOfBands, ...rest
11
+ loanExists, usedAssets, network, selectedMarket, numOfBands, assetsData, ...rest
9
12
  }:{
10
- loanExists: boolean, usedAssets: LlamaLendUsedAssets, network: NetworkNumber, selectedMarket: LlamaLendMarketData, numOfBands: number | string
13
+ loanExists: boolean, usedAssets: LlamaLendUsedAssets, network: NetworkNumber, selectedMarket: LlamaLendMarketData, numOfBands: number | string, assetsData: LlamaLendAssetsData,
11
14
  }): LlamaLendAggregatedPositionData => {
12
15
  const collAsset = selectedMarket.collAsset;
13
16
  const debtAsset = selectedMarket.baseAsset;
@@ -19,6 +22,11 @@ export const getLlamaLendAggregatedData = ({
19
22
  payload.borrowedUsd = getAssetsTotal(usedAssets, ({ isBorrowed }: { isBorrowed: boolean }) => isBorrowed, ({ borrowedUsd }: { borrowedUsd: string }) => borrowedUsd);
20
23
  payload.suppliedForYieldUsd = getAssetsTotal(usedAssets, ({ isSupplied }: { isSupplied: boolean }) => isSupplied, ({ suppliedForYield }: { suppliedForYield?: string }) => suppliedForYield || '0');
21
24
 
25
+ const { netApy, incentiveUsd, totalInterestUsd } = calculateNetApy(usedAssets, assetsData as any);
26
+ payload.netApy = netApy;
27
+ payload.incentiveUsd = incentiveUsd;
28
+ payload.totalInterestUsd = totalInterestUsd;
29
+
22
30
  payload.ratio = loanExists
23
31
  ? new Dec(payload.suppliedUsd)
24
32
  .dividedBy(payload.borrowedUsd)
@@ -13,6 +13,7 @@ import { getLlamaLendAggregatedData } from '../helpers/llamaLendHelpers';
13
13
  import { getAbiItem, getEthAmountForDecimals, wethToEth } from '../services/utils';
14
14
  import { USD_QUOTE } from '../constants';
15
15
  import { getLlamaLendMarketFromControllerAddress } from '../markets/llamaLend';
16
+ import { getStakingApy, STAKING_ASSETS } from '../staking';
16
17
 
17
18
  const getAndFormatBands = async (web3: Web3, network: NetworkNumber, selectedMarket: LlamaLendMarketData, _minBand: string, _maxBand: string) => {
18
19
  const contract = LlamaLendViewContract(web3, network);
@@ -52,7 +53,7 @@ const getAndFormatBands = async (web3: Web3, network: NetworkNumber, selectedMar
52
53
  }));
53
54
  };
54
55
 
55
- export const getLlamaLendGlobalData = async (web3: Web3, network: NetworkNumber, selectedMarket: LlamaLendMarketData): Promise<LlamaLendGlobalMarketData> => {
56
+ export const getLlamaLendGlobalData = async (web3: Web3, network: NetworkNumber, selectedMarket: LlamaLendMarketData, defaultWeb3: Web3): Promise<LlamaLendGlobalMarketData> => {
56
57
  const contract = LlamaLendViewContract(web3, network);
57
58
 
58
59
  const collAsset = selectedMarket.collAsset;
@@ -109,6 +110,12 @@ export const getLlamaLendGlobalData = async (web3: Web3, network: NetworkNumber,
109
110
  canBeSupplied: true,
110
111
  canBeBorrowed: false,
111
112
  };
113
+
114
+ if (STAKING_ASSETS.includes(collAsset)) {
115
+ assetsData[collAsset].incentiveSupplyApy = await getStakingApy(collAsset, defaultWeb3);
116
+ assetsData[collAsset].incentiveSupplyToken = collAsset;
117
+ }
118
+
112
119
  return {
113
120
  A: data.A,
114
121
  loanDiscount: data.loanDiscount,
@@ -255,14 +262,14 @@ export const getLlamaLendUserData = async (web3: Web3, network: NetworkNumber, a
255
262
  usedAssets,
256
263
  status,
257
264
  ...getLlamaLendAggregatedData({
258
- loanExists: data.loanExists, usedAssets, network: NetworkNumber.Eth, selectedMarket, numOfBands: data.N,
265
+ loanExists: data.loanExists, usedAssets, network: NetworkNumber.Eth, selectedMarket, numOfBands: data.N, assetsData,
259
266
  }),
260
267
  userBands,
261
268
  };
262
269
  };
263
270
 
264
- export const getLlamaLendFullPositionData = async (web3: Web3, network: NetworkNumber, address: string, selectedMarket: LlamaLendMarketData): Promise<LlamaLendUserData> => {
265
- const marketData = await getLlamaLendGlobalData(web3, network, selectedMarket);
271
+ export const getLlamaLendFullPositionData = async (web3: Web3, network: NetworkNumber, address: string, selectedMarket: LlamaLendMarketData, defaultWeb3: Web3): Promise<LlamaLendUserData> => {
272
+ const marketData = await getLlamaLendGlobalData(web3, network, selectedMarket, defaultWeb3);
266
273
  const positionData = await getLlamaLendUserData(web3, network, address, selectedMarket, marketData);
267
274
  return positionData;
268
275
  };
@@ -16,9 +16,9 @@ const ethAddresses: Record<LLVersionsEth, LLAddresses> = {
16
16
  vaultAddress: '0x8cf1DE26729cfB7137AF1A6B2a665e099EC319b5',
17
17
  },
18
18
  [LlamaLendVersions.LLWstethCrvusd2]: {
19
- controllerId: 11,
20
- controllerAddress: '0xB536FEa3a01c95Dd09932440eC802A75410139D6',
21
- vaultAddress: '0x4a7999c55d3a93dAf72EA112985e57c2E3b9e95D',
19
+ controllerId: 13,
20
+ controllerAddress: '0x5756A035F276a8095A922931F224F4ed06149608',
21
+ vaultAddress: '0x21CF1c5Dc48C603b89907FE6a7AE83EA5e3709aF',
22
22
  },
23
23
  [LlamaLendVersions.LLSusdeCrvusd]: {
24
24
  controllerId: 7,
@@ -83,7 +83,7 @@ const getApyFromDfsApi = async (asset: string) => {
83
83
  return data.apy;
84
84
  };
85
85
 
86
- export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx'];
86
+ export const STAKING_ASSETS = ['cbETH', 'wstETH', 'cbETH', 'rETH', 'sDAI', 'weETH', 'sUSDe', 'osETH', 'ezETH', 'ETHx', 'rsETH', 'pufETH'];
87
87
 
88
88
  export const getStakingApy = (asset: string, web3: Web3, blockNumber: 'latest' | number = 'latest', fromBlock: number | undefined = undefined) => {
89
89
  try {
@@ -96,6 +96,8 @@ export const getStakingApy = (asset: string, web3: Web3, blockNumber: 'latest' |
96
96
  if (asset === 'ezETH') return getApyFromDfsApi('ezETH');
97
97
  if (asset === 'osETH') return getApyFromDfsApi('osETH');
98
98
  if (asset === 'ETHx') return getApyFromDfsApi('ETHx');
99
+ if (asset === 'rsETH') return getApyFromDfsApi('rsETH');
100
+ if (asset === 'pufETH') return getApyFromDfsApi('pufETH');
99
101
  } catch (e) {
100
102
  console.error(`Failed to fetch APY for ${asset}`);
101
103
  return '0';
@@ -31,7 +31,7 @@ export enum LLVersionsArb {
31
31
  LLWbtcCrvusd2 = 'llamaLendWBTCcrvUSD2',
32
32
  LLCrvCrvusd = 'llamaLendCRVcrvUSD',
33
33
  LLWethCrvusd = 'llamaLendWETHcrvUSD',
34
- LLWeth2Crvusd = 'llamaLendWETHcrvUSD2',
34
+ LLWethCrvusd2 = 'llamaLendWETHcrvUSD2',
35
35
  }
36
36
 
37
37
  export const LlamaLendVersions = {
@@ -111,6 +111,9 @@ export interface LlamaLendAggregatedPositionData {
111
111
  leveragedType: string,
112
112
  leveragedAsset?: string,
113
113
  liquidationPrice?: string,
114
+ netApy: string,
115
+ incentiveUsd: string,
116
+ totalInterestUsd: string,
114
117
  }
115
118
 
116
119
  export interface LlamaLendUsedAsset {