@defisaver/positions-sdk 0.0.199 → 0.0.201-fluid-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.
Files changed (100) hide show
  1. package/cjs/config/contracts.d.ts +169 -4
  2. package/cjs/config/contracts.js +20 -0
  3. package/cjs/contracts.d.ts +2 -0
  4. package/cjs/contracts.js +3 -1
  5. package/cjs/fluid/index.d.ts +38 -0
  6. package/cjs/fluid/index.js +163 -0
  7. package/cjs/helpers/fluidHelpers/index.d.ts +6 -0
  8. package/cjs/helpers/fluidHelpers/index.js +40 -0
  9. package/cjs/helpers/index.d.ts +2 -0
  10. package/cjs/helpers/index.js +3 -1
  11. package/cjs/helpers/liquityV2Helpers/index.d.ts +12 -0
  12. package/cjs/helpers/liquityV2Helpers/index.js +63 -0
  13. package/cjs/index.d.ts +3 -1
  14. package/cjs/index.js +5 -1
  15. package/cjs/liquityV2/index.d.ts +18 -0
  16. package/cjs/liquityV2/index.js +194 -0
  17. package/cjs/markets/aave/marketAssets.js +1 -1
  18. package/cjs/markets/fluid/index.d.ts +174 -0
  19. package/cjs/markets/fluid/index.js +1286 -0
  20. package/cjs/markets/index.d.ts +2 -0
  21. package/cjs/markets/index.js +5 -1
  22. package/cjs/markets/liquityV2/index.d.ts +10 -0
  23. package/cjs/markets/liquityV2/index.js +47 -0
  24. package/cjs/moneymarket/moneymarketCommonService.js +1 -1
  25. package/cjs/types/contracts/generated/FluidView.d.ts +318 -0
  26. package/cjs/types/contracts/generated/FluidView.js +5 -0
  27. package/cjs/types/contracts/generated/LiquityV2CollSurplusPool.d.ts +64 -0
  28. package/cjs/types/contracts/generated/LiquityV2CollSurplusPool.js +5 -0
  29. package/cjs/types/contracts/generated/LiquityV2TroveNFT.d.ts +73 -0
  30. package/cjs/types/contracts/generated/LiquityV2TroveNFT.js +5 -0
  31. package/cjs/types/contracts/generated/LiquityV2View.d.ts +244 -0
  32. package/cjs/types/contracts/generated/LiquityV2View.js +5 -0
  33. package/cjs/types/contracts/generated/index.d.ts +4 -0
  34. package/cjs/types/fluid.d.ts +225 -0
  35. package/cjs/types/fluid.js +129 -0
  36. package/cjs/types/index.d.ts +2 -0
  37. package/cjs/types/index.js +2 -0
  38. package/cjs/types/liquityV2.d.ts +111 -0
  39. package/cjs/types/liquityV2.js +24 -0
  40. package/esm/config/contracts.d.ts +169 -4
  41. package/esm/config/contracts.js +20 -0
  42. package/esm/contracts.d.ts +2 -0
  43. package/esm/contracts.js +2 -0
  44. package/esm/fluid/index.d.ts +38 -0
  45. package/esm/fluid/index.js +153 -0
  46. package/esm/helpers/fluidHelpers/index.d.ts +6 -0
  47. package/esm/helpers/fluidHelpers/index.js +33 -0
  48. package/esm/helpers/index.d.ts +2 -0
  49. package/esm/helpers/index.js +2 -0
  50. package/esm/helpers/liquityV2Helpers/index.d.ts +12 -0
  51. package/esm/helpers/liquityV2Helpers/index.js +55 -0
  52. package/esm/index.d.ts +3 -1
  53. package/esm/index.js +3 -1
  54. package/esm/liquityV2/index.d.ts +18 -0
  55. package/esm/liquityV2/index.js +183 -0
  56. package/esm/markets/aave/marketAssets.js +1 -1
  57. package/esm/markets/fluid/index.d.ts +174 -0
  58. package/esm/markets/fluid/index.js +1196 -0
  59. package/esm/markets/index.d.ts +2 -0
  60. package/esm/markets/index.js +2 -0
  61. package/esm/markets/liquityV2/index.d.ts +10 -0
  62. package/esm/markets/liquityV2/index.js +40 -0
  63. package/esm/moneymarket/moneymarketCommonService.js +1 -1
  64. package/esm/types/contracts/generated/FluidView.d.ts +318 -0
  65. package/esm/types/contracts/generated/FluidView.js +4 -0
  66. package/esm/types/contracts/generated/LiquityV2CollSurplusPool.d.ts +64 -0
  67. package/esm/types/contracts/generated/LiquityV2CollSurplusPool.js +4 -0
  68. package/esm/types/contracts/generated/LiquityV2TroveNFT.d.ts +73 -0
  69. package/esm/types/contracts/generated/LiquityV2TroveNFT.js +4 -0
  70. package/esm/types/contracts/generated/LiquityV2View.d.ts +244 -0
  71. package/esm/types/contracts/generated/LiquityV2View.js +4 -0
  72. package/esm/types/contracts/generated/index.d.ts +4 -0
  73. package/esm/types/fluid.d.ts +225 -0
  74. package/esm/types/fluid.js +126 -0
  75. package/esm/types/index.d.ts +2 -0
  76. package/esm/types/index.js +2 -0
  77. package/esm/types/liquityV2.d.ts +111 -0
  78. package/esm/types/liquityV2.js +21 -0
  79. package/package.json +2 -2
  80. package/src/config/contracts.js +20 -0
  81. package/src/contracts.ts +2 -0
  82. package/src/fluid/index.ts +220 -0
  83. package/src/helpers/fluidHelpers/index.ts +54 -0
  84. package/src/helpers/index.ts +3 -1
  85. package/src/helpers/liquityV2Helpers/index.ts +80 -0
  86. package/src/index.ts +4 -0
  87. package/src/liquityV2/index.ts +228 -0
  88. package/src/markets/aave/marketAssets.ts +1 -1
  89. package/src/markets/fluid/index.ts +1290 -0
  90. package/src/markets/index.ts +3 -2
  91. package/src/markets/liquityV2/index.ts +44 -0
  92. package/src/moneymarket/moneymarketCommonService.ts +1 -1
  93. package/src/types/contracts/generated/FluidView.ts +399 -0
  94. package/src/types/contracts/generated/LiquityV2CollSurplusPool.ts +130 -0
  95. package/src/types/contracts/generated/LiquityV2TroveNFT.ts +150 -0
  96. package/src/types/contracts/generated/LiquityV2View.ts +315 -0
  97. package/src/types/contracts/generated/index.ts +4 -0
  98. package/src/types/fluid.ts +240 -0
  99. package/src/types/index.ts +3 -1
  100. package/src/types/liquityV2.ts +119 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getFluidPositionWithMarket = exports.getFluidPosition = exports.getFluidVaultIdsForUser = exports.getFluidMarketData = exports.EMPTY_FLUID_DATA = exports.EMPTY_USED_ASSET = void 0;
