@subwallet/extension-base 1.0.2-1b → 1.0.2-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/background/KoniTypes.d.ts +34 -16
- package/background/KoniTypes.js +7 -6
- package/background/errors/TransactionError.js +1 -21
- package/cjs/background/KoniTypes.js +7 -6
- package/cjs/background/errors/TransactionError.js +0 -20
- package/cjs/constants/index.js +26 -8
- package/cjs/koni/api/dotsama/balance.js +224 -49
- package/cjs/koni/api/dotsama/transfer.js +29 -30
- package/cjs/koni/api/nft/acala_nft/index.js +1 -4
- package/cjs/koni/api/nft/bit.country/index.js +1 -4
- package/cjs/koni/api/nft/evm_nft/index.js +3 -7
- package/cjs/koni/api/nft/index.js +6 -3
- package/cjs/koni/api/nft/karura_nft/index.js +1 -4
- package/cjs/koni/api/nft/rmrk_nft/index.js +1 -8
- package/cjs/koni/api/nft/statemine_nft/index.js +1 -4
- package/cjs/koni/api/nft/unique_nft/index.js +1 -6
- package/cjs/koni/api/nft/wasm_nft/index.js +111 -169
- package/cjs/koni/api/nft/wasm_nft/utils.js +7 -11
- package/cjs/koni/api/staking/bonding/amplitude.js +9 -13
- package/cjs/koni/api/staking/bonding/astar.js +13 -15
- package/cjs/koni/api/staking/bonding/index.js +10 -22
- package/cjs/koni/api/staking/bonding/paraChain.js +2 -85
- package/cjs/koni/api/staking/bonding/relayChain.js +16 -119
- package/cjs/koni/api/staking/bonding/utils.js +8 -27
- package/cjs/koni/api/tokens/wasm/index.js +4 -5
- package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
- package/cjs/koni/api/xcm/utils.js +13 -18
- package/cjs/koni/api/xcm/xTokens.js +1 -1
- package/cjs/koni/api/xcm/xcmPallet.js +6 -9
- package/cjs/koni/background/cron.js +47 -150
- package/cjs/koni/background/handlers/Extension.js +64 -106
- package/cjs/koni/background/handlers/State.js +21 -19
- package/cjs/koni/background/handlers/Tabs.js +1 -8
- package/cjs/koni/background/subscription.js +29 -32
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +8 -13
- package/cjs/services/chain-service/handler/light-client/index.js +0 -2
- package/cjs/services/chain-service/index.js +7 -6
- package/cjs/services/event-service/index.js +1 -5
- package/cjs/services/event-service/types.js +1 -11
- package/cjs/services/history-service/index.js +10 -16
- package/cjs/services/history-service/subsquid-multi-chain-history.js +9 -12
- package/cjs/services/price-service/coingecko.js +1 -0
- package/cjs/services/price-service/index.js +3 -2
- package/cjs/services/request-service/handler/AuthRequestHandler.js +2 -6
- package/cjs/services/storage-service/DatabaseService.js +33 -52
- package/cjs/services/storage-service/db-stores/Nft.js +17 -4
- package/cjs/services/transaction-service/event-parser/index.js +48 -20
- package/cjs/services/transaction-service/index.js +14 -23
- package/cjs/utils/index.js +14 -7
- package/constants/index.d.ts +13 -7
- package/constants/index.js +13 -7
- package/koni/api/dotsama/balance.d.ts +1 -0
- package/koni/api/dotsama/balance.js +197 -22
- package/koni/api/dotsama/transfer.js +4 -5
- package/koni/api/nft/acala_nft/index.js +1 -3
- package/koni/api/nft/bit.country/index.js +1 -3
- package/koni/api/nft/evm_nft/index.js +3 -6
- package/koni/api/nft/index.d.ts +2 -1
- package/koni/api/nft/index.js +6 -3
- package/koni/api/nft/karura_nft/index.js +1 -3
- package/koni/api/nft/nft.d.ts +0 -1
- package/koni/api/nft/rmrk_nft/index.js +1 -8
- package/koni/api/nft/statemine_nft/index.js +1 -3
- package/koni/api/nft/unique_nft/index.js +1 -5
- package/koni/api/nft/wasm_nft/index.d.ts +2 -0
- package/koni/api/nft/wasm_nft/index.js +109 -167
- package/koni/api/nft/wasm_nft/utils.d.ts +5 -7
- package/koni/api/nft/wasm_nft/utils.js +5 -7
- package/koni/api/staking/bonding/amplitude.d.ts +1 -0
- package/koni/api/staking/bonding/amplitude.js +10 -15
- package/koni/api/staking/bonding/astar.js +6 -8
- package/koni/api/staking/bonding/index.d.ts +1 -4
- package/koni/api/staking/bonding/index.js +13 -23
- package/koni/api/staking/bonding/paraChain.d.ts +0 -3
- package/koni/api/staking/bonding/paraChain.js +5 -86
- package/koni/api/staking/bonding/relayChain.d.ts +1 -5
- package/koni/api/staking/bonding/relayChain.js +18 -118
- package/koni/api/staking/bonding/utils.d.ts +2 -3
- package/koni/api/staking/bonding/utils.js +9 -27
- package/koni/api/tokens/wasm/index.js +4 -5
- package/koni/api/xcm/polkadotXcm.js +2 -2
- package/koni/api/xcm/utils.d.ts +6 -5
- package/koni/api/xcm/utils.js +10 -15
- package/koni/api/xcm/xTokens.js +2 -2
- package/koni/api/xcm/xcmPallet.js +9 -10
- package/koni/background/cron.d.ts +1 -6
- package/koni/background/cron.js +48 -151
- package/koni/background/handlers/Extension.d.ts +2 -2
- package/koni/background/handlers/Extension.js +67 -108
- package/koni/background/handlers/State.d.ts +6 -5
- package/koni/background/handlers/State.js +21 -19
- package/koni/background/handlers/Tabs.js +1 -8
- package/koni/background/subscription.js +30 -31
- package/package.json +8 -13
- package/packageInfo.js +1 -1
- package/services/chain-service/handler/SubstrateChainHandler.js +9 -14
- package/services/chain-service/handler/light-client/index.d.ts +1 -17
- package/services/chain-service/handler/light-client/index.js +1 -1
- package/services/chain-service/helper/psp22_abi.json +881 -1041
- package/services/chain-service/helper/psp34_abi.json +1808 -2964
- package/services/chain-service/index.js +7 -6
- package/services/event-service/index.js +1 -5
- package/services/event-service/types.d.ts +9 -5
- package/services/event-service/types.js +1 -4
- package/services/history-service/index.d.ts +1 -1
- package/services/history-service/index.js +10 -16
- package/services/history-service/subsquid-multi-chain-history.js +11 -15
- package/services/price-service/coingecko.js +1 -0
- package/services/price-service/index.js +3 -2
- package/services/request-service/handler/AuthRequestHandler.js +2 -6
- package/services/storage-service/DatabaseService.d.ts +0 -1
- package/services/storage-service/DatabaseService.js +33 -52
- package/services/storage-service/db-stores/Nft.d.ts +2 -1
- package/services/storage-service/db-stores/Nft.js +16 -4
- package/services/transaction-service/event-parser/index.js +49 -21
- package/services/transaction-service/index.js +14 -23
- package/utils/index.d.ts +1 -1
- package/utils/index.js +12 -6
- package/cjs/koni/api/tokens/wasm/utils.js +0 -63
- package/koni/api/tokens/wasm/utils.d.ts +0 -6
- package/koni/api/tokens/wasm/utils.js +0 -54
|
@@ -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.remove', 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.remove', 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.enable', 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.disable', 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.update', chainSlug);
|
|
689
689
|
}).catch(e => this.logger.error(e));
|
|
690
690
|
}
|
|
691
691
|
insertChain(params) {
|
|
@@ -1120,6 +1120,7 @@ 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');
|
|
1123
1124
|
}
|
|
1124
1125
|
setAssetSettings(assetSettings) {
|
|
1125
1126
|
let emitEvent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
@@ -1134,7 +1135,7 @@ class ChainService {
|
|
|
1134
1135
|
}
|
|
1135
1136
|
this.assetSettingSubject.next(assetSettings);
|
|
1136
1137
|
updateAssets.forEach(slug => {
|
|
1137
|
-
this.eventService.emit('asset.
|
|
1138
|
+
this.eventService.emit(assetSettings[slug].visible ? 'asset.enable' : 'asset.disable', slug);
|
|
1138
1139
|
});
|
|
1139
1140
|
this.store.set('AssetSetting', assetSettings);
|
|
1140
1141
|
}
|
|
@@ -42,11 +42,7 @@ class EventService extends _eventemitter.default {
|
|
|
42
42
|
}, this.lazyTime);
|
|
43
43
|
}
|
|
44
44
|
emitLazy() {
|
|
45
|
-
|
|
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
|
-
}
|
|
45
|
+
this.lazyEmitter.emit('lazy', this.pendingEvents, this.pendingEvents.map(e => e.type));
|
|
50
46
|
this.pendingEvents = [];
|
|
51
47
|
this.timeoutId = null;
|
|
52
48
|
}
|
|
@@ -1,11 +1 @@
|
|
|
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;
|
|
1
|
+
"use strict";
|
|
@@ -5,6 +5,7 @@ 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");
|
|
8
9
|
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
9
10
|
var _accounts = require("@subwallet/ui-keyring/observable/accounts");
|
|
10
11
|
var _rxjs = require("rxjs");
|
|
@@ -56,7 +57,7 @@ class HistoryService {
|
|
|
56
57
|
record.fromName = accountMap[(_record$from = record.from) === null || _record$from === void 0 ? void 0 : _record$from.toLowerCase()];
|
|
57
58
|
record.toName = accountMap[(_record$to = record.to) === null || _record$to === void 0 ? void 0 : _record$to.toLowerCase()];
|
|
58
59
|
});
|
|
59
|
-
|
|
60
|
+
this.dbService.upsertHistory(historyRecords).catch(console.error);
|
|
60
61
|
return historyRecords;
|
|
61
62
|
}
|
|
62
63
|
async fetchHistories(addresses) {
|
|
@@ -81,8 +82,8 @@ class HistoryService {
|
|
|
81
82
|
const addressList = _uiKeyring.keyring.getAccounts().map(a => a.address);
|
|
82
83
|
const currentHistories = this.historySubject.value;
|
|
83
84
|
if (!this.fetchPromise || currentHistories.length === 0) {
|
|
84
|
-
await this.fetchHistories(addressList);
|
|
85
|
-
this.historySubject.next(
|
|
85
|
+
const historyRecords = await this.fetchHistories(addressList);
|
|
86
|
+
this.historySubject.next(historyRecords);
|
|
86
87
|
}
|
|
87
88
|
return this.historySubject.getValue();
|
|
88
89
|
}
|
|
@@ -90,6 +91,10 @@ class HistoryService {
|
|
|
90
91
|
await this.getHistories();
|
|
91
92
|
return this.historySubject;
|
|
92
93
|
}
|
|
94
|
+
async insertHistories(historyItems) {
|
|
95
|
+
await this.dbService.upsertHistory(historyItems);
|
|
96
|
+
this.historySubject.next(await this.dbService.getHistories());
|
|
97
|
+
}
|
|
93
98
|
async updateHistories(chain, extrinsicHash, updateData) {
|
|
94
99
|
const existedRecords = await this.dbService.getHistories({
|
|
95
100
|
chain,
|
|
@@ -103,25 +108,14 @@ class HistoryService {
|
|
|
103
108
|
});
|
|
104
109
|
await this.addHistoryItems(updatedRecords);
|
|
105
110
|
}
|
|
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'
|
|
114
111
|
async addHistoryItems(historyItems) {
|
|
115
112
|
// Prevent override record with original is 'app'
|
|
116
113
|
const appRecords = this.historySubject.value.filter(item => item.origin === 'app');
|
|
117
114
|
const excludeKeys = appRecords.map(item => {
|
|
118
|
-
return `${item.chain}-${item.extrinsicHash}`;
|
|
115
|
+
return `${item.chain}-${(0, _address.quickFormatAddressToCompare)(item.address) || ''}-${item.extrinsicHash}`;
|
|
119
116
|
});
|
|
120
117
|
const updateRecords = historyItems.filter(item => {
|
|
121
|
-
const key = `${item.chain}-${item.extrinsicHash}`;
|
|
122
|
-
|
|
123
|
-
// !excludeKeys.includes(key) && console.log('Cancel update', key);
|
|
124
|
-
|
|
118
|
+
const key = `${item.chain}-${(0, _address.quickFormatAddressToCompare)(item.address) || ''}-${item.extrinsicHash}`;
|
|
125
119
|
return item.origin === 'app' || !excludeKeys.includes(key);
|
|
126
120
|
});
|
|
127
121
|
await this.dbService.upsertHistory(updateRecords);
|
|
@@ -67,15 +67,12 @@ function autoFormatAddress(address) {
|
|
|
67
67
|
return '';
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
function generateSignature(
|
|
71
|
-
|
|
72
|
-
return '';
|
|
73
|
-
}
|
|
74
|
-
const {
|
|
70
|
+
function generateSignature(_ref) {
|
|
71
|
+
let {
|
|
75
72
|
r,
|
|
76
73
|
s,
|
|
77
74
|
v
|
|
78
|
-
} =
|
|
75
|
+
} = _ref;
|
|
79
76
|
const rHex = r.startsWith('0x') ? r.slice(2) : r;
|
|
80
77
|
const sHex = s.startsWith('0x') ? s.slice(2) : s;
|
|
81
78
|
const vHex = parseInt(v).toString(16);
|
|
@@ -258,14 +255,14 @@ async function fetchMultiChainHistories(addresses, chainMap) {
|
|
|
258
255
|
console.warn(`Not found chain info for chain id: ${chainId}`);
|
|
259
256
|
return;
|
|
260
257
|
}
|
|
261
|
-
|
|
262
|
-
|
|
258
|
+
try {
|
|
259
|
+
usedAddresses.forEach(address => {
|
|
263
260
|
const transactionData = parseSubsquidTransactionData(address, name, historyItem, chainInfo, parseData(args), parseData(_data));
|
|
264
261
|
histories.push(transactionData);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
}
|
|
262
|
+
});
|
|
263
|
+
} catch (e) {
|
|
264
|
+
console.warn('Parse transaction data failed', e);
|
|
265
|
+
}
|
|
269
266
|
});
|
|
270
267
|
return histories;
|
|
271
268
|
}
|
|
@@ -24,6 +24,7 @@ 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');
|
|
27
28
|
useBackupApi = true;
|
|
28
29
|
res = await _axios.default.get(`https://chain-data.subwallet.app/api/price/get?ids=${idStr}`);
|
|
29
30
|
}
|
|
@@ -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.enable', eventHandler);
|
|
41
|
+
this.eventService.on('asset.update', eventHandler);
|
|
42
42
|
}).catch(console.error);
|
|
43
43
|
}
|
|
44
44
|
async getPrice() {
|
|
@@ -68,6 +68,7 @@ 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');
|
|
71
72
|
}).catch(console.error);
|
|
72
73
|
this.refreshTimeout = setTimeout(this.refreshPriceData.bind(this), _constants.CRON_REFRESH_PRICE_INTERVAL);
|
|
73
74
|
}
|
|
@@ -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
|
+
const 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 (
|
|
102
|
+
if (predefinedSupportChains) {
|
|
103
103
|
defaultChain = predefinedSupportChains[0];
|
|
104
104
|
options.autoActive && needEnableChains.push(...predefinedSupportChains);
|
|
105
105
|
}
|
|
@@ -117,10 +117,6 @@ 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
|
-
});
|
|
124
120
|
needEnableChains.length > 0 && this.#chainService.enableChains(needEnableChains);
|
|
125
121
|
return chainInfo;
|
|
126
122
|
}
|
|
@@ -10,7 +10,6 @@ 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");
|
|
14
13
|
var _util = require("@polkadot/util");
|
|
15
14
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
16
15
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -55,8 +54,7 @@ class DatabaseService {
|
|
|
55
54
|
}
|
|
56
55
|
async updateBalanceStore(address, item) {
|
|
57
56
|
if (item.state === _KoniTypes.APIItemState.READY) {
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
this.logger.log(`Updating balance for [${item.tokenSlug}]`);
|
|
60
58
|
return this.stores.balance.upsert({
|
|
61
59
|
address,
|
|
62
60
|
...item
|
|
@@ -71,16 +69,14 @@ class DatabaseService {
|
|
|
71
69
|
// Crowdloan
|
|
72
70
|
async updateCrowdloanStore(chain, address, item) {
|
|
73
71
|
if (item.state === _KoniTypes.APIItemState.READY && item.contribute !== '0') {
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
this.logger.log(`Updating crowdloan for [${chain}]`);
|
|
76
73
|
return this.stores.crowdloan.upsert({
|
|
77
74
|
chain,
|
|
78
75
|
address,
|
|
79
76
|
...item
|
|
80
77
|
});
|
|
81
78
|
} else {
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
this.logger.debug(`Removing crowdloan for [${chain}]`);
|
|
84
80
|
return this.stores.crowdloan.deleteByChainAndAddress(chain, address);
|
|
85
81
|
}
|
|
86
82
|
}
|
|
@@ -88,23 +84,22 @@ class DatabaseService {
|
|
|
88
84
|
// Staking
|
|
89
85
|
async updateStaking(chain, address, item) {
|
|
90
86
|
if (item.state === _KoniTypes.APIItemState.READY) {
|
|
91
|
-
|
|
92
|
-
|
|
87
|
+
this.logger.log(`Updating staking for [${chain}]`);
|
|
93
88
|
return this.stores.staking.upsert(item);
|
|
94
89
|
}
|
|
95
90
|
}
|
|
96
91
|
async getStakings(addresses, chains) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
return
|
|
92
|
+
const stakings = await this.stores.staking.getStakings(addresses, chains);
|
|
93
|
+
this.logger.log('Get Stakings: ', stakings);
|
|
94
|
+
return stakings;
|
|
100
95
|
}
|
|
101
96
|
async getStakingsByChains(chains) {
|
|
102
97
|
return this.stores.staking.getStakingsByChains(chains);
|
|
103
98
|
}
|
|
104
99
|
async getPooledStakings(addresses, chainHashes) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return
|
|
100
|
+
const stakings = await this.stores.staking.getPooledStakings(addresses, chainHashes);
|
|
101
|
+
this.logger.log('Get Pooled Stakings: ', stakings);
|
|
102
|
+
return stakings;
|
|
108
103
|
}
|
|
109
104
|
subscribeStaking(addresses, chainList, callback) {
|
|
110
105
|
this.stakingSubscription && this.stakingSubscription.unsubscribe();
|
|
@@ -126,18 +121,18 @@ class DatabaseService {
|
|
|
126
121
|
|
|
127
122
|
// Transaction histories
|
|
128
123
|
async getHistories(query) {
|
|
129
|
-
|
|
124
|
+
const histories = await this.stores.transaction.queryHistory(query);
|
|
125
|
+
this.logger.log('Get histories: ', histories);
|
|
126
|
+
return histories;
|
|
130
127
|
}
|
|
131
128
|
async upsertHistory(histories) {
|
|
132
|
-
|
|
133
|
-
|
|
129
|
+
this.logger.log('Updating transaction histories');
|
|
134
130
|
return this.stores.transaction.bulkUpsert(histories);
|
|
135
131
|
}
|
|
136
132
|
|
|
137
133
|
// NFT Collection
|
|
138
134
|
async addNftCollection(collection) {
|
|
139
|
-
|
|
140
|
-
|
|
135
|
+
this.logger.log(`Updating NFT collection for [${collection.chain}]`);
|
|
141
136
|
return this.stores.nftCollection.upsert(collection);
|
|
142
137
|
}
|
|
143
138
|
async deleteNftCollection(chain, collectionId) {
|
|
@@ -156,19 +151,13 @@ class DatabaseService {
|
|
|
156
151
|
});
|
|
157
152
|
return this.nftSubscription;
|
|
158
153
|
}
|
|
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
|
-
}
|
|
164
154
|
async getNft(addresses, chainHashes) {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
return
|
|
155
|
+
const nfts = await this.stores.nft.getNft(addresses, chainHashes);
|
|
156
|
+
this.logger.log('Get NFTs: ', nfts);
|
|
157
|
+
return nfts;
|
|
168
158
|
}
|
|
169
159
|
async addNft(address, nft) {
|
|
170
|
-
|
|
171
|
-
|
|
160
|
+
this.logger.log(`Updating NFT for [${nft.chain}]`);
|
|
172
161
|
return this.stores.nft.upsert({
|
|
173
162
|
...nft,
|
|
174
163
|
address
|
|
@@ -178,54 +167,47 @@ class DatabaseService {
|
|
|
178
167
|
return this.stores.nft.deleteNftItem(chain, addresses, nftItem);
|
|
179
168
|
}
|
|
180
169
|
removeNfts(chain, address, collectionId, nftIds) {
|
|
181
|
-
|
|
182
|
-
|
|
170
|
+
this.logger.log(`Remove NFTs [${nftIds.join(', ')}]`);
|
|
183
171
|
return this.stores.nft.removeNfts(chain, address, collectionId, nftIds);
|
|
184
172
|
}
|
|
185
173
|
|
|
186
174
|
// Chain
|
|
187
175
|
async updateChainStore(item) {
|
|
188
|
-
|
|
189
|
-
|
|
176
|
+
this.logger.log(`Updating storageInfo for chain [${item.slug}]`);
|
|
190
177
|
return this.stores.chain.upsert(item);
|
|
191
178
|
}
|
|
192
179
|
async bulkUpdateChainStore(data) {
|
|
193
|
-
|
|
194
|
-
|
|
180
|
+
this.logger.log('Bulk updating ChainStore');
|
|
195
181
|
return this.stores.chain.bulkUpsert(data);
|
|
196
182
|
}
|
|
197
183
|
async removeFromChainStore(chains) {
|
|
198
|
-
|
|
199
|
-
|
|
184
|
+
this.logger.log('Bulk removing ChainStore');
|
|
200
185
|
return this.stores.chain.removeChains(chains);
|
|
201
186
|
}
|
|
202
187
|
async getAllChainStore() {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return
|
|
188
|
+
const allChains = await this.stores.chain.getAll();
|
|
189
|
+
this.logger.log('Get all chains: ', allChains);
|
|
190
|
+
return allChains;
|
|
206
191
|
}
|
|
207
192
|
|
|
208
193
|
// Asset
|
|
209
194
|
async updateAssetStore(item) {
|
|
210
|
-
|
|
211
|
-
|
|
195
|
+
this.logger.log(`Updating storageInfo for chainAsset [${item.originChain}]`);
|
|
212
196
|
return this.stores.asset.upsert(item);
|
|
213
197
|
}
|
|
214
198
|
async getAllAssetStore() {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
return
|
|
199
|
+
const allAssets = await this.stores.asset.getAll();
|
|
200
|
+
this.logger.log('Get all stored assets: ', allAssets);
|
|
201
|
+
return allAssets;
|
|
218
202
|
}
|
|
219
203
|
async removeFromAssetStore(items) {
|
|
220
|
-
|
|
221
|
-
|
|
204
|
+
this.logger.log('Bulk removing AssetStore');
|
|
222
205
|
return this.stores.asset.removeAssets(items);
|
|
223
206
|
}
|
|
224
207
|
|
|
225
208
|
// Staking
|
|
226
209
|
async updateChainStakingMetadata(item) {
|
|
227
|
-
|
|
228
|
-
|
|
210
|
+
this.logger.log('Update ChainStakingMetadata: ', item.chain);
|
|
229
211
|
return this.stores.chainStakingMetadata.upsert(item);
|
|
230
212
|
}
|
|
231
213
|
async getChainStakingMetadata() {
|
|
@@ -236,8 +218,7 @@ class DatabaseService {
|
|
|
236
218
|
return this.stores.chainStakingMetadata.getByChainAndType(chain, type);
|
|
237
219
|
}
|
|
238
220
|
async updateNominatorMetadata(item) {
|
|
239
|
-
|
|
240
|
-
|
|
221
|
+
this.logger.log('Update NominatorMetadata: ', item.address, item.chain);
|
|
241
222
|
return this.stores.nominatorMetadata.upsert(item);
|
|
242
223
|
}
|
|
243
224
|
async getNominatorMetadata() {
|
|
@@ -24,12 +24,25 @@ 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
|
-
|
|
27
|
+
deleteRemovedNftsFromCollection(chainHash, address, collection) {
|
|
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) {
|
|
28
42
|
return this.table.where({
|
|
29
43
|
address,
|
|
30
|
-
chain
|
|
31
|
-
|
|
32
|
-
}).and(nft => !nftIds.includes(nft.id)).delete();
|
|
44
|
+
chain
|
|
45
|
+
}).and(nft => !collectionIds.some(item => item === nft.collectionId));
|
|
33
46
|
}
|
|
34
47
|
deleteNftByAddress(addresses) {
|
|
35
48
|
return this.table.where('address').anyOfIgnoreCase(addresses).delete();
|
|
@@ -10,28 +10,43 @@ 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;
|
|
13
14
|
for (let index = 0; index < eventLogs.length; index++) {
|
|
14
15
|
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
|
+
}
|
|
15
30
|
const {
|
|
16
31
|
decimals: nativeDecimals,
|
|
17
32
|
symbol: nativeSymbol
|
|
18
33
|
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
|
|
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
|
|
22
|
-
var _record$event$data$
|
|
34
|
+
if (isFeeUseMainTokenSymbol && record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
|
|
35
|
+
var _record$event$data$2;
|
|
36
|
+
if ((_record$event$data$2 = record.event.data[1]) !== null && _record$event$data$2 !== void 0 && _record$event$data$2.toString()) {
|
|
37
|
+
var _record$event$data$3;
|
|
23
38
|
historyItem.fee = {
|
|
24
|
-
value: (_record$event$data$
|
|
39
|
+
value: (_record$event$data$3 = record.event.data[1]) === null || _record$event$data$3 === void 0 ? void 0 : _record$event$data$3.toString(),
|
|
25
40
|
symbol: nativeSymbol,
|
|
26
41
|
decimals: nativeDecimals
|
|
27
42
|
};
|
|
28
43
|
}
|
|
29
|
-
} else if (record.event.section === 'tokens' && record.event.method.toLowerCase() === 'withdrawn') {
|
|
30
|
-
var _record$event$data$
|
|
31
|
-
if (
|
|
32
|
-
var _record$event$data$
|
|
44
|
+
} else if (isFeeUseMainTokenSymbol && record.event.section === 'tokens' && record.event.method.toLowerCase() === 'withdrawn') {
|
|
45
|
+
var _record$event$data$4;
|
|
46
|
+
if ((_record$event$data$4 = record.event.data[2]) !== null && _record$event$data$4 !== void 0 && _record$event$data$4.toString()) {
|
|
47
|
+
var _record$event$data$5;
|
|
33
48
|
historyItem.fee = {
|
|
34
|
-
value: (_record$event$data$
|
|
49
|
+
value: (_record$event$data$5 = record.event.data[2]) === null || _record$event$data$5 === void 0 ? void 0 : _record$event$data$5.toString(),
|
|
35
50
|
symbol: nativeSymbol,
|
|
36
51
|
decimals: nativeDecimals
|
|
37
52
|
};
|
|
@@ -40,15 +55,28 @@ function parseXcmEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chai
|
|
|
40
55
|
}
|
|
41
56
|
}
|
|
42
57
|
function parseTransferEventLogs(historyItem, eventLogs, chain, sendingTokenInfo, chainInfo) {
|
|
58
|
+
let isFeeUseMainTokenSymbol = true;
|
|
43
59
|
for (let index = 0; index < eventLogs.length; index++) {
|
|
44
60
|
const record = eventLogs[index];
|
|
45
|
-
if (['
|
|
46
|
-
if (record.event.section === '
|
|
47
|
-
|
|
48
|
-
if ((_record$event$data$5 = record.event.data[1]) !== null && _record$event$data$5 !== void 0 && _record$event$data$5.toString()) {
|
|
61
|
+
if (['karura', 'acala', 'acala_testnet'].includes(chain) && !(0, _utils._isNativeToken)(sendingTokenInfo)) {
|
|
62
|
+
if (record.event.section === 'currencies' && record.event.method.toLowerCase() === 'transferred') {
|
|
63
|
+
if (index === 0) {
|
|
49
64
|
var _record$event$data$6;
|
|
50
65
|
historyItem.fee = {
|
|
51
|
-
value: ((_record$event$data$6 = record.event.data[
|
|
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) {
|
|
74
|
+
if (record.event.section === 'transactionPayment' && record.event.method.toLowerCase() === 'transactionfeepaid') {
|
|
75
|
+
var _record$event$data$7;
|
|
76
|
+
if ((_record$event$data$7 = record.event.data[1]) !== null && _record$event$data$7 !== void 0 && _record$event$data$7.toString()) {
|
|
77
|
+
var _record$event$data$8;
|
|
78
|
+
historyItem.fee = {
|
|
79
|
+
value: ((_record$event$data$8 = record.event.data[1]) === null || _record$event$data$8 === void 0 ? void 0 : _record$event$data$8.toString()) || '0',
|
|
52
80
|
symbol: sendingTokenInfo.symbol,
|
|
53
81
|
decimals: (0, _utils._getAssetDecimals)(sendingTokenInfo)
|
|
54
82
|
};
|
|
@@ -59,13 +87,13 @@ function parseTransferEventLogs(historyItem, eventLogs, chain, sendingTokenInfo,
|
|
|
59
87
|
decimals: nativeDecimals,
|
|
60
88
|
symbol: nativeSymbol
|
|
61
89
|
} = (0, _utils._getChainNativeTokenBasicInfo)(chainInfo);
|
|
62
|
-
if (record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
|
|
63
|
-
var _record$event$data$
|
|
64
|
-
if ((_record$event$data$
|
|
65
|
-
var _record$event$data$
|
|
90
|
+
if (isFeeUseMainTokenSymbol && record.event.section === 'balances' && record.event.method.toLowerCase() === 'withdraw') {
|
|
91
|
+
var _record$event$data$9;
|
|
92
|
+
if ((_record$event$data$9 = record.event.data[1]) !== null && _record$event$data$9 !== void 0 && _record$event$data$9.toString()) {
|
|
93
|
+
var _record$event$data$10;
|
|
66
94
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
67
95
|
historyItem.fee = {
|
|
68
|
-
value: ((_record$event$data$
|
|
96
|
+
value: ((_record$event$data$10 = record.event.data[1]) === null || _record$event$data$10 === void 0 ? void 0 : _record$event$data$10.toString()) || '0',
|
|
69
97
|
symbol: nativeSymbol,
|
|
70
98
|
decimals: nativeDecimals
|
|
71
99
|
};
|
|
@@ -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.getAccount(historyItem.to);
|
|
438
438
|
if (toAccount) {
|
|
439
439
|
return [historyItem, {
|
|
440
440
|
...historyItem,
|
|
441
|
-
address:
|
|
441
|
+
address: historyItem.to,
|
|
442
442
|
direction: _KoniTypes.TransactionDirection.RECEIVED
|
|
443
443
|
}];
|
|
444
444
|
}
|
|
@@ -464,27 +464,18 @@ 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
|
-
|
|
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);
|
|
467
|
+
switch (transaction.extrinsicType) {
|
|
468
|
+
case _KoniTypes.ExtrinsicType.SEND_NFT:
|
|
469
|
+
{
|
|
470
|
+
const inputData = (0, _utils2.parseTransactionData)(transaction.data);
|
|
471
|
+
const sender = _uiKeyring.default.getAccount(inputData.senderAddress);
|
|
472
|
+
const recipient = _uiKeyring.default.getAccount(inputData.recipientAddress);
|
|
473
|
+
sender && this.databaseService.handleNftTransfer(transaction.chain, [sender.address, _constants.ALL_ACCOUNT_KEY], inputData.nftItem).catch(console.error);
|
|
474
|
+
recipient && this.databaseService.addNft(recipient.address, {
|
|
475
|
+
...inputData.nftItem,
|
|
476
|
+
owner: recipient.address
|
|
477
|
+
}).catch(console.error);
|
|
478
|
+
}
|
|
488
479
|
}
|
|
489
480
|
}
|
|
490
481
|
onSuccess(_ref2) {
|