@sovryn-zero/lib-base 0.1.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.
Files changed (84) hide show
  1. package/.eslintrc.json +17 -0
  2. package/.mocharc.yml +1 -0
  3. package/LICENSE +905 -0
  4. package/README.md +23 -0
  5. package/api-extractor.json +4 -0
  6. package/dist/index.d.ts +14 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +26 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/src/Decimal.d.ts +89 -0
  11. package/dist/src/Decimal.d.ts.map +1 -0
  12. package/dist/src/Decimal.js +361 -0
  13. package/dist/src/Decimal.js.map +1 -0
  14. package/dist/src/Fees.d.ts +82 -0
  15. package/dist/src/Fees.d.ts.map +1 -0
  16. package/dist/src/Fees.js +123 -0
  17. package/dist/src/Fees.js.map +1 -0
  18. package/dist/src/LiquityStore.d.ts +209 -0
  19. package/dist/src/LiquityStore.d.ts.map +1 -0
  20. package/dist/src/LiquityStore.js +209 -0
  21. package/dist/src/LiquityStore.js.map +1 -0
  22. package/dist/src/ObservableLiquity.d.ts +15 -0
  23. package/dist/src/ObservableLiquity.d.ts.map +1 -0
  24. package/dist/src/ObservableLiquity.js +3 -0
  25. package/dist/src/ObservableLiquity.js.map +1 -0
  26. package/dist/src/PopulatableLiquity.d.ts +125 -0
  27. package/dist/src/PopulatableLiquity.d.ts.map +1 -0
  28. package/dist/src/PopulatableLiquity.js +3 -0
  29. package/dist/src/PopulatableLiquity.js.map +1 -0
  30. package/dist/src/ReadableLiquity.d.ts +156 -0
  31. package/dist/src/ReadableLiquity.d.ts.map +1 -0
  32. package/dist/src/ReadableLiquity.js +3 -0
  33. package/dist/src/ReadableLiquity.js.map +1 -0
  34. package/dist/src/SendableLiquity.d.ts +156 -0
  35. package/dist/src/SendableLiquity.d.ts.map +1 -0
  36. package/dist/src/SendableLiquity.js +20 -0
  37. package/dist/src/SendableLiquity.js.map +1 -0
  38. package/dist/src/StabilityDeposit.d.ts +59 -0
  39. package/dist/src/StabilityDeposit.d.ts.map +1 -0
  40. package/dist/src/StabilityDeposit.js +80 -0
  41. package/dist/src/StabilityDeposit.js.map +1 -0
  42. package/dist/src/TransactableLiquity.d.ts +414 -0
  43. package/dist/src/TransactableLiquity.d.ts.map +1 -0
  44. package/dist/src/TransactableLiquity.js +18 -0
  45. package/dist/src/TransactableLiquity.js.map +1 -0
  46. package/dist/src/Trove.d.ts +367 -0
  47. package/dist/src/Trove.d.ts.map +1 -0
  48. package/dist/src/Trove.js +423 -0
  49. package/dist/src/Trove.js.map +1 -0
  50. package/dist/src/ZEROStake.d.ts +52 -0
  51. package/dist/src/ZEROStake.d.ts.map +1 -0
  52. package/dist/src/ZEROStake.js +74 -0
  53. package/dist/src/ZEROStake.js.map +1 -0
  54. package/dist/src/_CachedReadableLiquity.d.ts +55 -0
  55. package/dist/src/_CachedReadableLiquity.d.ts.map +1 -0
  56. package/dist/src/_CachedReadableLiquity.js +93 -0
  57. package/dist/src/_CachedReadableLiquity.js.map +1 -0
  58. package/dist/src/constants.d.ts +61 -0
  59. package/dist/src/constants.d.ts.map +1 -0
  60. package/dist/src/constants.js +64 -0
  61. package/dist/src/constants.js.map +1 -0
  62. package/dist/tsdoc-metadata.json +11 -0
  63. package/etc/lib-base.api.md +788 -0
  64. package/index.ts +13 -0
  65. package/package.json +52 -0
  66. package/src/Decimal.ts +456 -0
  67. package/src/Fees.ts +160 -0
  68. package/src/LiquityStore.ts +563 -0
  69. package/src/ObservableLiquity.ts +32 -0
  70. package/src/PopulatableLiquity.ts +280 -0
  71. package/src/ReadableLiquity.ts +175 -0
  72. package/src/SendableLiquity.ts +251 -0
  73. package/src/StabilityDeposit.ts +126 -0
  74. package/src/TransactableLiquity.ts +471 -0
  75. package/src/Trove.ts +824 -0
  76. package/src/ZEROStake.ts +99 -0
  77. package/src/_CachedReadableLiquity.ts +186 -0
  78. package/src/constants.ts +68 -0
  79. package/test/Decimal.test.ts +212 -0
  80. package/test/StabilityDeposit.test.ts +30 -0
  81. package/test/Trove.test.ts +143 -0
  82. package/test/ZEROStake.test.ts +24 -0
  83. package/tsconfig.dist.json +8 -0
  84. package/tsconfig.json +5 -0
