@aurigami/sdk 1.23.1 → 1.24.1

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 (123) hide show
  1. package/dist/SDK.d.ts +48 -65
  2. package/dist/SDK.js +165 -0
  3. package/dist/abis/index.d.ts +18 -18
  4. package/dist/abis/index.js +39 -0
  5. package/dist/consts/constants.d.ts +139 -139
  6. package/dist/consts/constants.js +185 -0
  7. package/dist/consts/decimals.d.ts +1 -1
  8. package/dist/consts/decimals.js +35 -0
  9. package/dist/consts/deployments.d.ts +3 -3
  10. package/dist/consts/deployments.js +9 -0
  11. package/dist/consts/dummy.d.ts +13 -13
  12. package/dist/consts/dummy.js +43 -0
  13. package/dist/consts/index.d.ts +5 -5
  14. package/dist/consts/index.js +9 -0
  15. package/dist/consts/symbols.d.ts +1 -1
  16. package/dist/consts/symbols.js +10 -0
  17. package/dist/entities/BlockchainEntity.d.ts +13 -13
  18. package/dist/entities/BlockchainEntity.js +36 -0
  19. package/dist/entities/auriEnv.d.ts +34 -40
  20. package/dist/entities/auriEnv.js +166 -0
  21. package/dist/entities/index.d.ts +4 -4
  22. package/dist/entities/index.js +8 -0
  23. package/dist/entities/token.d.ts +7 -7
  24. package/dist/entities/token.js +27 -0
  25. package/dist/entities/tokenAmount.d.ts +13 -13
  26. package/dist/entities/tokenAmount.js +52 -0
  27. package/dist/helpers/aurigami-api.d.ts +13 -13
  28. package/dist/helpers/aurigami-api.js +26 -0
  29. package/dist/helpers/aurora-api-helpers.d.ts +1 -1
  30. package/dist/helpers/aurora-api-helpers.js +15 -0
  31. package/dist/helpers/graphql-helpers.d.ts +1 -1
  32. package/dist/helpers/graphql-helpers.js +13 -0
  33. package/dist/helpers/helpers.d.ts +23 -40
  34. package/dist/helpers/helpers.js +148 -0
  35. package/dist/helpers/historicalPriceFetcher.d.ts +15 -15
  36. package/dist/helpers/historicalPriceFetcher.js +142 -0
  37. package/dist/helpers/index.d.ts +7 -7
  38. package/dist/helpers/index.js +11 -0
  39. package/dist/helpers/kyber-aggregator-api.d.ts +5 -5
  40. package/dist/helpers/kyber-aggregator-api.js +27 -0
  41. package/dist/helpers/multicall.d.ts +40 -0
  42. package/dist/helpers/multicall.js +203 -0
  43. package/dist/helpers/notification-api.d.ts +2 -2
  44. package/dist/helpers/notification-api.js +21 -0
  45. package/dist/helpers/one-inch-aggregator-api.d.ts +21 -21
  46. package/dist/helpers/one-inch-aggregator-api.js +19 -0
  47. package/dist/helpers/priceFetcher.d.ts +36 -36
  48. package/dist/helpers/priceFetcher.js +292 -0
  49. package/dist/helpers/subgraphQuery.d.ts +1 -1
  50. package/dist/helpers/subgraphQuery.js +22 -0
  51. package/dist/helpers/transfer-event-query.d.ts +17 -26
  52. package/dist/helpers/transfer-event-query.js +41 -0
  53. package/dist/index.d.ts +7 -7
  54. package/dist/index.js +17 -8
  55. package/dist/interactors/Airdrop.d.ts +17 -26
  56. package/dist/interactors/Airdrop.js +48 -0
  57. package/dist/interactors/MoneyMarket.d.ts +63 -63
  58. package/dist/interactors/MoneyMarket.js +392 -0
  59. package/dist/interactors/Multicall.d.ts +15 -18
  60. package/dist/interactors/Multicall.js +36 -0
  61. package/dist/interactors/Papermill.d.ts +27 -57
  62. package/dist/interactors/Papermill.js +125 -0
  63. package/dist/interactors/PlyGame.d.ts +30 -42
  64. package/dist/interactors/PlyGame.js +146 -0
  65. package/dist/interactors/PlyTokenLock.d.ts +16 -16
  66. package/dist/interactors/PlyTokenLock.js +44 -0
  67. package/dist/interactors/Pulp.d.ts +17 -17
  68. package/dist/interactors/Pulp.js +43 -0
  69. package/dist/interactors/Referral.d.ts +35 -78
  70. package/dist/interactors/Referral.js +158 -0
  71. package/dist/interactors/Staking.d.ts +20 -26
  72. package/dist/interactors/Staking.js +106 -0
  73. package/dist/interactors/index.d.ts +9 -9
  74. package/dist/interactors/index.js +13 -0
  75. package/dist/interactors/misc.d.ts +31 -39
  76. package/dist/interactors/misc.js +318 -0
  77. package/dist/types/index.d.ts +175 -197
  78. package/dist/types/index.js +18 -0
  79. package/package.json +4 -16
  80. package/dist/sdk.cjs.development.js +0 -6325
  81. package/dist/sdk.cjs.development.js.map +0 -1
  82. package/dist/sdk.cjs.production.min.js +0 -2
  83. package/dist/sdk.cjs.production.min.js.map +0 -1
  84. package/dist/sdk.esm.js +0 -6193
  85. package/dist/sdk.esm.js.map +0 -1
  86. package/src/SDK.ts +0 -223
  87. package/src/abis/index.ts +0 -38
  88. package/src/consts/constants.ts +0 -210
  89. package/src/consts/decimals.ts +0 -31
  90. package/src/consts/deployments.ts +0 -4
  91. package/src/consts/dummy.ts +0 -51
  92. package/src/consts/index.ts +0 -5
  93. package/src/consts/symbols.ts +0 -9
  94. package/src/entities/BlockchainEntity.ts +0 -29
  95. package/src/entities/auriEnv.ts +0 -178
  96. package/src/entities/index.ts +0 -4
  97. package/src/entities/token.ts +0 -21
  98. package/src/entities/tokenAmount.ts +0 -48
  99. package/src/helpers/aurigami-api.ts +0 -42
  100. package/src/helpers/aurora-api-helpers.ts +0 -17
  101. package/src/helpers/graphql-helpers.ts +0 -8
  102. package/src/helpers/helpers.ts +0 -212
  103. package/src/helpers/historicalPriceFetcher.ts +0 -203
  104. package/src/helpers/index.ts +0 -7
  105. package/src/helpers/kyber-aggregator-api.ts +0 -37
  106. package/src/helpers/notification-api.ts +0 -22
  107. package/src/helpers/one-inch-aggregator-api.ts +0 -45
  108. package/src/helpers/priceFetcher.ts +0 -389
  109. package/src/helpers/subgraphQuery.ts +0 -17
  110. package/src/helpers/transfer-event-query.ts +0 -68
  111. package/src/index.ts +0 -14
  112. package/src/interactors/Airdrop.ts +0 -72
  113. package/src/interactors/MoneyMarket.ts +0 -482
  114. package/src/interactors/Multicall.ts +0 -50
  115. package/src/interactors/Papermill.ts +0 -185
  116. package/src/interactors/PlyGame.ts +0 -172
  117. package/src/interactors/PlyTokenLock.ts +0 -47
  118. package/src/interactors/Pulp.ts +0 -39
  119. package/src/interactors/Referral.ts +0 -214
  120. package/src/interactors/Staking.ts +0 -152
  121. package/src/interactors/index.ts +0 -9
  122. package/src/interactors/misc.ts +0 -431
  123. package/src/types/index.ts +0 -222
