@subwallet/extension-base 1.0.3-0 → 1.0.4-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/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +17 -2
- package/cjs/services/chain-service/index.js +45 -16
- package/package.json +10 -10
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.d.ts +6 -0
- package/services/chain-service/constants.js +10 -1
- package/services/chain-service/index.d.ts +1 -0
- package/services/chain-service/index.js +46 -17
- /package/cjs/services/chain-service/{heath-check → health-check}/index.js +0 -0
- /package/services/chain-service/{heath-check → health-check}/index.d.ts +0 -0
- /package/services/chain-service/{heath-check → health-check}/index.js +0 -0
package/cjs/packageInfo.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._STAKING_CHAIN_GROUP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._DEFAULT_ACTIVE_CHAINS = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._API_OPTIONS_CHAIN_GROUP = exports.API_MAX_RETRY = exports.API_AUTO_CONNECT_MS = void 0;
|
|
6
|
+
exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._STAKING_CHAIN_GROUP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.API_MAX_RETRY = exports.API_AUTO_CONNECT_MS = void 0;
|
|
7
7
|
var _chainList = require("@subwallet/chain-list");
|
|
8
8
|
var _types = require("@subwallet/chain-list/types");
|
|
9
9
|
var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
@@ -218,4 +218,19 @@ const _XCM_TYPE = {
|
|
|
218
218
|
};
|
|
219
219
|
exports._XCM_TYPE = _XCM_TYPE;
|
|
220
220
|
const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS];
|
|
221
|
-
|
|
221
|
+
|
|
222
|
+
// TODO: review
|
|
223
|
+
exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
|
|
224
|
+
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
|
|
225
|
+
const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
|
|
226
|
+
exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
|
|
227
|
+
const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
|
|
228
|
+
exports._CHAIN_ASSET_SRC = _CHAIN_ASSET_SRC;
|
|
229
|
+
const _ASSET_REF_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
|
|
230
|
+
exports._ASSET_REF_SRC = _ASSET_REF_SRC;
|
|
231
|
+
const _MULTI_CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
|
|
232
|
+
exports._MULTI_CHAIN_ASSET_SRC = _MULTI_CHAIN_ASSET_SRC;
|
|
233
|
+
const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
|
|
234
|
+
exports._CHAIN_LOGO_MAP_SRC = _CHAIN_LOGO_MAP_SRC;
|
|
235
|
+
const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
|
|
236
|
+
exports._ASSET_LOGO_MAP_SRC = _ASSET_LOGO_MAP_SRC;
|
|
@@ -47,7 +47,6 @@ class ChainService {
|
|
|
47
47
|
this.chainInfoMapSubject.next(this.dataMap.chainInfoMap);
|
|
48
48
|
this.chainStateMapSubject.next(this.dataMap.chainStateMap);
|
|
49
49
|
this.assetRegistrySubject.next(this.dataMap.assetRegistry);
|
|
50
|
-
this.multiChainAssetMapSubject.next(_chainList.MultiChainAssetMap);
|
|
51
50
|
this.xcmRefMapSubject.next(this.getXcmRefMap());
|
|
52
51
|
this.logger = (0, _logger.logger)('chain-service');
|
|
53
52
|
this.refreshChainStateInterval(3000, 6);
|
|
@@ -359,7 +358,9 @@ class ChainService {
|
|
|
359
358
|
// Business logic
|
|
360
359
|
async init() {
|
|
361
360
|
// TODO: reconsider the flow of initiation
|
|
362
|
-
this.
|
|
361
|
+
const [latestAssetRefMap, latestMultiChainAssetMap] = await Promise.all([this.fetchLatestData(_constants._ASSET_REF_SRC, _chainList.AssetRefMap), this.fetchLatestData(_constants._MULTI_CHAIN_ASSET_SRC, _chainList.MultiChainAssetMap)]);
|
|
362
|
+
this.multiChainAssetMapSubject.next(latestMultiChainAssetMap);
|
|
363
|
+
this.dataMap.assetRefMap = latestAssetRefMap;
|
|
363
364
|
await this.initChains();
|
|
364
365
|
this.chainInfoMapSubject.next(this.getChainInfoMap());
|
|
365
366
|
this.chainStateMapSubject.next(this.getChainStateMap());
|
|
@@ -464,16 +465,16 @@ class ChainService {
|
|
|
464
465
|
this.eventService.emit('chain.updateState', chainSlug);
|
|
465
466
|
return true;
|
|
466
467
|
}
|
|
467
|
-
checkExistedPredefinedChain(genesisHash, evmChainId) {
|
|
468
|
+
checkExistedPredefinedChain(latestChainInfoMap, genesisHash, evmChainId) {
|
|
468
469
|
let duplicatedSlug = '';
|
|
469
470
|
if (genesisHash) {
|
|
470
|
-
Object.values(
|
|
471
|
+
Object.values(latestChainInfoMap).forEach(chainInfo => {
|
|
471
472
|
if (chainInfo.substrateInfo && chainInfo.substrateInfo.genesisHash === genesisHash) {
|
|
472
473
|
duplicatedSlug = chainInfo.slug;
|
|
473
474
|
}
|
|
474
475
|
});
|
|
475
476
|
} else if (evmChainId) {
|
|
476
|
-
Object.values(
|
|
477
|
+
Object.values(latestChainInfoMap).forEach(chainInfo => {
|
|
477
478
|
if (chainInfo.evmInfo && chainInfo.evmInfo.evmChainId === evmChainId) {
|
|
478
479
|
duplicatedSlug = chainInfo.slug;
|
|
479
480
|
}
|
|
@@ -481,8 +482,35 @@ class ChainService {
|
|
|
481
482
|
}
|
|
482
483
|
return duplicatedSlug;
|
|
483
484
|
}
|
|
485
|
+
async fetchLatestData(src, defaultValue) {
|
|
486
|
+
try {
|
|
487
|
+
const timeout = await new Promise(resolve => {
|
|
488
|
+
const id = setTimeout(() => {
|
|
489
|
+
clearTimeout(id);
|
|
490
|
+
resolve(null);
|
|
491
|
+
}, 1000);
|
|
492
|
+
});
|
|
493
|
+
let result = defaultValue;
|
|
494
|
+
const resp = (await Promise.race([timeout, fetch(src)])) || null;
|
|
495
|
+
if (!resp) {
|
|
496
|
+
return result;
|
|
497
|
+
}
|
|
498
|
+
if (resp.ok) {
|
|
499
|
+
try {
|
|
500
|
+
result = await resp.json();
|
|
501
|
+
} catch (err) {
|
|
502
|
+
console.warn('Error parsing latest data', src, err);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
return result;
|
|
506
|
+
} catch (e) {
|
|
507
|
+
console.warn('Error fetching latest data', src, e);
|
|
508
|
+
return defaultValue;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
484
511
|
async initChains() {
|
|
485
512
|
const storedChainSettings = await this.dbService.getAllChainStore();
|
|
513
|
+
const latestChainInfoMap = await this.fetchLatestData(_constants._CHAIN_INFO_SRC, _chainList.ChainInfoMap);
|
|
486
514
|
const storedChainSettingMap = {};
|
|
487
515
|
storedChainSettings.forEach(chainStoredSetting => {
|
|
488
516
|
storedChainSettingMap[chainStoredSetting.slug] = chainStoredSetting;
|
|
@@ -491,8 +519,8 @@ class ChainService {
|
|
|
491
519
|
const deprecatedChains = [];
|
|
492
520
|
const deprecatedChainMap = {};
|
|
493
521
|
if (storedChainSettings.length === 0) {
|
|
494
|
-
this.dataMap.chainInfoMap =
|
|
495
|
-
Object.values(
|
|
522
|
+
this.dataMap.chainInfoMap = latestChainInfoMap;
|
|
523
|
+
Object.values(latestChainInfoMap).forEach(chainInfo => {
|
|
496
524
|
this.dataMap.chainStateMap[chainInfo.slug] = {
|
|
497
525
|
currentProvider: Object.keys(chainInfo.providers)[0],
|
|
498
526
|
slug: chainInfo.slug,
|
|
@@ -508,10 +536,10 @@ class ChainService {
|
|
|
508
536
|
});
|
|
509
537
|
});
|
|
510
538
|
} else {
|
|
511
|
-
const mergedChainInfoMap =
|
|
539
|
+
const mergedChainInfoMap = latestChainInfoMap;
|
|
512
540
|
for (const [storedSlug, storedChainInfo] of Object.entries(storedChainSettingMap)) {
|
|
513
|
-
if (storedSlug in
|
|
514
|
-
// check predefined chains first,
|
|
541
|
+
if (storedSlug in latestChainInfoMap) {
|
|
542
|
+
// check predefined chains first, keep setting for providers and currentProvider
|
|
515
543
|
mergedChainInfoMap[storedSlug].providers = {
|
|
516
544
|
...storedChainInfo.providers,
|
|
517
545
|
...mergedChainInfoMap[storedSlug].providers
|
|
@@ -531,7 +559,7 @@ class ChainService {
|
|
|
531
559
|
var _storedChainInfo$subs, _storedChainInfo$evmI;
|
|
532
560
|
// only custom chains are left
|
|
533
561
|
// check custom chain duplicated with predefined chain => merge into predefined chain
|
|
534
|
-
const duplicatedDefaultSlug = this.checkExistedPredefinedChain((_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
|
|
562
|
+
const duplicatedDefaultSlug = this.checkExistedPredefinedChain(latestChainInfoMap, (_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
|
|
535
563
|
if (duplicatedDefaultSlug.length > 0) {
|
|
536
564
|
// merge custom chain with existed chain
|
|
537
565
|
mergedChainInfoMap[duplicatedDefaultSlug].providers = {
|
|
@@ -602,10 +630,11 @@ class ChainService {
|
|
|
602
630
|
}
|
|
603
631
|
async initAssetRegistry(deprecatedCustomChainMap) {
|
|
604
632
|
const storedAssetRegistry = await this.dbService.getAllAssetStore();
|
|
633
|
+
const latestAssetRegistry = await this.fetchLatestData(_constants._CHAIN_ASSET_SRC, _chainList.ChainAssetMap);
|
|
605
634
|
if (storedAssetRegistry.length === 0) {
|
|
606
|
-
this.dataMap.assetRegistry =
|
|
635
|
+
this.dataMap.assetRegistry = latestAssetRegistry;
|
|
607
636
|
} else {
|
|
608
|
-
const mergedAssetRegistry =
|
|
637
|
+
const mergedAssetRegistry = latestAssetRegistry;
|
|
609
638
|
const parsedStoredAssetRegistry = {};
|
|
610
639
|
const deprecatedAssets = [];
|
|
611
640
|
|
|
@@ -627,7 +656,7 @@ class ChainService {
|
|
|
627
656
|
});
|
|
628
657
|
for (const assetInfo of Object.values(parsedStoredAssetRegistry)) {
|
|
629
658
|
let duplicated = false;
|
|
630
|
-
for (const defaultChainAsset of Object.values(
|
|
659
|
+
for (const defaultChainAsset of Object.values(latestAssetRegistry)) {
|
|
631
660
|
// case merge custom asset with default asset
|
|
632
661
|
if ((0, _utils._isEqualSmartContractAsset)(assetInfo, defaultChainAsset)) {
|
|
633
662
|
duplicated = true;
|
|
@@ -1203,10 +1232,10 @@ class ChainService {
|
|
|
1203
1232
|
return this.assetSettingSubject;
|
|
1204
1233
|
}
|
|
1205
1234
|
async getChainLogoMap() {
|
|
1206
|
-
return
|
|
1235
|
+
return await this.fetchLatestData(_constants._CHAIN_LOGO_MAP_SRC, _chainList.ChainLogoMap);
|
|
1207
1236
|
}
|
|
1208
1237
|
async getAssetLogoMap() {
|
|
1209
|
-
return
|
|
1238
|
+
return await this.fetchLatestData(_constants._ASSET_LOGO_MAP_SRC, _chainList.AssetLogoMap);
|
|
1210
1239
|
}
|
|
1211
1240
|
}
|
|
1212
1241
|
exports.ChainService = ChainService;
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.0.
|
|
20
|
+
"version": "1.0.4-0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -530,10 +530,10 @@
|
|
|
530
530
|
"require": "./cjs/services/chain-service/handler/types.js",
|
|
531
531
|
"default": "./services/chain-service/handler/types.js"
|
|
532
532
|
},
|
|
533
|
-
"./services/chain-service/
|
|
534
|
-
"types": "./services/chain-service/
|
|
535
|
-
"require": "./cjs/services/chain-service/
|
|
536
|
-
"default": "./services/chain-service/
|
|
533
|
+
"./services/chain-service/health-check": {
|
|
534
|
+
"types": "./services/chain-service/health-check/index.d.ts",
|
|
535
|
+
"require": "./cjs/services/chain-service/health-check/index.js",
|
|
536
|
+
"default": "./services/chain-service/health-check/index.js"
|
|
537
537
|
},
|
|
538
538
|
"./services/chain-service/helper": {
|
|
539
539
|
"types": "./services/chain-service/helper/index.d.ts",
|
|
@@ -1649,7 +1649,7 @@
|
|
|
1649
1649
|
"@polkadot/hw-ledger": "^10.1.9",
|
|
1650
1650
|
"@polkadot/keyring": "^10.2.1",
|
|
1651
1651
|
"@polkadot/networks": "^10.2.1",
|
|
1652
|
-
"@polkadot/phishing": "^0.21.
|
|
1652
|
+
"@polkadot/phishing": "^0.21.2",
|
|
1653
1653
|
"@polkadot/react-identicon": "^2.9.14",
|
|
1654
1654
|
"@polkadot/react-qr": "^2.9.14",
|
|
1655
1655
|
"@polkadot/rpc-provider": "^9.10.3",
|
|
@@ -1667,10 +1667,10 @@
|
|
|
1667
1667
|
"@subsocial/types": "^0.6.8",
|
|
1668
1668
|
"@substrate/connect": "^0.7.18",
|
|
1669
1669
|
"@subwallet/chain-list": "^0.1.2",
|
|
1670
|
-
"@subwallet/extension-base": "^1.0.
|
|
1671
|
-
"@subwallet/extension-chains": "^1.0.
|
|
1672
|
-
"@subwallet/extension-dapp": "^1.0.
|
|
1673
|
-
"@subwallet/extension-inject": "^1.0.
|
|
1670
|
+
"@subwallet/extension-base": "^1.0.4-0",
|
|
1671
|
+
"@subwallet/extension-chains": "^1.0.4-0",
|
|
1672
|
+
"@subwallet/extension-dapp": "^1.0.4-0",
|
|
1673
|
+
"@subwallet/extension-inject": "^1.0.4-0",
|
|
1674
1674
|
"@subwallet/keyring": "^0.0.5",
|
|
1675
1675
|
"@subwallet/ui-keyring": "^0.0.3",
|
|
1676
1676
|
"@unique-nft/types": "^0.6.0-4",
|
package/packageInfo.js
CHANGED
|
@@ -7,5 +7,5 @@ export const packageInfo = {
|
|
|
7
7
|
name: '@subwallet/extension-base',
|
|
8
8
|
path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
|
|
9
9
|
type: 'esm',
|
|
10
|
-
version: '1.0.
|
|
10
|
+
version: '1.0.4-0'
|
|
11
11
|
};
|
|
@@ -75,3 +75,9 @@ export declare const _XCM_TYPE: {
|
|
|
75
75
|
PR: string;
|
|
76
76
|
};
|
|
77
77
|
export declare const _DEFAULT_ACTIVE_CHAINS: string[];
|
|
78
|
+
export declare const _CHAIN_INFO_SRC: string;
|
|
79
|
+
export declare const _CHAIN_ASSET_SRC: string;
|
|
80
|
+
export declare const _ASSET_REF_SRC: string;
|
|
81
|
+
export declare const _MULTI_CHAIN_ASSET_SRC: string;
|
|
82
|
+
export declare const _CHAIN_LOGO_MAP_SRC: string;
|
|
83
|
+
export declare const _ASSET_LOGO_MAP_SRC: string;
|
|
@@ -201,4 +201,13 @@ export const _XCM_TYPE = {
|
|
|
201
201
|
PR: `${_SubstrateChainType.PARACHAIN}-${_SubstrateChainType.RELAYCHAIN}` // UMP
|
|
202
202
|
};
|
|
203
203
|
|
|
204
|
-
export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS];
|
|
204
|
+
export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS];
|
|
205
|
+
|
|
206
|
+
// TODO: review
|
|
207
|
+
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
|
|
208
|
+
export const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
|
|
209
|
+
export const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
|
|
210
|
+
export const _ASSET_REF_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
|
|
211
|
+
export const _MULTI_CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
|
|
212
|
+
export const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
|
|
213
|
+
export const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
|
|
@@ -71,6 +71,7 @@ export declare class ChainService {
|
|
|
71
71
|
enableChains(chainSlugs: string[]): boolean;
|
|
72
72
|
disableChain(chainSlug: string): boolean;
|
|
73
73
|
private checkExistedPredefinedChain;
|
|
74
|
+
private fetchLatestData;
|
|
74
75
|
private initChains;
|
|
75
76
|
private initAssetRegistry;
|
|
76
77
|
private updateChainStateMapSubscription;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import { AssetLogoMap, AssetRefMap, ChainAssetMap, ChainInfoMap, ChainLogoMap, MultiChainAssetMap } from '@subwallet/chain-list';
|
|
5
5
|
import { _AssetRefPath, _AssetType, _ChainStatus, _SubstrateChainType } from '@subwallet/chain-list/types';
|
|
6
|
-
import { _DEFAULT_ACTIVE_CHAINS } from '@subwallet/extension-base/services/chain-service/constants';
|
|
6
|
+
import { _ASSET_LOGO_MAP_SRC, _ASSET_REF_SRC, _CHAIN_ASSET_SRC, _CHAIN_INFO_SRC, _CHAIN_LOGO_MAP_SRC, _DEFAULT_ACTIVE_CHAINS, _MULTI_CHAIN_ASSET_SRC } from '@subwallet/extension-base/services/chain-service/constants';
|
|
7
7
|
import { EvmChainHandler } from '@subwallet/extension-base/services/chain-service/handler/EvmChainHandler';
|
|
8
8
|
import { SubstrateChainHandler } from '@subwallet/extension-base/services/chain-service/handler/SubstrateChainHandler';
|
|
9
9
|
import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chain-service/handler/types';
|
|
@@ -40,7 +40,6 @@ export class ChainService {
|
|
|
40
40
|
this.chainInfoMapSubject.next(this.dataMap.chainInfoMap);
|
|
41
41
|
this.chainStateMapSubject.next(this.dataMap.chainStateMap);
|
|
42
42
|
this.assetRegistrySubject.next(this.dataMap.assetRegistry);
|
|
43
|
-
this.multiChainAssetMapSubject.next(MultiChainAssetMap);
|
|
44
43
|
this.xcmRefMapSubject.next(this.getXcmRefMap());
|
|
45
44
|
this.logger = createLogger('chain-service');
|
|
46
45
|
this.refreshChainStateInterval(3000, 6);
|
|
@@ -350,7 +349,9 @@ export class ChainService {
|
|
|
350
349
|
// Business logic
|
|
351
350
|
async init() {
|
|
352
351
|
// TODO: reconsider the flow of initiation
|
|
353
|
-
this.
|
|
352
|
+
const [latestAssetRefMap, latestMultiChainAssetMap] = await Promise.all([this.fetchLatestData(_ASSET_REF_SRC, AssetRefMap), this.fetchLatestData(_MULTI_CHAIN_ASSET_SRC, MultiChainAssetMap)]);
|
|
353
|
+
this.multiChainAssetMapSubject.next(latestMultiChainAssetMap);
|
|
354
|
+
this.dataMap.assetRefMap = latestAssetRefMap;
|
|
354
355
|
await this.initChains();
|
|
355
356
|
this.chainInfoMapSubject.next(this.getChainInfoMap());
|
|
356
357
|
this.chainStateMapSubject.next(this.getChainStateMap());
|
|
@@ -452,16 +453,16 @@ export class ChainService {
|
|
|
452
453
|
this.eventService.emit('chain.updateState', chainSlug);
|
|
453
454
|
return true;
|
|
454
455
|
}
|
|
455
|
-
checkExistedPredefinedChain(genesisHash, evmChainId) {
|
|
456
|
+
checkExistedPredefinedChain(latestChainInfoMap, genesisHash, evmChainId) {
|
|
456
457
|
let duplicatedSlug = '';
|
|
457
458
|
if (genesisHash) {
|
|
458
|
-
Object.values(
|
|
459
|
+
Object.values(latestChainInfoMap).forEach(chainInfo => {
|
|
459
460
|
if (chainInfo.substrateInfo && chainInfo.substrateInfo.genesisHash === genesisHash) {
|
|
460
461
|
duplicatedSlug = chainInfo.slug;
|
|
461
462
|
}
|
|
462
463
|
});
|
|
463
464
|
} else if (evmChainId) {
|
|
464
|
-
Object.values(
|
|
465
|
+
Object.values(latestChainInfoMap).forEach(chainInfo => {
|
|
465
466
|
if (chainInfo.evmInfo && chainInfo.evmInfo.evmChainId === evmChainId) {
|
|
466
467
|
duplicatedSlug = chainInfo.slug;
|
|
467
468
|
}
|
|
@@ -469,8 +470,35 @@ export class ChainService {
|
|
|
469
470
|
}
|
|
470
471
|
return duplicatedSlug;
|
|
471
472
|
}
|
|
473
|
+
async fetchLatestData(src, defaultValue) {
|
|
474
|
+
try {
|
|
475
|
+
const timeout = await new Promise(resolve => {
|
|
476
|
+
const id = setTimeout(() => {
|
|
477
|
+
clearTimeout(id);
|
|
478
|
+
resolve(null);
|
|
479
|
+
}, 1000);
|
|
480
|
+
});
|
|
481
|
+
let result = defaultValue;
|
|
482
|
+
const resp = (await Promise.race([timeout, fetch(src)])) || null;
|
|
483
|
+
if (!resp) {
|
|
484
|
+
return result;
|
|
485
|
+
}
|
|
486
|
+
if (resp.ok) {
|
|
487
|
+
try {
|
|
488
|
+
result = await resp.json();
|
|
489
|
+
} catch (err) {
|
|
490
|
+
console.warn('Error parsing latest data', src, err);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
return result;
|
|
494
|
+
} catch (e) {
|
|
495
|
+
console.warn('Error fetching latest data', src, e);
|
|
496
|
+
return defaultValue;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
472
499
|
async initChains() {
|
|
473
500
|
const storedChainSettings = await this.dbService.getAllChainStore();
|
|
501
|
+
const latestChainInfoMap = await this.fetchLatestData(_CHAIN_INFO_SRC, ChainInfoMap);
|
|
474
502
|
const storedChainSettingMap = {};
|
|
475
503
|
storedChainSettings.forEach(chainStoredSetting => {
|
|
476
504
|
storedChainSettingMap[chainStoredSetting.slug] = chainStoredSetting;
|
|
@@ -479,8 +507,8 @@ export class ChainService {
|
|
|
479
507
|
const deprecatedChains = [];
|
|
480
508
|
const deprecatedChainMap = {};
|
|
481
509
|
if (storedChainSettings.length === 0) {
|
|
482
|
-
this.dataMap.chainInfoMap =
|
|
483
|
-
Object.values(
|
|
510
|
+
this.dataMap.chainInfoMap = latestChainInfoMap;
|
|
511
|
+
Object.values(latestChainInfoMap).forEach(chainInfo => {
|
|
484
512
|
this.dataMap.chainStateMap[chainInfo.slug] = {
|
|
485
513
|
currentProvider: Object.keys(chainInfo.providers)[0],
|
|
486
514
|
slug: chainInfo.slug,
|
|
@@ -496,10 +524,10 @@ export class ChainService {
|
|
|
496
524
|
});
|
|
497
525
|
});
|
|
498
526
|
} else {
|
|
499
|
-
const mergedChainInfoMap =
|
|
527
|
+
const mergedChainInfoMap = latestChainInfoMap;
|
|
500
528
|
for (const [storedSlug, storedChainInfo] of Object.entries(storedChainSettingMap)) {
|
|
501
|
-
if (storedSlug in
|
|
502
|
-
// check predefined chains first,
|
|
529
|
+
if (storedSlug in latestChainInfoMap) {
|
|
530
|
+
// check predefined chains first, keep setting for providers and currentProvider
|
|
503
531
|
mergedChainInfoMap[storedSlug].providers = {
|
|
504
532
|
...storedChainInfo.providers,
|
|
505
533
|
...mergedChainInfoMap[storedSlug].providers
|
|
@@ -519,7 +547,7 @@ export class ChainService {
|
|
|
519
547
|
var _storedChainInfo$subs, _storedChainInfo$evmI;
|
|
520
548
|
// only custom chains are left
|
|
521
549
|
// check custom chain duplicated with predefined chain => merge into predefined chain
|
|
522
|
-
const duplicatedDefaultSlug = this.checkExistedPredefinedChain((_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
|
|
550
|
+
const duplicatedDefaultSlug = this.checkExistedPredefinedChain(latestChainInfoMap, (_storedChainInfo$subs = storedChainInfo.substrateInfo) === null || _storedChainInfo$subs === void 0 ? void 0 : _storedChainInfo$subs.genesisHash, (_storedChainInfo$evmI = storedChainInfo.evmInfo) === null || _storedChainInfo$evmI === void 0 ? void 0 : _storedChainInfo$evmI.evmChainId);
|
|
523
551
|
if (duplicatedDefaultSlug.length > 0) {
|
|
524
552
|
// merge custom chain with existed chain
|
|
525
553
|
mergedChainInfoMap[duplicatedDefaultSlug].providers = {
|
|
@@ -589,10 +617,11 @@ export class ChainService {
|
|
|
589
617
|
}
|
|
590
618
|
async initAssetRegistry(deprecatedCustomChainMap) {
|
|
591
619
|
const storedAssetRegistry = await this.dbService.getAllAssetStore();
|
|
620
|
+
const latestAssetRegistry = await this.fetchLatestData(_CHAIN_ASSET_SRC, ChainAssetMap);
|
|
592
621
|
if (storedAssetRegistry.length === 0) {
|
|
593
|
-
this.dataMap.assetRegistry =
|
|
622
|
+
this.dataMap.assetRegistry = latestAssetRegistry;
|
|
594
623
|
} else {
|
|
595
|
-
const mergedAssetRegistry =
|
|
624
|
+
const mergedAssetRegistry = latestAssetRegistry;
|
|
596
625
|
const parsedStoredAssetRegistry = {};
|
|
597
626
|
const deprecatedAssets = [];
|
|
598
627
|
|
|
@@ -614,7 +643,7 @@ export class ChainService {
|
|
|
614
643
|
});
|
|
615
644
|
for (const assetInfo of Object.values(parsedStoredAssetRegistry)) {
|
|
616
645
|
let duplicated = false;
|
|
617
|
-
for (const defaultChainAsset of Object.values(
|
|
646
|
+
for (const defaultChainAsset of Object.values(latestAssetRegistry)) {
|
|
618
647
|
// case merge custom asset with default asset
|
|
619
648
|
if (_isEqualSmartContractAsset(assetInfo, defaultChainAsset)) {
|
|
620
649
|
duplicated = true;
|
|
@@ -1186,9 +1215,9 @@ export class ChainService {
|
|
|
1186
1215
|
return this.assetSettingSubject;
|
|
1187
1216
|
}
|
|
1188
1217
|
async getChainLogoMap() {
|
|
1189
|
-
return
|
|
1218
|
+
return await this.fetchLatestData(_CHAIN_LOGO_MAP_SRC, ChainLogoMap);
|
|
1190
1219
|
}
|
|
1191
1220
|
async getAssetLogoMap() {
|
|
1192
|
-
return
|
|
1221
|
+
return await this.fetchLatestData(_ASSET_LOGO_MAP_SRC, AssetLogoMap);
|
|
1193
1222
|
}
|
|
1194
1223
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|