16
+ const decimal_js_1 = __importDefault(require("decimal.js"));
17
+ const tokens_1 = require("@defisaver/tokens");
18
+ const types_1 = require("../types");
19
+ const contracts_1 = require("../contracts");
20
+ const utils_1 = require("../services/utils");
21
+ const fluidHelpers_1 = require("../helpers/fluidHelpers");
22
+ exports.EMPTY_USED_ASSET = {
23
+ isSupplied: false,
24
+ isBorrowed: false,
25
+ supplied: '0',
26
+ suppliedUsd: '0',
27
+ borrowed: '0',
28
+ borrowedUsd: '0',
29
+ symbol: '',
30
+ collateral: false,
31
+ };
32
+ const parseVaultType = (vaultType) => {
33
+ switch (vaultType) {
34
+ case 10000: return types_1.FluidVaultType.T1;
35
+ case 20000: return types_1.FluidVaultType.T2;
36
+ case 30000: return types_1.FluidVaultType.T3;
37
+ case 40000: return types_1.FluidVaultType.T4;
38
+ default: return types_1.FluidVaultType.Unknown;
39
+ }
40
+ };
41
+ const parseMarketData = (data) => {
42
+ const collAsset = (0, tokens_1.getAssetInfoByAddress)(data.supplyToken0);
43
+ const debtAsset = (0, tokens_1.getAssetInfoByAddress)(data.borrowToken0);
44
+ const collAssetData = {
45
+ symbol: collAsset.symbol,
46
+ address: collAsset.address,
47
+ price: (0, utils_1.getEthAmountForDecimals)(data.priceOfSupplyToken0InUSD, 8),
48
+ totalSupply: data.totalSupplyVault,
49
+ totalBorrow: data.totalBorrowVault,
50
+ canBeSupplied: true,
51
+ canBeBorrowed: false,
52
+ supplyRate: new decimal_js_1.default(data.supplyRateVault).div(100).toString(),
53
+ borrowRate: '0',
54
+ };
55
+ const debtAssetData = {
56
+ symbol: debtAsset.symbol,
57
+ address: debtAsset.address,
58
+ price: (0, utils_1.getEthAmountForDecimals)(data.priceOfBorrowToken0InUSD, 8),
59
+ totalSupply: data.totalSupplyVault,
60
+ totalBorrow: data.totalBorrowVault,
61
+ canBeSupplied: false,
62
+ canBeBorrowed: true,
63
+ supplyRate: '0',
64
+ borrowRate: new decimal_js_1.default(data.borrowRateVault).div(100).toString(),
65
+ };
66
+ const assetsData = {
67
+ [collAsset.symbol]: collAssetData,
68
+ [debtAsset.symbol]: debtAssetData,
69
+ };
70
+ const marketData = {
71
+ vaultId: +data.vaultId,
72
+ isSmartColl: data.isSmartColl,
73
+ isSmartDebt: data.isSmartDebt,
74
+ marketAddress: data.vault,
75
+ vaultType: parseVaultType(+data.vaultType),
76
+ oracle: data.oracle,
77
+ liquidationPenaltyPercent: new decimal_js_1.default(data.liquidationPenalty).div(100).toString(),
78
+ collFactor: new decimal_js_1.default(data.collateralFactor).div(10000).toString(),
79
+ liquidationRatio: new decimal_js_1.default(data.liquidationThreshold).div(100).toString(),
80
+ collAsset0: collAsset.symbol,
81
+ debtAsset0: debtAsset.symbol,
82
+ totalPositions: data.totalPositions,
83
+ totalSupplyVault: (0, utils_1.getEthAmountForDecimals)(data.totalSupplyVault, collAsset.decimals),
84
+ totalBorrowVault: (0, utils_1.getEthAmountForDecimals)(data.totalBorrowVault, debtAsset.decimals),
85
+ withdrawalLimit: (0, utils_1.getEthAmountForDecimals)(data.withdrawalLimit, collAsset.decimals),
86
+ withdrawableUntilLimit: (0, utils_1.getEthAmountForDecimals)(data.withdrawableUntilLimit, collAsset.decimals),
87
+ withdrawable: (0, utils_1.getEthAmountForDecimals)(data.withdrawable, collAsset.decimals),
88
+ borrowLimit: (0, utils_1.getEthAmountForDecimals)(data.borrowLimit, debtAsset.decimals),
89
+ borrowableUntilLimit: (0, utils_1.getEthAmountForDecimals)(data.borrowableUntilLimit, debtAsset.decimals),
90
+ borrowable: (0, utils_1.getEthAmountForDecimals)(data.borrowable, debtAsset.decimals),
91
+ borrowLimitUtilization: (0, utils_1.getEthAmountForDecimals)(data.borrowLimitUtilization, debtAsset.decimals),
92
+ maxBorrowLimit: (0, utils_1.getEthAmountForDecimals)(data.maxBorrowLimit, debtAsset.decimals),
93
+ baseBorrowLimit: (0, utils_1.getEthAmountForDecimals)(data.baseBorrowLimit, debtAsset.decimals),
94
+ minimumBorrowing: (0, utils_1.getEthAmountForDecimals)(data.minimumBorrowing, debtAsset.decimals),
95
+ };
96
+ return {
97
+ assetsData,
98
+ marketData,
99
+ };
100
+ };
101
+ exports.EMPTY_FLUID_DATA = {
102
+ usedAssets: {},
103
+ suppliedUsd: '0',
104
+ borrowedUsd: '0',
105
+ borrowLimitUsd: '0',
106
+ leftToBorrowUsd: '0',
107
+ ratio: '0',
108
+ minRatio: '0',
109
+ netApy: '0',
110
+ incentiveUsd: '0',
111
+ totalInterestUsd: '0',
112
+ isSubscribedToAutomation: false,
113
+ automationResubscribeRequired: false,
114
+ lastUpdated: Date.now(),
115
+ };
116
+ const parseUserData = (userPositionData, vaultData) => {
117
+ const { assetsData, marketData, } = vaultData;
118
+ const payload = Object.assign(Object.assign({ owner: userPositionData.owner, vaultId: marketData.vaultId }, exports.EMPTY_FLUID_DATA), { lastUpdated: Date.now() });
119
+ const collAsset = (0, tokens_1.getAssetInfo)(marketData.collAsset0);
120
+ const debtAsset = (0, tokens_1.getAssetInfo)(marketData.debtAsset0);
121
+ const supplied = (0, utils_1.getEthAmountForDecimals)(userPositionData.supply, collAsset.decimals);
122
+ const borrowed = (0, utils_1.getEthAmountForDecimals)(userPositionData.borrow, debtAsset.decimals);
123
+ const collUsedAsset = Object.assign(Object.assign({}, exports.EMPTY_USED_ASSET), { symbol: collAsset.symbol, collateral: true, supplied, suppliedUsd: new decimal_js_1.default(supplied).mul(assetsData[collAsset.symbol].price).toString(), isSupplied: new decimal_js_1.default(supplied).gt(0) });
124
+ const debtUsedAsset = Object.assign(Object.assign({}, exports.EMPTY_USED_ASSET), { symbol: debtAsset.symbol, collateral: false, borrowed, borrowedUsd: new decimal_js_1.default(borrowed).mul(assetsData[debtAsset.symbol].price).toString(), isBorrowed: new decimal_js_1.default(borrowed).gt(0) });
125
+ const usedAssets = {
126
+ [collAsset.symbol]: collUsedAsset,
127
+ [debtAsset.symbol]: debtUsedAsset,
128
+ };
129
+ return Object.assign(Object.assign(Object.assign({}, payload), { usedAssets }), (0, fluidHelpers_1.getFluidAggregatedData)({
130
+ usedAssets,
131
+ assetsData,
132
+ marketData,
133
+ }));
134
+ };
135
+ const getFluidMarketData = (web3, network, market) => __awaiter(void 0, void 0, void 0, function* () {
136
+ const view = (0, contracts_1.FluidViewContract)(web3, network);
137
+ const data = yield view.methods.getVaultData(market.marketAddress).call();
138
+ return parseMarketData(data);
139
+ });
140
+ exports.getFluidMarketData = getFluidMarketData;
141
+ const getFluidVaultIdsForUser = (web3, network, user) => __awaiter(void 0, void 0, void 0, function* () {
142
+ const view = (0, contracts_1.FluidViewContract)(web3, network);
143
+ return view.methods.getUserNftIds(user).call();
144
+ });
145
+ exports.getFluidVaultIdsForUser = getFluidVaultIdsForUser;
146
+ const getFluidPosition = (web3, network, vaultId, extractedState) => __awaiter(void 0, void 0, void 0, function* () {
147
+ const view = (0, contracts_1.FluidViewContract)(web3, network);
148
+ const data = yield view.methods.getPositionByNftId(vaultId).call();
149
+ const userPositionData = data[0];
150
+ return parseUserData(userPositionData, extractedState);
151
+ });
152
+ exports.getFluidPosition = getFluidPosition;
153
+ const getFluidPositionWithMarket = (web3, network, vaultId) => __awaiter(void 0, void 0, void 0, function* () {
154
+ const view = (0, contracts_1.FluidViewContract)(web3, network);
155
+ const data = yield view.methods.getPositionByNftId(vaultId).call();
156
+ const marketData = parseMarketData(data.vault);
157
+ const userData = parseUserData(data.position, marketData);
158
+ return {
159
+ userData,
160
+ marketData,
161
+ };
162
+ });
163
+ exports.getFluidPositionWithMarket = getFluidPositionWithMarket;
@@ -0,0 +1,6 @@
1
+ import { FluidAggregatedVaultData, FluidAssetsData, FluidUsedAssets, InnerFluidMarketData } from '../../types';
2
+ export declare const getFluidAggregatedData: ({ usedAssets, assetsData, marketData, }: {
3
+ usedAssets: FluidUsedAssets;
4
+ marketData: InnerFluidMarketData;
5
+ assetsData: FluidAssetsData;
6
+ }) => FluidAggregatedVaultData;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getFluidAggregatedData = void 0;
7
+ const decimal_js_1 = __importDefault(require("decimal.js"));
8
+ const moneymarket_1 = require("../../moneymarket");
9
+ const staking_1 = require("../../staking");
10
+ const getFluidAggregatedData = ({ usedAssets, assetsData, marketData, }) => {
11
+ const payload = {};
12
+ payload.suppliedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isSupplied }) => isSupplied, ({ suppliedUsd }) => suppliedUsd);
13
+ payload.borrowedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, ({ isBorrowed }) => isBorrowed, ({ borrowedUsd }) => borrowedUsd);
14
+ const { netApy, incentiveUsd, totalInterestUsd } = (0, staking_1.calculateNetApy)({ usedAssets, assetsData: assetsData });
15
+ payload.netApy = netApy;
16
+ payload.incentiveUsd = incentiveUsd;
17
+ payload.totalInterestUsd = totalInterestUsd;
18
+ const collFactor = marketData.collFactor;
19
+ const liqRatio = marketData.liquidationRatio;
20
+ payload.borrowLimitUsd = new decimal_js_1.default(payload.suppliedUsd).mul(collFactor).toString();
21
+ payload.liquidationLimitUsd = new decimal_js_1.default(payload.suppliedUsd).mul(liqRatio).div(100).toString();
22
+ const leftToBorrowUsd = new decimal_js_1.default(payload.borrowLimitUsd).sub(payload.borrowedUsd);
23
+ payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
24
+ payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
25
+ payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
26
+ const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
27
+ payload.leveragedType = leveragedType;
28
+ if (leveragedType !== '') {
29
+ payload.leveragedAsset = leveragedAsset;
30
+ let assetPrice = assetsData[leveragedAsset].price;
31
+ if (leveragedType === 'lsd-leverage') {
32
+ // Treat ETH like a stablecoin in a long stETH position
33
+ payload.leveragedLsdAssetRatio = new decimal_js_1.default(assetsData[leveragedAsset].price).div(assetsData.ETH.price).toDP(18).toString();
34
+ assetPrice = new decimal_js_1.default(assetPrice).div(assetsData.ETH.price).toString();
35
+ }
36
+ payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, assetPrice, payload.borrowedUsd, payload.liquidationLimitUsd);
37
+ }
38
+ return payload;
39
+ };
40
+ exports.getFluidAggregatedData = getFluidAggregatedData;
@@ -6,4 +6,6 @@ export * as makerHelpers from './makerHelpers';
6
6
  export * as chickenBondsHelpers from './chickenBondsHelpers';
