@sovryn-zero/lib-base 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +13 -13
- package/dist/index.js +25 -25
- package/dist/src/Decimal.d.ts +88 -88
- package/dist/src/Decimal.js +360 -360
- package/dist/src/Fees.d.ts +81 -81
- package/dist/src/Fees.js +122 -122
- package/dist/src/LiquityStore.d.ts +206 -208
- package/dist/src/LiquityStore.d.ts.map +1 -1
- package/dist/src/LiquityStore.js +207 -208
- package/dist/src/LiquityStore.js.map +1 -1
- package/dist/src/ObservableLiquity.d.ts +14 -14
- package/dist/src/ObservableLiquity.js +2 -2
- package/dist/src/PopulatableLiquity.d.ts +124 -124
- package/dist/src/PopulatableLiquity.js +2 -2
- package/dist/src/ReadableLiquity.d.ts +151 -155
- package/dist/src/ReadableLiquity.d.ts.map +1 -1
- package/dist/src/ReadableLiquity.js +2 -2
- package/dist/src/SendableLiquity.d.ts +155 -155
- package/dist/src/SendableLiquity.js +19 -19
- package/dist/src/StabilityDeposit.d.ts +58 -58
- package/dist/src/StabilityDeposit.js +79 -79
- package/dist/src/TransactableLiquity.d.ts +413 -413
- package/dist/src/TransactableLiquity.js +17 -17
- package/dist/src/Trove.d.ts +366 -366
- package/dist/src/Trove.js +422 -422
- package/dist/src/ZEROStake.d.ts +51 -51
- package/dist/src/ZEROStake.js +73 -73
- package/dist/src/_CachedReadableLiquity.d.ts +53 -54
- package/dist/src/_CachedReadableLiquity.d.ts.map +1 -1
- package/dist/src/_CachedReadableLiquity.js +88 -92
- package/dist/src/_CachedReadableLiquity.js.map +1 -1
- package/dist/src/constants.d.ts +60 -60
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +63 -63
- package/dist/src/constants.js.map +1 -1
- package/etc/lib-base.api.md +0 -4
- package/package.json +1 -1
- package/src/LiquityStore.ts +0 -9
- package/src/ReadableLiquity.ts +0 -5
- package/src/_CachedReadableLiquity.ts +0 -7
- package/src/constants.ts +1 -1
package/dist/src/LiquityStore.js
CHANGED
|
@@ -1,209 +1,208 @@
|
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
fees,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
* @
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
this.
|
|
179
|
-
this.
|
|
180
|
-
this.
|
|
181
|
-
this.
|
|
182
|
-
this.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
this.
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
oldState
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
exports.LiquityStore = LiquityStore;
|
|
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
|
+
_feesInNormalMode: this._silentlyUpdateIfChanged(equals, baseState._feesInNormalMode, baseStateUpdate._feesInNormalMode),
|
|
122
|
+
zeroStake: this._updateIfChanged(equals, "zeroStake", baseState.zeroStake, baseStateUpdate.zeroStake),
|
|
123
|
+
totalStakedZERO: this._updateIfChanged(eq, "totalStakedZERO", baseState.totalStakedZERO, baseStateUpdate.totalStakedZERO),
|
|
124
|
+
_riskiestTroveBeforeRedistribution: this._silentlyUpdateIfChanged(equals, baseState._riskiestTroveBeforeRedistribution, baseStateUpdate._riskiestTroveBeforeRedistribution)
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
_derive({ troveBeforeRedistribution, totalRedistributed, _feesInNormalMode, total, price, _riskiestTroveBeforeRedistribution }) {
|
|
128
|
+
const fees = _feesInNormalMode._setRecoveryMode(total.collateralRatioIsBelowCritical(price));
|
|
129
|
+
return {
|
|
130
|
+
trove: troveBeforeRedistribution.applyRedistribution(totalRedistributed),
|
|
131
|
+
fees,
|
|
132
|
+
borrowingRate: fees.borrowingRate(),
|
|
133
|
+
redemptionRate: fees.redemptionRate(),
|
|
134
|
+
haveUndercollateralizedTroves: _riskiestTroveBeforeRedistribution
|
|
135
|
+
.applyRedistribution(totalRedistributed)
|
|
136
|
+
.collateralRatioIsBelowMinimum(price)
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
_reduceDerived(derivedState, derivedStateUpdate) {
|
|
140
|
+
return {
|
|
141
|
+
fees: this._updateFees("fees", derivedState.fees, derivedStateUpdate.fees),
|
|
142
|
+
trove: this._updateIfChanged(equals, "trove", derivedState.trove, derivedStateUpdate.trove),
|
|
143
|
+
borrowingRate: this._silentlyUpdateIfChanged(eq, derivedState.borrowingRate, derivedStateUpdate.borrowingRate),
|
|
144
|
+
redemptionRate: this._silentlyUpdateIfChanged(eq, derivedState.redemptionRate, derivedStateUpdate.redemptionRate),
|
|
145
|
+
haveUndercollateralizedTroves: this._updateIfChanged(strictEquals, "haveUndercollateralizedTroves", derivedState.haveUndercollateralizedTroves, derivedStateUpdate.haveUndercollateralizedTroves)
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
_notify(params) {
|
|
149
|
+
// Iterate on a copy of `_listeners`, to avoid notifying any new listeners subscribed by
|
|
150
|
+
// existing listeners, as that could result in infinite loops.
|
|
151
|
+
//
|
|
152
|
+
// Before calling a listener from our copy of `_listeners`, check if it has been removed from
|
|
153
|
+
// the original set. This way we avoid calling listeners that have already been unsubscribed
|
|
154
|
+
// by an earlier listener callback.
|
|
155
|
+
[...this._listeners].forEach(listener => {
|
|
156
|
+
if (this._listeners.has(listener)) {
|
|
157
|
+
listener(params);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Register a state change listener.
|
|
163
|
+
*
|
|
164
|
+
* @param listener - Function that will be called whenever state changes.
|
|
165
|
+
* @returns Function to unregister this listener.
|
|
166
|
+
*/
|
|
167
|
+
subscribe(listener) {
|
|
168
|
+
const uniqueListener = wrap(listener);
|
|
169
|
+
this._listeners.add(uniqueListener);
|
|
170
|
+
return () => {
|
|
171
|
+
this._listeners.delete(uniqueListener);
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/** @internal */
|
|
175
|
+
_load(baseState, extraState) {
|
|
176
|
+
assert_1.default(!this._loaded);
|
|
177
|
+
this._baseState = baseState;
|
|
178
|
+
this._derivedState = this._derive(baseState);
|
|
179
|
+
this._extraState = extraState;
|
|
180
|
+
this._loaded = true;
|
|
181
|
+
this._scheduleUpdate();
|
|
182
|
+
if (this.onLoaded) {
|
|
183
|
+
this.onLoaded();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/** @internal */
|
|
187
|
+
_update(baseStateUpdate, extraStateUpdate) {
|
|
188
|
+
assert_1.default(this._baseState && this._derivedState);
|
|
189
|
+
const oldState = this.state;
|
|
190
|
+
if (baseStateUpdate) {
|
|
191
|
+
this._baseState = this._reduce(this._baseState, baseStateUpdate);
|
|
192
|
+
}
|
|
193
|
+
// Always running this lets us derive state based on passage of time, like baseRate decay
|
|
194
|
+
this._derivedState = this._reduceDerived(this._derivedState, this._derive(this._baseState));
|
|
195
|
+
if (extraStateUpdate) {
|
|
196
|
+
assert_1.default(this._extraState);
|
|
197
|
+
this._extraState = this._reduceExtra(this._extraState, extraStateUpdate);
|
|
198
|
+
}
|
|
199
|
+
this._scheduleUpdate();
|
|
200
|
+
this._notify({
|
|
201
|
+
newState: this.state,
|
|
202
|
+
oldState,
|
|
203
|
+
stateChange: difference(this.state, oldState)
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
exports.LiquityStore = LiquityStore;
|
|
209
208
|
//# sourceMappingURL=LiquityStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LiquityStore.js","sourceRoot":"","sources":["../../src/LiquityStore.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;
|
|
1
|
+
{"version":3,"file":"LiquityStore.js","sourceRoot":"","sources":["../../src/LiquityStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +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
|
-
}
|
|
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
15
|
//# sourceMappingURL=ObservableLiquity.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
//# sourceMappingURL=ObservableLiquity.js.map
|