@subwallet/extension-base 1.1.40-1 → 1.1.42-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 +3 -1
- package/cjs/constants/index.js +1 -1
- package/cjs/koni/api/dotsama/transfer.js +1 -1
- package/cjs/koni/api/nft/bit.country/index.js +2 -0
- package/cjs/koni/api/nft/config.js +3 -1
- package/cjs/koni/api/tokens/evm/transfer.js +4 -4
- package/cjs/koni/background/handlers/Extension.js +32 -17
- package/cjs/koni/background/handlers/State.js +42 -10
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/SubWalleEvmProvider.js +5 -9
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +58 -0
- package/cjs/services/chain-service/constants.js +11 -7
- package/cjs/services/chain-service/handler/chain-spec/goldberg.js +75 -8
- package/cjs/services/chain-service/index.js +88 -79
- package/cjs/services/chain-service/utils.js +11 -6
- package/cjs/services/earning-service/constants/chains.js +10 -5
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +9 -3
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +8 -1
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +6 -1
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +25 -17
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +4 -0
- package/cjs/services/earning-service/handlers/native-staking/astar.js +6 -2
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +144 -45
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +14 -16
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +9 -11
- package/cjs/services/earning-service/handlers/special.js +2 -0
- package/cjs/services/earning-service/service.js +51 -18
- package/cjs/services/fee-service/service.js +70 -0
- package/cjs/services/fee-service/utils/index.js +209 -0
- package/cjs/services/migration-service/scripts/DeleteChainStaking.js +23 -0
- package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +50 -0
- package/cjs/services/migration-service/scripts/index.js +6 -1
- package/cjs/services/transaction-service/index.js +37 -37
- package/cjs/types/fee/index.js +1 -0
- package/cjs/types/index.js +11 -0
- package/cjs/utils/eth.js +2 -105
- package/cjs/utils/index.js +12 -0
- package/cjs/utils/reportError.js +31 -0
- package/constants/index.d.ts +1 -1
- package/constants/index.js +1 -1
- package/koni/api/dotsama/transfer.js +1 -1
- package/koni/api/nft/bit.country/index.js +3 -1
- package/koni/api/nft/config.d.ts +1 -0
- package/koni/api/nft/config.js +1 -0
- package/koni/api/tokens/evm/transfer.js +1 -1
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +18 -3
- package/koni/background/handlers/State.d.ts +4 -1
- package/koni/background/handlers/State.js +33 -2
- package/package.json +36 -6
- package/packageInfo.js +1 -1
- package/page/SubWalleEvmProvider.d.ts +0 -1
- package/page/SubWalleEvmProvider.js +5 -9
- package/services/balance-service/helpers/subscribe/substrate/index.js +59 -1
- package/services/chain-service/constants.d.ts +2 -0
- package/services/chain-service/constants.js +11 -7
- package/services/chain-service/handler/chain-spec/goldberg.d.ts +70 -1
- package/services/chain-service/handler/chain-spec/goldberg.js +75 -8
- package/services/chain-service/index.d.ts +8 -4
- package/services/chain-service/index.js +74 -67
- package/services/chain-service/types.d.ts +4 -0
- package/services/chain-service/utils.d.ts +1 -0
- package/services/chain-service/utils.js +10 -6
- package/services/earning-service/constants/chains.d.ts +3 -0
- package/services/earning-service/constants/chains.js +7 -4
- package/services/earning-service/handlers/liquid-staking/acala.js +9 -3
- package/services/earning-service/handlers/liquid-staking/bifrost.js +8 -1
- package/services/earning-service/handlers/liquid-staking/parallel.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/parallel.js +6 -1
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +25 -17
- package/services/earning-service/handlers/native-staking/amplitude.js +4 -0
- package/services/earning-service/handlers/native-staking/astar.js +6 -2
- package/services/earning-service/handlers/native-staking/para-chain.js +144 -45
- package/services/earning-service/handlers/native-staking/relay-chain.js +15 -17
- package/services/earning-service/handlers/nomination-pool/index.js +10 -12
- package/services/earning-service/handlers/special.d.ts +1 -0
- package/services/earning-service/handlers/special.js +2 -0
- package/services/earning-service/service.d.ts +4 -1
- package/services/earning-service/service.js +52 -19
- package/services/fee-service/service.d.ts +12 -0
- package/services/fee-service/service.js +63 -0
- package/services/fee-service/utils/index.d.ts +8 -0
- package/services/fee-service/utils/index.js +193 -0
- package/services/migration-service/scripts/DeleteChainStaking.d.ts +4 -0
- package/services/migration-service/scripts/DeleteChainStaking.js +15 -0
- package/services/migration-service/scripts/databases/MigrateAssetSetting.d.ts +4 -0
- package/services/migration-service/scripts/databases/MigrateAssetSetting.js +42 -0
- package/services/migration-service/scripts/index.js +5 -1
- package/services/transaction-service/index.js +2 -2
- package/types/fee/index.d.ts +49 -0
- package/types/fee/index.js +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/types/yield/info/account/unstake.d.ts +2 -0
- package/types/yield/info/pallet.d.ts +4 -0
- package/utils/eth.d.ts +0 -15
- package/utils/eth.js +0 -101
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/reportError.d.ts +1 -0
- package/utils/reportError.js +23 -0
|
@@ -40,11 +40,15 @@ class EarningService {
|
|
|
40
40
|
yieldPositionSubject = new _rxjs.BehaviorSubject({});
|
|
41
41
|
yieldPositionListSubject = new _rxjs.BehaviorSubject([]); // virtual list of yieldPositionSubject with filter values
|
|
42
42
|
|
|
43
|
+
useOnlineCacheOnly = true;
|
|
43
44
|
constructor(state) {
|
|
44
45
|
this.state = state;
|
|
45
46
|
this.dbService = state.dbService;
|
|
46
47
|
this.eventService = state.eventService;
|
|
47
48
|
}
|
|
49
|
+
disableOnlineCacheOnly() {
|
|
50
|
+
this.useOnlineCacheOnly = false;
|
|
51
|
+
}
|
|
48
52
|
async initHandlers() {
|
|
49
53
|
await this.eventService.waitChainReady;
|
|
50
54
|
const chains = [];
|
|
@@ -132,6 +136,7 @@ class EarningService {
|
|
|
132
136
|
}
|
|
133
137
|
handleActions() {
|
|
134
138
|
this.eventService.onLazy((events, eventTypes) => {
|
|
139
|
+
let delayReload = false;
|
|
135
140
|
(async () => {
|
|
136
141
|
const removedAddresses = [];
|
|
137
142
|
const removeChains = [];
|
|
@@ -145,6 +150,13 @@ class EarningService {
|
|
|
145
150
|
removeChains.push(event.data[0]);
|
|
146
151
|
}
|
|
147
152
|
}
|
|
153
|
+
if (event.type === 'transaction.done') {
|
|
154
|
+
const transactionData = event.data[0];
|
|
155
|
+
const notRequireReloadTypes = [_KoniTypes.ExtrinsicType.TRANSFER_BALANCE, _KoniTypes.ExtrinsicType.TRANSFER_TOKEN, _KoniTypes.ExtrinsicType.TRANSFER_XCM, _KoniTypes.ExtrinsicType.SEND_NFT, _KoniTypes.ExtrinsicType.CROWDLOAN];
|
|
156
|
+
if (notRequireReloadTypes.indexOf(transactionData.extrinsicType) === -1) {
|
|
157
|
+
delayReload = true;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
148
160
|
});
|
|
149
161
|
if (removeChains.length || removedAddresses.length) {
|
|
150
162
|
await this.removeYieldPositions(removeChains, removedAddresses);
|
|
@@ -153,8 +165,16 @@ class EarningService {
|
|
|
153
165
|
// Account changed or chain changed (active or inactive)
|
|
154
166
|
// Chain changed (active or inactive)
|
|
155
167
|
// Todo: Optimize performance of chain active or inactive in the future
|
|
156
|
-
if (eventTypes.includes('account.updateCurrent') || eventTypes.includes('account.remove') || eventTypes.includes('chain.updateState')) {
|
|
157
|
-
|
|
168
|
+
if (eventTypes.includes('account.updateCurrent') || eventTypes.includes('account.remove') || eventTypes.includes('chain.updateState') || delayReload) {
|
|
169
|
+
if (delayReload) {
|
|
170
|
+
this.delayReloadTimeout = setTimeout(() => {
|
|
171
|
+
this.reloadEarning().catch(console.error); // Timeout is removed inside reloadEarning > runUnsubscribePoolsPosition
|
|
172
|
+
}, 3000);
|
|
173
|
+
} else {
|
|
174
|
+
this.delayReloadTimeout && clearTimeout(this.delayReloadTimeout);
|
|
175
|
+
this.delayReloadTimeout = undefined;
|
|
176
|
+
await this.reloadEarning();
|
|
177
|
+
}
|
|
158
178
|
}
|
|
159
179
|
})().catch(console.error);
|
|
160
180
|
});
|
|
@@ -248,20 +268,25 @@ class EarningService {
|
|
|
248
268
|
}
|
|
249
269
|
async getYieldPool(slug) {
|
|
250
270
|
await this.eventService.waitEarningReady;
|
|
251
|
-
|
|
271
|
+
const poolInfoMap = this.yieldPoolInfoSubject.getValue();
|
|
272
|
+
return poolInfoMap[slug];
|
|
252
273
|
}
|
|
253
|
-
async subscribePoolsInfo(callback) {
|
|
274
|
+
async subscribePoolsInfo(onlineData, callback) {
|
|
254
275
|
let cancel = false;
|
|
255
276
|
await this.eventService.waitChainReady;
|
|
256
277
|
const unsubList = [];
|
|
257
278
|
for (const handler of Object.values(this.handlers)) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
279
|
+
// Force subscribe onchain data
|
|
280
|
+
const forceSubscribe = handler.type === _types2.YieldPoolType.LIQUID_STAKING || handler.type === _types2.YieldPoolType.LENDING;
|
|
281
|
+
if (!this.useOnlineCacheOnly || forceSubscribe) {
|
|
282
|
+
handler.subscribePoolInfo(callback).then(unsub => {
|
|
283
|
+
if (!cancel) {
|
|
284
|
+
unsubList.push(unsub);
|
|
285
|
+
} else {
|
|
286
|
+
unsub();
|
|
287
|
+
}
|
|
288
|
+
}).catch(console.error);
|
|
289
|
+
}
|
|
265
290
|
}
|
|
266
291
|
return () => {
|
|
267
292
|
cancel = true;
|
|
@@ -313,19 +338,20 @@ class EarningService {
|
|
|
313
338
|
Object.values(onlineData).forEach(item => {
|
|
314
339
|
this.updateYieldPoolInfo(item);
|
|
315
340
|
});
|
|
341
|
+
return onlineData;
|
|
316
342
|
}
|
|
317
343
|
async runSubscribePoolsInfo() {
|
|
318
344
|
await this.eventService.waitChainReady;
|
|
319
345
|
this.runUnsubscribePoolsInfo();
|
|
320
346
|
|
|
321
347
|
// Fetching online data
|
|
322
|
-
this.fetchingPoolsInfoOnline()
|
|
348
|
+
const onlineData = await this.fetchingPoolsInfoOnline();
|
|
323
349
|
const interval = setInterval(() => {
|
|
324
350
|
this.fetchingPoolsInfoOnline().catch(console.error);
|
|
325
351
|
}, _constants.CRON_REFRESH_CHAIN_STAKING_METADATA);
|
|
326
352
|
|
|
327
353
|
// Fetching from chains
|
|
328
|
-
this.subscribePoolsInfo(data => {
|
|
354
|
+
this.subscribePoolsInfo(onlineData, data => {
|
|
329
355
|
data.lastUpdated = Date.now();
|
|
330
356
|
this.updateYieldPoolInfo(data);
|
|
331
357
|
}).then(rs => {
|
|
@@ -470,6 +496,10 @@ class EarningService {
|
|
|
470
496
|
(_this$yieldPositionUn = this.yieldPositionUnsub) === null || _this$yieldPositionUn === void 0 ? void 0 : _this$yieldPositionUn.call(this);
|
|
471
497
|
(0, _utils2.removeLazy)('persistYieldPositionInfo');
|
|
472
498
|
this.yieldPositionPersistQueue = [];
|
|
499
|
+
|
|
500
|
+
// Remove delay reload
|
|
501
|
+
this.delayReloadTimeout && clearTimeout(this.delayReloadTimeout);
|
|
502
|
+
this.delayReloadTimeout = undefined;
|
|
473
503
|
}
|
|
474
504
|
|
|
475
505
|
/* Pools' position methods */
|
|
@@ -618,13 +648,16 @@ class EarningService {
|
|
|
618
648
|
* @return {Promise<YieldPoolTarget[]>} List of pool's target
|
|
619
649
|
* */
|
|
620
650
|
async getPoolTargets(slug) {
|
|
621
|
-
|
|
651
|
+
let targets = [];
|
|
652
|
+
if (this.useOnlineCacheOnly) {
|
|
653
|
+
targets = await (0, _fetchStaticCache.fetchStaticCache)(`earning/targets/${slug}.json`, []);
|
|
654
|
+
}
|
|
622
655
|
const handler = this.getPoolHandler(slug);
|
|
623
|
-
if (handler) {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
return [];
|
|
656
|
+
if (!targets.length && handler) {
|
|
657
|
+
await this.eventService.waitChainReady;
|
|
658
|
+
targets = await handler.getPoolTargets();
|
|
627
659
|
}
|
|
660
|
+
return targets;
|
|
628
661
|
}
|
|
629
662
|
|
|
630
663
|
/* Get pool's targets */
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
8
|
+
var _utils2 = require("@subwallet/extension-base/services/fee-service/utils");
|
|
9
|
+
var _rxjs = require("rxjs");
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
class FeeService {
|
|
14
|
+
evmFeeSubject = new _rxjs.BehaviorSubject({});
|
|
15
|
+
constructor(state) {
|
|
16
|
+
this.state = state;
|
|
17
|
+
this.useInfura = true;
|
|
18
|
+
}
|
|
19
|
+
changeMode(useInfura) {
|
|
20
|
+
this.useInfura = useInfura;
|
|
21
|
+
}
|
|
22
|
+
async updateFees() {
|
|
23
|
+
await this.state.eventService.waitChainReady;
|
|
24
|
+
const activeNetworks = this.state.activeNetworks;
|
|
25
|
+
const chains = Object.values(activeNetworks).filter(chainInfo => (0, _utils._isChainEvmCompatible)(chainInfo)).map(chainInfo => chainInfo.slug);
|
|
26
|
+
const promises = [];
|
|
27
|
+
for (const chain of chains) {
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises,no-async-promise-executor
|
|
29
|
+
const promise = new Promise(async resolve => {
|
|
30
|
+
const api = this.state.getEvmApi(chain);
|
|
31
|
+
const result = await (0, _utils2.calculateGasFeeParams)(api, chain, this.useInfura);
|
|
32
|
+
this.updateChainFee(chain, result);
|
|
33
|
+
resolve();
|
|
34
|
+
});
|
|
35
|
+
promises.push(promise);
|
|
36
|
+
}
|
|
37
|
+
await Promise.all(promises);
|
|
38
|
+
}
|
|
39
|
+
updateChainFee(chain, info) {
|
|
40
|
+
const rs = Object.assign({}, this.evmFeeSubject.getValue());
|
|
41
|
+
rs[chain] = info;
|
|
42
|
+
this.evmFeeSubject.next(rs);
|
|
43
|
+
}
|
|
44
|
+
subscribeFees(callback) {
|
|
45
|
+
let cancel = false;
|
|
46
|
+
|
|
47
|
+
// eslint-disable-next-line prefer-const
|
|
48
|
+
|
|
49
|
+
const fetchData = () => {
|
|
50
|
+
this.updateFees().finally(() => {
|
|
51
|
+
if (!cancel) {
|
|
52
|
+
callback(this.evmFeeSubject.getValue());
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
fetchData();
|
|
57
|
+
const interval = setInterval(() => {
|
|
58
|
+
if (cancel) {
|
|
59
|
+
clearInterval(interval);
|
|
60
|
+
} else {
|
|
61
|
+
fetchData();
|
|
62
|
+
}
|
|
63
|
+
}, 30 * 1000);
|
|
64
|
+
return () => {
|
|
65
|
+
cancel = true;
|
|
66
|
+
clearInterval(interval);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.default = FeeService;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.recalculateGasPrice = exports.parseInfuraFee = exports.fetchSubWalletFeeData = exports.fetchOnlineFeeData = exports.fetchInfuraFeeData = exports.calculateGasFeeParams = void 0;
|
|
8
|
+
var _constants = require("@subwallet/extension-base/constants");
|
|
9
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
10
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
11
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
12
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
13
|
+
|
|
14
|
+
const INFURA_API_KEY = process.env.INFURA_API_KEY || '';
|
|
15
|
+
const INFURA_API_KEY_SECRET = process.env.INFURA_API_KEY_SECRET || '';
|
|
16
|
+
const INFURA_AUTH = 'Basic ' + Buffer.from(INFURA_API_KEY + ':' + INFURA_API_KEY_SECRET).toString('base64');
|
|
17
|
+
const parseInfuraFee = info => {
|
|
18
|
+
const base = new _bignumber.default(info.estimatedBaseFee).multipliedBy(_utils.BN_WEI);
|
|
19
|
+
const low = new _bignumber.default(info.low.suggestedMaxPriorityFeePerGas).multipliedBy(_utils.BN_WEI);
|
|
20
|
+
const busyNetwork = base.gt(_utils.BN_ZERO) ? low.dividedBy(base).gte(0.3) : false;
|
|
21
|
+
const data = !busyNetwork ? info.low : info.medium;
|
|
22
|
+
return {
|
|
23
|
+
busyNetwork,
|
|
24
|
+
gasPrice: undefined,
|
|
25
|
+
baseGasFee: base,
|
|
26
|
+
maxFeePerGas: new _bignumber.default(data.suggestedMaxFeePerGas).multipliedBy(_utils.BN_WEI).integerValue(_bignumber.default.ROUND_UP),
|
|
27
|
+
maxPriorityFeePerGas: new _bignumber.default(data.suggestedMaxPriorityFeePerGas).multipliedBy(_utils.BN_WEI).integerValue(_bignumber.default.ROUND_UP)
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
exports.parseInfuraFee = parseInfuraFee;
|
|
31
|
+
const fetchInfuraFeeData = async (chainId, infuraAuth) => {
|
|
32
|
+
return await new Promise(resolve => {
|
|
33
|
+
const baseUrl = 'https://gas.api.infura.io/networks/{{chainId}}/suggestedGasFees';
|
|
34
|
+
const url = baseUrl.replaceAll('{{chainId}}', chainId.toString());
|
|
35
|
+
fetch(url, {
|
|
36
|
+
method: 'GET',
|
|
37
|
+
headers: {
|
|
38
|
+
Authorization: infuraAuth || INFURA_AUTH
|
|
39
|
+
}
|
|
40
|
+
}).then(rs => {
|
|
41
|
+
return rs.json();
|
|
42
|
+
}).then(info => {
|
|
43
|
+
resolve(parseInfuraFee(info));
|
|
44
|
+
}).catch(e => {
|
|
45
|
+
console.warn(e);
|
|
46
|
+
resolve(null);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
exports.fetchInfuraFeeData = fetchInfuraFeeData;
|
|
51
|
+
const fetchSubWalletFeeData = async (chainId, networkKey) => {
|
|
52
|
+
return await new Promise(resolve => {
|
|
53
|
+
const baseUrl = 'https://api-cache.subwallet.app/sw-evm-gas/{{chain}}';
|
|
54
|
+
const url = baseUrl.replaceAll('{{chain}}', networkKey);
|
|
55
|
+
fetch(url, {
|
|
56
|
+
method: 'GET'
|
|
57
|
+
}).then(rs => {
|
|
58
|
+
return rs.json();
|
|
59
|
+
}).then(info => {
|
|
60
|
+
if (info.gasPrice !== undefined) {
|
|
61
|
+
resolve(info);
|
|
62
|
+
} else {
|
|
63
|
+
resolve({
|
|
64
|
+
busyNetwork: info.busyNetwork,
|
|
65
|
+
gasPrice: info.gasPrice,
|
|
66
|
+
baseGasFee: new _bignumber.default(info.baseGasFee),
|
|
67
|
+
maxFeePerGas: new _bignumber.default(info.maxFeePerGas),
|
|
68
|
+
maxPriorityFeePerGas: new _bignumber.default(info.maxPriorityFeePerGas)
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}).catch(e => {
|
|
72
|
+
console.warn(e);
|
|
73
|
+
resolve(null);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
exports.fetchSubWalletFeeData = fetchSubWalletFeeData;
|
|
78
|
+
const fetchOnlineFeeData = async function (chainId, networkKey) {
|
|
79
|
+
let useInfura = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
80
|
+
return await new Promise(resolve => {
|
|
81
|
+
const fetchFunction = useInfura ? fetchInfuraFeeData : fetchSubWalletFeeData;
|
|
82
|
+
fetchFunction(chainId, networkKey).then(info => {
|
|
83
|
+
resolve(info);
|
|
84
|
+
}).catch(e => {
|
|
85
|
+
console.warn(e);
|
|
86
|
+
resolve(null);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
exports.fetchOnlineFeeData = fetchOnlineFeeData;
|
|
91
|
+
const recalculateGasPrice = (_price, chain) => {
|
|
92
|
+
const needMulti = _constants.NETWORK_MULTI_GAS_FEE.includes(chain) || _constants.NETWORK_MULTI_GAS_FEE.includes('*');
|
|
93
|
+
return needMulti ? new _bignumber.default(_price).multipliedBy(_constants.GAS_PRICE_RATIO).toFixed(0) : _price;
|
|
94
|
+
};
|
|
95
|
+
exports.recalculateGasPrice = recalculateGasPrice;
|
|
96
|
+
const calculateGasFeeParams = async function (web3, networkKey) {
|
|
97
|
+
let useOnline = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
98
|
+
let useInfura = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
99
|
+
if (useOnline) {
|
|
100
|
+
try {
|
|
101
|
+
const chainId = await web3.api.eth.getChainId();
|
|
102
|
+
const onlineData = await fetchOnlineFeeData(chainId, networkKey, useInfura);
|
|
103
|
+
if (onlineData) {
|
|
104
|
+
return onlineData;
|
|
105
|
+
}
|
|
106
|
+
} catch (e) {}
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const numBlock = 20;
|
|
110
|
+
const rewardPercent = [];
|
|
111
|
+
for (let i = 0; i <= 100; i = i + 5) {
|
|
112
|
+
rewardPercent.push(i);
|
|
113
|
+
}
|
|
114
|
+
const history = await web3.api.eth.getFeeHistory(numBlock, 'latest', rewardPercent);
|
|
115
|
+
const baseGasFee = new _bignumber.default(history.baseFeePerGas[history.baseFeePerGas.length - 1]); // Last element is latest
|
|
116
|
+
|
|
117
|
+
const blocksBusy = history.reward.reduce((previous, rewards, currentIndex) => {
|
|
118
|
+
const [firstPriority] = rewards;
|
|
119
|
+
const base = history.baseFeePerGas[currentIndex];
|
|
120
|
+
const priorityBN = new _bignumber.default(firstPriority);
|
|
121
|
+
const baseBN = new _bignumber.default(base);
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
* True if priority >= 0.3 * base
|
|
125
|
+
* */
|
|
126
|
+
const blockIsBusy = baseBN.gt(_utils.BN_ZERO) ? priorityBN.dividedBy(baseBN).gte(0.3) ? 1 : 0 : 0; // Special for bsc, base fee = 0
|
|
127
|
+
|
|
128
|
+
return previous + blockIsBusy;
|
|
129
|
+
}, 0);
|
|
130
|
+
const busyNetwork = blocksBusy >= numBlock / 2; // True, if half of block is busy
|
|
131
|
+
|
|
132
|
+
const maxPriorityFeePerGas = history.reward.reduce((previous, rewards) => {
|
|
133
|
+
let firstBN = _utils.BN_ZERO;
|
|
134
|
+
let firstIndex = 0;
|
|
135
|
+
|
|
136
|
+
/* Get first priority which greater than 0 */
|
|
137
|
+
for (let i = 0; i < rewards.length; i++) {
|
|
138
|
+
firstIndex = i;
|
|
139
|
+
const current = rewards[i];
|
|
140
|
+
const currentBN = new _bignumber.default(current);
|
|
141
|
+
if (currentBN.gt(_utils.BN_ZERO)) {
|
|
142
|
+
firstBN = currentBN;
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
let secondBN = firstBN;
|
|
147
|
+
|
|
148
|
+
/* Get second priority which greater than first priority */
|
|
149
|
+
for (let i = firstIndex; i < rewards.length; i++) {
|
|
150
|
+
const current = rewards[i];
|
|
151
|
+
const currentBN = new _bignumber.default(current);
|
|
152
|
+
if (currentBN.gt(firstBN)) {
|
|
153
|
+
secondBN = currentBN;
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
let current;
|
|
158
|
+
if (busyNetwork) {
|
|
159
|
+
current = secondBN.dividedBy(2).gte(firstBN) ? firstBN : secondBN; // second too larger than first (> 2 times), use first else use second
|
|
160
|
+
} else {
|
|
161
|
+
current = firstBN;
|
|
162
|
+
}
|
|
163
|
+
if (busyNetwork) {
|
|
164
|
+
/* Get max value */
|
|
165
|
+
return current.gte(previous) ? current : previous; // get max priority
|
|
166
|
+
} else {
|
|
167
|
+
/* Get min value which greater than 0 */
|
|
168
|
+
if (previous.eq(_utils.BN_ZERO)) {
|
|
169
|
+
return current; // get min priority
|
|
170
|
+
} else if (current.eq(_utils.BN_ZERO)) {
|
|
171
|
+
return previous;
|
|
172
|
+
}
|
|
173
|
+
return current.lte(previous) ? current : previous; // get min priority
|
|
174
|
+
}
|
|
175
|
+
}, _utils.BN_ZERO);
|
|
176
|
+
if (maxPriorityFeePerGas.eq(_utils.BN_ZERO)) {
|
|
177
|
+
const _price = await web3.api.eth.getGasPrice();
|
|
178
|
+
const gasPrice = recalculateGasPrice(_price, networkKey);
|
|
179
|
+
return {
|
|
180
|
+
gasPrice,
|
|
181
|
+
maxFeePerGas: undefined,
|
|
182
|
+
maxPriorityFeePerGas: undefined,
|
|
183
|
+
baseGasFee: undefined,
|
|
184
|
+
busyNetwork: false
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/* Max gas = (base + priority) * 1.5 (if not busy or 2 when busy); */
|
|
189
|
+
const maxFeePerGas = baseGasFee.plus(maxPriorityFeePerGas).multipliedBy(busyNetwork ? 2 : 1.5).decimalPlaces(0);
|
|
190
|
+
return {
|
|
191
|
+
gasPrice: undefined,
|
|
192
|
+
maxFeePerGas,
|
|
193
|
+
maxPriorityFeePerGas,
|
|
194
|
+
baseGasFee,
|
|
195
|
+
busyNetwork
|
|
196
|
+
};
|
|
197
|
+
} catch (e) {
|
|
198
|
+
const _price = await web3.api.eth.getGasPrice();
|
|
199
|
+
const gasPrice = recalculateGasPrice(_price, networkKey);
|
|
200
|
+
return {
|
|
201
|
+
gasPrice,
|
|
202
|
+
maxFeePerGas: undefined,
|
|
203
|
+
maxPriorityFeePerGas: undefined,
|
|
204
|
+
baseGasFee: undefined,
|
|
205
|
+
busyNetwork: false
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
exports.calculateGasFeeParams = calculateGasFeeParams;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class DeleteChainStaking extends _Base.default {
|
|
13
|
+
async run() {
|
|
14
|
+
try {
|
|
15
|
+
await this.state.dbService.stores.yieldPoolInfo.table.where({
|
|
16
|
+
slug: 'CAPS___native_staking___ternoa_alphanet'
|
|
17
|
+
}).delete();
|
|
18
|
+
} catch (e) {
|
|
19
|
+
console.error(e);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.default = DeleteChainStaking;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class MigrateAssetSetting extends _Base.default {
|
|
13
|
+
async run() {
|
|
14
|
+
try {
|
|
15
|
+
const oldSlugs = ['ethereum-ERC20-WFTM-0x4E15361FD6b4BB609Fa63C81A2be19d873717870', 'moonbeam-ERC20-CSG-0x2Dfc76901bB2ac2A5fA5fc479590A490BBB10a5F', 'astar-LOCAL-aUSD', 'astarEvm-ERC20-aUSD-0xfFFFFfFF00000000000000010000000000000001',
|
|
16
|
+
//
|
|
17
|
+
'moonriver-LOCAL-xcaUSD',
|
|
18
|
+
//
|
|
19
|
+
'moonriver-LOCAL-xckBTC', 'bifrost-LOCAL-aUSD', 'calamari-LOCAL-AUSD', 'shiden-LOCAL-aUSD', 'shidenEvm-ERC20-aUSD-0xfFFfFFfF00000000000000010000000000000000',
|
|
20
|
+
//
|
|
21
|
+
'ethereum_goerli-NATIVE-GoerliETH', 'binance_test-NATIVE-BNB',
|
|
22
|
+
//
|
|
23
|
+
'pangolin-LOCAL-CKTON',
|
|
24
|
+
//
|
|
25
|
+
'zeta_test-NATIVE-aZETA' //
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const newSlugs = ['ethereum-ERC20-FTM-0x4E15361FD6b4BB609Fa63C81A2be19d873717870', 'moonbeam-ERC20-CGS-0x2Dfc76901bB2ac2A5fA5fc479590A490BBB10a5F', 'astar-LOCAL-aSEED', 'astarEvm-ERC20-aSEED-0xfFFFFfFF00000000000000010000000000000001', 'moonriver-LOCAL-xcaSeed', 'moonriver-LOCAL-xcKBTC', 'bifrost-LOCAL-KUSD', 'calamari-LOCAL-AUSD', 'shiden-LOCAL-aSEED', 'shidenEvm-ERC20-aSEED-0xfFFfFFfF00000000000000010000000000000000', 'ethereum_goerli-NATIVE-ETH', 'binance_test-NATIVE-tBNB', 'pangolin-LOCAL-PKTON', 'zeta_test-NATIVE-ZETA'];
|
|
29
|
+
const assetSetting = await this.state.chainService.getAssetSettings();
|
|
30
|
+
const migratedAssetSetting = {};
|
|
31
|
+
for (let i = 0; i < oldSlugs.length; i++) {
|
|
32
|
+
const slug = oldSlugs[i];
|
|
33
|
+
if (Object.keys(assetSetting).includes(slug)) {
|
|
34
|
+
const isVisible = assetSetting[slug].visible;
|
|
35
|
+
const newSlug = newSlugs[i];
|
|
36
|
+
migratedAssetSetting[newSlug] = {
|
|
37
|
+
visible: isVisible
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
this.state.chainService.setAssetSettings({
|
|
42
|
+
...assetSetting,
|
|
43
|
+
...migratedAssetSetting
|
|
44
|
+
});
|
|
45
|
+
} catch (e) {
|
|
46
|
+
console.error(e);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.default = MigrateAssetSetting;
|
|
@@ -13,6 +13,7 @@ var _MigrateProvidersV1M1P = _interopRequireDefault(require("./providers/Migrate
|
|
|
13
13
|
var _MigratePolygonUSDCProvider = _interopRequireDefault(require("./tokens/MigratePolygonUSDCProvider"));
|
|
14
14
|
var _AutoEnableChainsTokens = _interopRequireDefault(require("./AutoEnableChainsTokens"));
|
|
15
15
|
var _DeleteChain = _interopRequireDefault(require("./DeleteChain"));
|
|
16
|
+
var _DeleteChainStaking = _interopRequireDefault(require("./DeleteChainStaking"));
|
|
16
17
|
var _EnableVaraChain = _interopRequireDefault(require("./EnableVaraChain"));
|
|
17
18
|
var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
|
|
18
19
|
var _MigrateAutoLock = _interopRequireDefault(require("./MigrateAutoLock"));
|
|
@@ -27,6 +28,8 @@ var _MigrateWalletReference = _interopRequireDefault(require("./MigrateWalletRef
|
|
|
27
28
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
28
29
|
// SPDX-License-Identifier: Apache-2.0
|
|
29
30
|
|
|
31
|
+
// import MigrateAssetSetting from './databases/MigrateAssetSetting';
|
|
32
|
+
|
|
30
33
|
const EVERYTIME = '__everytime__';
|
|
31
34
|
exports.EVERYTIME = EVERYTIME;
|
|
32
35
|
var _default = {
|
|
@@ -49,7 +52,9 @@ var _default = {
|
|
|
49
52
|
'1.1.17-03': _EnableVaraChain.default,
|
|
50
53
|
'1.1.24-01': _MigrateProvidersV1M1P.default,
|
|
51
54
|
'1.1.26-01': _MigratePolygonUSDCProvider.default,
|
|
52
|
-
'1.1.28-01': _MigrateEarningVersion.default
|
|
55
|
+
'1.1.28-01': _MigrateEarningVersion.default,
|
|
56
|
+
'1.1.41-01': _DeleteChainStaking.default
|
|
57
|
+
// '1.1.41-02': MigrateAssetSetting
|
|
53
58
|
// [`${EVERYTIME}-1`]: AutoEnableChainsTokens
|
|
54
59
|
};
|
|
55
60
|
exports.default = _default;
|