7
7
  export * as morphoBlueHelpers from './morphoBlueHelpers';
8
8
  export * as llamaLendHelpers from './llamaLendHelpers';
9
+ export * as liquityV2Helpers from './liquityV2Helpers';
9
10
  export * as eulerV2Helpers from './eulerHelpers';
11
+ export * as fluidHelpers from './fluidHelpers';
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.eulerV2Helpers = exports.llamaLendHelpers = exports.morphoBlueHelpers = exports.chickenBondsHelpers = exports.makerHelpers = exports.curveUsdHelpers = exports.sparkHelpers = exports.compoundHelpers = exports.aaveHelpers = void 0;
26
+ exports.fluidHelpers = exports.eulerV2Helpers = exports.liquityV2Helpers = exports.llamaLendHelpers = exports.morphoBlueHelpers = exports.chickenBondsHelpers = exports.makerHelpers = exports.curveUsdHelpers = exports.sparkHelpers = exports.compoundHelpers = exports.aaveHelpers = void 0;
27
27
  exports.aaveHelpers = __importStar(require("./aaveHelpers"));
28
28
  exports.compoundHelpers = __importStar(require("./compoundHelpers"));
29
29
  exports.sparkHelpers = __importStar(require("./sparkHelpers"));
@@ -32,4 +32,6 @@ exports.makerHelpers = __importStar(require("./makerHelpers"));
32
32
  exports.chickenBondsHelpers = __importStar(require("./chickenBondsHelpers"));
