@suilend/sdk 1.1.1 → 1.1.3

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 (120) hide show
  1. package/{mainnet/_generated → _generated}/_dependencies/source/0x1/ascii/structs.d.ts +3 -3
  2. package/{mainnet/_generated → _generated}/_dependencies/source/0x1/ascii/structs.js +4 -4
  3. package/{mainnet/_generated → _generated}/_dependencies/source/0x1/index.d.ts +1 -1
  4. package/{mainnet/_generated → _generated}/_dependencies/source/0x1/index.js +2 -2
  5. package/{mainnet/_generated → _generated}/_dependencies/source/0x1/option/structs.d.ts +2 -2
  6. package/{mainnet/_generated → _generated}/_dependencies/source/0x1/option/structs.js +2 -2
  7. package/{mainnet/_generated → _generated}/_dependencies/source/0x1/type-name/structs.d.ts +2 -2
  8. package/{mainnet/_generated → _generated}/_dependencies/source/0x1/type-name/structs.js +2 -2
  9. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/bag/structs.d.ts +2 -2
  10. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/bag/structs.js +2 -2
  11. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/balance/structs.d.ts +3 -3
  12. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/balance/structs.js +4 -4
  13. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/index.d.ts +1 -1
  14. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/index.js +2 -2
  15. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/object/structs.d.ts +3 -3
  16. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/object/structs.js +4 -4
  17. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/object-table/structs.d.ts +2 -2
  18. package/{mainnet/_generated → _generated}/_dependencies/source/0x2/object-table/structs.js +2 -2
  19. package/{mainnet/_generated → _generated}/suilend/index.d.ts +2 -1
  20. package/{mainnet/_generated → _generated}/suilend/index.js +5 -1
  21. package/{mainnet/_generated → _generated}/suilend/lending-market/functions.d.ts +14 -0
  22. package/{mainnet/_generated → _generated}/suilend/lending-market/functions.js +27 -1
  23. package/api/index.d.ts +1 -0
  24. package/{mainnet/utils.js → api/index.js} +1 -1
  25. package/client.d.ts +64 -0
  26. package/{core/client.js → client.js} +119 -96
  27. package/{core/constants.d.ts → constants.d.ts} +0 -4
  28. package/{core/constants.js → constants.js} +1 -6
  29. package/index.d.ts +7 -1
  30. package/index.js +7 -1
  31. package/package.json +1 -1
  32. package/{mainnet/parsers → parsers}/index.d.ts +1 -0
  33. package/{mainnet/parsers → parsers}/index.js +1 -0
  34. package/{core/parsers → parsers}/lendingMarket.d.ts +38 -37
  35. package/{core/parsers → parsers}/lendingMarket.js +14 -4
  36. package/{core/parsers → parsers}/obligation.d.ts +60 -60
  37. package/{core/parsers → parsers}/obligation.js +1 -1
  38. package/{mainnet/parsers → parsers}/rateLimiter.d.ts +10 -9
  39. package/{core/parsers → parsers}/rateLimiter.js +3 -3
  40. package/{core/parsers → parsers}/reserve.d.ts +47 -46
  41. package/{core/parsers → parsers}/reserve.js +32 -8
  42. package/types.d.ts +200 -0
  43. package/types.js +15 -0
  44. package/utils/simulate.js +316 -0
  45. package/core/client.d.ts +0 -114
  46. package/core/parsers/deps.d.ts +0 -15
  47. package/core/parsers/deps.js +0 -2
  48. package/core/parsers/rateLimiter.d.ts +0 -19
  49. package/core/types.d.ts +0 -869
  50. package/core/types.js +0 -125
  51. package/core/utils/simulate.d.ts +0 -56
  52. package/core/utils/simulate.js +0 -312
  53. package/mainnet/api/events.d.ts +0 -1
  54. package/mainnet/api/events.js +0 -17
  55. package/mainnet/client.d.ts +0 -18
  56. package/mainnet/client.js +0 -109
  57. package/mainnet/constants.d.ts +0 -3
  58. package/mainnet/constants.js +0 -20
  59. package/mainnet/index.d.ts +0 -6
  60. package/mainnet/index.js +0 -22
  61. package/mainnet/parsers/apiReserveAssetDataEvent.d.ts +0 -1
  62. package/mainnet/parsers/apiReserveAssetDataEvent.js +0 -17
  63. package/mainnet/parsers/lendingMarket.d.ts +0 -127
  64. package/mainnet/parsers/lendingMarket.js +0 -41
  65. package/mainnet/parsers/obligation.d.ts +0 -10
  66. package/mainnet/parsers/obligation.js +0 -30
  67. package/mainnet/parsers/rateLimiter.js +0 -32
  68. package/mainnet/parsers/reserve.d.ts +0 -166
  69. package/mainnet/parsers/reserve.js +0 -38
  70. package/mainnet/types.d.ts +0 -1
  71. package/mainnet/types.js +0 -17
  72. package/mainnet/utils/events.d.ts +0 -1
  73. package/mainnet/utils/events.js +0 -17
  74. package/mainnet/utils/simulate.js +0 -78
  75. package/mainnet/utils.d.ts +0 -1
  76. /package/{mainnet/_generated → _generated}/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/index.d.ts +0 -0
  77. /package/{mainnet/_generated → _generated}/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/index.js +0 -0
  78. /package/{mainnet/_generated → _generated}/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-identifier/structs.d.ts +0 -0
  79. /package/{mainnet/_generated → _generated}/_dependencies/source/0x8d97f1cd6ac663735be08d1d2b6d02a159e711586461306ce60a2b7a6a565a9e/price-identifier/structs.js +0 -0
  80. /package/{mainnet/_generated → _generated}/_framework/reified.d.ts +0 -0
  81. /package/{mainnet/_generated → _generated}/_framework/reified.js +0 -0
  82. /package/{mainnet/_generated → _generated}/_framework/util.d.ts +0 -0
  83. /package/{mainnet/_generated → _generated}/_framework/util.js +0 -0
  84. /package/{mainnet/_generated → _generated}/_framework/vector.d.ts +0 -0
  85. /package/{mainnet/_generated → _generated}/_framework/vector.js +0 -0
  86. /package/{mainnet/_generated → _generated}/suilend/cell/structs.d.ts +0 -0
  87. /package/{mainnet/_generated → _generated}/suilend/cell/structs.js +0 -0
  88. /package/{mainnet/_generated → _generated}/suilend/decimal/structs.d.ts +0 -0
  89. /package/{mainnet/_generated → _generated}/suilend/decimal/structs.js +0 -0
  90. /package/{mainnet/_generated → _generated}/suilend/lending-market/structs.d.ts +0 -0
  91. /package/{mainnet/_generated → _generated}/suilend/lending-market/structs.js +0 -0
  92. /package/{mainnet/_generated → _generated}/suilend/lending-market-registry/functions.d.ts +0 -0
  93. /package/{mainnet/_generated → _generated}/suilend/lending-market-registry/functions.js +0 -0
  94. /package/{mainnet/_generated → _generated}/suilend/liquidity-mining/structs.d.ts +0 -0
  95. /package/{mainnet/_generated → _generated}/suilend/liquidity-mining/structs.js +0 -0
  96. /package/{mainnet/_generated → _generated}/suilend/obligation/structs.d.ts +0 -0
  97. /package/{mainnet/_generated → _generated}/suilend/obligation/structs.js +0 -0
  98. /package/{mainnet/_generated → _generated}/suilend/rate-limiter/functions.d.ts +0 -0
  99. /package/{mainnet/_generated → _generated}/suilend/rate-limiter/functions.js +0 -0
  100. /package/{mainnet/_generated → _generated}/suilend/rate-limiter/structs.d.ts +0 -0
  101. /package/{mainnet/_generated → _generated}/suilend/rate-limiter/structs.js +0 -0
  102. /package/{mainnet/_generated → _generated}/suilend/reserve/structs.d.ts +0 -0
  103. /package/{mainnet/_generated → _generated}/suilend/reserve/structs.js +0 -0
  104. /package/{mainnet/_generated → _generated}/suilend/reserve-config/functions.d.ts +0 -0
  105. /package/{mainnet/_generated → _generated}/suilend/reserve-config/functions.js +0 -0
  106. /package/{mainnet/_generated → _generated}/suilend/reserve-config/structs.d.ts +0 -0
  107. /package/{mainnet/_generated → _generated}/suilend/reserve-config/structs.js +0 -0
  108. /package/{core/api → api}/events.d.ts +0 -0
  109. /package/{core/api → api}/events.js +0 -0
  110. /package/{core/parsers → parsers}/apiReserveAssetDataEvent.d.ts +0 -0
  111. /package/{core/parsers → parsers}/apiReserveAssetDataEvent.js +0 -0
  112. /package/{core/utils → utils}/events.d.ts +0 -0
  113. /package/{core/utils → utils}/events.js +0 -0
  114. /package/{mainnet/utils → utils}/index.d.ts +0 -0
  115. /package/{mainnet/utils → utils}/index.js +0 -0
  116. /package/{mainnet/utils → utils}/obligation.d.ts +0 -0
  117. /package/{mainnet/utils → utils}/obligation.js +0 -0
  118. /package/{mainnet/utils → utils}/simulate.d.ts +0 -0
  119. /package/{core/utils.d.ts → utils.d.ts} +0 -0
  120. /package/{core/utils.js → utils.js} +0 -0