@@ -0,0 +1,423 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TroveWithPendingRedistribution = exports.UserTrove = exports._emptyTrove = exports.Trove = exports._normalizeTroveAdjustment = exports._normalizeTroveCreation = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const Decimal_1 = require("./Decimal");
9
+ const constants_1 = require("./constants");
10
+ const invalidTroveCreation = (invalidTrove, error) => ({
11
+ type: "invalidCreation",
12
+ invalidTrove,
13
+ error
14
+ });
15
+ const troveCreation = (params) => ({
16
+ type: "creation",
17
+ params
18
+ });
19
+ const troveClosure = (params) => ({
20
+ type: "closure",
21
+ params
22
+ });
23
+ const troveAdjustment = (params, setToZero) => ({
24
+ type: "adjustment",
25
+ params,
26
+ setToZero
27
+ });
28
+ const valueIsDefined = (entry) => entry[1] !== undefined;
29
+ const allowedTroveCreationKeys = [
30
+ "depositCollateral",
31
+ "borrowZUSD"
32
+ ];
33
+ function checkAllowedTroveCreationKeys(entries) {
34
+ const badKeys = entries
35
+ .filter(([k]) => !allowedTroveCreationKeys.includes(k))
36
+ .map(([k]) => `'${k}'`);
37
+ if (badKeys.length > 0) {
38
+ throw new Error(`TroveCreationParams: property ${badKeys.join(", ")} not allowed`);
39
+ }
40
+ }
41
+ const troveCreationParamsFromEntries = (entries) => {
42
+ const params = Object.fromEntries(entries);
43
+ const missingKeys = allowedTroveCreationKeys.filter(k => !(k in params)).map(k => `'${k}'`);
44
+ if (missingKeys.length > 0) {
45
+ throw new Error(`TroveCreationParams: property ${missingKeys.join(", ")} missing`);
46
+ }
47
+ return params;
48
+ };
49
+ const decimalize = ([k, v]) => [k, Decimal_1.Decimal.from(v)];
50
+ const nonZero = ([, v]) => !v.isZero;
51
+ /** @internal */
52
+ const _normalizeTroveCreation = (params) => {
53
+ const definedEntries = Object.entries(params).filter(valueIsDefined);
54
+ checkAllowedTroveCreationKeys(definedEntries);
55
+ const nonZeroEntries = definedEntries.map(decimalize);
56
+ return troveCreationParamsFromEntries(nonZeroEntries);
57
+ };
58
+ exports._normalizeTroveCreation = _normalizeTroveCreation;
59
+ const allowedTroveAdjustmentKeys = [
60
+ "depositCollateral",
61
+ "withdrawCollateral",
62
+ "borrowZUSD",
63
+ "repayZUSD"
64
+ ];
65
+ function checkAllowedTroveAdjustmentKeys(entries) {
66
+ const badKeys = entries
67
+ .filter(([k]) => !allowedTroveAdjustmentKeys.includes(k))
68
+ .map(([k]) => `'${k}'`);
69
+ if (badKeys.length > 0) {
70
+ throw new Error(`TroveAdjustmentParams: property ${badKeys.join(", ")} not allowed`);
71
+ }
72
+ }
73
+ const collateralChangeFrom = ({ depositCollateral, withdrawCollateral }) => {
74
+ if (depositCollateral !== undefined && withdrawCollateral !== undefined) {
75
+ throw new Error("TroveAdjustmentParams: 'depositCollateral' and 'withdrawCollateral' " +
76
+ "can't be present at the same time");
77
+ }
78
+ if (depositCollateral !== undefined) {
79
+ return { depositCollateral };
80
+ }
81
+ if (withdrawCollateral !== undefined) {
82
+ return { withdrawCollateral };
83
+ }
84
+ };
85
+ const debtChangeFrom = ({ borrowZUSD, repayZUSD }) => {
86
+ if (borrowZUSD !== undefined && repayZUSD !== undefined) {
87
+ throw new Error("TroveAdjustmentParams: 'borrowZUSD' and 'repayZUSD' can't be present at the same time");
88
+ }
89
+ if (borrowZUSD !== undefined) {
90
+ return { borrowZUSD };
91
+ }
92
+ if (repayZUSD !== undefined) {
93
+ return { repayZUSD };
94
+ }
95
+ };
96
+ const troveAdjustmentParamsFromEntries = (entries) => {
97
+ const params = Object.fromEntries(entries);
98
+ const collateralChange = collateralChangeFrom(params);
99
+ const debtChange = debtChangeFrom(params);
100
+ if (collateralChange !== undefined && debtChange !== undefined) {
101
+ return { ...collateralChange, ...debtChange };
102
+ }
103
+ if (collateralChange !== undefined) {
104
+ return collateralChange;
105
+ }
106
+ if (debtChange !== undefined) {
107
+ return debtChange;
108
+ }
109
+ throw new Error("TroveAdjustmentParams: must include at least one non-zero parameter");
110
+ };
111
+ /** @internal */
112
+ const _normalizeTroveAdjustment = (params) => {
113
+ const definedEntries = Object.entries(params).filter(valueIsDefined);
114
+ checkAllowedTroveAdjustmentKeys(definedEntries);
115
+ const nonZeroEntries = definedEntries.map(decimalize).filter(nonZero);
116
+ return troveAdjustmentParamsFromEntries(nonZeroEntries);
117
+ };
118
+ exports._normalizeTroveAdjustment = _normalizeTroveAdjustment;
119
+ const applyFee = (borrowingRate, debtIncrease) => debtIncrease.mul(Decimal_1.Decimal.ONE.add(borrowingRate));
120
+ const unapplyFee = (borrowingRate, debtIncrease) => debtIncrease._divCeil(Decimal_1.Decimal.ONE.add(borrowingRate));
121
+ const NOMINAL_COLLATERAL_RATIO_PRECISION = Decimal_1.Decimal.from(100);
122
+ /**
123
+ * A combination of collateral and debt.
124
+ *
125
+ * @public
126
+ */
127
+ class Trove {
128
+ /** @internal */
129
+ constructor(collateral = Decimal_1.Decimal.ZERO, debt = Decimal_1.Decimal.ZERO) {
130
+ this.collateral = collateral;
131
+ this.debt = debt;
132
+ }
133
+ get isEmpty() {
134
+ return this.collateral.isZero && this.debt.isZero;
135
+ }
136
+ /**
137
+ * Amount of ZUSD that must be repaid to close this Trove.
138
+ *
139
+ * @remarks
140
+ * This doesn't include the liquidation reserve, which is refunded in case of normal closure.
141
+ */
142
+ get netDebt() {
143
+ if (this.debt.lt(constants_1.ZUSD_LIQUIDATION_RESERVE)) {
144
+ throw new Error(`netDebt should not be used when debt < ${constants_1.ZUSD_LIQUIDATION_RESERVE}`);
145
+ }
146
+ return this.debt.sub(constants_1.ZUSD_LIQUIDATION_RESERVE);
147
+ }
148
+ /** @internal */
149
+ get _nominalCollateralRatio() {
150
+ return this.collateral.mulDiv(NOMINAL_COLLATERAL_RATIO_PRECISION, this.debt);
151
+ }
152
+ /** Calculate the Trove's collateralization ratio at a given price. */
153
+ collateralRatio(price) {
154
+ return this.collateral.mulDiv(price, this.debt);
155
+ }
156
+ /**
157
+ * Whether the Trove is undercollateralized at a given price.
158
+ *
159
+ * @returns
160
+ * `true` if the Trove's collateralization ratio is less than the
161
+ * {@link MINIMUM_COLLATERAL_RATIO}.
162
+ */
163
+ collateralRatioIsBelowMinimum(price) {
164
+ return this.collateralRatio(price).lt(constants_1.MINIMUM_COLLATERAL_RATIO);
165
+ }
166
+ /**
167
+ * Whether the collateralization ratio is less than the {@link CRITICAL_COLLATERAL_RATIO} at a
168
+ * given price.
169
+ *
170
+ * @example
171
+ * Can be used to check whether the Zero protocol is in recovery mode by using it on the return
172
+ * value of {@link ReadableLiquity.getTotal | getTotal()}. For example:
173
+ *
174
+ * ```typescript
175
+ * const total = await zero.getTotal();
176
+ * const price = await zero.getPrice();
177
+ *
178
+ * if (total.collateralRatioIsBelowCritical(price)) {
179
+ * // Recovery mode is active
180
+ * }
181
+ * ```
182
+ */
183
+ collateralRatioIsBelowCritical(price) {
184
+ return this.collateralRatio(price).lt(constants_1.CRITICAL_COLLATERAL_RATIO);
185
+ }
186
+ /** Whether the Trove is sufficiently collateralized to be opened during recovery mode. */
187
+ isOpenableInRecoveryMode(price) {
188
+ return this.collateralRatio(price).gte(constants_1.CRITICAL_COLLATERAL_RATIO);
189
+ }
190
+ /** @internal */
191
+ toString() {
192
+ return `{ collateral: ${this.collateral}, debt: ${this.debt} }`;
193
+ }
194
+ equals(that) {
195
+ return this.collateral.eq(that.collateral) && this.debt.eq(that.debt);
196
+ }
197
+ add(that) {
198
+ return new Trove(this.collateral.add(that.collateral), this.debt.add(that.debt));
199
+ }
200
+ addCollateral(collateral) {
201
+ return new Trove(this.collateral.add(collateral), this.debt);
202
+ }
203
+ addDebt(debt) {
204
+ return new Trove(this.collateral, this.debt.add(debt));
205
+ }
206
+ subtract(that) {
207
+ const { collateral, debt } = that;
208
+ return new Trove(this.collateral.gt(collateral) ? this.collateral.sub(collateral) : Decimal_1.Decimal.ZERO, this.debt.gt(debt) ? this.debt.sub(debt) : Decimal_1.Decimal.ZERO);
209
+ }
210
+ subtractCollateral(collateral) {
211
+ return new Trove(this.collateral.gt(collateral) ? this.collateral.sub(collateral) : Decimal_1.Decimal.ZERO, this.debt);
212
+ }
213
+ subtractDebt(debt) {
214
+ return new Trove(this.collateral, this.debt.gt(debt) ? this.debt.sub(debt) : Decimal_1.Decimal.ZERO);
215
+ }
216
+ multiply(multiplier) {
217
+ return new Trove(this.collateral.mul(multiplier), this.debt.mul(multiplier));
218
+ }
219
+ setCollateral(collateral) {
220
+ return new Trove(Decimal_1.Decimal.from(collateral), this.debt);
221
+ }
222
+ setDebt(debt) {
223
+ return new Trove(this.collateral, Decimal_1.Decimal.from(debt));
224
+ }
225
+ _debtChange({ debt }, borrowingRate) {
226
+ return debt.gt(this.debt)
227
+ ? { borrowZUSD: unapplyFee(borrowingRate, debt.sub(this.debt)) }
228
+ : { repayZUSD: this.debt.sub(debt) };
229
+ }
230
+ _collateralChange({ collateral }) {
231
+ return collateral.gt(this.collateral)
232
+ ? { depositCollateral: collateral.sub(this.collateral) }
233
+ : { withdrawCollateral: this.collateral.sub(collateral) };
234
+ }
235
+ /**
236
+ * Calculate the difference between this Trove and another.
237
+ *
238
+ * @param that - The other Trove.
239
+ * @param borrowingRate - Borrowing rate to use when calculating a borrowed amount.
240
+ *
241
+ * @returns
242
+ * An object representing the change, or `undefined` if the Troves are equal.
243
+ */
244
+ whatChanged(that, borrowingRate = constants_1.MINIMUM_BORROWING_RATE) {
245
+ var _a;
246
+ if (this.collateral.eq(that.collateral) && this.debt.eq(that.debt)) {
247
+ return undefined;
248
+ }
249
+ if (this.isEmpty) {
250
+ if (that.debt.lt(constants_1.ZUSD_LIQUIDATION_RESERVE)) {
251
+ return invalidTroveCreation(that, "missingLiquidationReserve");
252
+ }
253
+ return troveCreation({
254
+ depositCollateral: that.collateral,
255
+ borrowZUSD: unapplyFee(borrowingRate, that.netDebt)
256
+ });
257
+ }
258
+ if (that.isEmpty) {
259
+ return troveClosure(this.netDebt.nonZero
260
+ ? { withdrawCollateral: this.collateral, repayZUSD: this.netDebt }
261
+ : { withdrawCollateral: this.collateral });
262
+ }
263
+ return this.collateral.eq(that.collateral)
264
+ ? troveAdjustment(this._debtChange(that, borrowingRate), that.debt.zero && "debt")
265
+ : this.debt.eq(that.debt)
266
+ ? troveAdjustment(this._collateralChange(that), that.collateral.zero && "collateral")
267
+ : troveAdjustment({
268
+ ...this._debtChange(that, borrowingRate),
269
+ ...this._collateralChange(that)
270
+ }, (_a = (that.debt.zero && "debt")) !== null && _a !== void 0 ? _a : (that.collateral.zero && "collateral"));
271
+ }
272
+ /**
273
+ * Make a new Trove by applying a {@link TroveChange} to this Trove.
274
+ *
275
+ * @param change - The change to apply.
276
+ * @param borrowingRate - Borrowing rate to use when adding a borrowed amount to the Trove's debt.
277
+ */
278
+ apply(change, borrowingRate = constants_1.MINIMUM_BORROWING_RATE) {
279
+ if (!change) {
280
+ return this;
281
+ }
282
+ switch (change.type) {
283
+ case "invalidCreation":
284
+ if (!this.isEmpty) {
285
+ throw new Error("Can't create onto existing Trove");
286
+ }
287
+ return change.invalidTrove;
288
+ case "creation": {
289
+ if (!this.isEmpty) {
290
+ throw new Error("Can't create onto existing Trove");
291
+ }
292
+ const { depositCollateral, borrowZUSD } = change.params;
293
+ return new Trove(depositCollateral, constants_1.ZUSD_LIQUIDATION_RESERVE.add(applyFee(borrowingRate, borrowZUSD)));
294
+ }
295
+ case "closure":
296
+ if (this.isEmpty) {
297
+ throw new Error("Can't close empty Trove");
298
+ }
299
+ return exports._emptyTrove;
300
+ case "adjustment": {
301
+ const { setToZero, params: { depositCollateral, withdrawCollateral, borrowZUSD, repayZUSD } } = change;
302
+ const collateralDecrease = withdrawCollateral !== null && withdrawCollateral !== void 0 ? withdrawCollateral : Decimal_1.Decimal.ZERO;
303
+ const collateralIncrease = depositCollateral !== null && depositCollateral !== void 0 ? depositCollateral : Decimal_1.Decimal.ZERO;
304
+ const debtDecrease = repayZUSD !== null && repayZUSD !== void 0 ? repayZUSD : Decimal_1.Decimal.ZERO;
305
+ const debtIncrease = borrowZUSD ? applyFee(borrowingRate, borrowZUSD) : Decimal_1.Decimal.ZERO;
306
+ return setToZero === "collateral"
307
+ ? this.setCollateral(Decimal_1.Decimal.ZERO).addDebt(debtIncrease).subtractDebt(debtDecrease)
308
+ : setToZero === "debt"
309
+ ? this.setDebt(Decimal_1.Decimal.ZERO)
310
+ .addCollateral(collateralIncrease)
311
+ .subtractCollateral(collateralDecrease)
312
+ : this.add(new Trove(collateralIncrease, debtIncrease)).subtract(new Trove(collateralDecrease, debtDecrease));
313
+ }
314
+ }
315
+ }
316
+ /**
317
+ * Calculate the result of an {@link TransactableLiquity.openTrove | openTrove()} transaction.
318
+ *
319
+ * @param params - Parameters of the transaction.
320
+ * @param borrowingRate - Borrowing rate to use when calculating the Trove's debt.
321
+ */
322
+ static create(params, borrowingRate) {
323
+ return exports._emptyTrove.apply(troveCreation(exports._normalizeTroveCreation(params)), borrowingRate);
324
+ }
325
+ /**
326
+ * Calculate the parameters of an {@link TransactableLiquity.openTrove | openTrove()} transaction
327
+ * that will result in the given Trove.
328
+ *
329
+ * @param that - The Trove to recreate.
330
+ * @param borrowingRate - Current borrowing rate.
331
+ */
332
+ static recreate(that, borrowingRate) {
333
+ const change = exports._emptyTrove.whatChanged(that, borrowingRate);
334
+ assert_1.default((change === null || change === void 0 ? void 0 : change.type) === "creation");
335
+ return change.params;
336
+ }
337
+ /**
338
+ * Calculate the result of an {@link TransactableLiquity.adjustTrove | adjustTrove()} transaction
339
+ * on this Trove.
340
+ *
341
+ * @param params - Parameters of the transaction.
342
+ * @param borrowingRate - Borrowing rate to use when adding to the Trove's debt.
343
+ */
344
+ adjust(params, borrowingRate) {
345
+ return this.apply(troveAdjustment(exports._normalizeTroveAdjustment(params)), borrowingRate);
346
+ }
347
+ /**
348
+ * Calculate the parameters of an {@link TransactableLiquity.adjustTrove | adjustTrove()}
349
+ * transaction that will change this Trove into the given Trove.
350
+ *
351
+ * @param that - The desired result of the transaction.
352
+ * @param borrowingRate - Current borrowing rate.
353
+ */
354
+ adjustTo(that, borrowingRate) {
355
+ const change = this.whatChanged(that, borrowingRate);
356
+ assert_1.default((change === null || change === void 0 ? void 0 : change.type) === "adjustment");
357
+ return change.params;
358
+ }
359
+ }
360
+ exports.Trove = Trove;
361
+ /** @internal */
362
+ exports._emptyTrove = new Trove();
363
+ /**
364
+ * A Trove that is associated with a single owner.
365
+ *
366
+ * @remarks
367
+ * The SDK uses the base {@link Trove} class as a generic container of collateral and debt, for
368
+ * example to represent the {@link ReadableLiquity.getTotal | total collateral and debt} locked up
369
+ * in the protocol.
370
+ *
371
+ * The `UserTrove` class extends `Trove` with extra information that's only available for Troves
372
+ * that are associated with a single owner (such as the owner's address, or the Trove's status).
373
+ *
374
+ * @public
375
+ */
376
+ class UserTrove extends Trove {
377
+ /** @internal */
378
+ constructor(ownerAddress, status, collateral, debt) {
379
+ super(collateral, debt);
380
+ this.ownerAddress = ownerAddress;
381
+ this.status = status;
382
+ }
383
+ equals(that) {
384
+ return (super.equals(that) && this.ownerAddress === that.ownerAddress && this.status === that.status);
385
+ }
386
+ /** @internal */
387
+ toString() {
388
+ return (`{ ownerAddress: "${this.ownerAddress}"` +
389
+ `, collateral: ${this.collateral}` +
390
+ `, debt: ${this.debt}` +
391
+ `, status: "${this.status}" }`);
392
+ }
393
+ }
394
+ exports.UserTrove = UserTrove;
395
+ /**
396
+ * A Trove in its state after the last direct modification.
397
+ *
398
+ * @remarks
399
+ * The Trove may have received collateral and debt shares from liquidations since then.
400
+ * Use {@link TroveWithPendingRedistribution.applyRedistribution | applyRedistribution()} to
401
+ * calculate the Trove's most up-to-date state.
402
+ *
403
+ * @public
404
+ */
405
+ class TroveWithPendingRedistribution extends UserTrove {
406
+ /** @internal */
407
+ constructor(ownerAddress, status, collateral, debt, stake = Decimal_1.Decimal.ZERO, snapshotOfTotalRedistributed = exports._emptyTrove) {
408
+ super(ownerAddress, status, collateral, debt);
409
+ this.stake = stake;
410
+ this.snapshotOfTotalRedistributed = snapshotOfTotalRedistributed;
411
+ }
412
+ applyRedistribution(totalRedistributed) {
413
+ const afterRedistribution = this.add(totalRedistributed.subtract(this.snapshotOfTotalRedistributed).multiply(this.stake));
414
+ return new UserTrove(this.ownerAddress, this.status, afterRedistribution.collateral, afterRedistribution.debt);
415
+ }
416
+ equals(that) {
417
+ return (super.equals(that) &&
418
+ this.stake.eq(that.stake) &&
419
+ this.snapshotOfTotalRedistributed.equals(that.snapshotOfTotalRedistributed));
420
+ }
421
+ }
422
+ exports.TroveWithPendingRedistribution = TroveWithPendingRedistribution;
423
+ //# sourceMappingURL=Trove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Trove.js","sourceRoot":"","sources":["../../src/Trove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { Decimal, Decimalish } from "./Decimal";
2
+ /**
3
+ * Represents the change between two states of an ZERO Stake.
4
+ *
5
+ * @public
6
+ */
7
+ export declare type ZEROStakeChange<T> = {
8
+ stakeZERO: T;
9
+ unstakeZERO?: undefined;
10
+ } | {
11
+ stakeZERO?: undefined;
12
+ unstakeZERO: T;
13
+ unstakeAllZERO: boolean;
14
+ };
15
+ /**
16
+ * Represents a user's ZERO stake and accrued gains.
17
+ *
18
+ * @remarks
19
+ * Returned by the {@link ReadableLiquity.getZEROStake | getZEROStake()} function.
20
+
21
+ * @public
22
+ */
23
+ export declare class ZEROStake {
24
+ /** The amount of ZERO that's staked. */
25
+ readonly stakedZERO: Decimal;
26
+ /** Collateral gain available to withdraw. */
27
+ readonly collateralGain: Decimal;
28
+ /** ZUSD gain available to withdraw. */
29
+ readonly zusdGain: Decimal;
30
+ /** @internal */
31
+ constructor(stakedZERO?: Decimal, collateralGain?: Decimal, zusdGain?: Decimal);
32
+ get isEmpty(): boolean;
33
+ /** @internal */
34
+ toString(): string;
35
+ /**
36
+ * Compare to another instance of `ZEROStake`.
37
+ */
38
+ equals(that: ZEROStake): boolean;
39
+ /**
40
+ * Calculate the difference between this `ZEROStake` and `thatStakedZERO`.
41
+ *
42
+ * @returns An object representing the change, or `undefined` if the staked amounts are equal.
43
+ */
44
+ whatChanged(thatStakedZERO: Decimalish): ZEROStakeChange<Decimal> | undefined;
45
+ /**
46
+ * Apply a {@link ZEROStakeChange} to this `ZEROStake`.
47
+ *
48
+ * @returns The new staked ZERO amount.
49
+ */
50
+ apply(change: ZEROStakeChange<Decimalish> | undefined): Decimal;
51
+ }
52
+ //# sourceMappingURL=ZEROStake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZEROStake.d.ts","sourceRoot":"","sources":["../../src/ZEROStake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEhD;;;;GAIG;AACH,oBAAY,eAAe,CAAC,CAAC,IACzB;IAAE,SAAS,EAAE,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,CAAA;CAAE,GACzC;IAAE,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,CAAC,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC;AAEvE;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB,wCAAwC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,6CAA6C;IAC7C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IAEjC,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,gBAAgB;gBACJ,UAAU,UAAe,EAAE,cAAc,UAAe,EAAE,QAAQ,UAAe;IAM7F,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gBAAgB;IAChB,QAAQ,IAAI,MAAM;IAQlB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQhC;;;;OAIG;IACH,WAAW,CAAC,cAAc,EAAE,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS;IAe7E;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,OAAO;CAahE"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZEROStake = void 0;
4
+ const Decimal_1 = require("./Decimal");
5
+ /**
6
+ * Represents a user's ZERO stake and accrued gains.
7
+ *
8
+ * @remarks
9
+ * Returned by the {@link ReadableLiquity.getZEROStake | getZEROStake()} function.
10
+
11
+ * @public
12
+ */
13
+ class ZEROStake {
14
+ /** @internal */
15
+ constructor(stakedZERO = Decimal_1.Decimal.ZERO, collateralGain = Decimal_1.Decimal.ZERO, zusdGain = Decimal_1.Decimal.ZERO) {
16
+ this.stakedZERO = stakedZERO;
17
+ this.collateralGain = collateralGain;
18
+ this.zusdGain = zusdGain;
19
+ }
20
+ get isEmpty() {
21
+ return this.stakedZERO.isZero && this.collateralGain.isZero && this.zusdGain.isZero;
22
+ }
23
+ /** @internal */
24
+ toString() {
25
+ return (`{ stakedZERO: ${this.stakedZERO}` +
26
+ `, collateralGain: ${this.collateralGain}` +
27
+ `, zusdGain: ${this.zusdGain} }`);
28
+ }
29
+ /**
30
+ * Compare to another instance of `ZEROStake`.
31
+ */
32
+ equals(that) {
33
+ return (this.stakedZERO.eq(that.stakedZERO) &&
34
+ this.collateralGain.eq(that.collateralGain) &&
35
+ this.zusdGain.eq(that.zusdGain));
36
+ }
37
+ /**
38
+ * Calculate the difference between this `ZEROStake` and `thatStakedZERO`.
39
+ *
40
+ * @returns An object representing the change, or `undefined` if the staked amounts are equal.
41
+ */
42
+ whatChanged(thatStakedZERO) {
43
+ thatStakedZERO = Decimal_1.Decimal.from(thatStakedZERO);
44
+ if (thatStakedZERO.lt(this.stakedZERO)) {
45
+ return {
46
+ unstakeZERO: this.stakedZERO.sub(thatStakedZERO),
47
+ unstakeAllZERO: thatStakedZERO.isZero
48
+ };
49
+ }
50
+ if (thatStakedZERO.gt(this.stakedZERO)) {
51
+ return { stakeZERO: thatStakedZERO.sub(this.stakedZERO) };
52
+ }
53
+ }
54
+ /**
55
+ * Apply a {@link ZEROStakeChange} to this `ZEROStake`.
56
+ *
57
+ * @returns The new staked ZERO amount.
58
+ */
59
+ apply(change) {
60
+ if (!change) {
61
+ return this.stakedZERO;
62
+ }
63
+ if (change.unstakeZERO !== undefined) {
64
+ return change.unstakeAllZERO || this.stakedZERO.lte(change.unstakeZERO)
65
+ ? Decimal_1.Decimal.ZERO
66
+ : this.stakedZERO.sub(change.unstakeZERO);
67
+ }
68
+ else {
69
+ return this.stakedZERO.add(change.stakeZERO);
70
+ }
71
+ }
72
+ }
73
+ exports.ZEROStake = ZEROStake;
74
+ //# sourceMappingURL=ZEROStake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZEROStake.js","sourceRoot":"","sources":["../../src/ZEROStake.ts"],"names":[],"mappings":";;;AAAA,uCAAgD;AAWhD;;;;;;;GAOG;AACH,MAAa,SAAS;IAUpB,gBAAgB;IAChB,YAAY,UAAU,GAAG,iBAAO,CAAC,IAAI,EAAE,cAAc,GAAG,iBAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAO,CAAC,IAAI;QAC3F,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACtF,CAAC;IAED,gBAAgB;IAChB,QAAQ;QACN,OAAO,CACL,iBAAiB,IAAI,CAAC,UAAU,EAAE;YAClC,qBAAqB,IAAI,CAAC,cAAc,EAAE;YAC1C,eAAe,IAAI,CAAC,QAAQ,IAAI,CACjC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAe;QACpB,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;YACnC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAChC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,cAA0B;QACpC,cAAc,GAAG,iBAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE9C,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,OAAO;gBACL,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC;gBAChD,cAAc,EAAE,cAAc,CAAC,MAAM;aACtC,CAAC;SACH;QAED,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACtC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;SAC3D;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAA+C;QACnD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC,UAAU,CAAC;SACxB;QAED,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE;YACpC,OAAO,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;gBACrE,CAAC,CAAC,iBAAO,CAAC,IAAI;gBACd,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SAC7C;aAAM;YACL,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;SAC9C;IACH,CAAC;CACF;AA/ED,8BA+EC"}
@@ -0,0 +1,55 @@
1
+ import { Decimal } from "./Decimal";
2
+ import { Fees } from "./Fees";
3
+ import { ZEROStake } from "./ZEROStake";
4
+ import { StabilityDeposit } from "./StabilityDeposit";
5
+ import { Trove, TroveWithPendingRedistribution, UserTrove } from "./Trove";
6
+ import { FrontendStatus, ReadableLiquity, TroveListingParams } from "./ReadableLiquity";
7
+ /** @internal */
8
+ export declare type _ReadableLiquityWithExtraParamsBase<T extends unknown[]> = {
9
+ [P in keyof ReadableLiquity]: ReadableLiquity[P] extends (...params: infer A) => infer R ? (...params: [...originalParams: A, ...extraParams: T]) => R : never;
10
+ };
11
+ /** @internal */
12
+ export declare type _LiquityReadCacheBase<T extends unknown[]> = {
13
+ [P in keyof ReadableLiquity]: ReadableLiquity[P] extends (...args: infer A) => Promise<infer R> ? (...params: [...originalParams: A, ...extraParams: T]) => R | undefined : never;
14
+ };
15
+ /** @internal */
16
+ export interface _ReadableLiquityWithExtraParams<T extends unknown[]> extends _ReadableLiquityWithExtraParamsBase<T> {
17
+ getTroves(params: TroveListingParams & {
18
+ beforeRedistribution: true;
19
+ }, ...extraParams: T): Promise<TroveWithPendingRedistribution[]>;
20
+ getTroves(params: TroveListingParams, ...extraParams: T): Promise<UserTrove[]>;
21
+ }
22
+ /** @internal */
23
+ export interface _LiquityReadCache<T extends unknown[]> extends _LiquityReadCacheBase<T> {
24
+ getTroves(params: TroveListingParams & {
25
+ beforeRedistribution: true;
26
+ }, ...extraParams: T): TroveWithPendingRedistribution[] | undefined;
27
+ getTroves(params: TroveListingParams, ...extraParams: T): UserTrove[] | undefined;
28
+ }
29
+ /** @internal */
30
+ export declare class _CachedReadableLiquity<T extends unknown[]> implements _ReadableLiquityWithExtraParams<T> {
31
+ private _readable;
32
+ private _cache;
33
+ constructor(readable: _ReadableLiquityWithExtraParams<T>, cache: _LiquityReadCache<T>);
34
+ getTotalRedistributed(...extraParams: T): Promise<Trove>;
35
+ getTroveBeforeRedistribution(address?: string, ...extraParams: T): Promise<TroveWithPendingRedistribution>;
36
+ getTrove(address?: string, ...extraParams: T): Promise<UserTrove>;
37
+ getNumberOfTroves(...extraParams: T): Promise<number>;
38
+ getPrice(...extraParams: T): Promise<Decimal>;
39
+ getTotal(...extraParams: T): Promise<Trove>;
40
+ getStabilityDeposit(address?: string, ...extraParams: T): Promise<StabilityDeposit>;
41
+ getRemainingStabilityPoolZEROReward(...extraParams: T): Promise<Decimal>;
42
+ getZUSDInStabilityPool(...extraParams: T): Promise<Decimal>;
43
+ getZUSDBalance(address?: string, ...extraParams: T): Promise<Decimal>;
44
+ getZEROBalance(address?: string, ...extraParams: T): Promise<Decimal>;
45
+ getCollateralSurplusBalance(address?: string, ...extraParams: T): Promise<Decimal>;
46
+ getTroves(params: TroveListingParams & {
47
+ beforeRedistribution: true;
48
+ }, ...extraParams: T): Promise<TroveWithPendingRedistribution[]>;
49
+ getTroves(params: TroveListingParams, ...extraParams: T): Promise<UserTrove[]>;
50
+ getFees(...extraParams: T): Promise<Fees>;
51
+ getZEROStake(address?: string, ...extraParams: T): Promise<ZEROStake>;
52
+ getTotalStakedZERO(...extraParams: T): Promise<Decimal>;
53
+ getFrontendStatus(address?: string, ...extraParams: T): Promise<FrontendStatus>;
54
+ }
55
+ //# sourceMappingURL=_CachedReadableLiquity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_CachedReadableLiquity.d.ts","sourceRoot":"","sources":["../../src/_CachedReadableLiquity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,8BAA8B,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAExF,gBAAgB;AAChB,oBAAY,mCAAmC,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI;KACpE,CAAC,IAAI,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACpF,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,GAC3D,KAAK;CACV,CAAC;AAEF,gBAAgB;AAChB,oBAAY,qBAAqB,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI;KACtD,CAAC,IAAI,MAAM,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAC3F,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,GACvE,KAAK;CACV,CAAC;AAIF,gBAAgB;AAChB,MAAM,WAAW,+BAA+B,CAAC,CAAC,SAAS,OAAO,EAAE,CAClE,SAAQ,mCAAmC,CAAC,CAAC,CAAC;IAC9C,SAAS,CACP,MAAM,EAAE,kBAAkB,GAAG;QAAE,oBAAoB,EAAE,IAAI,CAAA;KAAE,EAC3D,GAAG,WAAW,EAAE,CAAC,GAChB,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAAC;IAE7C,SAAS,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;CAChF;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAE,SAAQ,qBAAqB,CAAC,CAAC,CAAC;IACtF,SAAS,CACP,MAAM,EAAE,kBAAkB,GAAG;QAAE,oBAAoB,EAAE,IAAI,CAAA;KAAE,EAC3D,GAAG,WAAW,EAAE,CAAC,GAChB,8BAA8B,EAAE,GAAG,SAAS,CAAC;IAEhD,SAAS,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC;CACnF;AAED,gBAAgB;AAChB,qBAAa,sBAAsB,CAAC,CAAC,SAAS,OAAO,EAAE,CACrD,YAAW,+BAA+B,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,MAAM,CAAuB;gBAEzB,QAAQ,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAK/E,qBAAqB,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAOxD,4BAA4B,CAChC,OAAO,CAAC,EAAE,MAAM,EAChB,GAAG,WAAW,EAAE,CAAC,GAChB,OAAO,CAAC,8BAA8B,CAAC;IAOpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IASjE,iBAAiB,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAOrD,QAAQ,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7C,QAAQ,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAI3C,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOnF,mCAAmC,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOxE,sBAAsB,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAO3D,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrE,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOxF,SAAS,CACP,MAAM,EAAE,kBAAkB,GAAG;QAAE,oBAAoB,EAAE,IAAI,CAAA;KAAE,EAC3D,GAAG,WAAW,EAAE,CAAC,GAChB,OAAO,CAAC,8BAA8B,EAAE,CAAC;IAE5C,SAAS,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAkBxE,OAAO,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAOrE,kBAAkB,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOvD,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;CAMtF"}