@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.
- package/.eslintrc.json +17 -0
- package/.mocharc.yml +1 -0
- package/LICENSE +905 -0
- package/README.md +23 -0
- package/api-extractor.json +4 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/src/Decimal.d.ts +89 -0
- package/dist/src/Decimal.d.ts.map +1 -0
- package/dist/src/Decimal.js +361 -0
- package/dist/src/Decimal.js.map +1 -0
- package/dist/src/Fees.d.ts +82 -0
- package/dist/src/Fees.d.ts.map +1 -0
- package/dist/src/Fees.js +123 -0
- package/dist/src/Fees.js.map +1 -0
- package/dist/src/LiquityStore.d.ts +209 -0
- package/dist/src/LiquityStore.d.ts.map +1 -0
- package/dist/src/LiquityStore.js +209 -0
- package/dist/src/LiquityStore.js.map +1 -0
- package/dist/src/ObservableLiquity.d.ts +15 -0
- package/dist/src/ObservableLiquity.d.ts.map +1 -0
- package/dist/src/ObservableLiquity.js +3 -0
- package/dist/src/ObservableLiquity.js.map +1 -0
- package/dist/src/PopulatableLiquity.d.ts +125 -0
- package/dist/src/PopulatableLiquity.d.ts.map +1 -0
- package/dist/src/PopulatableLiquity.js +3 -0
- package/dist/src/PopulatableLiquity.js.map +1 -0
- package/dist/src/ReadableLiquity.d.ts +156 -0
- package/dist/src/ReadableLiquity.d.ts.map +1 -0
- package/dist/src/ReadableLiquity.js +3 -0
- package/dist/src/ReadableLiquity.js.map +1 -0
- package/dist/src/SendableLiquity.d.ts +156 -0
- package/dist/src/SendableLiquity.d.ts.map +1 -0
- package/dist/src/SendableLiquity.js +20 -0
- package/dist/src/SendableLiquity.js.map +1 -0
- package/dist/src/StabilityDeposit.d.ts +59 -0
- package/dist/src/StabilityDeposit.d.ts.map +1 -0
- package/dist/src/StabilityDeposit.js +80 -0
- package/dist/src/StabilityDeposit.js.map +1 -0
- package/dist/src/TransactableLiquity.d.ts +414 -0
- package/dist/src/TransactableLiquity.d.ts.map +1 -0
- package/dist/src/TransactableLiquity.js +18 -0
- package/dist/src/TransactableLiquity.js.map +1 -0
- package/dist/src/Trove.d.ts +367 -0
- package/dist/src/Trove.d.ts.map +1 -0
- package/dist/src/Trove.js +423 -0
- package/dist/src/Trove.js.map +1 -0
- package/dist/src/ZEROStake.d.ts +52 -0
- package/dist/src/ZEROStake.d.ts.map +1 -0
- package/dist/src/ZEROStake.js +74 -0
- package/dist/src/ZEROStake.js.map +1 -0
- package/dist/src/_CachedReadableLiquity.d.ts +55 -0
- package/dist/src/_CachedReadableLiquity.d.ts.map +1 -0
- package/dist/src/_CachedReadableLiquity.js +93 -0
- package/dist/src/_CachedReadableLiquity.js.map +1 -0
- package/dist/src/constants.d.ts +61 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +64 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/etc/lib-base.api.md +788 -0
- package/index.ts +13 -0
- package/package.json +52 -0
- package/src/Decimal.ts +456 -0
- package/src/Fees.ts +160 -0
- package/src/LiquityStore.ts +563 -0
- package/src/ObservableLiquity.ts +32 -0
- package/src/PopulatableLiquity.ts +280 -0
- package/src/ReadableLiquity.ts +175 -0
- package/src/SendableLiquity.ts +251 -0
- package/src/StabilityDeposit.ts +126 -0
- package/src/TransactableLiquity.ts +471 -0
- package/src/Trove.ts +824 -0
- package/src/ZEROStake.ts +99 -0
- package/src/_CachedReadableLiquity.ts +186 -0
- package/src/constants.ts +68 -0
- package/test/Decimal.test.ts +212 -0
- package/test/StabilityDeposit.test.ts +30 -0
- package/test/Trove.test.ts +143 -0
- package/test/ZEROStake.test.ts +24 -0
- package/tsconfig.dist.json +8 -0
- package/tsconfig.json +5 -0
package/dist/src/Fees.js
ADDED
@@ -0,0 +1,123 @@
|
|
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.Fees = void 0;
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
8
|
+
const Decimal_1 = require("./Decimal");
|
9
|
+
const constants_1 = require("./constants");
|
10
|
+
/**
|
11
|
+
* Calculator for fees.
|
12
|
+
*
|
13
|
+
* @remarks
|
14
|
+
* Returned by the {@link ReadableLiquity.getFees | getFees()} function.
|
15
|
+
*
|
16
|
+
* @public
|
17
|
+
*/
|
18
|
+
class Fees {
|
19
|
+
/** @internal */
|
20
|
+
constructor(baseRateWithoutDecay, minuteDecayFactor, beta, lastFeeOperation, timeOfLatestBlock, recoveryMode) {
|
21
|
+
this._baseRateWithoutDecay = Decimal_1.Decimal.from(baseRateWithoutDecay);
|
22
|
+
this._minuteDecayFactor = Decimal_1.Decimal.from(minuteDecayFactor);
|
23
|
+
this._beta = Decimal_1.Decimal.from(beta);
|
24
|
+
this._lastFeeOperation = lastFeeOperation;
|
25
|
+
this._timeOfLatestBlock = timeOfLatestBlock;
|
26
|
+
this._recoveryMode = recoveryMode;
|
27
|
+
assert_1.default(this._minuteDecayFactor.lt(1));
|
28
|
+
}
|
29
|
+
/** @internal */
|
30
|
+
_setRecoveryMode(recoveryMode) {
|
31
|
+
return new Fees(this._baseRateWithoutDecay, this._minuteDecayFactor, this._beta, this._lastFeeOperation, this._timeOfLatestBlock, recoveryMode);
|
32
|
+
}
|
33
|
+
/**
|
34
|
+
* Compare to another instance of `Fees`.
|
35
|
+
*/
|
36
|
+
equals(that) {
|
37
|
+
return (this._baseRateWithoutDecay.eq(that._baseRateWithoutDecay) &&
|
38
|
+
this._minuteDecayFactor.eq(that._minuteDecayFactor) &&
|
39
|
+
this._beta.eq(that._beta) &&
|
40
|
+
this._lastFeeOperation.getTime() === that._lastFeeOperation.getTime() &&
|
41
|
+
this._timeOfLatestBlock.getTime() === that._timeOfLatestBlock.getTime() &&
|
42
|
+
this._recoveryMode === that._recoveryMode);
|
43
|
+
}
|
44
|
+
/** @internal */
|
45
|
+
toString() {
|
46
|
+
return (`{ baseRateWithoutDecay: ${this._baseRateWithoutDecay}` +
|
47
|
+
`, lastFeeOperation: "${this._lastFeeOperation.toLocaleString()}"` +
|
48
|
+
`, recoveryMode: ${this._recoveryMode} } `);
|
49
|
+
}
|
50
|
+
/** @internal */
|
51
|
+
baseRate(when = this._timeOfLatestBlock) {
|
52
|
+
const millisecondsSinceLastFeeOperation = Math.max(when.getTime() - this._lastFeeOperation.getTime(), 0 // Clamp negative elapsed time to 0, in case the client's time is in the past.
|
53
|
+
// We will calculate slightly higher than actual fees, which is fine.
|
54
|
+
);
|
55
|
+
const minutesSinceLastFeeOperation = Math.floor(millisecondsSinceLastFeeOperation / 60000);
|
56
|
+
return this._minuteDecayFactor.pow(minutesSinceLastFeeOperation).mul(this._baseRateWithoutDecay);
|
57
|
+
}
|
58
|
+
/**
|
59
|
+
* Calculate the current borrowing rate.
|
60
|
+
*
|
61
|
+
* @param when - Optional timestamp that can be used to calculate what the borrowing rate would
|
62
|
+
* decay to at a point of time in the future.
|
63
|
+
*
|
64
|
+
* @remarks
|
65
|
+
* By default, the fee is calculated at the time of the latest block. This can be overridden using
|
66
|
+
* the `when` parameter.
|
67
|
+
*
|
68
|
+
* To calculate the borrowing fee in ZUSD, multiply the borrowed ZUSD amount by the borrowing rate.
|
69
|
+
*
|
70
|
+
* @example
|
71
|
+
* ```typescript
|
72
|
+
* const fees = await zero.getFees();
|
73
|
+
*
|
74
|
+
* const borrowedZUSDAmount = 100;
|
75
|
+
* const borrowingRate = fees.borrowingRate();
|
76
|
+
* const borrowingFeeZUSD = borrowingRate.mul(borrowedZUSDAmount);
|
77
|
+
* ```
|
78
|
+
*/
|
79
|
+
borrowingRate(when) {
|
80
|
+
return this._recoveryMode
|
81
|
+
? Decimal_1.Decimal.ZERO
|
82
|
+
: Decimal_1.Decimal.min(constants_1.MINIMUM_BORROWING_RATE.add(this.baseRate(when)), constants_1.MAXIMUM_BORROWING_RATE);
|
83
|
+
}
|
84
|
+
/**
|
85
|
+
* Calculate the current redemption rate.
|
86
|
+
*
|
87
|
+
* @param redeemedFractionOfSupply - The amount of ZUSD being redeemed divided by the total supply.
|
88
|
+
* @param when - Optional timestamp that can be used to calculate what the redemption rate would
|
89
|
+
* decay to at a point of time in the future.
|
90
|
+
*
|
91
|
+
* @remarks
|
92
|
+
* By default, the fee is calculated at the time of the latest block. This can be overridden using
|
93
|
+
* the `when` parameter.
|
94
|
+
|
95
|
+
* Unlike the borrowing rate, the redemption rate depends on the amount being redeemed. To be more
|
96
|
+
* precise, it depends on the fraction of the redeemed amount compared to the total ZUSD supply,
|
97
|
+
* which must be passed as a parameter.
|
98
|
+
*
|
99
|
+
* To calculate the redemption fee in ZUSD, multiply the redeemed ZUSD amount with the redemption
|
100
|
+
* rate.
|
101
|
+
*
|
102
|
+
* @example
|
103
|
+
* ```typescript
|
104
|
+
* const fees = await zero.getFees();
|
105
|
+
* const total = await zero.getTotal();
|
106
|
+
*
|
107
|
+
* const redeemedZUSDAmount = Decimal.from(100);
|
108
|
+
* const redeemedFractionOfSupply = redeemedZUSDAmount.div(total.debt);
|
109
|
+
* const redemptionRate = fees.redemptionRate(redeemedFractionOfSupply);
|
110
|
+
* const redemptionFeeZUSD = redemptionRate.mul(redeemedZUSDAmount);
|
111
|
+
* ```
|
112
|
+
*/
|
113
|
+
redemptionRate(redeemedFractionOfSupply = Decimal_1.Decimal.ZERO, when) {
|
114
|
+
redeemedFractionOfSupply = Decimal_1.Decimal.from(redeemedFractionOfSupply);
|
115
|
+
let baseRate = this.baseRate(when);
|
116
|
+
if (redeemedFractionOfSupply.nonZero) {
|
117
|
+
baseRate = redeemedFractionOfSupply.div(this._beta).add(baseRate);
|
118
|
+
}
|
119
|
+
return Decimal_1.Decimal.min(constants_1.MINIMUM_REDEMPTION_RATE.add(baseRate), Decimal_1.Decimal.ONE);
|
120
|
+
}
|
121
|
+
}
|
122
|
+
exports.Fees = Fees;
|
123
|
+
//# sourceMappingURL=Fees.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Fees.js","sourceRoot":"","sources":["../../src/Fees.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,209 @@
|
|
1
|
+
import { Decimal } from "./Decimal";
|
2
|
+
import { StabilityDeposit } from "./StabilityDeposit";
|
3
|
+
import { Trove, TroveWithPendingRedistribution, UserTrove } from "./Trove";
|
4
|
+
import { Fees } from "./Fees";
|
5
|
+
import { ZEROStake } from "./ZEROStake";
|
6
|
+
import { FrontendStatus } from "./ReadableLiquity";
|
7
|
+
/**
|
8
|
+
* State variables read from the blockchain.
|
9
|
+
*
|
10
|
+
* @public
|
11
|
+
*/
|
12
|
+
export interface LiquityStoreBaseState {
|
13
|
+
/** Status of currently used frontend. */
|
14
|
+
frontend: FrontendStatus;
|
15
|
+
/** Status of user's own frontend. */
|
16
|
+
ownFrontend: FrontendStatus;
|
17
|
+
/** Number of Troves that are currently open. */
|
18
|
+
numberOfTroves: number;
|
19
|
+
/** User's native currency balance (e.g. Ether). */
|
20
|
+
accountBalance: Decimal;
|
21
|
+
/** User's ZUSD token balance. */
|
22
|
+
zusdBalance: Decimal;
|
23
|
+
/** User's NUE token balance. */
|
24
|
+
nueBalance: Decimal;
|
25
|
+
/** User's ZERO token balance. */
|
26
|
+
zeroBalance: Decimal;
|
27
|
+
/**
|
28
|
+
* Amount of leftover collateral available for withdrawal to the user.
|
29
|
+
*
|
30
|
+
* @remarks
|
31
|
+
* See {@link ReadableLiquity.getCollateralSurplusBalance | getCollateralSurplusBalance()} for
|
32
|
+
* more information.
|
33
|
+
*/
|
34
|
+
collateralSurplusBalance: Decimal;
|
35
|
+
/** Current price of the native currency (e.g. Ether) in USD. */
|
36
|
+
price: Decimal;
|
37
|
+
/** Total amount of ZUSD currently deposited in the Stability Pool. */
|
38
|
+
zusdInStabilityPool: Decimal;
|
39
|
+
/** Total collateral and debt in the Zero system. */
|
40
|
+
total: Trove;
|
41
|
+
/**
|
42
|
+
* Total collateral and debt per stake that has been liquidated through redistribution.
|
43
|
+
*
|
44
|
+
* @remarks
|
45
|
+
* Needed when dealing with instances of {@link TroveWithPendingRedistribution}.
|
46
|
+
*/
|
47
|
+
totalRedistributed: Trove;
|
48
|
+
/**
|
49
|
+
* User's Trove in its state after the last direct modification.
|
50
|
+
*
|
51
|
+
* @remarks
|
52
|
+
* The current state of the user's Trove can be found as
|
53
|
+
* {@link LiquityStoreDerivedState.trove | trove}.
|
54
|
+
*/
|
55
|
+
troveBeforeRedistribution: TroveWithPendingRedistribution;
|
56
|
+
/** User's stability deposit. */
|
57
|
+
stabilityDeposit: StabilityDeposit;
|
58
|
+
/** Remaining ZERO that will be collectively rewarded to stability depositors. */
|
59
|
+
remainingStabilityPoolZEROReward: Decimal;
|
60
|
+
/** @internal */
|
61
|
+
_feesInNormalMode: Fees;
|
62
|
+
/** User's ZERO stake. */
|
63
|
+
zeroStake: ZEROStake;
|
64
|
+
/** Total amount of ZERO currently staked. */
|
65
|
+
totalStakedZERO: Decimal;
|
66
|
+
/** @internal */
|
67
|
+
_riskiestTroveBeforeRedistribution: TroveWithPendingRedistribution;
|
68
|
+
}
|
69
|
+
/**
|
70
|
+
* State variables derived from {@link LiquityStoreBaseState}.
|
71
|
+
*
|
72
|
+
* @public
|
73
|
+
*/
|
74
|
+
export interface LiquityStoreDerivedState {
|
75
|
+
/** Current state of user's Trove */
|
76
|
+
trove: UserTrove;
|
77
|
+
/** Calculator for current fees. */
|
78
|
+
fees: Fees;
|
79
|
+
/**
|
80
|
+
* Current borrowing rate.
|
81
|
+
*
|
82
|
+
* @remarks
|
83
|
+
* A value between 0 and 1.
|
84
|
+
*
|
85
|
+
* @example
|
86
|
+
* For example a value of 0.01 amounts to a borrowing fee of 1% of the borrowed amount.
|
87
|
+
*/
|
88
|
+
borrowingRate: Decimal;
|
89
|
+
/**
|
90
|
+
* Current redemption rate.
|
91
|
+
*
|
92
|
+
* @remarks
|
93
|
+
* Note that the actual rate paid by a redemption transaction will depend on the amount of ZUSD
|
94
|
+
* being redeemed.
|
95
|
+
*
|
96
|
+
* Use {@link Fees.redemptionRate} to calculate a precise redemption rate.
|
97
|
+
*/
|
98
|
+
redemptionRate: Decimal;
|
99
|
+
/**
|
100
|
+
* Whether there are any Troves with collateral ratio below the
|
101
|
+
* {@link MINIMUM_COLLATERAL_RATIO | minimum}.
|
102
|
+
*/
|
103
|
+
haveUndercollateralizedTroves: boolean;
|
104
|
+
}
|
105
|
+
/**
|
106
|
+
* Type of {@link LiquityStore}'s {@link LiquityStore.state | state}.
|
107
|
+
*
|
108
|
+
* @remarks
|
109
|
+
* It combines all properties of {@link LiquityStoreBaseState} and {@link LiquityStoreDerivedState}
|
110
|
+
* with optional extra state added by the particular `LiquityStore` implementation.
|
111
|
+
*
|
112
|
+
* The type parameter `T` may be used to type the extra state.
|
113
|
+
*
|
114
|
+
* @public
|
115
|
+
*/
|
116
|
+
export declare type LiquityStoreState<T = unknown> = LiquityStoreBaseState & LiquityStoreDerivedState & T;
|
117
|
+
/**
|
118
|
+
* Parameters passed to {@link LiquityStore} listeners.
|
119
|
+
*
|
120
|
+
* @remarks
|
121
|
+
* Use the {@link LiquityStore.subscribe | subscribe()} function to register a listener.
|
122
|
+
|
123
|
+
* @public
|
124
|
+
*/
|
125
|
+
export interface LiquityStoreListenerParams<T = unknown> {
|
126
|
+
/** The entire previous state. */
|
127
|
+
newState: LiquityStoreState<T>;
|
128
|
+
/** The entire new state. */
|
129
|
+
oldState: LiquityStoreState<T>;
|
130
|
+
/** Only the state variables that have changed. */
|
131
|
+
stateChange: Partial<LiquityStoreState<T>>;
|
132
|
+
}
|
133
|
+
/**
|
134
|
+
* Abstract base class of Zero data store implementations.
|
135
|
+
*
|
136
|
+
* @remarks
|
137
|
+
* The type parameter `T` may be used to type extra state added to {@link LiquityStoreState} by the
|
138
|
+
* subclass.
|
139
|
+
*
|
140
|
+
* Implemented by {@link @sovryn-zero/lib-ethers#BlockPolledLiquityStore}.
|
141
|
+
*
|
142
|
+
* @public
|
143
|
+
*/
|
144
|
+
export declare abstract class LiquityStore<T = unknown> {
|
145
|
+
/** Turn console logging on/off. */
|
146
|
+
logging: boolean;
|
147
|
+
/**
|
148
|
+
* Called after the state is fetched for the first time.
|
149
|
+
*
|
150
|
+
* @remarks
|
151
|
+
* See {@link LiquityStore.start | start()}.
|
152
|
+
*/
|
153
|
+
onLoaded?: () => void;
|
154
|
+
/** @internal */
|
155
|
+
protected _loaded: boolean;
|
156
|
+
private _baseState?;
|
157
|
+
private _derivedState?;
|
158
|
+
private _extraState?;
|
159
|
+
private _updateTimeoutId;
|
160
|
+
private _listeners;
|
161
|
+
/**
|
162
|
+
* The current store state.
|
163
|
+
*
|
164
|
+
* @remarks
|
165
|
+
* Should not be accessed before the store is loaded. Assign a function to
|
166
|
+
* {@link LiquityStore.onLoaded | onLoaded} to get a callback when this happens.
|
167
|
+
*
|
168
|
+
* See {@link LiquityStoreState} for the list of properties returned.
|
169
|
+
*/
|
170
|
+
get state(): LiquityStoreState<T>;
|
171
|
+
/** @internal */
|
172
|
+
protected abstract _doStart(): () => void;
|
173
|
+
/**
|
174
|
+
* Start monitoring the blockchain for Zero state changes.
|
175
|
+
*
|
176
|
+
* @remarks
|
177
|
+
* The {@link LiquityStore.onLoaded | onLoaded} callback will be called after the state is fetched
|
178
|
+
* for the first time.
|
179
|
+
*
|
180
|
+
* Use the {@link LiquityStore.subscribe | subscribe()} function to register listeners.
|
181
|
+
*
|
182
|
+
* @returns Function to stop the monitoring.
|
183
|
+
*/
|
184
|
+
start(): () => void;
|
185
|
+
private _cancelUpdateIfScheduled;
|
186
|
+
private _scheduleUpdate;
|
187
|
+
private _logUpdate;
|
188
|
+
private _updateIfChanged;
|
189
|
+
private _silentlyUpdateIfChanged;
|
190
|
+
private _updateFees;
|
191
|
+
private _reduce;
|
192
|
+
private _derive;
|
193
|
+
private _reduceDerived;
|
194
|
+
/** @internal */
|
195
|
+
protected abstract _reduceExtra(extraState: T, extraStateUpdate: Partial<T>): T;
|
196
|
+
private _notify;
|
197
|
+
/**
|
198
|
+
* Register a state change listener.
|
199
|
+
*
|
200
|
+
* @param listener - Function that will be called whenever state changes.
|
201
|
+
* @returns Function to unregister this listener.
|
202
|
+
*/
|
203
|
+
subscribe(listener: (params: LiquityStoreListenerParams<T>) => void): () => void;
|
204
|
+
/** @internal */
|
205
|
+
protected _load(baseState: LiquityStoreBaseState, extraState?: T): void;
|
206
|
+
/** @internal */
|
207
|
+
protected _update(baseStateUpdate?: Partial<LiquityStoreBaseState>, extraStateUpdate?: Partial<T>): void;
|
208
|
+
}
|
209
|
+
//# sourceMappingURL=LiquityStore.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"LiquityStore.d.ts","sourceRoot":"","sources":["../../src/LiquityStore.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,209 @@
|
|
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.LiquityStore = void 0;
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
8
|
+
const strictEquals = (a, b) => a === b;
|
9
|
+
const eq = (a, b) => a.eq(b);
|
10
|
+
const equals = (a, b) => a.equals(b);
|
11
|
+
const frontendStatusEquals = (a, b) => a.status === "unregistered"
|
12
|
+
? b.status === "unregistered"
|
13
|
+
: b.status === "registered" && a.kickbackRate.eq(b.kickbackRate);
|
14
|
+
const showFrontendStatus = (x) => x.status === "unregistered"
|
15
|
+
? '{ status: "unregistered" }'
|
16
|
+
: `{ status: "registered", kickbackRate: ${x.kickbackRate} }`;
|
17
|
+
const wrap = (f) => (...args) => f(...args);
|
18
|
+
const difference = (a, b) => Object.fromEntries(Object.entries(a).filter(([key, value]) => value !== b[key]));
|
19
|
+
/**
|
20
|
+
* Abstract base class of Zero data store implementations.
|
21
|
+
*
|
22
|
+
* @remarks
|
23
|
+
* The type parameter `T` may be used to type extra state added to {@link LiquityStoreState} by the
|
24
|
+
* subclass.
|
25
|
+
*
|
26
|
+
* Implemented by {@link @sovryn-zero/lib-ethers#BlockPolledLiquityStore}.
|
27
|
+
*
|
28
|
+
* @public
|
29
|
+
*/
|
30
|
+
class LiquityStore {
|
31
|
+
constructor() {
|
32
|
+
/** Turn console logging on/off. */
|
33
|
+
this.logging = false;
|
34
|
+
/** @internal */
|
35
|
+
this._loaded = false;
|
36
|
+
this._listeners = new Set();
|
37
|
+
}
|
38
|
+
/**
|
39
|
+
* The current store state.
|
40
|
+
*
|
41
|
+
* @remarks
|
42
|
+
* Should not be accessed before the store is loaded. Assign a function to
|
43
|
+
* {@link LiquityStore.onLoaded | onLoaded} to get a callback when this happens.
|
44
|
+
*
|
45
|
+
* See {@link LiquityStoreState} for the list of properties returned.
|
46
|
+
*/
|
47
|
+
get state() {
|
48
|
+
return Object.assign({}, this._baseState, this._derivedState, this._extraState);
|
49
|
+
}
|
50
|
+
/**
|
51
|
+
* Start monitoring the blockchain for Zero state changes.
|
52
|
+
*
|
53
|
+
* @remarks
|
54
|
+
* The {@link LiquityStore.onLoaded | onLoaded} callback will be called after the state is fetched
|
55
|
+
* for the first time.
|
56
|
+
*
|
57
|
+
* Use the {@link LiquityStore.subscribe | subscribe()} function to register listeners.
|
58
|
+
*
|
59
|
+
* @returns Function to stop the monitoring.
|
60
|
+
*/
|
61
|
+
start() {
|
62
|
+
const doStop = this._doStart();
|
63
|
+
return () => {
|
64
|
+
doStop();
|
65
|
+
this._cancelUpdateIfScheduled();
|
66
|
+
};
|
67
|
+
}
|
68
|
+
_cancelUpdateIfScheduled() {
|
69
|
+
if (this._updateTimeoutId !== undefined) {
|
70
|
+
clearTimeout(this._updateTimeoutId);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
_scheduleUpdate() {
|
74
|
+
this._cancelUpdateIfScheduled();
|
75
|
+
this._updateTimeoutId = setTimeout(() => {
|
76
|
+
this._updateTimeoutId = undefined;
|
77
|
+
this._update();
|
78
|
+
}, 30000);
|
79
|
+
}
|
80
|
+
_logUpdate(name, next, show) {
|
81
|
+
if (this.logging) {
|
82
|
+
console.log(`${name} updated to ${show ? show(next) : next}`);
|
83
|
+
}
|
84
|
+
return next;
|
85
|
+
}
|
86
|
+
_updateIfChanged(equals, name, prev, next, show) {
|
87
|
+
return next !== undefined && !equals(prev, next) ? this._logUpdate(name, next, show) : prev;
|
88
|
+
}
|
89
|
+
_silentlyUpdateIfChanged(equals, prev, next) {
|
90
|
+
return next !== undefined && !equals(prev, next) ? next : prev;
|
91
|
+
}
|
92
|
+
_updateFees(name, prev, next) {
|
93
|
+
if (next && !next.equals(prev)) {
|
94
|
+
// Filter out fee update spam that happens on every new block by only logging when string
|
95
|
+
// representation changes.
|
96
|
+
if (`${next}` !== `${prev}`) {
|
97
|
+
this._logUpdate(name, next);
|
98
|
+
}
|
99
|
+
return next;
|
100
|
+
}
|
101
|
+
else {
|
102
|
+
return prev;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
_reduce(baseState, baseStateUpdate) {
|
106
|
+
return {
|
107
|
+
frontend: this._updateIfChanged(frontendStatusEquals, "frontend", baseState.frontend, baseStateUpdate.frontend, showFrontendStatus),
|
108
|
+
ownFrontend: this._updateIfChanged(frontendStatusEquals, "ownFrontend", baseState.ownFrontend, baseStateUpdate.ownFrontend, showFrontendStatus),
|
109
|
+
numberOfTroves: this._updateIfChanged(strictEquals, "numberOfTroves", baseState.numberOfTroves, baseStateUpdate.numberOfTroves),
|
110
|
+
accountBalance: this._updateIfChanged(eq, "accountBalance", baseState.accountBalance, baseStateUpdate.accountBalance),
|
111
|
+
zusdBalance: this._updateIfChanged(eq, "zusdBalance", baseState.zusdBalance, baseStateUpdate.zusdBalance),
|
112
|
+
nueBalance: this._updateIfChanged(eq, "nueBalance", baseState.nueBalance, baseStateUpdate.nueBalance),
|
113
|
+
zeroBalance: this._updateIfChanged(eq, "zeroBalance", baseState.zeroBalance, baseStateUpdate.zeroBalance),
|
114
|
+
collateralSurplusBalance: this._updateIfChanged(eq, "collateralSurplusBalance", baseState.collateralSurplusBalance, baseStateUpdate.collateralSurplusBalance),
|
115
|
+
price: this._updateIfChanged(eq, "price", baseState.price, baseStateUpdate.price),
|
116
|
+
zusdInStabilityPool: this._updateIfChanged(eq, "zusdInStabilityPool", baseState.zusdInStabilityPool, baseStateUpdate.zusdInStabilityPool),
|
117
|
+
total: this._updateIfChanged(equals, "total", baseState.total, baseStateUpdate.total),
|
118
|
+
totalRedistributed: this._updateIfChanged(equals, "totalRedistributed", baseState.totalRedistributed, baseStateUpdate.totalRedistributed),
|
119
|
+
troveBeforeRedistribution: this._updateIfChanged(equals, "troveBeforeRedistribution", baseState.troveBeforeRedistribution, baseStateUpdate.troveBeforeRedistribution),
|
120
|
+
stabilityDeposit: this._updateIfChanged(equals, "stabilityDeposit", baseState.stabilityDeposit, baseStateUpdate.stabilityDeposit),
|
121
|
+
remainingStabilityPoolZEROReward: this._silentlyUpdateIfChanged(eq, baseState.remainingStabilityPoolZEROReward, baseStateUpdate.remainingStabilityPoolZEROReward),
|
122
|
+
_feesInNormalMode: this._silentlyUpdateIfChanged(equals, baseState._feesInNormalMode, baseStateUpdate._feesInNormalMode),
|
123
|
+
zeroStake: this._updateIfChanged(equals, "zeroStake", baseState.zeroStake, baseStateUpdate.zeroStake),
|
124
|
+
totalStakedZERO: this._updateIfChanged(eq, "totalStakedZERO", baseState.totalStakedZERO, baseStateUpdate.totalStakedZERO),
|
125
|
+
_riskiestTroveBeforeRedistribution: this._silentlyUpdateIfChanged(equals, baseState._riskiestTroveBeforeRedistribution, baseStateUpdate._riskiestTroveBeforeRedistribution)
|
126
|
+
};
|
127
|
+
}
|
128
|
+
_derive({ troveBeforeRedistribution, totalRedistributed, _feesInNormalMode, total, price, _riskiestTroveBeforeRedistribution }) {
|
129
|
+
const fees = _feesInNormalMode._setRecoveryMode(total.collateralRatioIsBelowCritical(price));
|
130
|
+
return {
|
131
|
+
trove: troveBeforeRedistribution.applyRedistribution(totalRedistributed),
|
132
|
+
fees,
|
133
|
+
borrowingRate: fees.borrowingRate(),
|
134
|
+
redemptionRate: fees.redemptionRate(),
|
135
|
+
haveUndercollateralizedTroves: _riskiestTroveBeforeRedistribution
|
136
|
+
.applyRedistribution(totalRedistributed)
|
137
|
+
.collateralRatioIsBelowMinimum(price)
|
138
|
+
};
|
139
|
+
}
|
140
|
+
_reduceDerived(derivedState, derivedStateUpdate) {
|
141
|
+
return {
|
142
|
+
fees: this._updateFees("fees", derivedState.fees, derivedStateUpdate.fees),
|
143
|
+
trove: this._updateIfChanged(equals, "trove", derivedState.trove, derivedStateUpdate.trove),
|
144
|
+
borrowingRate: this._silentlyUpdateIfChanged(eq, derivedState.borrowingRate, derivedStateUpdate.borrowingRate),
|
145
|
+
redemptionRate: this._silentlyUpdateIfChanged(eq, derivedState.redemptionRate, derivedStateUpdate.redemptionRate),
|
146
|
+
haveUndercollateralizedTroves: this._updateIfChanged(strictEquals, "haveUndercollateralizedTroves", derivedState.haveUndercollateralizedTroves, derivedStateUpdate.haveUndercollateralizedTroves)
|
147
|
+
};
|
148
|
+
}
|
149
|
+
_notify(params) {
|
150
|
+
// Iterate on a copy of `_listeners`, to avoid notifying any new listeners subscribed by
|
151
|
+
// existing listeners, as that could result in infinite loops.
|
152
|
+
//
|
153
|
+
// Before calling a listener from our copy of `_listeners`, check if it has been removed from
|
154
|
+
// the original set. This way we avoid calling listeners that have already been unsubscribed
|
155
|
+
// by an earlier listener callback.
|
156
|
+
[...this._listeners].forEach(listener => {
|
157
|
+
if (this._listeners.has(listener)) {
|
158
|
+
listener(params);
|
159
|
+
}
|
160
|
+
});
|
161
|
+
}
|
162
|
+
/**
|
163
|
+
* Register a state change listener.
|
164
|
+
*
|
165
|
+
* @param listener - Function that will be called whenever state changes.
|
166
|
+
* @returns Function to unregister this listener.
|
167
|
+
*/
|
168
|
+
subscribe(listener) {
|
169
|
+
const uniqueListener = wrap(listener);
|
170
|
+
this._listeners.add(uniqueListener);
|
171
|
+
return () => {
|
172
|
+
this._listeners.delete(uniqueListener);
|
173
|
+
};
|
174
|
+
}
|
175
|
+
/** @internal */
|
176
|
+
_load(baseState, extraState) {
|
177
|
+
assert_1.default(!this._loaded);
|
178
|
+
this._baseState = baseState;
|
179
|
+
this._derivedState = this._derive(baseState);
|
180
|
+
this._extraState = extraState;
|
181
|
+
this._loaded = true;
|
182
|
+
this._scheduleUpdate();
|
183
|
+
if (this.onLoaded) {
|
184
|
+
this.onLoaded();
|
185
|
+
}
|
186
|
+
}
|
187
|
+
/** @internal */
|
188
|
+
_update(baseStateUpdate, extraStateUpdate) {
|
189
|
+
assert_1.default(this._baseState && this._derivedState);
|
190
|
+
const oldState = this.state;
|
191
|
+
if (baseStateUpdate) {
|
192
|
+
this._baseState = this._reduce(this._baseState, baseStateUpdate);
|
193
|
+
}
|
194
|
+
// Always running this lets us derive state based on passage of time, like baseRate decay
|
195
|
+
this._derivedState = this._reduceDerived(this._derivedState, this._derive(this._baseState));
|
196
|
+
if (extraStateUpdate) {
|
197
|
+
assert_1.default(this._extraState);
|
198
|
+
this._extraState = this._reduceExtra(this._extraState, extraStateUpdate);
|
199
|
+
}
|
200
|
+
this._scheduleUpdate();
|
201
|
+
this._notify({
|
202
|
+
newState: this.state,
|
203
|
+
oldState,
|
204
|
+
stateChange: difference(this.state, oldState)
|
205
|
+
});
|
206
|
+
}
|
207
|
+
}
|
208
|
+
exports.LiquityStore = LiquityStore;
|
209
|
+
//# sourceMappingURL=LiquityStore.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"LiquityStore.js","sourceRoot":"","sources":["../../src/LiquityStore.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { Decimal } from "./Decimal";
|
2
|
+
import { Trove, TroveWithPendingRedistribution } from "./Trove";
|
3
|
+
import { StabilityDeposit } from "./StabilityDeposit";
|
4
|
+
/** @alpha */
|
5
|
+
export interface ObservableLiquity {
|
6
|
+
watchTotalRedistributed(onTotalRedistributedChanged: (totalRedistributed: Trove) => void): () => void;
|
7
|
+
watchTroveWithoutRewards(onTroveChanged: (trove: TroveWithPendingRedistribution) => void, address?: string): () => void;
|
8
|
+
watchNumberOfTroves(onNumberOfTrovesChanged: (numberOfTroves: number) => void): () => void;
|
9
|
+
watchPrice(onPriceChanged: (price: Decimal) => void): () => void;
|
10
|
+
watchTotal(onTotalChanged: (total: Trove) => void): () => void;
|
11
|
+
watchStabilityDeposit(onStabilityDepositChanged: (stabilityDeposit: StabilityDeposit) => void, address?: string): () => void;
|
12
|
+
watchZUSDInStabilityPool(onZUSDInStabilityPoolChanged: (zusdInStabilityPool: Decimal) => void): () => void;
|
13
|
+
watchZUSDBalance(onZUSDBalanceChanged: (balance: Decimal) => void, address?: string): () => void;
|
14
|
+
}
|
15
|
+
//# sourceMappingURL=ObservableLiquity.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ObservableLiquity.d.ts","sourceRoot":"","sources":["../../src/ObservableLiquity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,aAAa;AACb,MAAM,WAAW,iBAAiB;IAChC,uBAAuB,CACrB,2BAA2B,EAAE,CAAC,kBAAkB,EAAE,KAAK,KAAK,IAAI,GAC/D,MAAM,IAAI,CAAC;IAEd,wBAAwB,CACtB,cAAc,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,EAC/D,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,IAAI,CAAC;IAEd,mBAAmB,CAAC,uBAAuB,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAE3F,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAEjE,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAE/D,qBAAqB,CACnB,yBAAyB,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,IAAI,EACvE,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,IAAI,CAAC;IAEd,wBAAwB,CACtB,4BAA4B,EAAE,CAAC,mBAAmB,EAAE,OAAO,KAAK,IAAI,GACnE,MAAM,IAAI,CAAC;IAEd,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;CAClG"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ObservableLiquity.js","sourceRoot":"","sources":["../../src/ObservableLiquity.ts"],"names":[],"mappings":""}
|