@subwallet/extension-base 1.0.2-1 → 1.0.2-1b
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 +16 -34
- package/background/KoniTypes.js +6 -7
- package/background/errors/TransactionError.js +21 -1
- package/cjs/background/KoniTypes.js +6 -7
- package/cjs/background/errors/TransactionError.js +20 -0
- package/cjs/constants/index.js +8 -26
- package/cjs/koni/api/dotsama/balance.js +49 -224
- package/cjs/koni/api/dotsama/transfer.js +30 -29
- package/cjs/koni/api/nft/acala_nft/index.js +4 -1
- package/cjs/koni/api/nft/bit.country/index.js +4 -1
- package/cjs/koni/api/nft/evm_nft/index.js +7 -3
- package/cjs/koni/api/nft/index.js +3 -6
- package/cjs/koni/api/nft/karura_nft/index.js +4 -1
- package/cjs/koni/api/nft/rmrk_nft/index.js +8 -1
- package/cjs/koni/api/nft/statemine_nft/index.js +4 -1
- package/cjs/koni/api/nft/unique_nft/index.js +6 -1
- package/cjs/koni/api/nft/wasm_nft/index.js +169 -111
- package/cjs/koni/api/nft/wasm_nft/utils.js +11 -7
- package/cjs/koni/api/staking/bonding/amplitude.js +13 -9
- package/cjs/koni/api/staking/bonding/astar.js +15 -13
- package/cjs/koni/api/staking/bonding/index.js +22 -10
- package/cjs/koni/api/staking/bonding/paraChain.js +85 -2
- package/cjs/koni/api/staking/bonding/relayChain.js +119 -16
- package/cjs/koni/api/staking/bonding/utils.js +27 -8
- package/cjs/koni/api/tokens/wasm/index.js +5 -4
- package/cjs/koni/api/tokens/wasm/utils.js +63 -0
- package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
- package/cjs/koni/api/xcm/utils.js +18 -13
- package/cjs/koni/api/xcm/xTokens.js +1 -1
- package/cjs/koni/api/xcm/xcmPallet.js +9 -6
- package/cjs/koni/background/cron.js +150 -47
- package/cjs/koni/background/handlers/Extension.js +106 -64
- package/cjs/koni/background/handlers/State.js +19 -21
- package/cjs/koni/background/handlers/Tabs.js +8 -1
- package/cjs/koni/background/subscription.js +32 -29
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +13 -8
- package/cjs/services/chain-service/handler/light-client/index.js +2 -0
- package/cjs/services/chain-service/index.js +6 -7
- package/cjs/services/event-service/index.js +5 -1
- package/cjs/services/event-service/types.js +11 -1
- package/cjs/services/history-service/index.js +16 -10
- package/cjs/services/history-service/subsquid-multi-chain-history.js +12 -9
- package/cjs/services/price-service/coingecko.js +0 -1
- package/cjs/services/price-service/index.js +2 -3
- package/cjs/services/request-service/handler/AuthRequestHandler.js +6 -2
- package/cjs/services/storage-service/DatabaseService.js +52 -33
- package/cjs/services/storage-service/db-stores/Nft.js +4 -17
- package/cjs/services/transaction-service/event-parser/index.js +20 -48
- package/cjs/services/transaction-service/index.js +23 -14
- package/cjs/utils/index.js +7 -14
- package/constants/index.d.ts +7 -13
- package/constants/index.js +7 -13
- package/koni/api/dotsama/balance.d.ts +0 -1
- package/koni/api/dotsama/balance.js +22 -197
- package/koni/api/dotsama/transfer.js +5 -4
- package/koni/api/nft/acala_nft/index.js +3 -1
- package/koni/api/nft/bit.country/index.js +3 -1
- package/koni/api/nft/evm_nft/index.js +6 -3
- package/koni/api/nft/index.d.ts +1 -2
- package/koni/api/nft/index.js +3 -6
- package/koni/api/nft/karura_nft/index.js +3 -1
- package/koni/api/nft/nft.d.ts +1 -0
- package/koni/api/nft/rmrk_nft/index.js +8 -1
- package/koni/api/nft/statemine_nft/index.js +3 -1
- package/koni/api/nft/unique_nft/index.js +5 -1
- package/koni/api/nft/wasm_nft/index.d.ts +0 -2
- package/koni/api/nft/wasm_nft/index.js +167 -109
- package/koni/api/nft/wasm_nft/utils.d.ts +7 -5
- package/koni/api/nft/wasm_nft/utils.js +7 -5
- package/koni/api/staking/bonding/amplitude.d.ts +0 -1
- package/koni/api/staking/bonding/amplitude.js +15 -10
- package/koni/api/staking/bonding/astar.js +8 -6
- package/koni/api/staking/bonding/index.d.ts +4 -1
- package/koni/api/staking/bonding/index.js +23 -13
- package/koni/api/staking/bonding/paraChain.d.ts +3 -0
- package/koni/api/staking/bonding/paraChain.js +86 -5
- package/koni/api/staking/bonding/relayChain.d.ts +5 -1
- package/koni/api/staking/bonding/relayChain.js +118 -18
- package/koni/api/staking/bonding/utils.d.ts +3 -2
- package/koni/api/staking/bonding/utils.js +27 -9
- package/koni/api/tokens/wasm/index.js +5 -4
- package/koni/api/tokens/wasm/utils.d.ts +6 -0
- package/koni/api/tokens/wasm/utils.js +54 -0
- package/koni/api/xcm/polkadotXcm.js +2 -2
- package/koni/api/xcm/utils.d.ts +5 -6
- package/koni/api/xcm/utils.js +15 -10
- package/koni/api/xcm/xTokens.js +2 -2
- package/koni/api/xcm/xcmPallet.js +10 -9
- package/koni/background/cron.d.ts +6 -1
- package/koni/background/cron.js +151 -48
- package/koni/background/handlers/Extension.d.ts +2 -2
- package/koni/background/handlers/Extension.js +108 -67
- package/koni/background/handlers/State.d.ts +5 -6
- package/koni/background/handlers/State.js +19 -21
- package/koni/background/handlers/Tabs.js +8 -1
- package/koni/background/subscription.js +31 -30
- package/package.json +9 -4
- package/services/chain-service/handler/SubstrateChainHandler.js +14 -9
- package/services/chain-service/handler/light-client/index.d.ts +17 -1
- package/services/chain-service/handler/light-client/index.js +1 -1
- package/services/chain-service/helper/psp22_abi.json +1041 -881
- package/services/chain-service/helper/psp34_abi.json +2963 -1807
- package/services/chain-service/index.js +6 -7
- package/services/event-service/index.js +5 -1
- package/services/event-service/types.d.ts +5 -9
- package/services/event-service/types.js +4 -1
- package/services/history-service/index.d.ts +1 -1
- package/services/history-service/index.js +16 -10
- package/services/history-service/subsquid-multi-chain-history.js +15 -11
- package/services/price-service/coingecko.js +0 -1
- package/services/price-service/index.js +2 -3
- package/services/request-service/handler/AuthRequestHandler.js +6 -2
- package/services/storage-service/DatabaseService.d.ts +1 -0
- package/services/storage-service/DatabaseService.js +52 -33
- package/services/storage-service/db-stores/Nft.d.ts +1 -2
- package/services/storage-service/db-stores/Nft.js +4 -16
- package/services/transaction-service/event-parser/index.js +21 -49
- package/services/transaction-service/index.js +23 -14
- package/utils/index.d.ts +1 -1
- package/utils/index.js +6 -12
|
@@ -286,7 +286,7 @@ class ChainService {
|
|
|
286
286
|
this.dbService.removeFromChainStore([slug]).catch(console.error);
|
|
287
287
|
this.updateChainSubscription();
|
|
288
288
|
this.lockChainInfoMap = false;
|
|
289
|
-
this.eventService.emit('chain.
|
|
289
|
+
this.eventService.emit('chain.updateState', slug);
|
|
290
290
|
return true;
|
|
291
291
|
}
|
|
292
292
|
resetChainInfoMap(excludedChains) {
|
|
@@ -352,7 +352,7 @@ class ChainService {
|
|
|
352
352
|
this.dbService.removeFromAssetStore(targetAssets).catch(e => this.logger.error(e));
|
|
353
353
|
this.assetRegistrySubject.next(assetRegistry);
|
|
354
354
|
targetAssets.forEach(assetSlug => {
|
|
355
|
-
this.eventService.emit('asset.
|
|
355
|
+
this.eventService.emit('asset.updateState', assetSlug);
|
|
356
356
|
});
|
|
357
357
|
}
|
|
358
358
|
|
|
@@ -426,7 +426,7 @@ class ChainService {
|
|
|
426
426
|
currentProvider: chainStateMap[chainSlug].currentProvider
|
|
427
427
|
}).catch(console.error);
|
|
428
428
|
this.lockChainInfoMap = false;
|
|
429
|
-
this.eventService.emit('chain.
|
|
429
|
+
this.eventService.emit('chain.updateState', chainSlug);
|
|
430
430
|
return true;
|
|
431
431
|
}
|
|
432
432
|
enableChain(chainSlug) {
|
|
@@ -461,7 +461,7 @@ class ChainService {
|
|
|
461
461
|
}).catch(console.error);
|
|
462
462
|
this.updateChainStateMapSubscription();
|
|
463
463
|
this.lockChainInfoMap = false;
|
|
464
|
-
this.eventService.emit('chain.
|
|
464
|
+
this.eventService.emit('chain.updateState', chainSlug);
|
|
465
465
|
return true;
|
|
466
466
|
}
|
|
467
467
|
checkExistedPredefinedChain(genesisHash, evmChainId) {
|
|
@@ -685,7 +685,7 @@ class ChainService {
|
|
|
685
685
|
active: targetChainState.active,
|
|
686
686
|
currentProvider: targetChainState.currentProvider
|
|
687
687
|
}).then(() => {
|
|
688
|
-
this.eventService.emit('chain.
|
|
688
|
+
this.eventService.emit('chain.updateState', chainSlug);
|
|
689
689
|
}).catch(e => this.logger.error(e));
|
|
690
690
|
}
|
|
691
691
|
insertChain(params) {
|
|
@@ -1120,7 +1120,6 @@ class ChainService {
|
|
|
1120
1120
|
this.setAssetSettings(assetSettings, false);
|
|
1121
1121
|
}
|
|
1122
1122
|
this.eventService.emit('asset.ready', true);
|
|
1123
|
-
console.log('Done init asset settings');
|
|
1124
1123
|
}
|
|
1125
1124
|
setAssetSettings(assetSettings) {
|
|
1126
1125
|
let emitEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
@@ -1135,7 +1134,7 @@ class ChainService {
|
|
|
1135
1134
|
}
|
|
1136
1135
|
this.assetSettingSubject.next(assetSettings);
|
|
1137
1136
|
updateAssets.forEach(slug => {
|
|
1138
|
-
this.eventService.emit(
|
|
1137
|
+
this.eventService.emit('asset.updateState', slug);
|
|
1139
1138
|
});
|
|
1140
1139
|
this.store.set('AssetSetting', assetSettings);
|
|
1141
1140
|
}
|
|
@@ -42,7 +42,11 @@ class EventService extends _eventemitter.default {
|
|
|
42
42
|
}, this.lazyTime);
|
|
43
43
|
}
|
|
44
44
|
emitLazy() {
|
|
45
|
-
|
|
45
|
+
try {
|
|
46
|
+
this.lazyEmitter.emit('lazy', this.pendingEvents, this.pendingEvents.map(e => e.type));
|
|
47
|
+
} catch (e) {
|
|
48
|
+
console.error('Get error in some listener of lazy event', e);
|
|
49
|
+
}
|
|
46
50
|
this.pendingEvents = [];
|
|
47
51
|
this.timeoutId = null;
|
|
48
52
|
}
|
|
@@ -1 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.COMMON_RELOAD_EVENTS = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'asset.updateState', 'account.add', 'chain.updateState', 'account.remove', 'chain.add'];
|
|
11
|
+
exports.COMMON_RELOAD_EVENTS = COMMON_RELOAD_EVENTS;
|
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.HistoryService = void 0;
|
|
7
7
|
var _constants = require("@subwallet/extension-base/constants");
|
|
8
|
-
var _address = require("@subwallet/extension-base/utils/address");
|
|
9
8
|
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
10
9
|
var _accounts = require("@subwallet/ui-keyring/observable/accounts");
|
|
11
10
|
var _rxjs = require("rxjs");
|
|
@@ -57,7 +56,7 @@ class HistoryService {
|
|
|
57
56
|
record.fromName = accountMap[(_record$from = record.from) === null || _record$from === void 0 ? void 0 : _record$from.toLowerCase()];
|
|
58
57
|
record.toName = accountMap[(_record$to = record.to) === null || _record$to === void 0 ? void 0 : _record$to.toLowerCase()];
|
|
59
58
|
});
|
|
60
|
-
this.
|
|
59
|
+
await this.addHistoryItems(historyRecords);
|
|
61
60
|
return historyRecords;
|
|
62
61
|
}
|
|
63
62
|
async fetchHistories(addresses) {
|
|
@@ -82,8 +81,8 @@ class HistoryService {
|
|
|
82
81
|
const addressList = _uiKeyring.keyring.getAccounts().map(a => a.address);
|
|
83
82
|
const currentHistories = this.historySubject.value;
|
|
84
83
|
if (!this.fetchPromise || currentHistories.length === 0) {
|
|
85
|
-
|
|
86
|
-
this.historySubject.next(
|
|
84
|
+
await this.fetchHistories(addressList);
|
|
85
|
+
this.historySubject.next(await this.dbService.getHistories());
|
|
87
86
|
}
|
|
88
87
|
return this.historySubject.getValue();
|
|
89
88
|
}
|
|
@@ -91,10 +90,6 @@ class HistoryService {
|
|
|
91
90
|
await this.getHistories();
|
|
92
91
|
return this.historySubject;
|
|
93
92
|
}
|
|
94
|
-
async insertHistories(historyItems) {
|
|
95
|
-
await this.dbService.upsertHistory(historyItems);
|
|
96
|
-
this.historySubject.next(await this.dbService.getHistories());
|
|
97
|
-
}
|
|
98
93
|
async updateHistories(chain, extrinsicHash, updateData) {
|
|
99
94
|
const existedRecords = await this.dbService.getHistories({
|
|
100
95
|
chain,
|
|
@@ -108,14 +103,25 @@ class HistoryService {
|
|
|
108
103
|
});
|
|
109
104
|
await this.addHistoryItems(updatedRecords);
|
|
110
105
|
}
|
|
106
|
+
|
|
107
|
+
// Insert history without check override origin 'app'
|
|
108
|
+
async insertHistories(historyItems) {
|
|
109
|
+
await this.dbService.upsertHistory(historyItems);
|
|
110
|
+
this.historySubject.next(await this.dbService.getHistories());
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Insert history with check override origin 'app'
|
|
111
114
|
async addHistoryItems(historyItems) {
|
|
112
115
|
// Prevent override record with original is 'app'
|
|
113
116
|
const appRecords = this.historySubject.value.filter(item => item.origin === 'app');
|
|
114
117
|
const excludeKeys = appRecords.map(item => {
|
|
115
|
-
return `${item.chain}-${
|
|
118
|
+
return `${item.chain}-${item.extrinsicHash}`;
|
|
116
119
|
});
|
|
117
120
|
const updateRecords = historyItems.filter(item => {
|
|
118
|
-
const key = `${item.chain}-${
|
|
121
|
+
const key = `${item.chain}-${item.extrinsicHash}`;
|
|
122
|
+
|
|
123
|
+
// !excludeKeys.includes(key) && console.log('Cancel update', key);
|
|
124
|
+
|
|
119
125
|
return item.origin === 'app' || !excludeKeys.includes(key);
|
|
120
126
|
});
|
|
121
127
|
await this.dbService.upsertHistory(updateRecords);
|
|
@@ -67,12 +67,15 @@ function autoFormatAddress(address) {
|
|
|
67
67
|
return '';
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
function generateSignature(
|
|
71
|
-
|
|
70
|
+
function generateSignature(input) {
|
|
71
|
+
if (!input) {
|
|
72
|
+
return '';
|
|
73
|
+
}
|
|
74
|
+
const {
|
|
72
75
|
r,
|
|
73
76
|
s,
|
|
74
77
|
v
|
|
75
|
-
} =
|
|
78
|
+
} = input;
|
|
76
79
|
const rHex = r.startsWith('0x') ? r.slice(2) : r;
|
|
77
80
|
const sHex = s.startsWith('0x') ? s.slice(2) : s;
|
|
78
81
|
const vHex = parseInt(v).toString(16);
|
|
@@ -255,14 +258,14 @@ async function fetchMultiChainHistories(addresses, chainMap) {
|
|
|
255
258
|
console.warn(`Not found chain info for chain id: ${chainId}`);
|
|
256
259
|
return;
|
|
257
260
|
}
|
|
258
|
-
|
|
259
|
-
|
|
261
|
+
usedAddresses.forEach(address => {
|
|
262
|
+
try {
|
|
260
263
|
const transactionData = parseSubsquidTransactionData(address, name, historyItem, chainInfo, parseData(args), parseData(_data));
|
|
261
264
|
histories.push(transactionData);
|
|
262
|
-
})
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
265
|
+
} catch (e) {
|
|
266
|
+
console.warn('Parse transaction data failed', address, e);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
266
269
|
});
|
|
267
270
|
return histories;
|
|
268
271
|
}
|
|
@@ -24,7 +24,6 @@ const getTokenPrice = async function (priceIds) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
if (useBackupApi || ((_res = res) === null || _res === void 0 ? void 0 : _res.status) !== 200) {
|
|
27
|
-
console.log('Use backup api for price');
|
|
28
27
|
useBackupApi = true;
|
|
29
28
|
res = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
|
|
30
29
|
}
|
|
@@ -37,8 +37,8 @@ class PriceService {
|
|
|
37
37
|
};
|
|
38
38
|
this.eventService.waitAssetReady.then(() => {
|
|
39
39
|
this.refreshPriceData();
|
|
40
|
-
this.eventService.on('asset.
|
|
41
|
-
this.eventService.on('asset.
|
|
40
|
+
this.eventService.on('asset.updateState', eventHandler);
|
|
41
|
+
this.eventService.on('asset.updateState', eventHandler);
|
|
42
42
|
}).catch(console.error);
|
|
43
43
|
}
|
|
44
44
|
async getPrice() {
|
|
@@ -68,7 +68,6 @@ class PriceService {
|
|
|
68
68
|
ready: true
|
|
69
69
|
});
|
|
70
70
|
this.dbService.updatePriceStore(rs).catch(console.error);
|
|
71
|
-
console.log('Get Token Price From CoinGecko');
|
|
72
71
|
}).catch(console.error);
|
|
73
72
|
this.refreshTimeout = setTimeout(this.refreshPriceData.bind(this), _constants.CRON_REFRESH_PRICE_INTERVAL);
|
|
74
73
|
}
|
|
@@ -95,11 +95,11 @@ class AuthRequestHandler {
|
|
|
95
95
|
const chainInfoMaps = this.#chainService.getChainInfoMap();
|
|
96
96
|
const chainStateMap = this.#chainService.getChainStateMap();
|
|
97
97
|
let defaultChain = options.defaultChain;
|
|
98
|
-
|
|
98
|
+
let needEnableChains = [];
|
|
99
99
|
if (options.url) {
|
|
100
100
|
const domain = (0, _utils2.getDomainFromUrl)(options.url);
|
|
101
101
|
const predefinedSupportChains = _constants.PREDEFINED_CHAIN_DAPP_CHAIN_MAP[domain];
|
|
102
|
-
if (predefinedSupportChains) {
|
|
102
|
+
if (!defaultChain && predefinedSupportChains) {
|
|
103
103
|
defaultChain = predefinedSupportChains[0];
|
|
104
104
|
options.autoActive && needEnableChains.push(...predefinedSupportChains);
|
|
105
105
|
}
|
|
@@ -117,6 +117,10 @@ class AuthRequestHandler {
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
|
+
needEnableChains = needEnableChains.filter(slug => {
|
|
121
|
+
var _chainStateMap$slug;
|
|
122
|
+
return !((_chainStateMap$slug = chainStateMap[slug]) !== null && _chainStateMap$slug !== void 0 && _chainStateMap$slug.active);
|
|
123
|
+
});
|
|
120
124
|
needEnableChains.length > 0 && this.#chainService.enableChains(needEnableChains);
|
|
121
125
|
return chainInfo;
|
|
122
126
|
}
|
|
@@ -10,6 +10,7 @@ var _databases = _interopRequireDefault(require("@subwallet/extension-base/servi
|
|
|
10
10
|
var _dbStores = require("@subwallet/extension-base/services/storage-service/db-stores");
|
|
11
11
|
var _ChainStakingMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata"));
|
|
12
12
|
var _NominatorMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/NominatorMetadata"));
|
|
13
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
13
14
|
var _util = require("@polkadot/util");
|
|
14
15
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
15
16
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -54,7 +55,8 @@ class DatabaseService {
|
|
|
54
55
|
}
|
|
55
56
|
async updateBalanceStore(address, item) {
|
|
56
57
|
if (item.state === _KoniTypes.APIItemState.READY) {
|
|
57
|
-
this.logger.log(`Updating balance for [${item.tokenSlug}]`);
|
|
58
|
+
// this.logger.log(`Updating balance for [${item.tokenSlug}]`);
|
|
59
|
+
|
|
58
60
|
return this.stores.balance.upsert({
|
|
59
61
|
address,
|
|
60
62
|
...item
|
|
@@ -69,14 +71,16 @@ class DatabaseService {
|
|
|
69
71
|
// Crowdloan
|
|
70
72
|
async updateCrowdloanStore(chain, address, item) {
|
|
71
73
|
if (item.state === _KoniTypes.APIItemState.READY && item.contribute !== '0') {
|
|
72
|
-
this.logger.log(`Updating crowdloan for [${chain}]`);
|
|
74
|
+
// this.logger.log(`Updating crowdloan for [${chain}]`);
|
|
75
|
+
|
|
73
76
|
return this.stores.crowdloan.upsert({
|
|
74
77
|
chain,
|
|
75
78
|
address,
|
|
76
79
|
...item
|
|
77
80
|
});
|
|
78
81
|
} else {
|
|
79
|
-
this.logger.debug(`Removing crowdloan for [${chain}]`);
|
|
82
|
+
// this.logger.debug(`Removing crowdloan for [${chain}]`);
|
|
83
|
+
|
|
80
84
|
return this.stores.crowdloan.deleteByChainAndAddress(chain, address);
|
|
81
85
|
}
|
|
82
86
|
}
|
|
@@ -84,22 +88,23 @@ class DatabaseService {
|
|
|
84
88
|
// Staking
|
|
85
89
|
async updateStaking(chain, address, item) {
|
|
86
90
|
if (item.state === _KoniTypes.APIItemState.READY) {
|
|
87
|
-
this.logger.log(`Updating staking for [${chain}]`);
|
|
91
|
+
// this.logger.log(`Updating staking for [${chain}]`);
|
|
92
|
+
|
|
88
93
|
return this.stores.staking.upsert(item);
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
96
|
async getStakings(addresses, chains) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return
|
|
97
|
+
// this.logger.log('Get Stakings: ', stakings);
|
|
98
|
+
|
|
99
|
+
return this.stores.staking.getStakings(addresses, chains);
|
|
95
100
|
}
|
|
96
101
|
async getStakingsByChains(chains) {
|
|
97
102
|
return this.stores.staking.getStakingsByChains(chains);
|
|
98
103
|
}
|
|
99
104
|
async getPooledStakings(addresses, chainHashes) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return
|
|
105
|
+
// this.logger.log('Get Pooled Stakings: ', stakings);
|
|
106
|
+
|
|
107
|
+
return this.stores.staking.getPooledStakings(addresses, chainHashes);
|
|
103
108
|
}
|
|
104
109
|
subscribeStaking(addresses, chainList, callback) {
|
|
105
110
|
this.stakingSubscription && this.stakingSubscription.unsubscribe();
|
|
@@ -121,18 +126,18 @@ class DatabaseService {
|
|
|
121
126
|
|
|
122
127
|
// Transaction histories
|
|
123
128
|
async getHistories(query) {
|
|
124
|
-
|
|
125
|
-
this.logger.log('Get histories: ', histories);
|
|
126
|
-
return histories;
|
|
129
|
+
return this.stores.transaction.queryHistory(query);
|
|
127
130
|
}
|
|
128
131
|
async upsertHistory(histories) {
|
|
129
|
-
this.logger.log('Updating transaction histories');
|
|
132
|
+
// this.logger.log('Updating transaction histories');
|
|
133
|
+
|
|
130
134
|
return this.stores.transaction.bulkUpsert(histories);
|
|
131
135
|
}
|
|
132
136
|
|
|
133
137
|
// NFT Collection
|
|
134
138
|
async addNftCollection(collection) {
|
|
135
|
-
this.logger.log(`Updating NFT collection for [${collection.chain}]`);
|
|
139
|
+
// this.logger.log(`Updating NFT collection for [${collection.chain}]`);
|
|
140
|
+
|
|
136
141
|
return this.stores.nftCollection.upsert(collection);
|
|
137
142
|
}
|
|
138
143
|
async deleteNftCollection(chain, collectionId) {
|
|
@@ -151,13 +156,19 @@ class DatabaseService {
|
|
|
151
156
|
});
|
|
152
157
|
return this.nftSubscription;
|
|
153
158
|
}
|
|
159
|
+
async cleanUpNft(chain, owner, collectionId, nftIds) {
|
|
160
|
+
const result = await this.stores.nft.cleanUpNfts(chain, (0, _utils.reformatAddress)(owner, 42), collectionId, nftIds);
|
|
161
|
+
result > 0 && console.debug(`Clean up ${result} NFTs from collection ${collectionId} on chain ${chain} for owner ${owner}`);
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
154
164
|
async getNft(addresses, chainHashes) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return
|
|
165
|
+
// this.logger.log('Get NFTs: ', nfts);
|
|
166
|
+
|
|
167
|
+
return this.stores.nft.getNft(addresses, chainHashes);
|
|
158
168
|
}
|
|
159
169
|
async addNft(address, nft) {
|
|
160
|
-
this.logger.log(`Updating NFT for [${nft.chain}]`);
|
|
170
|
+
// this.logger.log(`Updating NFT for [${nft.chain}]`);
|
|
171
|
+
|
|
161
172
|
return this.stores.nft.upsert({
|
|
162
173
|
...nft,
|
|
163
174
|
address
|
|
@@ -167,47 +178,54 @@ class DatabaseService {
|
|
|
167
178
|
return this.stores.nft.deleteNftItem(chain, addresses, nftItem);
|
|
168
179
|
}
|
|
169
180
|
removeNfts(chain, address, collectionId, nftIds) {
|
|
170
|
-
this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
|
|
181
|
+
// this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
|
|
182
|
+
|
|
171
183
|
return this.stores.nft.removeNfts(chain, address, collectionId, nftIds);
|
|
172
184
|
}
|
|
173
185
|
|
|
174
186
|
// Chain
|
|
175
187
|
async updateChainStore(item) {
|
|
176
|
-
this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
|
|
188
|
+
// this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
|
|
189
|
+
|
|
177
190
|
return this.stores.chain.upsert(item);
|
|
178
191
|
}
|
|
179
192
|
async bulkUpdateChainStore(data) {
|
|
180
|
-
this.logger.log('Bulk updating ChainStore');
|
|
193
|
+
// this.logger.log('Bulk updating ChainStore');
|
|
194
|
+
|
|
181
195
|
return this.stores.chain.bulkUpsert(data);
|
|
182
196
|
}
|
|
183
197
|
async removeFromChainStore(chains) {
|
|
184
|
-
this.logger.log('Bulk removing ChainStore');
|
|
198
|
+
// this.logger.log('Bulk removing ChainStore');
|
|
199
|
+
|
|
185
200
|
return this.stores.chain.removeChains(chains);
|
|
186
201
|
}
|
|
187
202
|
async getAllChainStore() {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
return
|
|
203
|
+
// this.logger.log('Get all chains: ', allChains);
|
|
204
|
+
|
|
205
|
+
return this.stores.chain.getAll();
|
|
191
206
|
}
|
|
192
207
|
|
|
193
208
|
// Asset
|
|
194
209
|
async updateAssetStore(item) {
|
|
195
|
-
this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
|
|
210
|
+
// this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
|
|
211
|
+
|
|
196
212
|
return this.stores.asset.upsert(item);
|
|
197
213
|
}
|
|
198
214
|
async getAllAssetStore() {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return
|
|
215
|
+
// this.logger.log('Get all stored assets: ', allAssets);
|
|
216
|
+
|
|
217
|
+
return this.stores.asset.getAll();
|
|
202
218
|
}
|
|
203
219
|
async removeFromAssetStore(items) {
|
|
204
|
-
this.logger.log('Bulk removing AssetStore');
|
|
220
|
+
// this.logger.log('Bulk removing AssetStore');
|
|
221
|
+
|
|
205
222
|
return this.stores.asset.removeAssets(items);
|
|
206
223
|
}
|
|
207
224
|
|
|
208
225
|
// Staking
|
|
209
226
|
async updateChainStakingMetadata(item) {
|
|
210
|
-
this.logger.log('Update ChainStakingMetadata: ', item.chain);
|
|
227
|
+
// this.logger.log('Update ChainStakingMetadata: ', item.chain);
|
|
228
|
+
|
|
211
229
|
return this.stores.chainStakingMetadata.upsert(item);
|
|
212
230
|
}
|
|
213
231
|
async getChainStakingMetadata() {
|
|
@@ -218,7 +236,8 @@ class DatabaseService {
|
|
|
218
236
|
return this.stores.chainStakingMetadata.getByChainAndType(chain, type);
|
|
219
237
|
}
|
|
220
238
|
async updateNominatorMetadata(item) {
|
|
221
|
-
this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
|
|
239
|
+
// this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
|
|
240
|
+
|
|
222
241
|
return this.stores.nominatorMetadata.upsert(item);
|
|
223
242
|
}
|
|
224
243
|
async getNominatorMetadata() {
|
|
@@ -24,25 +24,12 @@ class NftStore extends _BaseStoreWithAddressAndChain.default {
|
|
|
24
24
|
let chainList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
25
25
|
return (0, _dexie.liveQuery)(() => this.getNft(addresses, chainList));
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
let nftIds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
|
|
29
|
-
const conditions = {
|
|
30
|
-
chainHash,
|
|
31
|
-
address
|
|
32
|
-
};
|
|
33
|
-
if (!collection && nftIds && nftIds.length) {
|
|
34
|
-
return this.logger.warn('Missing collection id');
|
|
35
|
-
}
|
|
36
|
-
if (collection) {
|
|
37
|
-
conditions.collectionId = collection;
|
|
38
|
-
}
|
|
39
|
-
return this.table.where(conditions).and(item => !nftIds.some(nft => nft === item.id)).delete();
|
|
40
|
-
}
|
|
41
|
-
deleteNftsFromRemovedCollection(chain, address, collectionIds) {
|
|
27
|
+
cleanUpNfts(chain, address, collectionId, nftIds) {
|
|
42
28
|
return this.table.where({
|
|
43
29
|
address,
|
|
44
|
-
chain
|
|
45
|
-
|
|
30
|
+
chain,
|
|
31
|
+
collectionId
|
|
32
|
+
}).and(nft => !nftIds.includes(nft.id)).delete();
|
|
46
33
|
}
|
|
47
34
|
deleteNftByAddress(addresses) {
|
|
48
35
|
return this.table.where('address').anyOfIgnoreCase(addresses).delete();
|
|
@@ -10,43 +10,28 @@ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
|
10
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
11
|
|
|
12
12
|
function parseXcmEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chainInfo) {
|
|
13
|
-
let isFeeUseMainTokenSymbol = true;
|
|
14
13
|
for (let index = 0; index < eventLogs.length; index++) {
|
|
15
14
|
const record = eventLogs[index];
|
|
16
|
-
if (['karura', 'acala', 'acala_testnet'].includes(chain) && sendingTokenInfo && !(0, _utils._isNativeToken)(sendingTokenInfo)) {
|
|
17
|
-
if (record.event.section === 'currencies' && record.event.method.toLowerCase() === 'transferred') {
|
|
18
|
-
if (index === 0) {
|
|
19
|
-
var _record$event$data$;
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
21
|
-
historyItem.fee = {
|
|
22
|
-
value: ((_record$event$data$ = record.event.data[3]) === null || _record$event$data$ === void 0 ? void 0 : _record$event$data$.toString()) || '0',
|
|
23
|
-
symbol: sendingTokenInfo.symbol,
|
|
24
|
-
decimals: (0, _utils._getAssetDecimals)(sendingTokenInfo)
|
|
25
|
-
};
|
|
26
|
-
isFeeUseMainTokenSymbol = false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
15
|
const {
|
|
31
16
|
decimals: nativeDecimals,
|
|
32
17
|
symbol: nativeSymbol
|
|
33
18
|
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
|
|
34
|
-
if (
|
|
35
|
-
var _record$event$data
|
|
36
|
-
if ((_record$event$data$
|
|
37
|
-
var _record$event$data$
|
|
19
|
+
if (record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
|
|
20
|
+
var _record$event$data$;
|
|
21
|
+
if ((_record$event$data$ = record.event.data[1]) !== null && _record$event$data$ !== void 0 && _record$event$data$.toString()) {
|
|
22
|
+
var _record$event$data$2;
|
|
38
23
|
historyItem.fee = {
|
|
39
|
-
value: (_record$event$data$
|
|
24
|
+
value: (_record$event$data$2 = record.event.data[1]) === null || _record$event$data$2 === void 0 ? void 0 : _record$event$data$2.toString(),
|
|
40
25
|
symbol: nativeSymbol,
|
|
41
26
|
decimals: nativeDecimals
|
|
42
27
|
};
|
|
43
28
|
}
|
|
44
|
-
} else if (
|
|
45
|
-
var _record$event$data$
|
|
46
|
-
if ((_record$event$data$
|
|
47
|
-
var _record$event$data$
|
|
29
|
+
} else if (record.event.section === 'tokens' && record.event.method.toLowerCase() === 'withdrawn') {
|
|
30
|
+
var _record$event$data$3;
|
|
31
|
+
if (!historyItem.fee && (_record$event$data$3 = record.event.data[2]) !== null && _record$event$data$3 !== void 0 && _record$event$data$3.toString()) {
|
|
32
|
+
var _record$event$data$4;
|
|
48
33
|
historyItem.fee = {
|
|
49
|
-
value: (_record$event$data$
|
|
34
|
+
value: (_record$event$data$4 = record.event.data[2]) === null || _record$event$data$4 === void 0 ? void 0 : _record$event$data$4.toString(),
|
|
50
35
|
symbol: nativeSymbol,
|
|
51
36
|
decimals: nativeDecimals
|
|
52
37
|
};
|
|
@@ -55,28 +40,15 @@ function parseXcmEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chai
|
|
|
55
40
|
}
|
|
56
41
|
}
|
|
57
42
|
function parseTransferEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chainInfo) {
|
|
58
|
-
let isFeeUseMainTokenSymbol = true;
|
|
59
43
|
for (let index = 0; index < eventLogs.length; index++) {
|
|
60
44
|
const record = eventLogs[index];
|
|
61
|
-
if (['
|
|
62
|
-
if (record.event.section === 'currencies' && record.event.method.toLowerCase() === 'transferred') {
|
|
63
|
-
if (index === 0) {
|
|
64
|
-
var _record$event$data$6;
|
|
65
|
-
historyItem.fee = {
|
|
66
|
-
value: ((_record$event$data$6 = record.event.data[3]) === null || _record$event$data$6 === void 0 ? void 0 : _record$event$data$6.toString()) || '0',
|
|
67
|
-
symbol: sendingTokenInfo.symbol,
|
|
68
|
-
decimals: (0, _utils._getAssetDecimals)(sendingTokenInfo)
|
|
69
|
-
};
|
|
70
|
-
isFeeUseMainTokenSymbol = false;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
} else if (['genshiro_testnet', 'genshiro', 'equilibrium_parachain'].includes(chain) && sendingTokenInfo) {
|
|
45
|
+
if (['genshiro_testnet', 'genshiro', 'equilibrium_parachain'].includes(chain) && sendingTokenInfo) {
|
|
74
46
|
if (record.event.section === 'transactionPayment' && record.event.method.toLowerCase() === 'transactionfeepaid') {
|
|
75
|
-
var _record$event$data$
|
|
76
|
-
if ((_record$event$data$
|
|
77
|
-
var _record$event$data$
|
|
47
|
+
var _record$event$data$5;
|
|
48
|
+
if ((_record$event$data$5 = record.event.data[1]) !== null && _record$event$data$5 !== void 0 && _record$event$data$5.toString()) {
|
|
49
|
+
var _record$event$data$6;
|
|
78
50
|
historyItem.fee = {
|
|
79
|
-
value: ((_record$event$data$
|
|
51
|
+
value: ((_record$event$data$6 = record.event.data[1]) === null || _record$event$data$6 === void 0 ? void 0 : _record$event$data$6.toString()) || '0',
|
|
80
52
|
symbol: sendingTokenInfo.symbol,
|
|
81
53
|
decimals: (0, _utils._getAssetDecimals)(sendingTokenInfo)
|
|
82
54
|
};
|
|
@@ -87,13 +59,13 @@ function parseTransferEventLogs(historyItem, eventLogs, chain, sendingTokenInfo,
|
|
|
87
59
|
decimals: nativeDecimals,
|
|
88
60
|
symbol: nativeSymbol
|
|
89
61
|
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
|
|
90
|
-
if (
|
|
91
|
-
var _record$event$data$
|
|
92
|
-
if ((_record$event$data$
|
|
93
|
-
var _record$event$data$
|
|
62
|
+
if (record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
|
|
63
|
+
var _record$event$data$7;
|
|
64
|
+
if ((_record$event$data$7 = record.event.data[1]) !== null && _record$event$data$7 !== void 0 && _record$event$data$7.toString()) {
|
|
65
|
+
var _record$event$data$8;
|
|
94
66
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
95
67
|
historyItem.fee = {
|
|
96
|
-
value: ((_record$event$data$
|
|
68
|
+
value: ((_record$event$data$8 = record.event.data[1]) === null || _record$event$data$8 === void 0 ? void 0 : _record$event$data$8.toString()) || '0',
|
|
97
69
|
symbol: nativeSymbol,
|
|
98
70
|
decimals: nativeDecimals
|
|
99
71
|
};
|
|
@@ -434,11 +434,11 @@ class TransactionService {
|
|
|
434
434
|
}
|
|
435
435
|
try {
|
|
436
436
|
// Return one more history record if transaction send to account in the wallets
|
|
437
|
-
const toAccount = (historyItem === null || historyItem === void 0 ? void 0 : historyItem.to) && _uiKeyring.default.
|
|
437
|
+
const toAccount = (historyItem === null || historyItem === void 0 ? void 0 : historyItem.to) && _uiKeyring.default.getPair(historyItem.to);
|
|
438
438
|
if (toAccount) {
|
|
439
439
|
return [historyItem, {
|
|
440
440
|
...historyItem,
|
|
441
|
-
address:
|
|
441
|
+
address: toAccount.address,
|
|
442
442
|
direction: _KoniTypes.TransactionDirection.RECEIVED
|
|
443
443
|
}];
|
|
444
444
|
}
|
|
@@ -464,18 +464,27 @@ class TransactionService {
|
|
|
464
464
|
handlePostProcessing(id) {
|
|
465
465
|
// must be done after success/failure to make sure the transaction is finalized
|
|
466
466
|
const transaction = this.getTransaction(id);
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
467
|
+
if (transaction.extrinsicType === _KoniTypes.ExtrinsicType.SEND_NFT) {
|
|
468
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
469
|
+
try {
|
|
470
|
+
const sender = _uiKeyring.default.getPair(inputData.senderAddress);
|
|
471
|
+
sender && this.databaseService.handleNftTransfer(transaction.chain, [sender.address, _constants.ALL_ACCOUNT_KEY], inputData.nftItem).then(() => {
|
|
472
|
+
this.eventService.emit('transaction.transferNft', undefined);
|
|
473
|
+
}).catch(console.error);
|
|
474
|
+
} catch (e) {
|
|
475
|
+
console.error(e);
|
|
476
|
+
}
|
|
477
|
+
try {
|
|
478
|
+
const recipient = _uiKeyring.default.getPair(inputData.recipientAddress);
|
|
479
|
+
recipient && this.databaseService.addNft(recipient.address, {
|
|
480
|
+
...inputData.nftItem,
|
|
481
|
+
owner: recipient.address
|
|
482
|
+
}).catch(console.error);
|
|
483
|
+
} catch (e) {
|
|
484
|
+
console.error(e);
|
|
485
|
+
}
|
|
486
|
+
} else if ([_KoniTypes.ExtrinsicType.STAKING_BOND, _KoniTypes.ExtrinsicType.STAKING_UNBOND, _KoniTypes.ExtrinsicType.STAKING_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_CANCEL_UNSTAKE, _KoniTypes.ExtrinsicType.STAKING_CLAIM_REWARD, _KoniTypes.ExtrinsicType.STAKING_JOIN_POOL, _KoniTypes.ExtrinsicType.STAKING_POOL_WITHDRAW, _KoniTypes.ExtrinsicType.STAKING_LEAVE_POOL].includes(transaction.extrinsicType)) {
|
|
487
|
+
this.eventService.emit('transaction.submitStaking', transaction.chain);
|
|
479
488
|
}
|
|
480
489
|
}
|
|
481
490
|
onSuccess(_ref2) {
|