@subwallet/extension-base 1.1.31-beta.0 → 1.1.32-beta.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/background/KoniTypes.d.ts +1 -0
- package/cjs/koni/api/staking/bonding/index.js +2 -0
- package/cjs/koni/api/staking/bonding/paraChain.js +6 -3
- package/cjs/koni/background/cron.js +0 -28
- package/cjs/koni/background/handlers/Extension.js +17 -11
- package/cjs/koni/background/handlers/State.js +4 -46
- package/cjs/koni/background/subscription.js +0 -155
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/campaign-service/index.js +19 -0
- package/cjs/services/chain-service/constants.js +3 -2
- package/cjs/services/earning-service/constants/chains.js +1 -1
- package/cjs/services/earning-service/handlers/base.js +9 -6
- package/cjs/services/earning-service/handlers/lending/base.js +61 -0
- package/cjs/services/earning-service/handlers/lending/interlay.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/base.js +54 -0
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +16 -7
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/astar.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/base.js +4 -2
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +12 -3
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +9 -3
- package/cjs/services/earning-service/handlers/special.js +57 -67
- package/cjs/services/earning-service/service.js +370 -37
- package/cjs/services/event-service/index.js +1 -0
- package/cjs/services/migration-service/scripts/index.js +1 -2
- package/cjs/services/storage-service/DatabaseService.js +15 -0
- package/cjs/services/storage-service/db-stores/Campaign.js +9 -3
- package/cjs/services/storage-service/db-stores/YieldPositionStore.js +6 -0
- package/cjs/services/transaction-service/index.js +15 -1
- package/cjs/utils/number.js +3 -1
- package/koni/api/staking/bonding/index.d.ts +1 -0
- package/koni/api/staking/bonding/index.js +2 -0
- package/koni/api/staking/bonding/paraChain.js +6 -3
- package/koni/background/cron.d.ts +0 -5
- package/koni/background/cron.js +1 -29
- package/koni/background/handlers/Extension.js +17 -11
- package/koni/background/handlers/State.d.ts +1 -12
- package/koni/background/handlers/State.js +4 -46
- package/koni/background/subscription.d.ts +1 -11
- package/koni/background/subscription.js +2 -157
- package/package.json +6 -6
- package/packageInfo.js +1 -1
- package/services/campaign-service/index.js +19 -0
- package/services/chain-service/constants.js +3 -2
- package/services/earning-service/constants/chains.js +1 -1
- package/services/earning-service/handlers/base.d.ts +1 -0
- package/services/earning-service/handlers/base.js +9 -6
- package/services/earning-service/handlers/lending/base.d.ts +2 -0
- package/services/earning-service/handlers/lending/base.js +61 -0
- package/services/earning-service/handlers/lending/interlay.js +4 -3
- package/services/earning-service/handlers/liquid-staking/acala.js +4 -3
- package/services/earning-service/handlers/liquid-staking/base.d.ts +2 -0
- package/services/earning-service/handlers/liquid-staking/base.js +55 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +4 -3
- package/services/earning-service/handlers/liquid-staking/parallel.js +4 -3
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +16 -7
- package/services/earning-service/handlers/native-staking/amplitude.js +7 -2
- package/services/earning-service/handlers/native-staking/astar.js +7 -2
- package/services/earning-service/handlers/native-staking/base.js +5 -3
- package/services/earning-service/handlers/native-staking/para-chain.js +7 -2
- package/services/earning-service/handlers/native-staking/relay-chain.js +12 -3
- package/services/earning-service/handlers/nomination-pool/index.js +10 -4
- package/services/earning-service/handlers/special.d.ts +0 -1
- package/services/earning-service/handlers/special.js +58 -68
- package/services/earning-service/service.d.ts +49 -1
- package/services/earning-service/service.js +358 -28
- package/services/event-service/index.d.ts +1 -0
- package/services/event-service/index.js +1 -0
- package/services/event-service/types.d.ts +1 -0
- package/services/migration-service/scripts/index.js +1 -2
- package/services/storage-service/DatabaseService.d.ts +5 -0
- package/services/storage-service/DatabaseService.js +15 -0
- package/services/storage-service/db-stores/Campaign.js +9 -3
- package/services/storage-service/db-stores/YieldPositionStore.d.ts +2 -0
- package/services/storage-service/db-stores/YieldPositionStore.js +6 -0
- package/services/transaction-service/index.js +15 -1
- package/types/yield/actions/join/submit.d.ts +2 -1
- package/types/yield/info/account/reward.d.ts +2 -0
- package/utils/number.d.ts +1 -0
- package/utils/number.js +1 -0
|
@@ -7,16 +7,28 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
10
|
+
var _constants = require("@subwallet/extension-base/constants");
|
|
11
|
+
var _types = require("@subwallet/extension-base/services/base/types");
|
|
10
12
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
11
|
-
var
|
|
13
|
+
var _constants2 = require("@subwallet/extension-base/services/earning-service/constants");
|
|
12
14
|
var _base = _interopRequireDefault(require("@subwallet/extension-base/services/earning-service/handlers/liquid-staking/base"));
|
|
13
|
-
var
|
|
15
|
+
var _types2 = require("@subwallet/extension-base/types");
|
|
14
16
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
17
|
+
var _crossFetch = _interopRequireDefault(require("cross-fetch"));
|
|
15
18
|
var _rxjs = require("rxjs");
|
|
16
19
|
var _handlers = require("./handlers");
|
|
17
20
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
18
21
|
// SPDX-License-Identifier: Apache-2.0
|
|
19
22
|
|
|
23
|
+
const POOLS_DATA_URLS = 'https://sw-static-cache.pages.dev/earning/yield-pools.json';
|
|
24
|
+
const fetchPoolsData = async () => {
|
|
25
|
+
const res = await (0, _crossFetch.default)(POOLS_DATA_URLS);
|
|
26
|
+
if (res.status !== 200) {
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
const fetchData = await res.json();
|
|
30
|
+
return fetchData.data;
|
|
31
|
+
};
|
|
20
32
|
class EarningService {
|
|
21
33
|
handlers = {};
|
|
22
34
|
earningRewardSubject = new _rxjs.BehaviorSubject({
|
|
@@ -25,32 +37,44 @@ class EarningService {
|
|
|
25
37
|
});
|
|
26
38
|
earningRewardHistorySubject = new _rxjs.BehaviorSubject({});
|
|
27
39
|
minAmountPercentSubject = new _rxjs.BehaviorSubject({});
|
|
40
|
+
|
|
41
|
+
// earning
|
|
42
|
+
yieldPoolInfoSubject = new _rxjs.BehaviorSubject({});
|
|
43
|
+
yieldPositionSubject = new _rxjs.BehaviorSubject({});
|
|
44
|
+
yieldPositionListSubject = new _rxjs.BehaviorSubject([]); // virtual list of yieldPositionSubject with filter values
|
|
45
|
+
|
|
28
46
|
constructor(state) {
|
|
29
47
|
this.state = state;
|
|
30
|
-
this.
|
|
48
|
+
this.dbService = state.dbService;
|
|
49
|
+
this.eventService = state.eventService;
|
|
31
50
|
}
|
|
32
51
|
async initHandlers() {
|
|
33
|
-
await this.
|
|
34
|
-
const chains =
|
|
52
|
+
await this.eventService.waitChainReady;
|
|
53
|
+
const chains = [];
|
|
54
|
+
for (const chain of Object.values(this.state.getChainInfoMap())) {
|
|
55
|
+
if (chain.chainStatus === 'ACTIVE') {
|
|
56
|
+
chains.push(chain.slug);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
35
59
|
const minAmountPercent = {};
|
|
36
60
|
for (const chain of chains) {
|
|
37
61
|
const handlers = [];
|
|
38
|
-
if (
|
|
62
|
+
if (_constants2._STAKING_CHAIN_GROUP.relay.includes(chain)) {
|
|
39
63
|
handlers.push(new _handlers.RelayNativeStakingPoolHandler(this.state, chain));
|
|
40
64
|
}
|
|
41
|
-
if (
|
|
65
|
+
if (_constants2._STAKING_CHAIN_GROUP.para.includes(chain)) {
|
|
42
66
|
handlers.push(new _handlers.ParaNativeStakingPoolHandler(this.state, chain));
|
|
43
67
|
}
|
|
44
|
-
if (
|
|
68
|
+
if (_constants2._STAKING_CHAIN_GROUP.astar.includes(chain)) {
|
|
45
69
|
handlers.push(new _handlers.AstarNativeStakingPoolHandler(this.state, chain));
|
|
46
70
|
}
|
|
47
|
-
if (
|
|
71
|
+
if (_constants2._STAKING_CHAIN_GROUP.amplitude.includes(chain)) {
|
|
48
72
|
handlers.push(new _handlers.AmplitudeNativeStakingPoolHandler(this.state, chain));
|
|
49
73
|
}
|
|
50
|
-
if (
|
|
74
|
+
if (_constants2._STAKING_CHAIN_GROUP.nominationPool.includes(chain)) {
|
|
51
75
|
handlers.push(new _handlers.NominationPoolHandler(this.state, chain));
|
|
52
76
|
}
|
|
53
|
-
if (
|
|
77
|
+
if (_constants2._STAKING_CHAIN_GROUP.liquidStaking.includes(chain)) {
|
|
54
78
|
if (chain === 'bifrost_dot') {
|
|
55
79
|
handlers.push(new _handlers.BifrostLiquidStakingPoolHandler(this.state, chain));
|
|
56
80
|
}
|
|
@@ -64,7 +88,7 @@ class EarningService {
|
|
|
64
88
|
handlers.push(new _handlers.StellaSwapLiquidStakingPoolHandler(this.state, chain));
|
|
65
89
|
}
|
|
66
90
|
}
|
|
67
|
-
if (
|
|
91
|
+
if (_constants2._STAKING_CHAIN_GROUP.lending.includes(chain)) {
|
|
68
92
|
if (chain === 'interlay') {
|
|
69
93
|
handlers.push(new _handlers.InterlayLendingPoolHandler(this.state, chain));
|
|
70
94
|
}
|
|
@@ -74,13 +98,132 @@ class EarningService {
|
|
|
74
98
|
}
|
|
75
99
|
}
|
|
76
100
|
for (const handler of Object.values(this.handlers)) {
|
|
77
|
-
if (handler.type ===
|
|
101
|
+
if (handler.type === _types2.YieldPoolType.LIQUID_STAKING) {
|
|
78
102
|
minAmountPercent[handler.slug] = handler.minAmountPercent;
|
|
79
103
|
}
|
|
80
104
|
}
|
|
81
105
|
minAmountPercent.default = _base.default.defaultMinAmountPercent;
|
|
82
106
|
this.minAmountPercentSubject.next(minAmountPercent);
|
|
107
|
+
|
|
108
|
+
// Emit earning ready
|
|
109
|
+
this.eventService.emit('earning.ready', true);
|
|
83
110
|
}
|
|
111
|
+
startPromiseHandler = (0, _utils2.createPromiseHandler)();
|
|
112
|
+
stopPromiseHandler = (0, _utils2.createPromiseHandler)();
|
|
113
|
+
status = _types.ServiceStatus.NOT_INITIALIZED;
|
|
114
|
+
async init() {
|
|
115
|
+
this.status = _types.ServiceStatus.INITIALIZING;
|
|
116
|
+
await this.initHandlers();
|
|
117
|
+
|
|
118
|
+
// Load data from db
|
|
119
|
+
await this.loadData();
|
|
120
|
+
|
|
121
|
+
// Pin list with value from map
|
|
122
|
+
this.yieldPositionSubject.subscribe({
|
|
123
|
+
next: data => {
|
|
124
|
+
const activeMap = this.state.getActiveChainInfoMap();
|
|
125
|
+
const activePositions = Object.values(data).filter(item => {
|
|
126
|
+
return !!activeMap[item.chain];
|
|
127
|
+
});
|
|
128
|
+
this.yieldPositionListSubject.next(Object.values(activePositions));
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
this.status = _types.ServiceStatus.INITIALIZED;
|
|
132
|
+
await this.start();
|
|
133
|
+
this.handleActions();
|
|
134
|
+
}
|
|
135
|
+
handleActions() {
|
|
136
|
+
this.eventService.onLazy((events, eventTypes) => {
|
|
137
|
+
(async () => {
|
|
138
|
+
const removedAddresses = [];
|
|
139
|
+
events.forEach(event => {
|
|
140
|
+
if (event.type === 'account.remove') {
|
|
141
|
+
removedAddresses.push(event.data[0]);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
if (removedAddresses.length > 0) {
|
|
145
|
+
await this.removeYieldPositions(undefined, removedAddresses);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Account changed or chain changed (active or inactive)
|
|
149
|
+
// Chain changed (active or inactive)
|
|
150
|
+
// Todo: Optimize performance of chain active or inactive in the future
|
|
151
|
+
if (eventTypes.includes('account.updateCurrent') || eventTypes.includes('account.remove') || eventTypes.includes('chain.updateState')) {
|
|
152
|
+
await this.reloadEarning();
|
|
153
|
+
}
|
|
154
|
+
})().catch(console.error);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
async loadData() {
|
|
158
|
+
await this.getYieldPoolInfoFromDBAndOnline();
|
|
159
|
+
await this.getYieldPositionFromDB();
|
|
160
|
+
}
|
|
161
|
+
persistData() {
|
|
162
|
+
// Data is auto persisted with lazy queue
|
|
163
|
+
return Promise.resolve(undefined);
|
|
164
|
+
}
|
|
165
|
+
async start() {
|
|
166
|
+
if (this.status === _types.ServiceStatus.STOPPING) {
|
|
167
|
+
await this.waitForStopped();
|
|
168
|
+
}
|
|
169
|
+
if (this.status === _types.ServiceStatus.STARTED || this.status === _types.ServiceStatus.STARTING) {
|
|
170
|
+
return this.waitForStarted();
|
|
171
|
+
}
|
|
172
|
+
this.status = _types.ServiceStatus.STARTING;
|
|
173
|
+
|
|
174
|
+
// Start subscribe pools' info
|
|
175
|
+
await this.runSubscribePoolsInfo();
|
|
176
|
+
|
|
177
|
+
// Start subscribe pools' position
|
|
178
|
+
await this.runSubscribePoolsPosition();
|
|
179
|
+
|
|
180
|
+
// Start subscribe pools' reward
|
|
181
|
+
this.runSubscribeStakingRewardInterval();
|
|
182
|
+
|
|
183
|
+
// Start subscribe pools' reward history
|
|
184
|
+
this.runSubscribeEarningRewardHistoryInterval();
|
|
185
|
+
|
|
186
|
+
// Update promise handler
|
|
187
|
+
this.startPromiseHandler.resolve();
|
|
188
|
+
this.stopPromiseHandler = (0, _utils2.createPromiseHandler)();
|
|
189
|
+
this.status = _types.ServiceStatus.STARTED;
|
|
190
|
+
}
|
|
191
|
+
async stop() {
|
|
192
|
+
if (this.status === _types.ServiceStatus.STARTING) {
|
|
193
|
+
await this.waitForStarted();
|
|
194
|
+
}
|
|
195
|
+
if (this.status === _types.ServiceStatus.STOPPED || this.status === _types.ServiceStatus.STOPPING) {
|
|
196
|
+
return this.waitForStopped();
|
|
197
|
+
}
|
|
198
|
+
this.status = _types.ServiceStatus.STOPPING;
|
|
199
|
+
await this.persistData();
|
|
200
|
+
|
|
201
|
+
// Stop subscribe pools' info
|
|
202
|
+
this.runUnsubscribePoolsInfo();
|
|
203
|
+
|
|
204
|
+
// Stop subscribe pools' position
|
|
205
|
+
this.runUnsubscribePoolsPosition();
|
|
206
|
+
|
|
207
|
+
// Stop subscribe pools' reward
|
|
208
|
+
this.runUnsubscribeStakingRewardInterval();
|
|
209
|
+
|
|
210
|
+
// Stop subscribe pools' reward history
|
|
211
|
+
this.runUnsubscribeEarningRewardHistoryInterval();
|
|
212
|
+
|
|
213
|
+
// Update promise handler
|
|
214
|
+
this.stopPromiseHandler.resolve();
|
|
215
|
+
this.startPromiseHandler = (0, _utils2.createPromiseHandler)();
|
|
216
|
+
this.status = _types.ServiceStatus.STOPPED;
|
|
217
|
+
}
|
|
218
|
+
waitForStarted() {
|
|
219
|
+
return this.startPromiseHandler.promise;
|
|
220
|
+
}
|
|
221
|
+
waitForStopped() {
|
|
222
|
+
return this.stopPromiseHandler.promise;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/* Pools' info methods */
|
|
226
|
+
|
|
84
227
|
getPoolHandler(slug) {
|
|
85
228
|
return this.handlers[slug];
|
|
86
229
|
}
|
|
@@ -98,19 +241,20 @@ class EarningService {
|
|
|
98
241
|
getMinAmountPercent() {
|
|
99
242
|
return this.minAmountPercentSubject.getValue();
|
|
100
243
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
244
|
+
async getYieldPool(slug) {
|
|
245
|
+
await this.eventService.waitEarningReady;
|
|
246
|
+
return this.yieldPoolInfoSubject.getValue()[slug];
|
|
247
|
+
}
|
|
104
248
|
async subscribePoolsInfo(callback) {
|
|
105
249
|
let cancel = false;
|
|
106
|
-
await this.
|
|
250
|
+
await this.eventService.waitChainReady;
|
|
107
251
|
const unsubList = [];
|
|
108
252
|
for (const handler of Object.values(this.handlers)) {
|
|
109
253
|
handler.subscribePoolInfo(callback).then(unsub => {
|
|
110
|
-
if (cancel) {
|
|
111
|
-
unsub();
|
|
112
|
-
} else {
|
|
254
|
+
if (!cancel) {
|
|
113
255
|
unsubList.push(unsub);
|
|
256
|
+
} else {
|
|
257
|
+
unsub();
|
|
114
258
|
}
|
|
115
259
|
}).catch(console.error);
|
|
116
260
|
}
|
|
@@ -121,14 +265,71 @@ class EarningService {
|
|
|
121
265
|
});
|
|
122
266
|
};
|
|
123
267
|
}
|
|
268
|
+
async getYieldPoolInfoFromDBAndOnline() {
|
|
269
|
+
// Get online pool data
|
|
270
|
+
const yieldPoolInfo = await Promise.race([fetchPoolsData(), new Promise(resolve => {
|
|
271
|
+
setTimeout(() => {
|
|
272
|
+
resolve({});
|
|
273
|
+
}, 1200);
|
|
274
|
+
})]);
|
|
275
|
+
const existedYieldPoolInfo = await this.dbService.getYieldPools();
|
|
276
|
+
existedYieldPoolInfo.forEach(info => {
|
|
277
|
+
if (!yieldPoolInfo[info.slug]) {
|
|
278
|
+
yieldPoolInfo[info.slug] = info;
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
this.yieldPoolInfoSubject.next(yieldPoolInfo);
|
|
282
|
+
}
|
|
283
|
+
subscribeYieldPoolInfo() {
|
|
284
|
+
return this.yieldPoolInfoSubject;
|
|
285
|
+
}
|
|
286
|
+
async getYieldPoolInfo() {
|
|
287
|
+
await this.eventService.waitEarningReady;
|
|
288
|
+
return Object.values(this.yieldPoolInfoSubject.getValue());
|
|
289
|
+
}
|
|
290
|
+
yieldPoolPersistQueue = [];
|
|
291
|
+
updateYieldPoolInfo(data) {
|
|
292
|
+
this.yieldPoolPersistQueue.push(data);
|
|
293
|
+
(0, _utils2.addLazy)('persistYieldPoolInfo', () => {
|
|
294
|
+
const yieldPoolInfo = this.yieldPoolInfoSubject.getValue();
|
|
295
|
+
const queue = [...this.yieldPoolPersistQueue];
|
|
296
|
+
this.yieldPoolPersistQueue = [];
|
|
297
|
+
|
|
298
|
+
// Update yield pool info
|
|
299
|
+
queue.forEach(item => {
|
|
300
|
+
yieldPoolInfo[item.slug] = item;
|
|
301
|
+
});
|
|
302
|
+
this.yieldPoolInfoSubject.next(yieldPoolInfo);
|
|
303
|
+
|
|
304
|
+
// Persist data
|
|
305
|
+
this.dbService.updateYieldPoolsStore(queue).catch(console.warn);
|
|
306
|
+
}, 300, 900);
|
|
307
|
+
}
|
|
308
|
+
async runSubscribePoolsInfo() {
|
|
309
|
+
await this.eventService.waitChainReady;
|
|
310
|
+
this.runUnsubscribePoolsInfo();
|
|
311
|
+
this.subscribePoolsInfo(data => {
|
|
312
|
+
this.updateYieldPoolInfo(data);
|
|
313
|
+
}).then(rs => {
|
|
314
|
+
this.yieldPoolsInfoUnsub = rs;
|
|
315
|
+
}).catch(console.error);
|
|
316
|
+
}
|
|
317
|
+
runUnsubscribePoolsInfo() {
|
|
318
|
+
var _this$yieldPoolsInfoU;
|
|
319
|
+
(_this$yieldPoolsInfoU = this.yieldPoolsInfoUnsub) === null || _this$yieldPoolsInfoU === void 0 ? void 0 : _this$yieldPoolsInfoU.call(this);
|
|
320
|
+
}
|
|
124
321
|
|
|
125
|
-
/*
|
|
322
|
+
/* Pools' info methods */
|
|
126
323
|
|
|
127
|
-
/*
|
|
324
|
+
/* Pools' position methods */
|
|
128
325
|
|
|
326
|
+
async getYieldPosition(address, slug) {
|
|
327
|
+
await this.eventService.waitEarningReady;
|
|
328
|
+
return this.yieldPositionSubject.getValue()[`${slug}---${address}`];
|
|
329
|
+
}
|
|
129
330
|
async subscribePoolPositions(addresses, callback) {
|
|
130
331
|
let cancel = false;
|
|
131
|
-
await this.
|
|
332
|
+
await this.eventService.waitChainReady;
|
|
132
333
|
const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
|
|
133
334
|
const activeChains = this.state.activeChainSlugs;
|
|
134
335
|
const unsubList = [];
|
|
@@ -152,8 +353,105 @@ class EarningService {
|
|
|
152
353
|
});
|
|
153
354
|
};
|
|
154
355
|
}
|
|
356
|
+
async removeYieldPositions(chains, addresses) {
|
|
357
|
+
const removeKeys = [];
|
|
358
|
+
chains && chains.length > 0 && Object.entries(this.yieldPositionSubject.getValue()).forEach(_ref => {
|
|
359
|
+
let [key, value] = _ref;
|
|
360
|
+
console.log('removeYieldPositions', key, value.chain, chains.indexOf(value.chain) > -1);
|
|
361
|
+
if (chains.indexOf(value.chain) > -1 && !removeKeys.includes(key)) {
|
|
362
|
+
removeKeys.push(key);
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
addresses && addresses.length > 0 && Object.entries(this.yieldPositionSubject.getValue()).forEach(_ref2 => {
|
|
366
|
+
let [key, value] = _ref2;
|
|
367
|
+
if (addresses.indexOf(value.address) > -1 && !removeKeys.includes(key)) {
|
|
368
|
+
removeKeys.push(key);
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
// Remove by keys
|
|
373
|
+
const yieldPositionInfo = this.yieldPositionSubject.getValue();
|
|
374
|
+
for (const key of removeKeys) {
|
|
375
|
+
delete yieldPositionInfo[key];
|
|
376
|
+
}
|
|
377
|
+
this.yieldPositionSubject.next(yieldPositionInfo);
|
|
378
|
+
addresses && addresses.length > 0 && (await this.dbService.removeYieldPositionByAddresses(addresses));
|
|
379
|
+
chains && chains.length > 0 && (await this.dbService.removeYieldPositionByChains(chains));
|
|
380
|
+
}
|
|
381
|
+
async getYieldPositionFromDB() {
|
|
382
|
+
await this.eventService.waitChainReady;
|
|
383
|
+
await this.eventService.waitKeyringReady;
|
|
384
|
+
const addresses = this.state.getDecodedAddresses();
|
|
385
|
+
const existedYieldPosition = await this.dbService.getYieldNominationPoolPosition(addresses, this.state.activeChainSlugs);
|
|
386
|
+
const yieldPositionInfo = this.yieldPositionSubject.getValue();
|
|
387
|
+
existedYieldPosition.forEach(item => {
|
|
388
|
+
yieldPositionInfo[this._getYieldPositionKey(item.slug, item.address)] = item;
|
|
389
|
+
});
|
|
390
|
+
this.yieldPositionSubject.next(yieldPositionInfo);
|
|
391
|
+
}
|
|
392
|
+
subscribeYieldPosition() {
|
|
393
|
+
return this.yieldPositionListSubject;
|
|
394
|
+
}
|
|
395
|
+
async getYieldPositionInfo() {
|
|
396
|
+
await this.eventService.waitEarningReady;
|
|
397
|
+
return Promise.resolve(this.yieldPositionListSubject.getValue());
|
|
398
|
+
}
|
|
399
|
+
yieldPositionPersistQueue = [];
|
|
400
|
+
resetYieldPositionQueue() {
|
|
401
|
+
this.yieldPositionPersistQueue = [];
|
|
402
|
+
}
|
|
403
|
+
resetYieldPosition() {
|
|
404
|
+
this.yieldPositionSubject.next({});
|
|
405
|
+
this.yieldPositionPersistQueue = [];
|
|
406
|
+
}
|
|
407
|
+
_getYieldPositionKey(slug, address) {
|
|
408
|
+
return `${slug}---${address}`;
|
|
409
|
+
}
|
|
410
|
+
updateYieldPosition(data) {
|
|
411
|
+
this.yieldPositionPersistQueue.push(data);
|
|
412
|
+
(0, _utils2.addLazy)('persistYieldPositionInfo', () => {
|
|
413
|
+
const yieldPositionInfo = this.yieldPositionSubject.getValue();
|
|
414
|
+
const queue = [...this.yieldPositionPersistQueue];
|
|
415
|
+
this.yieldPositionPersistQueue = [];
|
|
416
|
+
|
|
417
|
+
// Update yield position info
|
|
418
|
+
queue.forEach(item => {
|
|
419
|
+
yieldPositionInfo[this._getYieldPositionKey(item.slug, item.address)] = item;
|
|
420
|
+
});
|
|
421
|
+
this.yieldPositionSubject.next(yieldPositionInfo);
|
|
422
|
+
|
|
423
|
+
// Persist data
|
|
424
|
+
this.dbService.updateYieldPositions(queue).catch(console.warn);
|
|
425
|
+
}, 300, 900);
|
|
426
|
+
}
|
|
427
|
+
async reloadEarning() {
|
|
428
|
+
let reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
429
|
+
await this.waitForStarted();
|
|
430
|
+
this.runUnsubscribePoolsPosition();
|
|
431
|
+
this.runUnsubscribeStakingRewardInterval();
|
|
432
|
+
this.runUnsubscribeEarningRewardHistoryInterval();
|
|
433
|
+
reset && this.resetYieldPosition();
|
|
434
|
+
await this.runSubscribePoolsPosition();
|
|
435
|
+
this.runSubscribeStakingRewardInterval();
|
|
436
|
+
this.runSubscribeEarningRewardHistoryInterval();
|
|
437
|
+
}
|
|
438
|
+
async runSubscribePoolsPosition() {
|
|
439
|
+
await this.eventService.waitKeyringReady;
|
|
440
|
+
this.runUnsubscribePoolsPosition();
|
|
441
|
+
const addresses = this.state.getDecodedAddresses();
|
|
442
|
+
this.subscribePoolPositions(addresses, data => {
|
|
443
|
+
this.updateYieldPosition(data);
|
|
444
|
+
}).then(rs => {
|
|
445
|
+
this.yieldPositionUnsub = rs;
|
|
446
|
+
}).catch(console.error);
|
|
447
|
+
}
|
|
448
|
+
runUnsubscribePoolsPosition() {
|
|
449
|
+
var _this$yieldPositionUn;
|
|
450
|
+
(_this$yieldPositionUn = this.yieldPositionUnsub) === null || _this$yieldPositionUn === void 0 ? void 0 : _this$yieldPositionUn.call(this);
|
|
451
|
+
this.yieldPositionPersistQueue = [];
|
|
452
|
+
}
|
|
155
453
|
|
|
156
|
-
/*
|
|
454
|
+
/* Pools' position methods */
|
|
157
455
|
|
|
158
456
|
/* Get pools' reward */
|
|
159
457
|
|
|
@@ -166,7 +464,7 @@ class EarningService {
|
|
|
166
464
|
}
|
|
167
465
|
async getPoolReward(addresses, callback) {
|
|
168
466
|
let cancel = false;
|
|
169
|
-
await this.
|
|
467
|
+
await this.eventService.waitChainReady;
|
|
170
468
|
const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
|
|
171
469
|
const activeChains = this.state.activeChainSlugs;
|
|
172
470
|
const unsubList = [];
|
|
@@ -196,9 +494,26 @@ class EarningService {
|
|
|
196
494
|
getEarningRewards() {
|
|
197
495
|
return this.earningRewardSubject.getValue();
|
|
198
496
|
}
|
|
497
|
+
runSubscribeStakingRewardInterval() {
|
|
498
|
+
const addresses = this.state.getDecodedAddresses();
|
|
499
|
+
if (!addresses.length) {
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
this.getPoolReward(addresses, result => {
|
|
503
|
+
this.updateEarningReward(result);
|
|
504
|
+
}).catch(console.error);
|
|
505
|
+
this.earningsRewardInterval = setInterval(() => {
|
|
506
|
+
this.getPoolReward(addresses, result => {
|
|
507
|
+
this.updateEarningReward(result);
|
|
508
|
+
}).catch(console.error);
|
|
509
|
+
}, _constants.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL);
|
|
510
|
+
}
|
|
511
|
+
runUnsubscribeStakingRewardInterval() {
|
|
512
|
+
this.earningsRewardInterval && clearInterval(this.earningsRewardInterval);
|
|
513
|
+
}
|
|
199
514
|
async fetchPoolRewardHistory(addresses, callback) {
|
|
200
515
|
let cancel = false;
|
|
201
|
-
await this.
|
|
516
|
+
await this.eventService.waitChainReady;
|
|
202
517
|
const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
|
|
203
518
|
const activeChains = this.state.activeChainSlugs;
|
|
204
519
|
const unsubList = [];
|
|
@@ -224,7 +539,7 @@ class EarningService {
|
|
|
224
539
|
}
|
|
225
540
|
updateEarningRewardHistory(earningRewardHistory) {
|
|
226
541
|
const earningRewardHistoryState = this.earningRewardHistorySubject.getValue();
|
|
227
|
-
const key = `${earningRewardHistory.slug}---${earningRewardHistory.address}---${earningRewardHistory.
|
|
542
|
+
const key = `${earningRewardHistory.slug}---${earningRewardHistory.address}---${earningRewardHistory.eventIndex}`;
|
|
228
543
|
earningRewardHistoryState[key] = earningRewardHistory;
|
|
229
544
|
this.earningRewardHistorySubject.next(earningRewardHistoryState);
|
|
230
545
|
}
|
|
@@ -234,6 +549,24 @@ class EarningService {
|
|
|
234
549
|
getEarningRewardHistory() {
|
|
235
550
|
return this.earningRewardHistorySubject.getValue();
|
|
236
551
|
}
|
|
552
|
+
runSubscribeEarningRewardHistoryInterval() {
|
|
553
|
+
this.runUnsubscribeEarningRewardHistoryInterval();
|
|
554
|
+
const addresses = this.state.getDecodedAddresses();
|
|
555
|
+
if (!addresses.length) {
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
this.fetchPoolRewardHistory(addresses, result => {
|
|
559
|
+
this.updateEarningRewardHistory(result);
|
|
560
|
+
}).catch(console.error);
|
|
561
|
+
this.earningsRewardHistoryInterval = setInterval(() => {
|
|
562
|
+
this.fetchPoolRewardHistory(addresses, result => {
|
|
563
|
+
this.updateEarningRewardHistory(result);
|
|
564
|
+
}).catch(console.error);
|
|
565
|
+
}, _constants.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL);
|
|
566
|
+
}
|
|
567
|
+
runUnsubscribeEarningRewardHistoryInterval() {
|
|
568
|
+
this.earningsRewardHistoryInterval && clearInterval(this.earningsRewardHistoryInterval);
|
|
569
|
+
}
|
|
237
570
|
|
|
238
571
|
/* Get pools' reward */
|
|
239
572
|
|
|
@@ -246,7 +579,7 @@ class EarningService {
|
|
|
246
579
|
* @return {Promise<YieldPoolTarget[]>} List of pool's target
|
|
247
580
|
* */
|
|
248
581
|
async getPoolTargets(slug) {
|
|
249
|
-
await this.
|
|
582
|
+
await this.eventService.waitChainReady;
|
|
250
583
|
const handler = this.getPoolHandler(slug);
|
|
251
584
|
if (handler) {
|
|
252
585
|
return await handler.getPoolTargets();
|
|
@@ -262,7 +595,7 @@ class EarningService {
|
|
|
262
595
|
/* Join */
|
|
263
596
|
|
|
264
597
|
async earlyValidateJoin(request) {
|
|
265
|
-
await this.
|
|
598
|
+
await this.eventService.waitChainReady;
|
|
266
599
|
const {
|
|
267
600
|
slug
|
|
268
601
|
} = request;
|
|
@@ -274,7 +607,7 @@ class EarningService {
|
|
|
274
607
|
}
|
|
275
608
|
}
|
|
276
609
|
async generateOptimalSteps(params) {
|
|
277
|
-
await this.
|
|
610
|
+
await this.eventService.waitChainReady;
|
|
278
611
|
const {
|
|
279
612
|
slug
|
|
280
613
|
} = params;
|
|
@@ -286,7 +619,7 @@ class EarningService {
|
|
|
286
619
|
}
|
|
287
620
|
}
|
|
288
621
|
async validateYieldJoin(params) {
|
|
289
|
-
await this.
|
|
622
|
+
await this.eventService.waitChainReady;
|
|
290
623
|
const {
|
|
291
624
|
slug
|
|
292
625
|
} = params.data;
|
|
@@ -298,7 +631,7 @@ class EarningService {
|
|
|
298
631
|
}
|
|
299
632
|
}
|
|
300
633
|
async handleYieldJoin(params) {
|
|
301
|
-
await this.
|
|
634
|
+
await this.eventService.waitChainReady;
|
|
302
635
|
const {
|
|
303
636
|
slug
|
|
304
637
|
} = params.data;
|
|
@@ -315,7 +648,7 @@ class EarningService {
|
|
|
315
648
|
/* Leave */
|
|
316
649
|
|
|
317
650
|
async validateYieldLeave(params) {
|
|
318
|
-
await this.
|
|
651
|
+
await this.eventService.waitChainReady;
|
|
319
652
|
const {
|
|
320
653
|
slug
|
|
321
654
|
} = params;
|
|
@@ -327,7 +660,7 @@ class EarningService {
|
|
|
327
660
|
}
|
|
328
661
|
}
|
|
329
662
|
async handleYieldLeave(params) {
|
|
330
|
-
await this.
|
|
663
|
+
await this.eventService.waitChainReady;
|
|
331
664
|
const {
|
|
332
665
|
slug
|
|
333
666
|
} = params;
|
|
@@ -344,7 +677,7 @@ class EarningService {
|
|
|
344
677
|
/* Other */
|
|
345
678
|
|
|
346
679
|
async handleYieldWithdraw(params) {
|
|
347
|
-
await this.
|
|
680
|
+
await this.eventService.waitChainReady;
|
|
348
681
|
const {
|
|
349
682
|
slug
|
|
350
683
|
} = params;
|
|
@@ -356,7 +689,7 @@ class EarningService {
|
|
|
356
689
|
}
|
|
357
690
|
}
|
|
358
691
|
async handleYieldCancelUnstake(params) {
|
|
359
|
-
await this.
|
|
692
|
+
await this.eventService.waitChainReady;
|
|
360
693
|
const {
|
|
361
694
|
slug
|
|
362
695
|
} = params;
|
|
@@ -368,7 +701,7 @@ class EarningService {
|
|
|
368
701
|
}
|
|
369
702
|
}
|
|
370
703
|
async handleYieldClaimReward(params) {
|
|
371
|
-
await this.
|
|
704
|
+
await this.eventService.waitChainReady;
|
|
372
705
|
const {
|
|
373
706
|
slug
|
|
374
707
|
} = params;
|
|
@@ -33,6 +33,7 @@ class EventService extends _eventemitter.default {
|
|
|
33
33
|
this.waitCampaignReady = this.generateWaitPromise('campaign.ready');
|
|
34
34
|
this.waitBuyTokenReady = this.generateWaitPromise('buy.tokens.ready');
|
|
35
35
|
this.waitBuyServiceReady = this.generateWaitPromise('buy.services.ready');
|
|
36
|
+
this.waitEarningReady = this.generateWaitPromise('earning.ready');
|
|
36
37
|
}
|
|
37
38
|
generateWaitPromise(eventType) {
|
|
38
39
|
return new Promise(resolve => {
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = exports.EVERYTIME = void 0;
|
|
8
8
|
var _DeleteEarningData = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/DeleteEarningData"));
|
|
9
|
-
var _EnableEarningChains = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/EnableEarningChains"));
|
|
10
9
|
var _MigrateEarningVersion = _interopRequireDefault(require("./databases/MigrateEarningVersion"));
|
|
11
10
|
var _MigrateEthProvider = _interopRequireDefault(require("./providers/MigrateEthProvider"));
|
|
12
11
|
var _MigratePioneerProvider = _interopRequireDefault(require("./providers/MigratePioneerProvider"));
|
|
@@ -44,7 +43,7 @@ var _default = {
|
|
|
44
43
|
'1.1.6-01': _MigrateWalletReference.default,
|
|
45
44
|
'1.1.7': _DeleteChain.default,
|
|
46
45
|
'1.1.13-01': _MigrateTokenDecimals.default,
|
|
47
|
-
'1.1.13-02':
|
|
46
|
+
// '1.1.13-02-2': EnableEarningChains,
|
|
48
47
|
'1.1.13-03': _DeleteEarningData.default,
|
|
49
48
|
'1.1.17-01': _MigratePioneerProvider.default,
|
|
50
49
|
'1.1.17-03': _EnableVaraChain.default,
|
|
@@ -295,6 +295,9 @@ class DatabaseService {
|
|
|
295
295
|
async updateYieldPoolStore(data) {
|
|
296
296
|
await this.stores.yieldPoolInfo.upsert(data);
|
|
297
297
|
}
|
|
298
|
+
async updateYieldPoolsStore(data) {
|
|
299
|
+
await this.stores.yieldPoolInfo.bulkUpsert(data);
|
|
300
|
+
}
|
|
298
301
|
async deleteYieldPoolInfo(slugs) {
|
|
299
302
|
await this.stores.yieldPoolInfo.bulkDelete(slugs);
|
|
300
303
|
}
|
|
@@ -317,9 +320,18 @@ class DatabaseService {
|
|
|
317
320
|
});
|
|
318
321
|
return this.yieldInfoSubscription;
|
|
319
322
|
}
|
|
323
|
+
removeYieldPositionByAddresses(addresses) {
|
|
324
|
+
return this.stores.yieldPosition.removeByAddresses(addresses);
|
|
325
|
+
}
|
|
326
|
+
removeYieldPositionByChains(chains) {
|
|
327
|
+
return this.stores.yieldPosition.removeByChains(chains);
|
|
328
|
+
}
|
|
320
329
|
async updateYieldPosition(data) {
|
|
321
330
|
await this.stores.yieldPosition.upsert(data);
|
|
322
331
|
}
|
|
332
|
+
async updateYieldPositions(data) {
|
|
333
|
+
await this.stores.yieldPosition.bulkUpsert(data);
|
|
334
|
+
}
|
|
323
335
|
async getYieldPositionByAddress(addresses) {
|
|
324
336
|
return this.stores.yieldPosition.getByAddress(addresses);
|
|
325
337
|
}
|
|
@@ -334,6 +346,9 @@ class DatabaseService {
|
|
|
334
346
|
|
|
335
347
|
/* Campaign */
|
|
336
348
|
|
|
349
|
+
getAllCampaign() {
|
|
350
|
+
return this.stores.campaign.getAll();
|
|
351
|
+
}
|
|
337
352
|
subscribeProcessingCampaign() {
|
|
338
353
|
return this.stores.campaign.subscribeProcessingCampaign();
|
|
339
354
|
}
|
|
@@ -13,7 +13,13 @@ var _dexie = require("dexie");
|
|
|
13
13
|
const filterProcessing = campaign => {
|
|
14
14
|
const now = new Date().getTime();
|
|
15
15
|
const isExpired = now <= campaign.startTime || now >= campaign.endTime;
|
|
16
|
-
return !(campaign.isDone || isExpired);
|
|
16
|
+
return !(campaign.isArchive || campaign.isDone || isExpired);
|
|
17
|
+
};
|
|
18
|
+
const getId = campaign => {
|
|
19
|
+
return campaign.campaignId;
|
|
20
|
+
};
|
|
21
|
+
const sortById = (a, b) => {
|
|
22
|
+
return getId(a) - getId(b);
|
|
17
23
|
};
|
|
18
24
|
class CampaignStore extends _BaseStore.default {
|
|
19
25
|
async getAll() {
|
|
@@ -23,10 +29,10 @@ class CampaignStore extends _BaseStore.default {
|
|
|
23
29
|
return this.table.get(slug);
|
|
24
30
|
}
|
|
25
31
|
async getProcessingCampaign() {
|
|
26
|
-
return (await this.table.toArray()).filter(filterProcessing);
|
|
32
|
+
return (await this.table.toArray()).filter(filterProcessing).sort(sortById);
|
|
27
33
|
}
|
|
28
34
|
subscribeProcessingCampaign() {
|
|
29
|
-
return (0, _dexie.liveQuery)(() => this.table.filter(filterProcessing).toArray());
|
|
35
|
+
return (0, _dexie.liveQuery)(async () => (await this.table.filter(filterProcessing).toArray()).sort(sortById));
|
|
30
36
|
}
|
|
31
37
|
upsertCampaign(campaign) {
|
|
32
38
|
return this.table.put(campaign);
|