33
33
  exports.morphoBlueHelpers = __importStar(require("./morphoBlueHelpers"));
34
34
  exports.llamaLendHelpers = __importStar(require("./llamaLendHelpers"));
35
+ exports.liquityV2Helpers = __importStar(require("./liquityV2Helpers"));
35
36
  exports.eulerV2Helpers = __importStar(require("./eulerHelpers"));
37
+ exports.fluidHelpers = __importStar(require("./fluidHelpers"));
@@ -0,0 +1,12 @@
1
+ import { LiquityV2AggregatedTroveData, LiquityV2AssetsData, LiquityV2UsedAssets } from '../../types';
2
+ export declare const calculateNetApyLiquityV2: (usedAssets: LiquityV2UsedAssets, assetsData: LiquityV2AssetsData, interestRate: string) => {
3
+ netApy: string;
4
+ totalInterestUsd: string;
5
+ incentiveUsd: string;
6
+ };
7
+ export declare const getLiquityV2AggregatedPositionData: ({ usedAssets, assetsData, minCollRatio, interestRate, }: {
8
+ usedAssets: LiquityV2UsedAssets;
9
+ assetsData: LiquityV2AssetsData;
10
+ minCollRatio: string;
11
+ interestRate: string;
12
+ }) => LiquityV2AggregatedTroveData;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getLiquityV2AggregatedPositionData = exports.calculateNetApyLiquityV2 = void 0;
7
+ const decimal_js_1 = __importDefault(require("decimal.js"));
8
+ const moneymarket_1 = require("../../moneymarket");
9
+ const staking_1 = require("../../staking");
10
+ const calculateNetApyLiquityV2 = (usedAssets, assetsData, interestRate) => {
11
+ const sumValues = Object.values(usedAssets).reduce((_acc, usedAsset) => {
12
+ const acc = Object.assign({}, _acc);
13
+ const assetData = assetsData[usedAsset.symbol];
14
+ if (usedAsset.suppliedUsd) {
15
+ const amount = usedAsset.suppliedUsd;
16
+ acc.suppliedUsd = new decimal_js_1.default(acc.suppliedUsd).add(amount).toString();
17
+ if (assetData.incentiveSupplyApy) {
18
+ const incentiveInterest = (0, staking_1.calculateInterestEarned)(amount, assetData.incentiveSupplyApy, 'year', true);
19
+ acc.incentiveUsd = new decimal_js_1.default(acc.incentiveUsd).add(incentiveInterest).toString();
20
+ }
21
+ }
22
+ if (usedAsset.borrowedUsd) {
23
+ const amount = usedAsset.borrowedUsd;
24
+ acc.borrowedUsd = new decimal_js_1.default(acc.borrowedUsd).add(amount).toString();
25
+ const rate = interestRate;
26
+ const borrowInterest = (0, staking_1.calculateInterestEarned)(amount, rate, 'year', true);
27
+ acc.borrowInterest = new decimal_js_1.default(acc.borrowInterest).sub(borrowInterest.toString()).toString();
28
+ }
29
+ return acc;
30
+ }, {
31
+ borrowInterest: '0', supplyInterest: '0', incentiveUsd: '0', borrowedUsd: '0', suppliedUsd: '0',
32
+ });
33
+ const { borrowedUsd, suppliedUsd, borrowInterest, supplyInterest, incentiveUsd, } = sumValues;
34
+ const totalInterestUsd = new decimal_js_1.default(borrowInterest).add(supplyInterest).add(incentiveUsd).toString();
35
+ const balance = new decimal_js_1.default(suppliedUsd).sub(borrowedUsd);
36
+ const netApy = new decimal_js_1.default(totalInterestUsd).div(balance).times(100).toString();
37
+ return { netApy, totalInterestUsd, incentiveUsd };
38
+ };
39
+ exports.calculateNetApyLiquityV2 = calculateNetApyLiquityV2;
40
+ const getLiquityV2AggregatedPositionData = ({ usedAssets, assetsData, minCollRatio, interestRate, }) => {
41
+ const payload = {};
42
+ payload.suppliedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, (usedAsset) => usedAsset, ({ suppliedUsd }) => suppliedUsd);
43
+ payload.borrowedUsd = (0, moneymarket_1.getAssetsTotal)(usedAssets, (usedAsset) => usedAsset, ({ borrowedUsd }) => borrowedUsd);
44
+ payload.borrowLimitUsd = new decimal_js_1.default(payload.suppliedUsd).div(minCollRatio).mul(100).toString();
45
+ const leftToBorrowUsd = new decimal_js_1.default(payload.borrowLimitUsd).sub(payload.borrowedUsd);
46
+ payload.leftToBorrowUsd = leftToBorrowUsd.lte('0') ? '0' : leftToBorrowUsd.toString();
47
+ payload.ratio = +payload.suppliedUsd ? new decimal_js_1.default(payload.borrowLimitUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
48
+ payload.collRatio = +payload.suppliedUsd ? new decimal_js_1.default(payload.suppliedUsd).div(payload.borrowedUsd).mul(100).toString() : '0';
49
+ const { netApy, incentiveUsd, totalInterestUsd } = (0, exports.calculateNetApyLiquityV2)(usedAssets, assetsData, interestRate);
50
+ payload.netApy = netApy;
51
+ payload.incentiveUsd = incentiveUsd;
52
+ payload.totalInterestUsd = totalInterestUsd;
53
+ const { leveragedType, leveragedAsset } = (0, moneymarket_1.isLeveragedPos)(usedAssets);
54
+ payload.leveragedType = leveragedType;
55
+ payload.leveragedAsset = leveragedAsset;
56
+ payload.liquidationPrice = '';
57
+ if (leveragedType !== '') {
58
+ const assetPrice = assetsData[leveragedAsset].price;
59
+ payload.liquidationPrice = (0, moneymarket_1.calcLeverageLiqPrice)(leveragedType, assetPrice, payload.borrowedUsd, payload.borrowLimitUsd);
60
+ }
61
+ return payload;
62
+ };
63
+ exports.getLiquityV2AggregatedPositionData = getLiquityV2AggregatedPositionData;
package/cjs/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import './setup';
2
+ import * as fluid from './fluid';
2
3
  import * as aaveV3 from './aaveV3';