@@ -0,0 +1,316 @@
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.compoundDebt = exports.totalSupply = exports.cTokenRatio = exports.getCTokenMarketValueLowerBound = exports.getCTokenMarketValue = exports.decimalToBigNumber = exports.stringToDecimal = exports.numberToDecimal = exports.refreshObligation = exports.updateUserRewardManager = exports.refreshReservePrice = exports.updatePoolRewardsManager = exports.compoundReserveInterest = exports.calculateDepositAprPercent = exports.calculateSupplyApr = exports.calculateBorrowAprPercent = exports.calculateBorrowApr = exports.calculateUtilizationPercent = exports.calculateUtilizationRate = void 0;
16
+ const bcs_1 = require("@mysten/sui/bcs");
17
+ const utils_1 = require("@mysten/sui/utils");
18
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
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("../constants");
23
+ const utils_2 = require("../utils");
24
+ /**
25
+ * @deprecated since version 1.0.8. Use `calculateUtilizationPercent` instead.
26
+ */
27
+ const calculateUtilizationRate = (reserve) => {
28
+ const { mintDecimals } = reserve;
29
+ // From parsers/reserve.ts > parseReserve
30
+ const availableAmount = new bignumber_js_1.default(reserve.availableAmount.toString()).div(10 ** mintDecimals);
31
+ const borrowedAmount = new bignumber_js_1.default(reserve.borrowedAmount.value.toString())
32
+ .div(constants_1.WAD)
33
+ .div(10 ** mintDecimals);
34
+ const unclaimedSpreadFees = new bignumber_js_1.default(reserve.unclaimedSpreadFees.value.toString())
35
+ .div(constants_1.WAD)
36
+ .div(10 ** mintDecimals);
37
+ const depositedAmount = borrowedAmount
38
+ .plus(availableAmount)
39
+ .minus(unclaimedSpreadFees);
40
+ return depositedAmount.eq(0)
41
+ ? new bignumber_js_1.default(0)
42
+ : borrowedAmount.div(depositedAmount);
43
+ };
44
+ exports.calculateUtilizationRate = calculateUtilizationRate;
45
+ const calculateUtilizationPercent = (reserve) => {
46
+ return (0, exports.calculateUtilizationRate)(reserve).times(100);
47
+ };
48
+ exports.calculateUtilizationPercent = calculateUtilizationPercent;
49
+ /**
50
+ * @deprecated since version 1.0.8. Use `calculateBorrowAprPercent` instead.
51
+ */
52
+ const calculateBorrowApr = (reserve) => {
53
+ const config = reserve.config.element;
54
+ const utilizationPercent = (0, exports.calculateUtilizationPercent)(reserve);
55
+ // From parsers/reserve.ts > parseReserveConfig
56
+ const interestRate = config.interestRateUtils.map((util, index) => ({
57
+ id: (0, uuid_1.v4)(),
58
+ utilPercent: new bignumber_js_1.default(util.toString()),
59
+ aprPercent: new bignumber_js_1.default(config.interestRateAprs[index].toString()).div(100),
60
+ }));
61
+ return (0, utils_2.linearlyInterpolate)(interestRate, "utilPercent", "aprPercent", utilizationPercent);
62
+ };
63
+ exports.calculateBorrowApr = calculateBorrowApr;
64
+ const calculateBorrowAprPercent = (reserve) => {
65
+ return (0, exports.calculateBorrowApr)(reserve);
66
+ };
67
+ exports.calculateBorrowAprPercent = calculateBorrowAprPercent;
68
+ /**
69
+ * @deprecated since version 1.0.8. Use `calculateDepositAprPercent` instead.
70
+ */
71
+ const calculateSupplyApr = (reserve) => {
72
+ const config = reserve.config.element;
73
+ const utilizationPercent = (0, exports.calculateUtilizationPercent)(reserve);
74
+ const borrowAprPercent = (0, exports.calculateBorrowAprPercent)(reserve);
75
+ // From parsers/reserve.ts > parseReserveConfig
76
+ const spreadFeeBps = Number(config.spreadFeeBps.toString());
77
+ return new bignumber_js_1.default(utilizationPercent.div(100))
78
+ .times(borrowAprPercent.div(100))
79
+ .times(1 - spreadFeeBps / 10000)
80
+ .times(100);
81
+ };
82
+ exports.calculateSupplyApr = calculateSupplyApr;
83
+ const calculateDepositAprPercent = (reserve) => {
84
+ return (0, exports.calculateSupplyApr)(reserve);
85
+ };
86
+ exports.calculateDepositAprPercent = calculateDepositAprPercent;
87
+ const compoundReserveInterest = (reserve, now) => {
88
+ var _a, _b;
89
+ const timeElapsedSeconds = now - Number(reserve.interestLastUpdateTimestampS);
90
+ if (timeElapsedSeconds === 0) {
91
+ return reserve;
92
+ }
93
+ bignumber_js_1.default.config({ POW_PRECISION: 100 });
94
+ const compoundedBorrowRate = new bignumber_js_1.default(1)
95
+ .plus((0, exports.calculateBorrowAprPercent)(reserve)
96
+ .div(100)
97
+ .div(365 * 24 * 60 * 60))
98
+ .pow(new bignumber_js_1.default(timeElapsedSeconds).toNumber());
99
+ const updatedReserve = Object.assign({}, reserve);
100
+ const oldBorrowedAmount = (0, exports.decimalToBigNumber)(reserve.borrowedAmount);
101
+ const oldCumulativeBorrowRate = (0, exports.decimalToBigNumber)(reserve.cumulativeBorrowRate);
102
+ const oldUnclaimedSpreadFees = (0, exports.decimalToBigNumber)(reserve.unclaimedSpreadFees);
103
+ updatedReserve.cumulativeBorrowRate = (0, exports.stringToDecimal)(compoundedBorrowRate.multipliedBy(oldCumulativeBorrowRate).toString());
104
+ const netNewDebt = oldBorrowedAmount.multipliedBy(compoundedBorrowRate.minus(1));
105
+ const spreadFee = new bignumber_js_1.default(((_b = (_a = reserve.config.element) === null || _a === void 0 ? void 0 : _a.spreadFeeBps) === null || _b === void 0 ? void 0 : _b.toString()) || 0);
106
+ updatedReserve.unclaimedSpreadFees = (0, exports.stringToDecimal)(oldUnclaimedSpreadFees
107
+ .plus(netNewDebt.multipliedBy(spreadFee.dividedBy(10000)))
108
+ .toString());
109
+ updatedReserve.borrowedAmount = (0, exports.stringToDecimal)(oldBorrowedAmount.plus(netNewDebt).toString());
110
+ updatedReserve.interestLastUpdateTimestampS = BigInt(now);
111
+ updatedReserve.depositsPoolRewardManager = (0, exports.updatePoolRewardsManager)(updatedReserve.depositsPoolRewardManager, now * 1000);
112
+ updatedReserve.borrowsPoolRewardManager = (0, exports.updatePoolRewardsManager)(updatedReserve.borrowsPoolRewardManager, now * 1000);
113
+ return updatedReserve;
114
+ };
115
+ exports.compoundReserveInterest = compoundReserveInterest;
116
+ const updatePoolRewardsManager = (manager, nowMs) => {
117
+ const updatedManager = Object.assign({}, manager);
118
+ const timeElapsedMs = nowMs - Number(manager.lastUpdateTimeMs);
119
+ if (manager.totalShares === BigInt(0) || timeElapsedMs === 0) {
120
+ return updatedManager;
121
+ }
122
+ updatedManager.poolRewards = updatedManager.poolRewards.map((poolReward) => {
123
+ if (poolReward === null) {
124
+ return poolReward;
125
+ }
126
+ if (nowMs < poolReward.startTimeMs ||
127
+ manager.lastUpdateTimeMs >= poolReward.endTimeMs) {
128
+ return poolReward;
129
+ }
130
+ const updatedPoolReward = Object.assign({}, poolReward);
131
+ const endTimeMs = Number(poolReward.endTimeMs);
132
+ const startTimeMs = Number(poolReward.startTimeMs);
133
+ const lastUpdateTimeMs = Number(manager.lastUpdateTimeMs);
134
+ const timePassedMs = Math.min(nowMs, endTimeMs) - Math.max(startTimeMs, lastUpdateTimeMs);
135
+ const unlockedRewards = new bignumber_js_1.default(poolReward.totalRewards.toString())
136
+ .multipliedBy(timePassedMs)
137
+ .dividedBy(Number(poolReward.endTimeMs - poolReward.startTimeMs));
138
+ updatedPoolReward.allocatedRewards = (0, exports.stringToDecimal)((0, exports.decimalToBigNumber)(poolReward.allocatedRewards)
139
+ .plus(unlockedRewards)
140
+ .toString());
141
+ updatedPoolReward.cumulativeRewardsPerShare = (0, exports.stringToDecimal)((0, exports.decimalToBigNumber)(poolReward.cumulativeRewardsPerShare)
142
+ .plus(unlockedRewards.dividedBy(Number(manager.totalShares)))
143
+ .toString());
144
+ return updatedPoolReward;
145
+ });
146
+ updatedManager.lastUpdateTimeMs = BigInt(nowMs);
147
+ return updatedManager;
148
+ };
149
+ exports.updatePoolRewardsManager = updatePoolRewardsManager;
150
+ const refreshReservePrice = (reserves, pythConnection) => __awaiter(void 0, void 0, void 0, function* () {
151
+ const priceIdentifiers = reserves.map((r) => (0, utils_1.toHex)(new Uint8Array(r.priceIdentifier.bytes)));
152
+ const priceData = yield pythConnection.getLatestPriceFeeds(priceIdentifiers);
153
+ if (!priceData)
154
+ return reserves;
155
+ const updatedReserves = [];
156
+ for (let i = 0; i < reserves.length; i++) {
157
+ const newReserve = Object.assign({}, reserves[i]);
158
+ newReserve.price = (0, exports.stringToDecimal)(priceData[i].getPriceUnchecked().getPriceAsNumberUnchecked().toString());
159
+ newReserve.smoothedPrice = (0, exports.stringToDecimal)(priceData[i]
160
+ .getEmaPriceUnchecked()
161
+ .getPriceAsNumberUnchecked()
162
+ .toString());
163
+ newReserve.priceLastUpdateTimestampS = BigInt(priceData[i].getPriceUnchecked().publishTime);
164
+ updatedReserves.push(newReserve);
165
+ }
166
+ return updatedReserves;
167
+ });
168
+ exports.refreshReservePrice = refreshReservePrice;
169
+ const updateUserRewardManager = (poolManager, userRewardManager, now) => {
170
+ const updatedUserRewardManager = Object.assign({}, userRewardManager);
171
+ for (let i = 0; i < poolManager.poolRewards.length; i++) {
172
+ const poolReward = poolManager.poolRewards[i];
173
+ if (poolReward == null) {
174
+ continue;
175
+ }
176
+ if (i >= userRewardManager.rewards.length) {
177
+ userRewardManager.rewards.push(null);
178
+ }
179
+ const oldReward = updatedUserRewardManager.rewards[i];
180
+ const reward = Object.assign({}, oldReward);
181
+ if (oldReward != null) {
182
+ const newRewards = (0, exports.decimalToBigNumber)(poolReward.cumulativeRewardsPerShare)
183
+ .minus((0, exports.decimalToBigNumber)(oldReward.cumulativeRewardsPerShare))
184
+ .multipliedBy(new bignumber_js_1.default(Number(userRewardManager.share)));
185
+ reward.earnedRewards = (0, exports.stringToDecimal)((0, exports.decimalToBigNumber)(oldReward.earnedRewards).plus(newRewards).toString());
186
+ reward.cumulativeRewardsPerShare = poolReward.cumulativeRewardsPerShare;
187
+ updatedUserRewardManager.rewards[i] = reward;
188
+ }
189
+ else {
190
+ if (userRewardManager.lastUpdateTimeMs <= poolReward.endTimeMs) {
191
+ updatedUserRewardManager.rewards[i] = structs_2.UserReward.fromFields({
192
+ pool_reward_id: { bytes: poolReward.id.slice(2) },
193
+ earned_rewards: (0, exports.stringToDecimal)((userRewardManager.lastUpdateTimeMs <= poolReward.startTimeMs
194
+ ? (0, exports.decimalToBigNumber)(poolReward.cumulativeRewardsPerShare).multipliedBy(new bignumber_js_1.default(Number(userRewardManager.share)))
195
+ : new bignumber_js_1.default(0)).toString()),
196
+ cumulative_rewards_per_share: poolReward.cumulativeRewardsPerShare,
197
+ });
198
+ }
199
+ }
200
+ }
201
+ updatedUserRewardManager.lastUpdateTimeMs = BigInt(now);
202
+ return updatedUserRewardManager;
203
+ };
204
+ exports.updateUserRewardManager = updateUserRewardManager;
205
+ const refreshObligation = (unrefreshedObligation, refreshedReserves) => {
206
+ const obligation = Object.assign({}, unrefreshedObligation);
207
+ // Refresh Deposits
208
+ let depositValueUsd = new bignumber_js_1.default(0);
209
+ let allowedBorrowValueUsd = new bignumber_js_1.default(0);
210
+ let unhealthyBorrowValueUsd = new bignumber_js_1.default(0);
211
+ for (let i = 0; i < obligation.deposits.length; i++) {
212
+ const deposit = Object.assign({}, obligation.deposits[i]);
213
+ const reserve = refreshedReserves.find((r) => r.coinType.name === deposit.coinType.name);
214
+ if (!reserve) {
215
+ throw new Error(`Unable to find reserve for coin type ${deposit.coinType.name}`);
216
+ }
217
+ const config = reserve.config.element;
218
+ obligation.userRewardManagers[Number(deposit.userRewardManagerIndex)] =
219
+ (0, exports.updateUserRewardManager)(reserve.depositsPoolRewardManager, obligation.userRewardManagers[Number(deposit.userRewardManagerIndex)], Date.now());
220
+ const marketValue = (0, exports.getCTokenMarketValue)(reserve, new bignumber_js_1.default(deposit.depositedCtokenAmount.toString()));
221
+ const marketValueLowerBound = (0, exports.getCTokenMarketValueLowerBound)(reserve, new bignumber_js_1.default(deposit.depositedCtokenAmount.toString()));
222
+ deposit.marketValue = (0, exports.stringToDecimal)(marketValue.toString());
223
+ depositValueUsd = depositValueUsd.plus(new bignumber_js_1.default(marketValue.toString()));
224
+ allowedBorrowValueUsd = allowedBorrowValueUsd.plus(marketValueLowerBound.multipliedBy(new bignumber_js_1.default(config.openLtvPct / 100)));
225
+ unhealthyBorrowValueUsd = unhealthyBorrowValueUsd.plus(marketValue.multipliedBy(new bignumber_js_1.default(config.closeLtvPct / 100)));
226
+ obligation.deposits[i] = deposit;
227
+ }
228
+ obligation.unhealthyBorrowValueUsd = (0, exports.stringToDecimal)(unhealthyBorrowValueUsd.toString());
229
+ obligation.allowedBorrowValueUsd = (0, exports.stringToDecimal)(allowedBorrowValueUsd.toString());
230
+ obligation.depositedValueUsd = (0, exports.stringToDecimal)(depositValueUsd.toString());
231
+ // Refresh borrows
232
+ let unweightedBorrowedValueUsd = new bignumber_js_1.default(0);
233
+ let weightedBorrowedValueUsd = new bignumber_js_1.default(0);
234
+ let weightedBorrowedValueUpperBoundUsd = new bignumber_js_1.default(0);
235
+ for (let i = 0; i < obligation.borrows.length; i++) {
236
+ const unrefreshedBorrow = obligation.borrows[i];
237
+ const reserve = refreshedReserves.find((r) => r.coinType.name == unrefreshedBorrow.coinType.name);
238
+ if (!reserve) {
239
+ throw new Error(`Unable to find reserve for coin type ${unrefreshedBorrow.coinType.name}`);
240
+ }
241
+ const config = reserve.config.element;
242
+ const borrow = Object.assign({}, (0, exports.compoundDebt)(unrefreshedBorrow, reserve));
243
+ obligation.userRewardManagers[Number(borrow.userRewardManagerIndex)] =
244
+ (0, exports.updateUserRewardManager)(reserve.borrowsPoolRewardManager, obligation.userRewardManagers[Number(borrow.userRewardManagerIndex)], Date.now());
245
+ const marketValue = (0, exports.decimalToBigNumber)(borrow.borrowedAmount)
246
+ .multipliedBy((0, exports.decimalToBigNumber)(reserve.price))
247
+ .dividedBy(new bignumber_js_1.default(10 ** reserve.mintDecimals));
248
+ const upperBoundPrice = bignumber_js_1.default.max((0, exports.decimalToBigNumber)(reserve.price), (0, exports.decimalToBigNumber)(reserve.smoothedPrice));
249
+ const marketValueUpperBound = (0, exports.decimalToBigNumber)(reserve.borrowedAmount)
250
+ .multipliedBy(upperBoundPrice)
251
+ .dividedBy(new bignumber_js_1.default(10 ** reserve.mintDecimals));
252
+ borrow.marketValue = (0, exports.stringToDecimal)(marketValue.toString());
253
+ unweightedBorrowedValueUsd = unweightedBorrowedValueUsd.plus(marketValue);
254
+ const borrowWeight = new bignumber_js_1.default((config.borrowWeightBps / BigInt(10000)).toString());
255
+ weightedBorrowedValueUsd = weightedBorrowedValueUsd.plus(marketValue.multipliedBy(borrowWeight));
256
+ weightedBorrowedValueUpperBoundUsd =
257
+ weightedBorrowedValueUpperBoundUsd.plus(marketValueUpperBound.multipliedBy(borrowWeight));
258
+ }
259
+ obligation.unweightedBorrowedValueUsd = (0, exports.stringToDecimal)(unweightedBorrowedValueUsd.toString());
260
+ obligation.weightedBorrowedValueUpperBoundUsd = (0, exports.stringToDecimal)(weightedBorrowedValueUpperBoundUsd.toString());
261
+ obligation.weightedBorrowedValueUsd = (0, exports.stringToDecimal)(weightedBorrowedValueUsd.toString());
262
+ return obligation;
263
+ };
264
+ exports.refreshObligation = refreshObligation;
265
+ const numberToDecimal = (value) => {
266
+ const adjustedValue = Math.round(value * +constants_1.WAD);
267
+ return structs_1.Decimal.fromBcs(bcs_1.bcs.u256().serialize(adjustedValue).toBytes());
268
+ };
269
+ exports.numberToDecimal = numberToDecimal;
270
+ const stringToDecimal = (value) => {
271
+ return (0, exports.numberToDecimal)(new bignumber_js_1.default(value).toNumber());
272
+ };
273
+ exports.stringToDecimal = stringToDecimal;
274
+ const decimalToBigNumber = (value) => {
275
+ return new bignumber_js_1.default(value.value.toString()).div(constants_1.WAD);
276
+ };
277
+ exports.decimalToBigNumber = decimalToBigNumber;
278
+ const getCTokenMarketValue = (reserve, depositedCTokenAmount) => {
279
+ const liquidityAmount = depositedCTokenAmount.multipliedBy((0, exports.cTokenRatio)(reserve));
280
+ return (0, exports.decimalToBigNumber)(reserve.price)
281
+ .multipliedBy(liquidityAmount)
282
+ .dividedBy(new bignumber_js_1.default(10 ** reserve.mintDecimals));
283
+ };
284
+ exports.getCTokenMarketValue = getCTokenMarketValue;
285
+ const getCTokenMarketValueLowerBound = (reserve, depositedCTokenAmount) => {
286
+ const liquidityAmount = depositedCTokenAmount.multipliedBy((0, exports.cTokenRatio)(reserve));
287
+ const price = bignumber_js_1.default.min((0, exports.decimalToBigNumber)(reserve.price), (0, exports.decimalToBigNumber)(reserve.smoothedPrice));
288
+ return price
289
+ .multipliedBy(liquidityAmount)
290
+ .dividedBy(new bignumber_js_1.default(10 ** reserve.mintDecimals));
291
+ };
292
+ exports.getCTokenMarketValueLowerBound = getCTokenMarketValueLowerBound;
293
+ const cTokenRatio = (reserve) => {
294
+ if (reserve.ctokenSupply === BigInt(0)) {
295
+ return new bignumber_js_1.default(1);
296
+ }
297
+ return (0, exports.totalSupply)(reserve).dividedBy(new bignumber_js_1.default(reserve.ctokenSupply.toString()));
298
+ };
299
+ exports.cTokenRatio = cTokenRatio;
300
+ const totalSupply = (reserve) => {
301
+ return new bignumber_js_1.default(reserve.availableAmount.toString())
302
+ .plus((0, exports.decimalToBigNumber)(reserve.borrowedAmount))
303
+ .minus((0, exports.decimalToBigNumber)(reserve.unclaimedSpreadFees));
304
+ };
305
+ exports.totalSupply = totalSupply;
306
+ const compoundDebt = (borrow, reserve) => {
307
+ const borrowCopy = Object.assign({}, borrow);
308
+ const newCumulativeBorrowRate = (0, exports.decimalToBigNumber)(reserve.cumulativeBorrowRate);
309
+ const compoundedInterestRate = newCumulativeBorrowRate.dividedBy((0, exports.decimalToBigNumber)(borrow.cumulativeBorrowRate));
310
+ borrowCopy.borrowedAmount = (0, exports.stringToDecimal)((0, exports.decimalToBigNumber)(borrow.borrowedAmount)
311
+ .multipliedBy(compoundedInterestRate)
312
+ .toString());
313
+ borrowCopy.cumulativeBorrowRate = (0, exports.stringToDecimal)(newCumulativeBorrowRate.toString());
314
+ return borrowCopy;
315
+ };
316
+ exports.compoundDebt = compoundDebt;
package/core/client.d.ts DELETED
@@ -1,114 +0,0 @@
1
- import { SuiClient } from "@mysten/sui/client";
2
- import { Transaction, TransactionObjectInput, TransactionResult } from "@mysten/sui/transactions";
3
- import { SuiPriceServiceConnection, SuiPythClient } from "@pythnetwork/pyth-sui-js";
4
- import { AddPoolRewardArgs, AddReserveArgs, BorrowArgs, CancelPoolRewardArgs, ClaimFeesArgs, ClaimRewardsAndDepositArgs, ClaimRewardsArgs, ClosePoolRewardArgs, CreateRateLimiterConfigArgs, CreateReserveConfigArgs, DepositCtokensIntoObligationArgs, DepositLiquidityAndMintCtokensArgs, LiquidateArgs, MigrateArgs, PhantomReified, RedeemCtokensAndWithdrawLiquidityArgs, RefreshReservePriceArgs, RepayArgs, Side, UpdateRateLimiterConfigArgs, UpdateReserveConfigArgs, WithdrawCtokensArgs } from "./types";
5
- interface Deps {
6
- phantom: (phantomType: string) => PhantomReified<string>;
7
- PACKAGE_ID: string;
8
- PUBLISHED_AT: string;
9
- LendingMarket: any;
10
- Obligation: any;
11
- ObligationOwnerCap: any;
12
- createLendingMarket: (transaction: Transaction, typeArg: string, registry: TransactionObjectInput) => TransactionResult;
13
- createReserveConfig: (transaction: Transaction, args: CreateReserveConfigArgs) => TransactionResult;
14
- updateReserveConfig: (transaction: Transaction, typeArgs: [string, string], args: UpdateReserveConfigArgs) => TransactionResult;
15
- addReserve: (transaction: Transaction, typeArgs: [string, string], args: AddReserveArgs) => TransactionResult;
16
- addPoolReward: (transaction: Transaction, typeArgs: [string, string], args: AddPoolRewardArgs) => TransactionResult;
17
- cancelPoolReward: (transaction: Transaction, typeArgs: [string, string], args: CancelPoolRewardArgs) => TransactionResult;
18
- closePoolReward: (transaction: Transaction, typeArgs: [string, string], args: ClosePoolRewardArgs) => TransactionResult;
19
- claimRewards: (transaction: Transaction, typeArgs: [string, string], args: ClaimRewardsArgs) => TransactionResult;
20
- claimRewardsAndDeposit: (transaction: Transaction, typeArgs: [string, string], args: ClaimRewardsAndDepositArgs) => TransactionResult;
21
- createRateLimiterConfig: (transaction: Transaction, args: CreateRateLimiterConfigArgs) => TransactionResult;
22
- updateRateLimiterConfig: (transaction: Transaction, typeArg: string, args: UpdateRateLimiterConfigArgs) => TransactionResult;
23
- refreshReservePrice: (transaction: Transaction, typeArg: string, args: RefreshReservePriceArgs) => TransactionResult;
24
- depositLiquidityAndMintCtokens: (transaction: Transaction, typeArgs: [string, string], args: DepositLiquidityAndMintCtokensArgs) => TransactionResult;
25
- depositCtokensIntoObligation: (transaction: Transaction, typeArgs: [string, string], args: DepositCtokensIntoObligationArgs) => TransactionResult;
26
- withdrawCtokens: (transaction: Transaction, typeArgs: [string, string], args: WithdrawCtokensArgs) => TransactionResult;
27
- borrow: (transaction: Transaction, typeArgs: [string, string], args: BorrowArgs) => TransactionResult;
28
- repay: (transaction: Transaction, typeArgs: [string, string], args: RepayArgs) => TransactionResult;
29
- liquidate: (transaction: Transaction, typeArgs: [string, string, string], args: LiquidateArgs) => TransactionResult;
30
- migrate: (transaction: Transaction, typeArg: string, args: MigrateArgs) => TransactionResult;
31
- claimFees: (transaction: Transaction, typeArgs: [string, string], args: ClaimFeesArgs) => TransactionResult;
32
- redeemCtokensAndWithdrawLiquidity: (transaction: Transaction, typeArgs: [string, string], args: RedeemCtokensAndWithdrawLiquidityArgs) => TransactionResult;
33
- }
34
- export declare class SuilendClient {
35
- lendingMarket: any;
36
- client: SuiClient;
37
- pythClient: SuiPythClient;
38
- pythConnection: SuiPriceServiceConnection;
39
- phantom: Deps["phantom"];
40
- PACKAGE_ID: Deps["PACKAGE_ID"];
41
- PUBLISHED_AT: Deps["PUBLISHED_AT"];
42
- LendingMarket: Deps["LendingMarket"];
43
- Obligation: Deps["Obligation"];
44
- ObligationOwnerCap: Deps["ObligationOwnerCap"];
45
- createLendingMarketFunction: Deps["createLendingMarket"];
46
- createReserveConfigFunction: Deps["createReserveConfig"];
47
- updateReserveConfigFunction: Deps["updateReserveConfig"];
48
- addReserveFunction: Deps["addReserve"];
49
- addPoolRewardFunction: Deps["addPoolReward"];
50
- cancelPoolRewardFunction: Deps["cancelPoolReward"];
51
- closePoolRewardFunction: Deps["closePoolReward"];
52
- claimRewardsFunction: Deps["claimRewards"];
53
- claimRewardsAndDepositFunction: Deps["claimRewardsAndDeposit"];
54
- createRateLimiterConfigFunction: Deps["createRateLimiterConfig"];
55
- updateRateLimiterConfigFunction: Deps["updateRateLimiterConfig"];
56
- refreshReservePriceFunction: Deps["refreshReservePrice"];
57
- depositLiquidityAndMintCtokensFunction: Deps["depositLiquidityAndMintCtokens"];
58
- depositCtokensIntoObligationFunction: Deps["depositCtokensIntoObligation"];
59
- withdrawCtokensFunction: Deps["withdrawCtokens"];
60
- borrowFunction: Deps["borrow"];
61
- repayFunction: Deps["repay"];
62
- liquidateFunction: Deps["liquidate"];
63
- migrateFunction: Deps["migrate"];
64
- claimFeesFunction: Deps["claimFees"];
65
- redeemCtokensAndWithdrawLiquidityFunction: Deps["redeemCtokensAndWithdrawLiquidity"];
66
- constructor(lendingMarket: any, client: SuiClient, { phantom, PACKAGE_ID, PUBLISHED_AT, LendingMarket, Obligation, ObligationOwnerCap, createLendingMarket, createReserveConfig, updateReserveConfig, addReserve, addPoolReward, cancelPoolReward, closePoolReward, claimRewards, claimRewardsAndDeposit, createRateLimiterConfig, updateRateLimiterConfig, refreshReservePrice, depositLiquidityAndMintCtokens, depositCtokensIntoObligation, withdrawCtokens, borrow, repay, liquidate, migrate, claimFees, redeemCtokensAndWithdrawLiquidity, }: Deps);
67
- static initialize(lendingMarketId: string, lendingMarketType: string, client: SuiClient, deps: Deps): Promise<SuilendClient>;
68
- static initializeWithLendingMarket(lendingMarket: any, client: SuiClient, deps: Deps): Promise<SuilendClient>;
69
- static hasBetaPass(ownerId: string, client: SuiClient): Promise<boolean>;
70
- static createNewLendingMarket(registryId: string, lendingMarketType: string, transaction: Transaction, { LendingMarket, createLendingMarket, }: Pick<Deps, "LendingMarket" | "createLendingMarket">): Promise<{
71
- $kind: "NestedResult";
72
- NestedResult: [number, number];
73
- }>;
74
- static getObligationOwnerCaps(ownerId: string, lendingMarketTypeArgs: string[], client: SuiClient, { phantom, PACKAGE_ID, ObligationOwnerCap, }: Pick<Deps, "phantom" | "PACKAGE_ID" | "ObligationOwnerCap">): Promise<any[]>;
75
- static getObligation(obligationId: string, lendingMarketTypeArgs: string[], client: SuiClient, { phantom, Obligation }: Pick<Deps, "phantom" | "Obligation">): Promise<any>;
76
- getObligation(obligationId: string): Promise<any>;
77
- static getLendingMarketOwnerCapId(ownerId: string, lendingMarketTypeArgs: string[], client: SuiClient, { PACKAGE_ID }: Pick<Deps, "PACKAGE_ID">): Promise<string | null>;
78
- getLendingMarketOwnerCapId(ownerId: string): Promise<string | null>;
79
- createReserve(lendingMarketOwnerCapId: string, transaction: Transaction, pythPriceId: string, coinType: string, createReserveConfigArgs: CreateReserveConfigArgs): Promise<TransactionResult>;
80
- addReward(ownerId: string, lendingMarketOwnerCapId: string, reserveArrayIndex: bigint, isDepositReward: boolean, rewardCoinType: string, rewardValue: string, startTimeMs: bigint, endTimeMs: bigint, transaction: Transaction): Promise<TransactionResult>;
81
- cancelReward(lendingMarketOwnerCapId: string, reserveArrayIndex: bigint, isDepositReward: boolean, rewardIndex: bigint, rewardCoinType: string, transaction: Transaction): TransactionResult;
82
- closeReward(lendingMarketOwnerCapId: string, reserveArrayIndex: bigint, isDepositReward: boolean, rewardIndex: bigint, rewardCoinType: string, transaction: Transaction): TransactionResult;
83
- claimReward(obligationOwnerCapId: string, reserveArrayIndex: bigint, rewardIndex: bigint, rewardType: string, side: Side, transaction: Transaction): TransactionResult;
84
- claimRewardsAndDeposit(obligationId: string, rewardReserveArrayIndex: bigint, rewardIndex: bigint, rewardType: string, side: Side, depositReserveArrayIndex: bigint, transaction: Transaction): TransactionResult;
85
- claimRewardsToObligation(ownerId: string, rewards: Array<{
86
- obligationOwnerCapId: string;
87
- reserveArrayIndex: bigint;
88
- rewardIndex: bigint;
89
- rewardType: string;
90
- side: Side;
91
- }>, transaction: Transaction): Promise<void>;
92
- findReserveArrayIndex(coinType: string): bigint;
93
- updateReserveConfig(ownerId: string, lendingMarketOwnerCapId: string, transaction: Transaction, coinType: string, createReserveConfigArgs: CreateReserveConfigArgs): Promise<TransactionResult>;
94
- updateRateLimiterConfig(lendingMarketOwnerCapId: string, transaction: Transaction, newRateLimiterConfigArgs: CreateRateLimiterConfigArgs): Promise<TransactionResult>;
95
- createObligation(transaction: Transaction): TransactionResult;
96
- refreshAll(transaction: Transaction, obligation: typeof this.Obligation, extraReserveArrayIndex?: bigint): Promise<void>;
97
- refreshReservePrices(transaction: Transaction, priceInfoObjectId: string, reserveArrayIndex: bigint): Promise<void>;
98
- deposit(sendCoin: TransactionObjectInput, coinType: string, obligationOwnerCap: TransactionObjectInput, transaction: Transaction): Promise<void>;
99
- depositCoin(ownerId: string, sendCoin: TransactionObjectInput, coinType: string, transaction: Transaction, obligationOwnerCapId?: string): Promise<void>;
100
- depositIntoObligation(ownerId: string, coinType: string, value: string, transaction: Transaction, obligationOwnerCapId?: string): Promise<void>;
101
- depositLiquidityAndGetCTokens(ownerId: string, coinType: string, value: string, transaction: Transaction): Promise<void>;
102
- withdraw(obligationOwnerCapId: string, obligationId: string, coinType: string, value: string, transaction: Transaction): Promise<TransactionResult>;
103
- withdrawFromObligation(ownerId: string, obligationOwnerCapId: string, obligationId: string, coinType: string, value: string, transaction: Transaction): Promise<void>;
104
- borrow(obligationOwnerCapId: string, obligationId: string, coinType: string, value: string, transaction: Transaction): Promise<TransactionResult>;
105
- borrowFromObligation(ownerId: string, obligationOwnerCapId: string, obligationId: string, coinType: string, value: string, transaction: Transaction): Promise<void>;
106
- repay(obligationId: string, coinType: string, coin: TransactionObjectInput, transaction: Transaction): TransactionResult;
107
- repayIntoObligation(ownerId: string, obligationId: string, coinType: string, value: string, transaction: Transaction): Promise<TransactionResult>;
108
- liquidateAndRedeem(transaction: Transaction, obligation: typeof this.Obligation, repayCoinType: string, withdrawCoinType: string, repayCoinId: any): Promise<TransactionResult>;
109
- liquidate(transaction: Transaction, obligation: typeof this.Obligation, repayCoinType: string, withdrawCoinType: string, repayCoinId: any): Promise<TransactionResult>;
110
- migrate(transaction: Transaction, lendingMarketOwnerCapId: string): TransactionResult;
111
- claimFees(transaction: Transaction, coinType: string): TransactionResult;
112
- redeemCtokensAndWithdrawLiquidity(ownerId: string, ctokenCoinTypes: string[], transaction: Transaction): Promise<void>;
113
- }
114
- export {};
@@ -1,15 +0,0 @@
1
- import BigNumber from "bignumber.js";
2
- export interface Deps {
3
- LendingMarket: any;
4
- Obligation: any;
5
- Reserve: any;
6
- PoolRewardManager: any;
7
- PoolReward: any;
8
- simulate: {
9
- calculateUtilizationPercent: (reserve: Deps["Reserve"]) => BigNumber;
10
- calculateBorrowAprPercent: (reserve: Deps["Reserve"]) => BigNumber;
11
- calculateDepositAprPercent: (reserve: Deps["Reserve"]) => BigNumber;
12
- cTokenRatio: (reserve: Deps["Reserve"]) => BigNumber;
13
- };
14
- RateLimiter: any;
15
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,19 +0,0 @@
1
- import BigNumber from "bignumber.js";
2
- import { Deps } from "./deps";
3
- export type ParsedRateLimiter = ReturnType<typeof parseRateLimiter>;
4
- export type ParsedRateLimiterConfig = ReturnType<typeof parseRateLimiterConfig>;
5
- export declare const parseRateLimiter: ({ RateLimiter }: Pick<Deps, "RateLimiter">, rateLimiter: any, currentTime: number) => {
6
- config: {
7
- windowDuration: any;
8
- maxOutflow: any;
9
- };
10
- $typeName: any;
11
- prevQty: any;
12
- windowStart: any;
13
- curQty: any;
14
- remainingOutflow: BigNumber;
15
- };
16
- export declare const parseRateLimiterConfig: ({ RateLimiter }: Pick<Deps, "RateLimiter">, rateLimiter: any) => {
17
- windowDuration: any;
18
- maxOutflow: any;
19
- };