@suilend/sdk 1.1.99 → 2.0.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.
- package/_generated/_dependencies/source/0x1/ascii/structs.d.ts +7 -7
- package/_generated/_dependencies/source/0x1/ascii/structs.js +35 -75
- package/_generated/_dependencies/source/0x1/index.js +3 -6
- package/_generated/_dependencies/source/0x1/option/structs.d.ts +3 -3
- package/_generated/_dependencies/source/0x1/option/structs.js +31 -69
- package/_generated/_dependencies/source/0x1/type-name/structs.d.ts +5 -5
- package/_generated/_dependencies/source/0x1/type-name/structs.js +20 -25
- package/_generated/_dependencies/source/0x2/bag/structs.d.ts +7 -7
- package/_generated/_dependencies/source/0x2/bag/structs.js +24 -29
- package/_generated/_dependencies/source/0x2/balance/structs.d.ts +7 -7
- package/_generated/_dependencies/source/0x2/balance/structs.js +49 -56
- package/_generated/_dependencies/source/0x2/index.js +3 -6
- package/_generated/_dependencies/source/0x2/object/structs.d.ts +8 -8
- package/_generated/_dependencies/source/0x2/object/structs.js +34 -41
- package/_generated/_dependencies/source/0x2/object-table/structs.d.ts +7 -7
- package/_generated/_dependencies/source/0x2/object-table/structs.js +31 -36
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/i64/structs.d.ts +5 -5
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/i64/structs.js +23 -28
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/index.js +4 -7
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price/structs.d.ts +11 -11
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price/structs.js +32 -37
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-feed/structs.d.ts +23 -23
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-feed/structs.js +29 -34
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-identifier/structs.d.ts +4 -4
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-identifier/structs.js +21 -59
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-info/structs.d.ts +55 -55
- package/_generated/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-info/structs.js +46 -53
- package/_generated/_framework/reified.d.ts +2 -2
- package/_generated/_framework/reified.js +27 -40
- package/_generated/_framework/util.js +26 -40
- package/_generated/_framework/vector.d.ts +4 -4
- package/_generated/_framework/vector.js +16 -21
- package/_generated/suilend/cell/structs.d.ts +4 -4
- package/_generated/suilend/cell/structs.js +31 -36
- package/_generated/suilend/decimal/structs.d.ts +4 -4
- package/_generated/suilend/decimal/structs.js +19 -24
- package/_generated/suilend/index.js +8 -12
- package/_generated/suilend/lending-market/functions.d.ts +1 -0
- package/_generated/suilend/lending-market/functions.js +271 -302
- package/_generated/suilend/lending-market/structs.d.ts +146 -146
- package/_generated/suilend/lending-market/structs.js +549 -617
- package/_generated/suilend/lending-market-registry/functions.js +7 -11
- package/_generated/suilend/liquidity-mining/structs.d.ts +50 -50
- package/_generated/suilend/liquidity-mining/structs.js +159 -205
- package/_generated/suilend/obligation/structs.d.ts +106 -106
- package/_generated/suilend/obligation/structs.js +313 -363
- package/_generated/suilend/rate-limiter/functions.js +23 -31
- package/_generated/suilend/rate-limiter/structs.d.ts +15 -15
- package/_generated/suilend/rate-limiter/structs.js +49 -56
- package/_generated/suilend/reserve/structs.d.ts +139 -139
- package/_generated/suilend/reserve/structs.js +397 -451
- package/_generated/suilend/reserve-config/functions.js +149 -190
- package/_generated/suilend/reserve-config/structs.d.ts +33 -33
- package/_generated/suilend/reserve-config/structs.js +109 -149
- package/api/events.js +1 -5
- package/api/index.js +1 -17
- package/client.d.ts +10 -10
- package/client.js +118 -128
- package/index.js +7 -23
- package/lib/constants.js +3 -9
- package/lib/index.js +5 -21
- package/lib/initialize.d.ts +3 -3
- package/lib/initialize.js +103 -140
- package/lib/liquidityMining.d.ts +3 -3
- package/lib/liquidityMining.js +57 -72
- package/lib/pyth.js +9 -14
- package/lib/strategyOwnerCap.js +106 -119
- package/lib/transactions.js +2 -7
- package/lib/types.js +4 -7
- package/mmt.js +2 -5
- package/package.json +1 -1
- package/parsers/apiReserveAssetDataEvent.js +25 -33
- package/parsers/index.js +5 -21
- package/parsers/lendingMarket.d.ts +1 -1
- package/parsers/lendingMarket.js +12 -19
- package/parsers/obligation.js +19 -26
- package/parsers/rateLimiter.js +11 -19
- package/parsers/reserve.d.ts +1 -1
- package/parsers/reserve.js +42 -85
- package/strategies.d.ts +11 -11
- package/strategies.js +547 -586
- package/swap/index.js +2 -18
- package/swap/quote.js +57 -65
- package/swap/transaction.d.ts +2 -2
- package/swap/transaction.js +40 -35
- package/utils/events.d.ts +3 -3
- package/utils/events.js +18 -35
- package/utils/index.js +16 -40
- package/utils/obligation.d.ts +4 -4
- package/utils/obligation.js +17 -60
- package/utils/simulate.js +118 -143
package/utils/simulate.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,107 +7,95 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const uuid_1 = require("uuid");
|
|
20
|
-
const structs_1 = require("../_generated/suilend/decimal/structs");
|
|
21
|
-
const structs_2 = require("../_generated/suilend/liquidity-mining/structs");
|
|
22
|
-
const constants_1 = require("../lib/constants");
|
|
23
|
-
const utils_2 = require("../utils");
|
|
10
|
+
import { bcs } from "@mysten/sui/bcs";
|
|
11
|
+
import { toHex } from "@mysten/sui/utils";
|
|
12
|
+
import BigNumber from "bignumber.js";
|
|
13
|
+
import { v4 as uuidv4 } from "uuid";
|
|
14
|
+
import { Decimal } from "../_generated/suilend/decimal/structs";
|
|
15
|
+
import { UserReward, } from "../_generated/suilend/liquidity-mining/structs";
|
|
16
|
+
import { WAD } from "../lib/constants";
|
|
17
|
+
import { linearlyInterpolate } from "../utils";
|
|
24
18
|
/**
|
|
25
19
|
* @deprecated since version 1.0.8. Use `calculateUtilizationPercent` instead.
|
|
26
20
|
*/
|
|
27
|
-
const calculateUtilizationRate = (reserve) => {
|
|
21
|
+
export const calculateUtilizationRate = (reserve) => {
|
|
28
22
|
const { mintDecimals } = reserve;
|
|
29
23
|
// From parsers/reserve.ts > parseReserve
|
|
30
|
-
const availableAmount = new
|
|
31
|
-
const borrowedAmount = new
|
|
32
|
-
.div(
|
|
24
|
+
const availableAmount = new BigNumber(reserve.availableAmount.toString()).div(10 ** mintDecimals);
|
|
25
|
+
const borrowedAmount = new BigNumber(reserve.borrowedAmount.value.toString())
|
|
26
|
+
.div(WAD)
|
|
33
27
|
.div(10 ** mintDecimals);
|
|
34
28
|
const depositedAmount = borrowedAmount.plus(availableAmount);
|
|
35
29
|
return depositedAmount.eq(0)
|
|
36
|
-
? new
|
|
30
|
+
? new BigNumber(0)
|
|
37
31
|
: borrowedAmount.div(depositedAmount);
|
|
38
32
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return (0, exports.calculateUtilizationRate)(reserve).times(100);
|
|
33
|
+
export const calculateUtilizationPercent = (reserve) => {
|
|
34
|
+
return calculateUtilizationRate(reserve).times(100);
|
|
42
35
|
};
|
|
43
|
-
exports.calculateUtilizationPercent = calculateUtilizationPercent;
|
|
44
36
|
/**
|
|
45
37
|
* @deprecated since version 1.0.8. Use `calculateBorrowAprPercent` instead.
|
|
46
38
|
*/
|
|
47
|
-
const calculateBorrowApr = (reserve) => {
|
|
39
|
+
export const calculateBorrowApr = (reserve) => {
|
|
48
40
|
const config = reserve.config.element;
|
|
49
|
-
const utilizationPercent =
|
|
41
|
+
const utilizationPercent = calculateUtilizationPercent(reserve);
|
|
50
42
|
// From parsers/reserve.ts > parseReserveConfig
|
|
51
43
|
const interestRate = config.interestRateUtils.map((util, index) => ({
|
|
52
|
-
id: (
|
|
53
|
-
utilPercent: new
|
|
54
|
-
aprPercent: new
|
|
44
|
+
id: uuidv4(),
|
|
45
|
+
utilPercent: new BigNumber(util.toString()),
|
|
46
|
+
aprPercent: new BigNumber(config.interestRateAprs[index].toString()).div(100),
|
|
55
47
|
}));
|
|
56
|
-
return
|
|
48
|
+
return linearlyInterpolate(interestRate, "utilPercent", "aprPercent", utilizationPercent);
|
|
57
49
|
};
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return (0, exports.calculateBorrowApr)(reserve);
|
|
50
|
+
export const calculateBorrowAprPercent = (reserve) => {
|
|
51
|
+
return calculateBorrowApr(reserve);
|
|
61
52
|
};
|
|
62
|
-
exports.calculateBorrowAprPercent = calculateBorrowAprPercent;
|
|
63
53
|
/**
|
|
64
54
|
* @deprecated since version 1.0.8. Use `calculateDepositAprPercent` instead.
|
|
65
55
|
*/
|
|
66
|
-
const calculateSupplyApr = (reserve) => {
|
|
56
|
+
export const calculateSupplyApr = (reserve) => {
|
|
67
57
|
const config = reserve.config.element;
|
|
68
|
-
const utilizationPercent =
|
|
69
|
-
const borrowAprPercent =
|
|
58
|
+
const utilizationPercent = calculateUtilizationPercent(reserve);
|
|
59
|
+
const borrowAprPercent = calculateBorrowAprPercent(reserve);
|
|
70
60
|
// From parsers/reserve.ts > parseReserveConfig
|
|
71
61
|
const spreadFeeBps = Number(config.spreadFeeBps.toString());
|
|
72
|
-
return new
|
|
62
|
+
return new BigNumber(utilizationPercent.div(100))
|
|
73
63
|
.times(borrowAprPercent.div(100))
|
|
74
64
|
.times(1 - spreadFeeBps / 10000)
|
|
75
65
|
.times(100);
|
|
76
66
|
};
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return (0, exports.calculateSupplyApr)(reserve);
|
|
67
|
+
export const calculateDepositAprPercent = (reserve) => {
|
|
68
|
+
return calculateSupplyApr(reserve);
|
|
80
69
|
};
|
|
81
|
-
|
|
82
|
-
const compoundReserveInterest = (reserve, nowS) => {
|
|
70
|
+
export const compoundReserveInterest = (reserve, nowS) => {
|
|
83
71
|
var _a, _b;
|
|
84
72
|
const timeElapsedSeconds = nowS - Number(reserve.interestLastUpdateTimestampS);
|
|
85
73
|
if (timeElapsedSeconds === 0) {
|
|
86
74
|
return reserve;
|
|
87
75
|
}
|
|
88
|
-
|
|
89
|
-
const compoundedBorrowRate = new
|
|
90
|
-
.plus(
|
|
76
|
+
BigNumber.config({ POW_PRECISION: 100 });
|
|
77
|
+
const compoundedBorrowRate = new BigNumber(1)
|
|
78
|
+
.plus(calculateBorrowAprPercent(reserve)
|
|
91
79
|
.div(100)
|
|
92
80
|
.div(365 * 24 * 60 * 60))
|
|
93
|
-
.pow(new
|
|
81
|
+
.pow(new BigNumber(timeElapsedSeconds).toNumber());
|
|
94
82
|
const updatedReserve = Object.assign({}, reserve);
|
|
95
|
-
const oldBorrowedAmount =
|
|
96
|
-
const oldCumulativeBorrowRate =
|
|
97
|
-
const oldUnclaimedSpreadFees =
|
|
98
|
-
updatedReserve.cumulativeBorrowRate =
|
|
83
|
+
const oldBorrowedAmount = decimalToBigNumber(reserve.borrowedAmount);
|
|
84
|
+
const oldCumulativeBorrowRate = decimalToBigNumber(reserve.cumulativeBorrowRate);
|
|
85
|
+
const oldUnclaimedSpreadFees = decimalToBigNumber(reserve.unclaimedSpreadFees);
|
|
86
|
+
updatedReserve.cumulativeBorrowRate = stringToDecimal(compoundedBorrowRate.multipliedBy(oldCumulativeBorrowRate).toString());
|
|
99
87
|
const netNewDebt = oldBorrowedAmount.multipliedBy(compoundedBorrowRate.minus(1));
|
|
100
|
-
const spreadFee = new
|
|
101
|
-
updatedReserve.unclaimedSpreadFees =
|
|
88
|
+
const spreadFee = new BigNumber(((_b = (_a = reserve.config.element) === null || _a === void 0 ? void 0 : _a.spreadFeeBps) === null || _b === void 0 ? void 0 : _b.toString()) || 0);
|
|
89
|
+
updatedReserve.unclaimedSpreadFees = stringToDecimal(oldUnclaimedSpreadFees
|
|
102
90
|
.plus(netNewDebt.multipliedBy(spreadFee.dividedBy(10000)))
|
|
103
91
|
.toString());
|
|
104
|
-
updatedReserve.borrowedAmount =
|
|
92
|
+
updatedReserve.borrowedAmount = stringToDecimal(oldBorrowedAmount.plus(netNewDebt).toString());
|
|
105
93
|
updatedReserve.interestLastUpdateTimestampS = BigInt(nowS);
|
|
106
|
-
updatedReserve.depositsPoolRewardManager =
|
|
107
|
-
updatedReserve.borrowsPoolRewardManager =
|
|
94
|
+
updatedReserve.depositsPoolRewardManager = updatePoolRewardsManager(updatedReserve.depositsPoolRewardManager, nowS * 1000);
|
|
95
|
+
updatedReserve.borrowsPoolRewardManager = updatePoolRewardsManager(updatedReserve.borrowsPoolRewardManager, nowS * 1000);
|
|
108
96
|
return updatedReserve;
|
|
109
97
|
};
|
|
110
|
-
|
|
111
|
-
const updatePoolRewardsManager = (manager, nowMs) => {
|
|
98
|
+
export const updatePoolRewardsManager = (manager, nowMs) => {
|
|
112
99
|
const updatedManager = Object.assign({}, manager);
|
|
113
100
|
const timeElapsedMs = nowMs - Number(manager.lastUpdateTimeMs);
|
|
114
101
|
if (manager.totalShares === BigInt(0) || timeElapsedMs === 0) {
|
|
@@ -127,13 +114,13 @@ const updatePoolRewardsManager = (manager, nowMs) => {
|
|
|
127
114
|
const startTimeMs = Number(poolReward.startTimeMs);
|
|
128
115
|
const lastUpdateTimeMs = Number(manager.lastUpdateTimeMs);
|
|
129
116
|
const timePassedMs = Math.min(nowMs, endTimeMs) - Math.max(startTimeMs, lastUpdateTimeMs);
|
|
130
|
-
const unlockedRewards = new
|
|
117
|
+
const unlockedRewards = new BigNumber(poolReward.totalRewards.toString())
|
|
131
118
|
.multipliedBy(timePassedMs)
|
|
132
119
|
.dividedBy(Number(poolReward.endTimeMs - poolReward.startTimeMs));
|
|
133
|
-
updatedPoolReward.allocatedRewards =
|
|
120
|
+
updatedPoolReward.allocatedRewards = stringToDecimal(decimalToBigNumber(poolReward.allocatedRewards)
|
|
134
121
|
.plus(unlockedRewards)
|
|
135
122
|
.toString());
|
|
136
|
-
updatedPoolReward.cumulativeRewardsPerShare =
|
|
123
|
+
updatedPoolReward.cumulativeRewardsPerShare = stringToDecimal(decimalToBigNumber(poolReward.cumulativeRewardsPerShare)
|
|
137
124
|
.plus(unlockedRewards.dividedBy(Number(manager.totalShares)))
|
|
138
125
|
.toString());
|
|
139
126
|
return updatedPoolReward;
|
|
@@ -141,28 +128,26 @@ const updatePoolRewardsManager = (manager, nowMs) => {
|
|
|
141
128
|
updatedManager.lastUpdateTimeMs = BigInt(nowMs);
|
|
142
129
|
return updatedManager;
|
|
143
130
|
};
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
const priceIdentifiers = Array.from(new Set(reserves.map((r) => (0, utils_1.toHEX)(new Uint8Array(r.priceIdentifier.bytes)))));
|
|
131
|
+
export const refreshReservePrice = (reserves, pythConnection) => __awaiter(void 0, void 0, void 0, function* () {
|
|
132
|
+
const priceIdentifiers = Array.from(new Set(reserves.map((r) => toHex(new Uint8Array(r.priceIdentifier.bytes)))));
|
|
147
133
|
const priceFeeds = yield pythConnection.getLatestPriceFeeds(priceIdentifiers);
|
|
148
134
|
if (!priceFeeds)
|
|
149
135
|
return reserves;
|
|
150
136
|
const updatedReserves = [];
|
|
151
137
|
for (let i = 0; i < reserves.length; i++) {
|
|
152
138
|
const reserve = reserves[i];
|
|
153
|
-
const priceFeed = priceFeeds.find((p) => p.id === (
|
|
139
|
+
const priceFeed = priceFeeds.find((p) => p.id === toHex(new Uint8Array(reserve.priceIdentifier.bytes)));
|
|
154
140
|
if (!priceFeed)
|
|
155
141
|
throw new Error(`Price feed not found for reserve ${reserve.coinType.name}`);
|
|
156
142
|
const newReserve = Object.assign({}, reserve);
|
|
157
|
-
newReserve.price =
|
|
158
|
-
newReserve.smoothedPrice =
|
|
143
|
+
newReserve.price = stringToDecimal(priceFeed.getPriceUnchecked().getPriceAsNumberUnchecked().toString());
|
|
144
|
+
newReserve.smoothedPrice = stringToDecimal(priceFeed.getEmaPriceUnchecked().getPriceAsNumberUnchecked().toString());
|
|
159
145
|
newReserve.priceLastUpdateTimestampS = BigInt(priceFeed.getPriceUnchecked().publishTime);
|
|
160
146
|
updatedReserves.push(newReserve);
|
|
161
147
|
}
|
|
162
148
|
return updatedReserves;
|
|
163
149
|
});
|
|
164
|
-
|
|
165
|
-
const updateUserRewardManager = (poolManager, userRewardManager, nowMs) => {
|
|
150
|
+
export const updateUserRewardManager = (poolManager, userRewardManager, nowMs) => {
|
|
166
151
|
const updatedUserRewardManager = Object.assign({}, userRewardManager);
|
|
167
152
|
for (let i = 0; i < poolManager.poolRewards.length; i++) {
|
|
168
153
|
const poolReward = poolManager.poolRewards[i];
|
|
@@ -175,20 +160,20 @@ const updateUserRewardManager = (poolManager, userRewardManager, nowMs) => {
|
|
|
175
160
|
const oldReward = updatedUserRewardManager.rewards[i];
|
|
176
161
|
const reward = Object.assign({}, oldReward);
|
|
177
162
|
if (oldReward != null) {
|
|
178
|
-
const newRewards =
|
|
179
|
-
.minus(
|
|
180
|
-
.multipliedBy(new
|
|
181
|
-
reward.earnedRewards =
|
|
163
|
+
const newRewards = decimalToBigNumber(poolReward.cumulativeRewardsPerShare)
|
|
164
|
+
.minus(decimalToBigNumber(oldReward.cumulativeRewardsPerShare))
|
|
165
|
+
.multipliedBy(new BigNumber(Number(userRewardManager.share)));
|
|
166
|
+
reward.earnedRewards = stringToDecimal(decimalToBigNumber(oldReward.earnedRewards).plus(newRewards).toString());
|
|
182
167
|
reward.cumulativeRewardsPerShare = poolReward.cumulativeRewardsPerShare;
|
|
183
168
|
updatedUserRewardManager.rewards[i] = reward;
|
|
184
169
|
}
|
|
185
170
|
else {
|
|
186
171
|
if (userRewardManager.lastUpdateTimeMs <= poolReward.endTimeMs) {
|
|
187
|
-
updatedUserRewardManager.rewards[i] =
|
|
172
|
+
updatedUserRewardManager.rewards[i] = UserReward.fromFields({
|
|
188
173
|
pool_reward_id: { bytes: poolReward.id.slice(2) },
|
|
189
|
-
earned_rewards:
|
|
190
|
-
?
|
|
191
|
-
: new
|
|
174
|
+
earned_rewards: stringToDecimal((userRewardManager.lastUpdateTimeMs <= poolReward.startTimeMs
|
|
175
|
+
? decimalToBigNumber(poolReward.cumulativeRewardsPerShare).multipliedBy(new BigNumber(Number(userRewardManager.share)))
|
|
176
|
+
: new BigNumber(0)).toString()),
|
|
192
177
|
cumulative_rewards_per_share: poolReward.cumulativeRewardsPerShare,
|
|
193
178
|
});
|
|
194
179
|
}
|
|
@@ -197,13 +182,12 @@ const updateUserRewardManager = (poolManager, userRewardManager, nowMs) => {
|
|
|
197
182
|
updatedUserRewardManager.lastUpdateTimeMs = BigInt(nowMs);
|
|
198
183
|
return updatedUserRewardManager;
|
|
199
184
|
};
|
|
200
|
-
|
|
201
|
-
const refreshObligation = (unrefreshedObligation, refreshedReserves) => {
|
|
185
|
+
export const refreshObligation = (unrefreshedObligation, refreshedReserves) => {
|
|
202
186
|
const obligation = Object.assign({}, unrefreshedObligation);
|
|
203
187
|
// Refresh Deposits
|
|
204
|
-
let depositValueUsd = new
|
|
205
|
-
let allowedBorrowValueUsd = new
|
|
206
|
-
let unhealthyBorrowValueUsd = new
|
|
188
|
+
let depositValueUsd = new BigNumber(0);
|
|
189
|
+
let allowedBorrowValueUsd = new BigNumber(0);
|
|
190
|
+
let unhealthyBorrowValueUsd = new BigNumber(0);
|
|
207
191
|
for (let i = 0; i < obligation.deposits.length; i++) {
|
|
208
192
|
const deposit = Object.assign({}, obligation.deposits[i]);
|
|
209
193
|
const reserve = refreshedReserves.find((r) => r.coinType.name === deposit.coinType.name);
|
|
@@ -212,22 +196,22 @@ const refreshObligation = (unrefreshedObligation, refreshedReserves) => {
|
|
|
212
196
|
}
|
|
213
197
|
const config = reserve.config.element;
|
|
214
198
|
obligation.userRewardManagers[Number(deposit.userRewardManagerIndex)] =
|
|
215
|
-
|
|
216
|
-
const marketValue =
|
|
217
|
-
const marketValueLowerBound =
|
|
218
|
-
deposit.marketValue =
|
|
219
|
-
depositValueUsd = depositValueUsd.plus(new
|
|
220
|
-
allowedBorrowValueUsd = allowedBorrowValueUsd.plus(marketValueLowerBound.multipliedBy(new
|
|
221
|
-
unhealthyBorrowValueUsd = unhealthyBorrowValueUsd.plus(marketValue.multipliedBy(new
|
|
199
|
+
updateUserRewardManager(reserve.depositsPoolRewardManager, obligation.userRewardManagers[Number(deposit.userRewardManagerIndex)], Date.now());
|
|
200
|
+
const marketValue = getCTokenMarketValue(reserve, new BigNumber(deposit.depositedCtokenAmount.toString()));
|
|
201
|
+
const marketValueLowerBound = getCTokenMarketValueLowerBound(reserve, new BigNumber(deposit.depositedCtokenAmount.toString()));
|
|
202
|
+
deposit.marketValue = stringToDecimal(marketValue.toString());
|
|
203
|
+
depositValueUsd = depositValueUsd.plus(new BigNumber(marketValue.toString()));
|
|
204
|
+
allowedBorrowValueUsd = allowedBorrowValueUsd.plus(marketValueLowerBound.multipliedBy(new BigNumber(config.openLtvPct / 100)));
|
|
205
|
+
unhealthyBorrowValueUsd = unhealthyBorrowValueUsd.plus(marketValue.multipliedBy(new BigNumber(config.closeLtvPct / 100)));
|
|
222
206
|
obligation.deposits[i] = deposit;
|
|
223
207
|
}
|
|
224
|
-
obligation.unhealthyBorrowValueUsd =
|
|
225
|
-
obligation.allowedBorrowValueUsd =
|
|
226
|
-
obligation.depositedValueUsd =
|
|
208
|
+
obligation.unhealthyBorrowValueUsd = stringToDecimal(unhealthyBorrowValueUsd.toString());
|
|
209
|
+
obligation.allowedBorrowValueUsd = stringToDecimal(allowedBorrowValueUsd.toString());
|
|
210
|
+
obligation.depositedValueUsd = stringToDecimal(depositValueUsd.toString());
|
|
227
211
|
// Refresh borrows
|
|
228
|
-
let unweightedBorrowedValueUsd = new
|
|
229
|
-
let weightedBorrowedValueUsd = new
|
|
230
|
-
let weightedBorrowedValueUpperBoundUsd = new
|
|
212
|
+
let unweightedBorrowedValueUsd = new BigNumber(0);
|
|
213
|
+
let weightedBorrowedValueUsd = new BigNumber(0);
|
|
214
|
+
let weightedBorrowedValueUpperBoundUsd = new BigNumber(0);
|
|
231
215
|
for (let i = 0; i < obligation.borrows.length; i++) {
|
|
232
216
|
const unrefreshedBorrow = obligation.borrows[i];
|
|
233
217
|
const reserve = refreshedReserves.find((r) => r.coinType.name == unrefreshedBorrow.coinType.name);
|
|
@@ -235,78 +219,69 @@ const refreshObligation = (unrefreshedObligation, refreshedReserves) => {
|
|
|
235
219
|
throw new Error(`Unable to find reserve for coin type ${unrefreshedBorrow.coinType.name}`);
|
|
236
220
|
}
|
|
237
221
|
const config = reserve.config.element;
|
|
238
|
-
const borrow = Object.assign({},
|
|
222
|
+
const borrow = Object.assign({}, compoundDebt(unrefreshedBorrow, reserve));
|
|
239
223
|
obligation.userRewardManagers[Number(borrow.userRewardManagerIndex)] =
|
|
240
|
-
|
|
241
|
-
const marketValue =
|
|
242
|
-
.multipliedBy(
|
|
243
|
-
.dividedBy(new
|
|
244
|
-
const upperBoundPrice =
|
|
245
|
-
const marketValueUpperBound =
|
|
224
|
+
updateUserRewardManager(reserve.borrowsPoolRewardManager, obligation.userRewardManagers[Number(borrow.userRewardManagerIndex)], Date.now());
|
|
225
|
+
const marketValue = decimalToBigNumber(borrow.borrowedAmount)
|
|
226
|
+
.multipliedBy(decimalToBigNumber(reserve.price))
|
|
227
|
+
.dividedBy(new BigNumber(10 ** reserve.mintDecimals));
|
|
228
|
+
const upperBoundPrice = BigNumber.max(decimalToBigNumber(reserve.price), decimalToBigNumber(reserve.smoothedPrice));
|
|
229
|
+
const marketValueUpperBound = decimalToBigNumber(reserve.borrowedAmount)
|
|
246
230
|
.multipliedBy(upperBoundPrice)
|
|
247
|
-
.dividedBy(new
|
|
248
|
-
borrow.marketValue =
|
|
231
|
+
.dividedBy(new BigNumber(10 ** reserve.mintDecimals));
|
|
232
|
+
borrow.marketValue = stringToDecimal(marketValue.toString());
|
|
249
233
|
unweightedBorrowedValueUsd = unweightedBorrowedValueUsd.plus(marketValue);
|
|
250
|
-
const borrowWeight = new
|
|
234
|
+
const borrowWeight = new BigNumber((config.borrowWeightBps / BigInt(10000)).toString());
|
|
251
235
|
weightedBorrowedValueUsd = weightedBorrowedValueUsd.plus(marketValue.multipliedBy(borrowWeight));
|
|
252
236
|
weightedBorrowedValueUpperBoundUsd =
|
|
253
237
|
weightedBorrowedValueUpperBoundUsd.plus(marketValueUpperBound.multipliedBy(borrowWeight));
|
|
254
238
|
}
|
|
255
|
-
obligation.unweightedBorrowedValueUsd =
|
|
256
|
-
obligation.weightedBorrowedValueUpperBoundUsd =
|
|
257
|
-
obligation.weightedBorrowedValueUsd =
|
|
239
|
+
obligation.unweightedBorrowedValueUsd = stringToDecimal(unweightedBorrowedValueUsd.toString());
|
|
240
|
+
obligation.weightedBorrowedValueUpperBoundUsd = stringToDecimal(weightedBorrowedValueUpperBoundUsd.toString());
|
|
241
|
+
obligation.weightedBorrowedValueUsd = stringToDecimal(weightedBorrowedValueUsd.toString());
|
|
258
242
|
return obligation;
|
|
259
243
|
};
|
|
260
|
-
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
return structs_1.Decimal.fromBcs(bcs_1.bcs.u256().serialize(adjustedValue).toBytes());
|
|
244
|
+
export const numberToDecimal = (value) => {
|
|
245
|
+
const adjustedValue = Math.round(value * +WAD);
|
|
246
|
+
return Decimal.fromBcs(bcs.u256().serialize(adjustedValue).toBytes());
|
|
264
247
|
};
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
return (0, exports.numberToDecimal)(new bignumber_js_1.default(value).toNumber());
|
|
248
|
+
export const stringToDecimal = (value) => {
|
|
249
|
+
return numberToDecimal(new BigNumber(value).toNumber());
|
|
268
250
|
};
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
return new bignumber_js_1.default(value.value.toString()).div(constants_1.WAD);
|
|
251
|
+
export const decimalToBigNumber = (value) => {
|
|
252
|
+
return new BigNumber(value.value.toString()).div(WAD);
|
|
272
253
|
};
|
|
273
|
-
|
|
274
|
-
const
|
|
275
|
-
|
|
276
|
-
return (0, exports.decimalToBigNumber)(reserve.price)
|
|
254
|
+
export const getCTokenMarketValue = (reserve, depositedCTokenAmount) => {
|
|
255
|
+
const liquidityAmount = depositedCTokenAmount.multipliedBy(cTokenRatio(reserve));
|
|
256
|
+
return decimalToBigNumber(reserve.price)
|
|
277
257
|
.multipliedBy(liquidityAmount)
|
|
278
|
-
.dividedBy(new
|
|
258
|
+
.dividedBy(new BigNumber(10 ** reserve.mintDecimals));
|
|
279
259
|
};
|
|
280
|
-
|
|
281
|
-
const
|
|
282
|
-
const
|
|
283
|
-
const price = bignumber_js_1.default.min((0, exports.decimalToBigNumber)(reserve.price), (0, exports.decimalToBigNumber)(reserve.smoothedPrice));
|
|
260
|
+
export const getCTokenMarketValueLowerBound = (reserve, depositedCTokenAmount) => {
|
|
261
|
+
const liquidityAmount = depositedCTokenAmount.multipliedBy(cTokenRatio(reserve));
|
|
262
|
+
const price = BigNumber.min(decimalToBigNumber(reserve.price), decimalToBigNumber(reserve.smoothedPrice));
|
|
284
263
|
return price
|
|
285
264
|
.multipliedBy(liquidityAmount)
|
|
286
|
-
.dividedBy(new
|
|
265
|
+
.dividedBy(new BigNumber(10 ** reserve.mintDecimals));
|
|
287
266
|
};
|
|
288
|
-
|
|
289
|
-
const cTokenRatio = (reserve) => {
|
|
267
|
+
export const cTokenRatio = (reserve) => {
|
|
290
268
|
if (reserve.ctokenSupply === BigInt(0)) {
|
|
291
|
-
return new
|
|
269
|
+
return new BigNumber(1);
|
|
292
270
|
}
|
|
293
|
-
return
|
|
271
|
+
return totalSupply(reserve).dividedBy(new BigNumber(reserve.ctokenSupply.toString()));
|
|
294
272
|
};
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
.
|
|
299
|
-
.minus((0, exports.decimalToBigNumber)(reserve.unclaimedSpreadFees));
|
|
273
|
+
export const totalSupply = (reserve) => {
|
|
274
|
+
return new BigNumber(reserve.availableAmount.toString())
|
|
275
|
+
.plus(decimalToBigNumber(reserve.borrowedAmount))
|
|
276
|
+
.minus(decimalToBigNumber(reserve.unclaimedSpreadFees));
|
|
300
277
|
};
|
|
301
|
-
|
|
302
|
-
const compoundDebt = (borrow, reserve) => {
|
|
278
|
+
export const compoundDebt = (borrow, reserve) => {
|
|
303
279
|
const borrowCopy = Object.assign({}, borrow);
|
|
304
|
-
const newCumulativeBorrowRate =
|
|
305
|
-
const compoundedInterestRate = newCumulativeBorrowRate.dividedBy(
|
|
306
|
-
borrowCopy.borrowedAmount =
|
|
280
|
+
const newCumulativeBorrowRate = decimalToBigNumber(reserve.cumulativeBorrowRate);
|
|
281
|
+
const compoundedInterestRate = newCumulativeBorrowRate.dividedBy(decimalToBigNumber(borrow.cumulativeBorrowRate));
|
|
282
|
+
borrowCopy.borrowedAmount = stringToDecimal(decimalToBigNumber(borrow.borrowedAmount)
|
|
307
283
|
.multipliedBy(compoundedInterestRate)
|
|
308
284
|
.toString());
|
|
309
|
-
borrowCopy.cumulativeBorrowRate =
|
|
285
|
+
borrowCopy.cumulativeBorrowRate = stringToDecimal(newCumulativeBorrowRate.toString());
|
|
310
286
|
return borrowCopy;
|
|
311
287
|
};
|
|
312
|
-
exports.compoundDebt = compoundDebt;
|