3
4
  import * as morphoAaveV3 from './morphoAaveV3';
4
5
  import * as aaveV2 from './aaveV2';
@@ -8,6 +9,7 @@ import * as compoundV2 from './compoundV2';
8
9
  import * as spark from './spark';
9
10
  import * as curveUsd from './curveUsd';
10
11
  import * as liquity from './liquity';
12
+ import * as liquityV2 from './liquityV2';
11
13
  import * as maker from './maker';
12
14
  import * as staking from './staking';
13
15
  import * as multicall from './multicall';
@@ -20,4 +22,4 @@ import * as morphoBlue from './morphoBlue';
20
22
  import * as llamaLend from './llamaLend';
21
23
  import * as eulerV2 from './eulerV2';
22
24
  export * from './types';
23
- export { aaveV2, aaveV3, morphoAaveV2, morphoAaveV3, compoundV2, compoundV3, spark, curveUsd, liquity, maker, chickenBonds, exchange, staking, multicall, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, };
25
+ export { aaveV2, aaveV3, morphoAaveV2, morphoAaveV3, compoundV2, compoundV3, spark, curveUsd, liquity, liquityV2, maker, chickenBonds, exchange, staking, multicall, moneymarket, markets, helpers, morphoBlue, llamaLend, eulerV2, fluid, };
package/cjs/index.js CHANGED
@@ -26,8 +26,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
26
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.eulerV2 = exports.llamaLend = exports.morphoBlue = exports.helpers = exports.markets = exports.moneymarket = exports.multicall = exports.staking = exports.exchange = exports.chickenBonds = exports.maker = exports.liquity = exports.curveUsd = exports.spark = exports.compoundV3 = exports.compoundV2 = exports.morphoAaveV3 = exports.morphoAaveV2 = exports.aaveV3 = exports.aaveV2 = void 0;
29
+ exports.fluid = exports.eulerV2 = exports.llamaLend = exports.morphoBlue = exports.helpers = exports.markets = exports.moneymarket = exports.multicall = exports.staking = exports.exchange = exports.chickenBonds = exports.maker = exports.liquityV2 = exports.liquity = exports.curveUsd = exports.spark = exports.compoundV3 = exports.compoundV2 = exports.morphoAaveV3 = exports.morphoAaveV2 = exports.aaveV3 = exports.aaveV2 = void 0;
30
30
  require("./setup");
31
+ const fluid = __importStar(require("./fluid"));
32
+ exports.fluid = fluid;
31
33
  const aaveV3 = __importStar(require("./aaveV3"));
32
34
  exports.aaveV3 = aaveV3;
