@aurigami/sdk 1.23.1 → 1.24.0
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.
- package/dist/SDK.d.ts +48 -65
- package/dist/SDK.js +165 -0
- package/dist/abis/index.d.ts +18 -18
- package/dist/abis/index.js +39 -0
- package/dist/consts/constants.d.ts +139 -139
- package/dist/consts/constants.js +185 -0
- package/dist/consts/decimals.d.ts +1 -1
- package/dist/consts/decimals.js +35 -0
- package/dist/consts/deployments.d.ts +3 -3
- package/dist/consts/deployments.js +9 -0
- package/dist/consts/dummy.d.ts +13 -13
- package/dist/consts/dummy.js +43 -0
- package/dist/consts/index.d.ts +5 -5
- package/dist/consts/index.js +9 -0
- package/dist/consts/symbols.d.ts +1 -1
- package/dist/consts/symbols.js +10 -0
- package/dist/entities/BlockchainEntity.d.ts +13 -13
- package/dist/entities/BlockchainEntity.js +36 -0
- package/dist/entities/auriEnv.d.ts +34 -40
- package/dist/entities/auriEnv.js +166 -0
- package/dist/entities/index.d.ts +4 -4
- package/dist/entities/index.js +8 -0
- package/dist/entities/token.d.ts +7 -7
- package/dist/entities/token.js +27 -0
- package/dist/entities/tokenAmount.d.ts +13 -13
- package/dist/entities/tokenAmount.js +52 -0
- package/dist/helpers/aurigami-api.d.ts +13 -13
- package/dist/helpers/aurigami-api.js +26 -0
- package/dist/helpers/aurora-api-helpers.d.ts +1 -1
- package/dist/helpers/aurora-api-helpers.js +15 -0
- package/dist/helpers/graphql-helpers.d.ts +1 -1
- package/dist/helpers/graphql-helpers.js +13 -0
- package/dist/helpers/helpers.d.ts +23 -40
- package/dist/helpers/helpers.js +148 -0
- package/dist/helpers/historicalPriceFetcher.d.ts +15 -15
- package/dist/helpers/historicalPriceFetcher.js +142 -0
- package/dist/helpers/index.d.ts +7 -7
- package/dist/helpers/index.js +11 -0
- package/dist/helpers/kyber-aggregator-api.d.ts +5 -5
- package/dist/helpers/kyber-aggregator-api.js +27 -0
- package/dist/helpers/multicall.d.ts +40 -0
- package/dist/helpers/multicall.js +203 -0
- package/dist/helpers/notification-api.d.ts +2 -2
- package/dist/helpers/notification-api.js +21 -0
- package/dist/helpers/one-inch-aggregator-api.d.ts +21 -21
- package/dist/helpers/one-inch-aggregator-api.js +19 -0
- package/dist/helpers/priceFetcher.d.ts +36 -36
- package/dist/helpers/priceFetcher.js +296 -0
- package/dist/helpers/subgraphQuery.d.ts +1 -1
- package/dist/helpers/subgraphQuery.js +22 -0
- package/dist/helpers/transfer-event-query.d.ts +17 -26
- package/dist/helpers/transfer-event-query.js +41 -0
- package/dist/index.d.ts +7 -7
- package/dist/index.js +17 -8
- package/dist/interactors/Airdrop.d.ts +17 -26
- package/dist/interactors/Airdrop.js +48 -0
- package/dist/interactors/MoneyMarket.d.ts +63 -63
- package/dist/interactors/MoneyMarket.js +392 -0
- package/dist/interactors/Multicall.d.ts +15 -18
- package/dist/interactors/Multicall.js +36 -0
- package/dist/interactors/Papermill.d.ts +27 -57
- package/dist/interactors/Papermill.js +125 -0
- package/dist/interactors/PlyGame.d.ts +30 -42
- package/dist/interactors/PlyGame.js +146 -0
- package/dist/interactors/PlyTokenLock.d.ts +16 -16
- package/dist/interactors/PlyTokenLock.js +44 -0
- package/dist/interactors/Pulp.d.ts +17 -17
- package/dist/interactors/Pulp.js +43 -0
- package/dist/interactors/Referral.d.ts +35 -78
- package/dist/interactors/Referral.js +158 -0
- package/dist/interactors/Staking.d.ts +20 -26
- package/dist/interactors/Staking.js +106 -0
- package/dist/interactors/index.d.ts +9 -9
- package/dist/interactors/index.js +13 -0
- package/dist/interactors/misc.d.ts +31 -39
- package/dist/interactors/misc.js +318 -0
- package/dist/types/index.d.ts +175 -197
- package/dist/types/index.js +18 -0
- package/package.json +3 -3
- package/src/SDK.ts +1 -1
- package/src/entities/auriEnv.ts +29 -27
- package/src/helpers/historicalPriceFetcher.ts +9 -12
- package/src/helpers/multicall.ts +251 -0
- package/src/helpers/priceFetcher.ts +19 -20
- package/src/interactors/Airdrop.ts +2 -2
- package/src/interactors/MoneyMarket.ts +31 -27
- package/src/interactors/Multicall.ts +3 -3
- package/src/interactors/Papermill.ts +9 -9
- package/src/interactors/PlyGame.ts +10 -10
- package/src/interactors/PlyTokenLock.ts +2 -3
- package/src/interactors/Pulp.ts +4 -2
- package/src/interactors/Referral.ts +6 -6
- package/src/interactors/Staking.ts +13 -9
- package/src/interactors/misc.ts +7 -5
- package/src/types/index.ts +32 -2
- package/dist/sdk.cjs.development.js +0 -6325
- package/dist/sdk.cjs.development.js.map +0 -1
- package/dist/sdk.cjs.production.min.js +0 -2
- package/dist/sdk.cjs.production.min.js.map +0 -1
- package/dist/sdk.esm.js +0 -6193
- package/dist/sdk.esm.js.map +0 -1
|
@@ -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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
|