@@ -0,0 +1,318 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MiscRead = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
6
+ const ethers_1 = require("ethers");
7
+ const abis = tslib_1.__importStar(require("../abis"));
8
+ const consts = tslib_1.__importStar(require("../consts"));
9
+ const entities_1 = require("../entities");
10
+ const helpers_1 = require("../helpers/helpers");
11
+ const priceFetcher_1 = require("../helpers/priceFetcher");
12
+ const types = tslib_1.__importStar(require("../types"));
13
+ const MoneyMarket_1 = require("./MoneyMarket");
14
+ const Multicall_1 = require("./Multicall");
15
+ const Staking_1 = require("./Staking");
16
+ class MiscRead extends entities_1.BlockchainEntityRead {
17
+ constructor(networkConnection) {
18
+ super(networkConnection);
19
+ Object.defineProperty(this, "env", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: void 0
24
+ });
25
+ Object.defineProperty(this, "stakingRead", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: void 0
30
+ });
31
+ this.stakingRead = new Staking_1.StakingRead(networkConnection);
32
+ this.env = new entities_1.AuriEnv(networkConnection);
33
+ }
34
+ async getUserDetails(userAddress) {
35
+ const marketCount = consts.networkAddresses.auTokens.length;
36
+ var userMarketDetails = [], assetsIn;
37
+ var totalBorrowLimit = new bignumber_js_1.default(0);
38
+ for (const auToken of consts.networkAddresses.auTokens) {
39
+ const userMarketDetail = {};
40
+ userMarketDetails.push(userMarketDetail);
41
+ userMarketDetail.market = auToken.underlying;
42
+ const moneyMarket = new MoneyMarket_1.MoneyMarketRead(this._networkConnection, auToken.address, auToken.underlying);
43
+ const [depositBalance, borrowBalance, collateralRatio, underlyingPrice] = await Promise.all([
44
+ moneyMarket.getUserDepositBalance(userAddress),
45
+ moneyMarket.getUserBorrowBalance(userAddress),
46
+ moneyMarket.getCollateralRatio(),
47
+ (0, priceFetcher_1.fetchPrice)(moneyMarket.underlying.address, this._networkConnection.provider),
48
+ ]);
49
+ userMarketDetail.depositBalance = depositBalance;
50
+ userMarketDetail.borrowBalance = borrowBalance;
51
+ userMarketDetail.collateralRatio = collateralRatio.toNumber();
52
+ userMarketDetail.underlyingPrice = underlyingPrice.toString();
53
+ }
54
+ assetsIn = await this.env.comptroller.raw.getAssetsIn(userAddress);
55
+ var depositValues = [];
56
+ for (var i = 0; i < marketCount; i++) {
57
+ const auToken = consts.networkAddresses.auTokens[i];
58
+ if (assetsIn.find((auAddress) => (0, helpers_1.isSameAddress)(auToken.address, auAddress)) !==
59
+ undefined) {
60
+ userMarketDetails[i].isCollateral = true;
61
+ }
62
+ else {
63
+ userMarketDetails[i].isCollateral = false;
64
+ }
65
+ depositValues.push((0, priceFetcher_1.calcValuation)(userMarketDetails[i].depositBalance, new bignumber_js_1.default(userMarketDetails[i].underlyingPrice)));
66
+ }
67
+ totalBorrowLimit = depositValues.reduce((p, v, index) => {
68
+ if (userMarketDetails[index].isCollateral)
69
+ return p.plus(v.multipliedBy(userMarketDetails[index].collateralRatio));
70
+ return p;
71
+ }, new bignumber_js_1.default(0));
72
+ var accountLiquidity = await this.env.comptroller.raw.getAccountLiquidity(userAddress);
73
+ var borrowedvaluation = totalBorrowLimit.minus(new bignumber_js_1.default(accountLiquidity[0].toString()).div((0, helpers_1.decimalFactor)(18)));
74
+ if (borrowedvaluation.lt('0.00001')) {
75
+ borrowedvaluation = new bignumber_js_1.default(0);
76
+ }
77
+ const bufferedBorrowLimit = totalBorrowLimit.multipliedBy(consts.BORROW_LIMIT_BUFFER);
78
+ const minimumBorrowLimitAllowed = borrowedvaluation.div(consts.BORROW_LIMIT_BUFFER);
79
+ var borrowableAmount;
80
+ if (bufferedBorrowLimit.lte(borrowedvaluation)) {
81
+ borrowableAmount = new bignumber_js_1.default(0);
82
+ }
83
+ else {
84
+ borrowableAmount = bufferedBorrowLimit.minus(borrowedvaluation);
85
+ }
86
+ for (var i = 0; i < marketCount; i++) {
87
+ const auToken = consts.networkAddresses.auTokens[i];
88
+ const moneyMarket = new MoneyMarket_1.MoneyMarketRead(this._networkConnection, auToken.address, auToken.underlying);
89
+ const borrowLimitMargin = totalBorrowLimit.minus(minimumBorrowLimitAllowed).gt(0)
90
+ ? totalBorrowLimit.minus(minimumBorrowLimitAllowed)
91
+ : new bignumber_js_1.default(0);
92
+ const maxWithdrawCap = borrowLimitMargin
93
+ .div(userMarketDetails[i].collateralRatio)
94
+ .div(userMarketDetails[i].underlyingPrice);
95
+ userMarketDetails[i].maxWithdrawableAmount =
96
+ userMarketDetails[i].isCollateral &&
97
+ maxWithdrawCap.lt(userMarketDetails[i].depositBalance.formattedAmount())
98
+ ? new entities_1.TokenAmount(moneyMarket.underlying, maxWithdrawCap.toFixed(24), false)
99
+ : new entities_1.TokenAmount(moneyMarket.underlying, userMarketDetails[i].depositBalance.rawAmount());
100
+ }
101
+ return {
102
+ markets: userMarketDetails,
103
+ borrowLimit: {
104
+ currency: 'USD',
105
+ amount: bufferedBorrowLimit.toFixed(consts.DECIMAL_PRECISION),
106
+ },
107
+ borrowableAmount: {
108
+ currency: 'USD',
109
+ amount: borrowableAmount.toFixed(consts.DECIMAL_PRECISION),
110
+ },
111
+ };
112
+ }
113
+ async getTokenPrice(token) {
114
+ const price = await (0, priceFetcher_1.fetchPrice)(token.address, this._networkConnection.provider);
115
+ return {
116
+ currency: 'USD',
117
+ amount: price.toFixed(consts.DECIMAL_PRECISION),
118
+ };
119
+ }
120
+ async calcBorrowPower(tokenAmount) {
121
+ const autoken = consts.networkAddresses.auTokens.find((auToken) => (0, helpers_1.isSameAddress)(auToken.underlying, tokenAmount.token.address));
122
+ const moneyMarket = new MoneyMarket_1.MoneyMarketRead(this._networkConnection, autoken.address, autoken.underlying);
123
+ const collateralRatio = await moneyMarket.getCollateralRatio();
124
+ const underlyingPrice = await (0, priceFetcher_1.fetchPrice)(tokenAmount.token.address, this._networkConnection.provider);
125
+ const borrowPower = (0, priceFetcher_1.calcValuation)(tokenAmount, new bignumber_js_1.default(underlyingPrice))
126
+ .multipliedBy(collateralRatio)
127
+ .multipliedBy(consts.BORROW_LIMIT_BUFFER);
128
+ return {
129
+ currency: 'USD',
130
+ amount: borrowPower.toFixed(consts.DECIMAL_PRECISION),
131
+ };
132
+ }
133
+ calcHypotheticalStats({ userMarketDetail, currentBorrowLimit, currentBorrowValuation, action, tokenAmount, }) {
134
+ var newBorrowLimit = new bignumber_js_1.default(currentBorrowLimit.amount), newBorrowValuation = new bignumber_js_1.default(currentBorrowValuation.amount);
135
+ switch (action) {
136
+ case types.MarketAction.EnableCollateral:
137
+ case types.MarketAction.DisableCollateral:
138
+ var deltaBorrowLimit = (0, priceFetcher_1.calcValuation)(userMarketDetail.depositBalance, new bignumber_js_1.default(userMarketDetail.underlyingPrice))
139
+ .multipliedBy(userMarketDetail.collateralRatio)
140
+ .multipliedBy(consts.BORROW_LIMIT_BUFFER);
141
+ newBorrowLimit =
142
+ action == types.MarketAction.EnableCollateral
143
+ ? newBorrowLimit.plus(deltaBorrowLimit)
144
+ : newBorrowLimit.minus(deltaBorrowLimit);
145
+ break;
146
+ case types.MarketAction.Deposit:
147
+ case types.MarketAction.Withdraw:
148
+ deltaBorrowLimit = (0, priceFetcher_1.calcValuation)(tokenAmount, new bignumber_js_1.default(userMarketDetail.underlyingPrice))
149
+ .multipliedBy(userMarketDetail.collateralRatio)
150
+ .multipliedBy(consts.BORROW_LIMIT_BUFFER);
151
+ newBorrowLimit =
152
+ action == types.MarketAction.Deposit
153
+ ? newBorrowLimit.plus(deltaBorrowLimit)
154
+ : newBorrowLimit.minus(deltaBorrowLimit);
155
+ break;
156
+ case types.MarketAction.Borrow:
157
+ case types.MarketAction.Repay:
158
+ var deltaBorrowValuation = (0, priceFetcher_1.calcValuation)(tokenAmount, new bignumber_js_1.default(userMarketDetail.underlyingPrice));
159
+ newBorrowValuation =
160
+ action == types.MarketAction.Borrow
161
+ ? newBorrowValuation.plus(deltaBorrowValuation)
162
+ : newBorrowValuation.minus(deltaBorrowValuation);
163
+ break;
164
+ }
165
+ return {
166
+ newBorrowLimit: {
167
+ amount: newBorrowLimit.toFixed(consts.DECIMAL_PRECISION),
168
+ currency: 'USD',
169
+ },
170
+ newBorrowUtilization: newBorrowLimit.eq(0)
171
+ ? newBorrowValuation.eq(0)
172
+ ? 0
173
+ : 9999.99
174
+ : newBorrowValuation.div(newBorrowLimit).toNumber(),
175
+ };
176
+ }
177
+ async getPlyCirculatingSupply() {
178
+ const multicallRead = new Multicall_1.MulticallRead(this._networkConnection);
179
+ const baseBalanceOfCall = {
180
+ contract: this.env.ply,
181
+ method: 'balanceOf',
182
+ returnTypes: ['uint256'],
183
+ };
184
+ const listAddrs = [
185
+ consts.networkAddresses.misc.TEAM_MULTISIG,
186
+ consts.networkAddresses.misc.COMPTROLLER,
187
+ consts.networkAddresses.misc.AURIFAIRLAUNCH,
188
+ consts.networkAddresses.misc.PLY_TOKEN_LOCK,
189
+ consts.networkAddresses.misc.TEAM_MULTISIG_AURORA_PLUS,
190
+ consts.networkAddresses.misc.AURORA_PLUS,
191
+ consts.networkAddresses.misc.PULP_CONTRACT,
192
+ ];
193
+ const calls = listAddrs.map((addr) => ({
194
+ ...baseBalanceOfCall,
195
+ args: [addr],
196
+ }));
197
+ const callResults = (await multicallRead.aggregate(calls));
198
+ let circulatingSupply = ethers_1.BigNumber.from('1' + '0'.repeat(10) + '0'.repeat((0, helpers_1.getDecimal)(this.env.ply.address)));
199
+ callResults.forEach((result, i) => {
200
+ circulatingSupply = circulatingSupply.sub(result[0]);
201
+ });
202
+ return new entities_1.TokenAmount(entities_1.PLYToken, circulatingSupply.toString());
203
+ }
204
+ async getUtilisation(userAddr) {
205
+ let accountDetail = await this.env.auriInternalLens.callStatic.getAccountLiquidityAccrueInterest(userAddr);
206
+ let sumBorrow = new bignumber_js_1.default(accountDetail.sumBorrowPlusEffects.toString());
207
+ let sumCol = new bignumber_js_1.default(accountDetail.sumCollateral.toString());
208
+ return sumBorrow.dividedBy(sumCol);
209
+ }
210
+ async sneakAccounts(accounts, tokenAddresses, dust = new bignumber_js_1.default(0.1)) {
211
+ const _1E18 = ethers_1.BigNumber.from(10).pow(18);
212
+ const oracle = this.env.oracle;
213
+ const tokens = tokenAddresses.map((addr) => this.env.getContract(addr, abis.AuTokenABI.abi));
214
+ const prices = await oracle.callStatic.getUnderlyingPrices(tokenAddresses);
215
+ const exrate = await this.env.auriInternalLens.callStatic.getExchangeRates(tokenAddresses);
216
+ const res = [];
217
+ for (let addr of accounts) {
218
+ const infos = [];
219
+ for (let i = 0; i < tokens.length; ++i) {
220
+ const snapshot = await tokens[i].callStatic.getAccountSnapshot(addr);
221
+ const bal = snapshot[0].mul(exrate[i]).div(_1E18).mul(prices[i]).div(_1E18);
222
+ const bor = snapshot[1].mul(prices[i]).div(_1E18);
223
+ let balR = new bignumber_js_1.default(bal.toString()).dividedBy(_1E18.toString());
224
+ let borR = new bignumber_js_1.default(bor.toString()).dividedBy(_1E18.toString());
225
+ if (balR.lte(dust) && borR.lte(dust))
226
+ continue;
227
+ infos.push({
228
+ token: (0, helpers_1.getSymbol)(tokenAddresses[i]),
229
+ deposit: balR,
230
+ borrow: borR,
231
+ });
232
+ }
233
+ res.push({
234
+ address: addr,
235
+ tokens: infos,
236
+ });
237
+ }
238
+ return res;
239
+ }
240
+ async getLTVAndLiquidationThreshold(userAddr) {
241
+ let totalSuppliedValue = new bignumber_js_1.default(0);
242
+ let totalBorrowedValue = new bignumber_js_1.default(0);
243
+ let collateralValue = new bignumber_js_1.default(0);
244
+ const assetsIn = await this.env.comptroller.callStatic.getAssetsIn(userAddr);
245
+ const marketValues = await Promise.all(consts.networkAddresses.auTokens.map(async (auToken) => {
246
+ const moneyMarket = new MoneyMarket_1.MoneyMarketRead(this._networkConnection, auToken.address, auToken.underlying);
247
+ return Promise.all([
248
+ moneyMarket.getCollateralRatio(),
249
+ moneyMarket.getDepositBorrowValue(userAddr),
250
+ ]);
251
+ }));
252
+ consts.networkAddresses.auTokens.forEach(async (auToken, i) => { });
253
+ for (var i = 0; i < marketValues.length; i++) {
254
+ const auToken = consts.networkAddresses.auTokens[i];
255
+ const [collateralRatio, depositBorrowValue] = marketValues[i];
256
+ if (assetsIn.find((auAddress) => (0, helpers_1.isSameAddress)(auToken.address, auAddress)) !==
257
+ undefined) {
258
+ totalSuppliedValue = totalSuppliedValue.plus(depositBorrowValue.suppliedValue);
259
+ collateralValue = collateralValue.plus(depositBorrowValue.suppliedValue.times(collateralRatio));
260
+ }
261
+ totalBorrowedValue = totalBorrowedValue.plus(depositBorrowValue.borrowedValue);
262
+ }
263
+ const ltv = totalBorrowedValue.div(totalSuppliedValue);
264
+ const liquidationThreshold = collateralValue.div(totalSuppliedValue);
265
+ return {
266
+ ltv,
267
+ liquidationThreshold,
268
+ };
269
+ }
270
+ async getNetApyWithoutIncentive(userAddress) {
271
+ let sum = new bignumber_js_1.default(0);
272
+ let totalSuppliedValue = new bignumber_js_1.default(0);
273
+ let totalBorrowedValue = new bignumber_js_1.default(0);
274
+ let netApy = new bignumber_js_1.default(0);
275
+ const apys = await Promise.all(consts.networkAddresses.auTokens.map((auToken) => {
276
+ const moneyMarket = new MoneyMarket_1.MoneyMarketRead(this._networkConnection, auToken.address, auToken.underlying);
277
+ const apyWithoutIncentive = moneyMarket.getApyWithoutIncentive(userAddress);
278
+ return apyWithoutIncentive;
279
+ }));
280
+ for (const apy of apys) {
281
+ sum = sum.plus(apy.sum);
282
+ totalSuppliedValue = totalSuppliedValue.plus(apy.suppliedValue);
283
+ totalBorrowedValue = totalBorrowedValue.plus(apy.borrowedValue);
284
+ }
285
+ if (sum.gt(0)) {
286
+ netApy = sum.div(totalSuppliedValue);
287
+ }
288
+ else if (sum.lt(0)) {
289
+ netApy = sum.div(totalBorrowedValue);
290
+ }
291
+ return netApy;
292
+ }
293
+ async getNetApyWithIncentive(userAddress) {
294
+ let sum = new bignumber_js_1.default(0);
295
+ let totalSuppliedValue = new bignumber_js_1.default(0);
296
+ let totalBorrowedValue = new bignumber_js_1.default(0);
297
+ let netApy = new bignumber_js_1.default(0);
298
+ const apys = await Promise.all(consts.networkAddresses.auTokens.map((auToken) => {
299
+ const moneyMarket = new MoneyMarket_1.MoneyMarketRead(this._networkConnection, auToken.address, auToken.underlying);
300
+ const apyWithIncentive = moneyMarket.getApyWithIncentive(userAddress);
301
+ return apyWithIncentive;
302
+ }));
303
+ for (const apy of apys) {
304
+ sum = sum.plus(apy.sum);
305
+ totalSuppliedValue = totalSuppliedValue.plus(apy.suppliedValue);
306
+ totalBorrowedValue = totalBorrowedValue.plus(apy.borrowedValue);
307
+ }
308
+ if (sum.gt(0)) {
309
+ netApy = sum.div(totalSuppliedValue);
310
+ }
311
+ else if (sum.lt(0)) {
312
+ netApy = sum.div(totalBorrowedValue);
313
+ }
314
+ return netApy;
315
+ }
316
+ }
317
+ exports.MiscRead = MiscRead;
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmFjdG9ycy9taXNjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSx3RUFBcUM7QUFDckMsbUNBQXlDO0FBQ3pDLHNEQUFnQztBQUNoQywwREFBb0M7QUFDcEMsMENBQTBGO0FBQzFGLGdEQUF5RjtBQUN6RiwwREFBb0U7QUFDcEUsd0RBQWtDO0FBQ2xDLCtDQUFnRDtBQUNoRCwyQ0FBNEM7QUFDNUMsdUNBQXdDO0FBRXhDLE1BQWEsUUFBUyxTQUFRLCtCQUFvQjtJQUdoRCxZQUFZLGlCQUEwQztRQUNwRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUhYOzs7OztXQUFhO1FBQ2I7Ozs7O1dBQXlCO1FBR3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxxQkFBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLGtCQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxXQUFtQjtRQUM3QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUM1RCxJQUFJLGlCQUFpQixHQUE4QixFQUFFLEVBQ25ELFFBQWtCLENBQUM7UUFDckIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLHNCQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkQsTUFBTSxnQkFBZ0IsR0FBNEIsRUFBNkIsQ0FBQztZQUNoRixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN6QyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUM3QyxNQUFNLFdBQVcsR0FB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