33
35
  const morphoAaveV3 = __importStar(require("./morphoAaveV3"));
@@ -46,6 +48,8 @@ const curveUsd = __importStar(require("./curveUsd"));
46
48
  exports.curveUsd = curveUsd;
47
49
  const liquity = __importStar(require("./liquity"));
48
50
  exports.liquity = liquity;
51
+ const liquityV2 = __importStar(require("./liquityV2"));
52
+ exports.liquityV2 = liquityV2;
49
53
  const maker = __importStar(require("./maker"));
50
54
  exports.maker = maker;
51
55
  const staking = __importStar(require("./staking"));
@@ -0,0 +1,18 @@
1
+ import Web3 from 'web3';
2
+ import { EthAddress, NetworkNumber } from '../types/common';
3
+ import { InnerLiquityV2MarketData, LiquityV2AssetsData, LiquityV2MarketData, LiquityV2MarketInfo, LiquityV2TroveData } from '../types';
4
+ export declare const getLiquityV2MarketData: (web3: Web3, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, mainnetWeb3: Web3) => Promise<LiquityV2MarketData>;
5
+ export declare const getLiquityV2UserTroveIds: (web3: Web3, network: NetworkNumber, selectedMarket: LiquityV2MarketInfo, troveNFTAddress: EthAddress, limitBlocksForEventFetching: boolean, account: EthAddress) => Promise<{
6
+ troves: {
7
+ troveId: string;
8
+ }[];
9
+ nextFreeTroveIndex: string;
10
+ }>;
11
+ export declare const getDebtInFrontLiquityV2: (viewContract: any, marketAddress: EthAddress, troveId: string, accumulatedSum?: string, iterations?: number) => Promise<string>;
12
+ export declare const getLiquityV2TroveData: (web3: Web3, network: NetworkNumber, { selectedMarket, assetsData, marketData, troveId, }: {
13
+ selectedMarket: LiquityV2MarketInfo;
14
+ assetsData: LiquityV2AssetsData;
15
+ marketData: InnerLiquityV2MarketData;
16
+ troveId: string;
17
+ }) => Promise<LiquityV2TroveData>;
18
+ export declare const getLiquityV2ClaimableCollateral: (collSurplusPoolAddress: EthAddress, account: EthAddress, web3: Web3, network: NetworkNumber) => Promise<string>;
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getLiquityV2ClaimableCollateral = exports.getLiquityV2TroveData = exports.getDebtInFrontLiquityV2 = exports.getLiquityV2UserTroveIds = exports.getLiquityV2MarketData = void 0;
16
+ const decimal_js_1 = __importDefault(require("decimal.js"));
17
+ const tokens_1 = require("@defisaver/tokens");
18
+ const contracts_1 = require("../contracts");
19
+ const types_1 = require("../types");
20
+ const staking_1 = require("../staking");
21
+ const liquityV2Helpers_1 = require("../helpers/liquityV2Helpers");
22
+ const utils_1 = require("../services/utils");
23
+ const constants_1 = require("../constants");
24
+ const getLiquityV2MarketData = (web3, network, selectedMarket, mainnetWeb3) => __awaiter(void 0, void 0, void 0, function* () {
25
+ const viewContract = (0, contracts_1.LiquityV2ViewContract)(web3, network);
26
+ const { marketAddress, debtToken, collateralToken } = selectedMarket;
27
+ const data = yield viewContract.methods.getMarketData(marketAddress).call();
28
+ const hintHelperAddress = data.hintHelpers;
29
+ const troveNFTAddress = data.troveNFT;
30
+ const borrowerOperationsAddress = data.borrowerOperations;
31
+ const troveManagerAddress = data.troveManager;
32
+ const stabilityPoolAddress = data.stabilityPool;
33
+ const collSurplusPoolAddress = data.collSurplusPool;
34
+ const activePoolAddress = data.activePool;
35
+ const minCollRatio = new decimal_js_1.default(data.MCR).div(1e16).toString();
36
+ const criticalCollRatio = new decimal_js_1.default(data.CCR).div(1e18).toString();
37
+ const totalMarketBorrow = (0, tokens_1.assetAmountInEth)(data.entireSystemDebt);
38
+ const totalMarketSupply = (0, tokens_1.assetAmountInEth)(data.entireSystemColl);
39
+ const collPrice = (0, tokens_1.assetAmountInEth)(data.collPrice);
40
+ const totalCollRatio = new decimal_js_1.default(totalMarketSupply).mul(collPrice).div(totalMarketBorrow).toString();
41
+ const leftToBorrowGlobal = new decimal_js_1.default(totalMarketSupply).mul(collPrice).div(criticalCollRatio).sub(totalMarketBorrow)
42
+ .toString();
43
+ const minCollAmountForCurrentBorrow = new decimal_js_1.default(totalMarketBorrow).mul(criticalCollRatio).div(collPrice).toString();
44
+ const leftToWithdrawGlobal = new decimal_js_1.default(totalMarketSupply).sub(minCollAmountForCurrentBorrow).toString();
45
+ const assetsData = {};
46
+ assetsData[debtToken] = {
47
+ symbol: debtToken,
48
+ address: (0, tokens_1.getAssetInfo)(debtToken, network).address,
49
+ price: '1',
50
+ totalSupply: '0',
51
+ totalBorrow: totalMarketBorrow,
52
+ canBeSupplied: false,
53
+ canBeBorrowed: true,
54
+ leftToBorrowGlobal,
55
+ leftToWithdrawGlobal: '0',
56
+ };
57
+ assetsData[collateralToken] = {
58
+ symbol: collateralToken,
59
+ address: (0, tokens_1.getAssetInfo)((0, utils_1.ethToWeth)(collateralToken), network).address,
60
+ price: collPrice,
61
+ totalSupply: totalMarketSupply,
62
+ totalBorrow: '0',
63
+ canBeSupplied: true,
64
+ canBeBorrowed: false,
65
+ leftToBorrowGlobal: '0',
66
+ leftToWithdrawGlobal,
67
+ };
68
+ if (staking_1.STAKING_ASSETS.includes(collateralToken)) {
69
+ assetsData[collateralToken].incentiveSupplyApy = yield (0, staking_1.getStakingApy)(collateralToken, mainnetWeb3);
70
+ assetsData[collateralToken].incentiveSupplyToken = collateralToken;
71
+ }
72
+ return {
73
+ assetsData,
74
+ marketData: {
75
+ minCollRatio,
76
+ totalCollRatio: new decimal_js_1.default(totalCollRatio).mul(100).toString(),
77
+ criticalCollRatio: new decimal_js_1.default(criticalCollRatio).mul(100).toString(),
78
+ isUnderCollateralized: new decimal_js_1.default(totalCollRatio).lt(criticalCollRatio),
79
+ hintHelperAddress,
80
+ troveNFTAddress,
81
+ borrowerOperationsAddress,
82
+ troveManagerAddress,
83
+ stabilityPoolAddress,
84
+ collSurplusPoolAddress,
85
+ activePoolAddress,
86
+ },
87
+ };
88
+ });
89
+ exports.getLiquityV2MarketData = getLiquityV2MarketData;
90
+ const _getUserTroves = (viewContract, account, marketAddress, startIndex = 0, endIndex = 100) => __awaiter(void 0, void 0, void 0, function* () { return viewContract.methods.getUserTroves(account, marketAddress, startIndex, endIndex).call(); });
91
+ const getUserTroves = (viewContract, account, marketAddress, startIndex = 0, endIndex = 100, troves = []) => __awaiter(void 0, void 0, void 0, function* () {
92
+ const result = yield _getUserTroves(viewContract, account, marketAddress, startIndex, endIndex);
93
+ const newStartIndex = endIndex + 1;
94
+ const nextFreeTroveIndex = result.nextFreeTroveIndex;
95
+ const existingTroves = [...troves, ...result.troves];
96
+ if (nextFreeTroveIndex !== '-1')
97
+ return { troves: existingTroves.filter((trove) => trove.ownedByUser), nextFreeTroveIndex };
98
+ return getUserTroves(viewContract, account, marketAddress, newStartIndex, newStartIndex + 100, existingTroves);
99
+ });
100
+ const TransferEventSig = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
101
+ const nftContractCreationBlockMapping = {
102
+ ETH: 21686215,
103
+ wstETH: 21686238,
104
+ rETH: 21686257,
105
+ };
106
+ const getTransferredTroves = (web3, network, troveNFTAddress, limitBlocksForEventFetching, collAsset, account) => __awaiter(void 0, void 0, void 0, function* () {
107
+ const nftContract = (0, contracts_1.createContractWrapper)(web3, network, 'LiquityV2TroveNFT', troveNFTAddress);
108
+ // @ts-ignore
109
+ const nftContractCreationBlock = nftContractCreationBlockMapping[collAsset];
110
+ const currentBlock = yield web3.eth.getBlockNumber();
111
+ const events = yield nftContract.getPastEvents(TransferEventSig, {
112
+ filter: { to: account },
113
+ fromBlock: limitBlocksForEventFetching ? (currentBlock - 1000) : nftContractCreationBlock,
114
+ });
115
+ const userTransferredTroves = events.filter((event) => !(0, utils_1.compareAddresses)(event.returnValues.from, constants_1.ZERO_ADDRESS) && (0, utils_1.compareAddresses)(event.returnValues.to, account));
116
+ // check if the last know transfer address is the user
117
+ userTransferredTroves.forEach((event, index) => {
118
+ const otherTransfers = events.filter((e) => event.blockNumber < e.blockNumber && e.returnValues.tokenId === event.returnValues.tokenId);
119
+ // @ts-ignore
120
+ userTransferredTroves[index].invalid = !!otherTransfers.length;
121
+ });
122
+ // @ts-ignore
123
+ return userTransferredTroves.filter((event) => !event.invalid).map((event) => ({ troveId: event.returnValues.tokenId }));
124
+ });
125
+ const getLiquityV2UserTroveIds = (web3, network, selectedMarket, troveNFTAddress, limitBlocksForEventFetching, account) => __awaiter(void 0, void 0, void 0, function* () {
126
+ const viewContract = (0, contracts_1.LiquityV2ViewContract)(web3, network);
127
+ const [{ troves: userTroves, nextFreeTroveIndex }, userTransferredTroves] = yield Promise.all([
128
+ getUserTroves(viewContract, account, selectedMarket.marketAddress),
129
+ getTransferredTroves(web3, network, troveNFTAddress, limitBlocksForEventFetching, selectedMarket.collateralToken, account),
130
+ ]);
131
+ const troves = [...userTroves.map(({ troveId }) => ({ troveId })), ...userTransferredTroves];
132
+ const filteredTroves = troves.filter((value, index, self) => index === self.findIndex((t) => (t.troveId === value.troveId)));
133
+ return { troves: filteredTroves, nextFreeTroveIndex };
134
+ });
135
+ exports.getLiquityV2UserTroveIds = getLiquityV2UserTroveIds;
136
+ const _getDebtInFront = (viewContract, marketAddress, troveId, accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () { return viewContract.methods.getDebtInFront(marketAddress, troveId, accumulatedSum, iterations).call(); });
137
+ const getDebtInFrontLiquityV2 = (viewContract, marketAddress, troveId, accumulatedSum = '0', iterations = 2000) => __awaiter(void 0, void 0, void 0, function* () {
138
+ const { debt, next } = yield _getDebtInFront(viewContract, marketAddress, troveId, accumulatedSum, iterations);
139
+ if (next === '0')
140
+ return (0, tokens_1.assetAmountInEth)(debt);
141
+ return (0, exports.getDebtInFrontLiquityV2)(viewContract, marketAddress, next, debt, iterations);
142
+ });
143
+ exports.getDebtInFrontLiquityV2 = getDebtInFrontLiquityV2;
144
+ const getLiquityV2TroveData = (web3, network, { selectedMarket, assetsData, marketData, troveId, }) => __awaiter(void 0, void 0, void 0, function* () {
145
+ const viewContract = (0, contracts_1.LiquityV2ViewContract)(web3, network);
146
+ const { minCollRatio } = marketData;
147
+ const { collateralToken, marketAddress, debtToken } = selectedMarket;
148
+ const [data, debtInFront] = yield Promise.all([
149
+ viewContract.methods.getTroveInfo(marketAddress, troveId).call(),
150
+ (0, exports.getDebtInFrontLiquityV2)(viewContract, marketAddress, troveId),
151
+ ]);
152
+ const usedAssets = {};
153
+ const debtAssetData = assetsData[debtToken];
154
+ const borrowed = (0, tokens_1.assetAmountInEth)(data.debtAmount);
155
+ usedAssets[debtToken] = {
156
+ symbol: debtToken,
157
+ supplied: '0',
158
+ suppliedUsd: '0',
159
+ borrowed,
160
+ borrowedUsd: new decimal_js_1.default(borrowed).mul(debtAssetData.price).toString(),
161
+ isBorrowed: true,
162
+ isSupplied: false,
163
+ };
164
+ const collAssetData = assetsData[collateralToken];
165
+ const suppliedColl = (0, tokens_1.assetAmountInEth)(data.collAmount);
166
+ usedAssets[collateralToken] = {
167
+ symbol: collateralToken,
168
+ supplied: suppliedColl,
169
+ suppliedUsd: new decimal_js_1.default(suppliedColl).mul(collAssetData.price).toString(),
170
+ borrowed: '0',
171
+ borrowedUsd: '0',
172
+ isBorrowed: false,
173
+ isSupplied: true,
174
+ collateral: true,
175
+ };
176
+ const collRatio = new decimal_js_1.default(data.TCRatio).div(1e16).toString();
177
+ const interestRate = new decimal_js_1.default(data.annualInterestRate).div(1e16).toString();
178
+ const interestBatchManager = data.interestBatchManager;
179
+ const payload = Object.assign(Object.assign({ usedAssets,
180
+ troveId,
181
+ interestRate,
182
+ interestBatchManager,
183
+ debtInFront, troveStatus: types_1.LIQUITY_V2_TROVE_STATUS_ENUM[parseInt(data.status, 10)] }, (0, liquityV2Helpers_1.getLiquityV2AggregatedPositionData)({
184
+ usedAssets, assetsData, minCollRatio, interestRate,
185
+ })), { collRatio });
186
+ return payload;
187
+ });
188
+ exports.getLiquityV2TroveData = getLiquityV2TroveData;
189
+ const getLiquityV2ClaimableCollateral = (collSurplusPoolAddress, account, web3, network) => __awaiter(void 0, void 0, void 0, function* () {
190
+ const collSurplusPoolContract = (0, contracts_1.createContractWrapper)(web3, network, 'LiquityV2CollSurplusPool', collSurplusPoolAddress);
191
+ const claimableCollateral = yield collSurplusPoolContract.methods.getCollateral(account).call();
192
+ return claimableCollateral;
193
+ });
194
+ exports.getLiquityV2ClaimableCollateral = getLiquityV2ClaimableCollateral;
@@ -10,7 +10,7 @@ exports.aaveV1AssetsDefaultMarket = [
10
10
  exports.aaveV2AssetsDefaultMarket = ['USDT', 'WBTC', 'ETH', 'YFI', 'ZRX', 'UNI', 'AAVE', 'BAT', 'BUSD', 'DAI', 'ENJ', 'KNCL', 'LINK', 'MANA', 'MKR', 'REN', 'SNX', 'SUSD', 'TUSD', 'USDC', 'CRV', 'GUSD', 'BAL', 'xSUSHI', 'RENFIL', 'RAI', 'AMPL', 'USDP', 'DPI', 'FRAX', 'FEI', 'stETH', 'ENS', 'UST', 'CVX', '1INCH', 'LUSD'];
11
11
  exports.morphoAaveV2AssetDefaultMarket = ['DAI', 'ETH', 'USDC', 'USDT', 'WBTC', 'stETH', 'CRV'];
12
12
  exports.morphoAaveV3AssetEthMarket = ['ETH', 'wstETH', 'DAI', 'USDC', 'WBTC', 'rETH', 'cbETH', 'sDAI', 'USDT'];
13
- exports.aaveV3AssetsDefaultMarketEth = ['ETH', 'wstETH', 'WBTC', 'USDC', 'DAI', 'LINK', 'AAVE', 'cbETH', 'USDT', 'rETH', 'LUSD', 'CRV', 'MKR', 'SNX', 'BAL', 'UNI', 'LDO', 'ENS', '1INCH', 'FRAX', 'GHO', 'RPL', 'sDAI', 'STG', 'KNC', 'FXS', 'crvUSD', 'PYUSD', 'weETH', 'osETH', 'USDe', 'ETHx', 'sUSDe', 'tBTC', 'cbBTC', 'USDS', 'rsETH'];
13
+ exports.aaveV3AssetsDefaultMarketEth = ['ETH', 'wstETH', 'WBTC', 'USDC', 'DAI', 'LINK', 'AAVE', 'cbETH', 'USDT', 'rETH', 'LUSD', 'CRV', 'MKR', 'SNX', 'BAL', 'UNI', 'LDO', 'ENS', '1INCH', 'FRAX', 'GHO', 'RPL', 'sDAI', 'STG', 'KNC', 'FXS', 'crvUSD', 'PYUSD', 'weETH', 'osETH', 'USDe', 'ETHx', 'sUSDe', 'tBTC', 'cbBTC', 'USDS', 'rsETH', 'LBTC'];
14
14
  exports.aaveV3AssetsDefaultMarketOpt = [
15
15
  'DAI', 'USDC.e', 'USDT', 'SUSD', 'AAVE', 'LINK', 'WBTC', 'ETH', 'OP', 'wstETH', 'LUSD', 'MAI', 'rETH', 'USDC',
16
16
  ];