@subwallet/extension-base 1.1.39-0 → 1.1.39-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/background/KoniTypes.d.ts +1 -0
- package/cjs/koni/api/dotsama/balance.js +464 -0
- package/cjs/koni/background/handlers/Extension.js +16 -1
- package/cjs/services/chain-service/index.js +61 -51
- package/cjs/services/migration-service/scripts/MigrateEthProvider.js +17 -0
- package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
- package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
- package/cjs/services/storage-service/index.js +241 -0
- package/cjs/types.js +1 -0
- package/cjs/utils/address.js +34 -0
- package/cjs/utils/keyring.js +57 -0
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +16 -1
- package/package.json +2 -2
- package/services/chain-service/index.d.ts +7 -3
- package/services/chain-service/index.js +52 -43
- package/services/chain-service/types.d.ts +4 -0
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.1.39-0",
|
|
20
|
+
"version": "1.1.39-beta.0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -1802,4 +1802,4 @@
|
|
|
1802
1802
|
"web3-eth-contract": "^1.10.0",
|
|
1803
1803
|
"web3-utils": "^1.10.0"
|
|
1804
1804
|
}
|
|
1805
|
-
}
|
|
1805
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _MultiChainAsset } from '@subwallet/chain-list/types';
|
|
3
3
|
import { AssetSetting, ValidateNetworkResponse } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
4
|
import { MantaPrivateHandler } from '@subwallet/extension-base/services/chain-service/handler/manta/MantaPrivateHandler';
|
|
5
|
-
import { _ChainConnectionStatus, _ChainState, _NetworkUpsertParams, _ValidateCustomAssetRequest, _ValidateCustomAssetResponse } from '@subwallet/extension-base/services/chain-service/types';
|
|
5
|
+
import { _ChainApiStatus, _ChainConnectionStatus, _ChainState, _NetworkUpsertParams, _ValidateCustomAssetRequest, _ValidateCustomAssetResponse } from '@subwallet/extension-base/services/chain-service/types';
|
|
6
6
|
import { EventService } from '@subwallet/extension-base/services/event-service';
|
|
7
7
|
import { IMetadataItem } from '@subwallet/extension-base/services/storage-service/databases';
|
|
8
8
|
import DatabaseService from '@subwallet/extension-base/services/storage-service/DatabaseService';
|
|
@@ -19,6 +19,7 @@ export declare class ChainService {
|
|
|
19
19
|
get mantaPay(): MantaPrivateHandler | undefined;
|
|
20
20
|
private chainInfoMapSubject;
|
|
21
21
|
private chainStateMapSubject;
|
|
22
|
+
private chainStatusMapSubject;
|
|
22
23
|
private assetRegistrySubject;
|
|
23
24
|
private multiChainAssetMapSubject;
|
|
24
25
|
private xcmRefMapSubject;
|
|
@@ -40,6 +41,7 @@ export declare class ChainService {
|
|
|
40
41
|
subscribeMultiChainAssetMap(): Subject<Record<string, _MultiChainAsset>>;
|
|
41
42
|
subscribeXcmRefMap(): Subject<Record<string, _AssetRef>>;
|
|
42
43
|
subscribeChainStateMap(): Subject<Record<string, _ChainState>>;
|
|
44
|
+
subscribeChainStatusMap(): BehaviorSubject<Record<string, _ChainApiStatus>>;
|
|
43
45
|
getAssetRegistry(): Record<string, _ChainAsset>;
|
|
44
46
|
getMultiChainAssetMap(): Record<string, _MultiChainAsset>;
|
|
45
47
|
getSmartContractTokens(): Record<string, _ChainAsset>;
|
|
@@ -51,6 +53,8 @@ export declare class ChainService {
|
|
|
51
53
|
getAssetRefMap(): Record<string, _AssetRef>;
|
|
52
54
|
getChainStateMap(): Record<string, _ChainState>;
|
|
53
55
|
getChainStateByKey(key: string): _ChainState;
|
|
56
|
+
getChainStatusMap(): Record<string, _ChainApiStatus>;
|
|
57
|
+
getChainStatusByKey(key: string): _ChainApiStatus;
|
|
54
58
|
getActiveChains(): string[];
|
|
55
59
|
getSupportedSmartContractTypes(): _AssetType[];
|
|
56
60
|
getActiveChainInfoMap(): Record<string, _ChainInfo>;
|
|
@@ -66,7 +70,8 @@ export declare class ChainService {
|
|
|
66
70
|
forceRemoveChain(slug: string): boolean;
|
|
67
71
|
removeCustomChain(slug: string): boolean;
|
|
68
72
|
resetChainInfoMap(excludedChains?: string[]): boolean;
|
|
69
|
-
|
|
73
|
+
private connectionStatusQueueMap;
|
|
74
|
+
updateChainConnectionStatus(slug: string, connectionStatus: _ChainConnectionStatus): void;
|
|
70
75
|
upsertCustomToken(token: _ChainAsset): string;
|
|
71
76
|
deleteAssetsByChain(chainSlug: string): void;
|
|
72
77
|
deleteCustomAssets(targetAssets: string[]): void;
|
|
@@ -109,7 +114,6 @@ export declare class ChainService {
|
|
|
109
114
|
refreshEvmApi(slug: string): void;
|
|
110
115
|
stopAllChainApis(): Promise<void>;
|
|
111
116
|
resumeAllChainApis(): Promise<void>;
|
|
112
|
-
checkAndUpdateStatusMapForChain(chainSlug: string): void;
|
|
113
117
|
initAssetSettings(): Promise<void>;
|
|
114
118
|
setAssetSettings(assetSettings: Record<string, AssetSetting>, emitEvent?: boolean): void;
|
|
115
119
|
setMantaZkAssetSettings(visible: boolean): void;
|
|
@@ -31,6 +31,7 @@ export class ChainService {
|
|
|
31
31
|
// TODO: consider BehaviorSubject
|
|
32
32
|
chainInfoMapSubject = new Subject();
|
|
33
33
|
chainStateMapSubject = new Subject();
|
|
34
|
+
chainStatusMapSubject = new BehaviorSubject({});
|
|
34
35
|
assetRegistrySubject = new Subject();
|
|
35
36
|
multiChainAssetMapSubject = new Subject();
|
|
36
37
|
xcmRefMapSubject = new Subject();
|
|
@@ -104,6 +105,9 @@ export class ChainService {
|
|
|
104
105
|
subscribeChainStateMap() {
|
|
105
106
|
return this.chainStateMapSubject;
|
|
106
107
|
}
|
|
108
|
+
subscribeChainStatusMap() {
|
|
109
|
+
return this.chainStatusMapSubject;
|
|
110
|
+
}
|
|
107
111
|
getAssetRegistry() {
|
|
108
112
|
return this.dataMap.assetRegistry;
|
|
109
113
|
}
|
|
@@ -181,6 +185,12 @@ export class ChainService {
|
|
|
181
185
|
getChainStateByKey(key) {
|
|
182
186
|
return this.dataMap.chainStateMap[key];
|
|
183
187
|
}
|
|
188
|
+
getChainStatusMap() {
|
|
189
|
+
return this.chainStatusMapSubject.getValue();
|
|
190
|
+
}
|
|
191
|
+
getChainStatusByKey(key) {
|
|
192
|
+
return this.getChainStatusMap()[key];
|
|
193
|
+
}
|
|
184
194
|
getActiveChains() {
|
|
185
195
|
return Object.entries(this.dataMap.chainStateMap).filter(([, chainState]) => _isChainEnabled(chainState)).map(([key]) => key);
|
|
186
196
|
}
|
|
@@ -339,9 +349,31 @@ export class ChainService {
|
|
|
339
349
|
this.lockChainInfoMap = false;
|
|
340
350
|
return true;
|
|
341
351
|
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
352
|
+
connectionStatusQueueMap = {};
|
|
353
|
+
updateChainConnectionStatus(slug, connectionStatus) {
|
|
354
|
+
this.connectionStatusQueueMap[slug] = connectionStatus;
|
|
355
|
+
addLazy('updateChainConnectionStatus', () => {
|
|
356
|
+
const chainStatusMap = this.getChainStatusMap();
|
|
357
|
+
let update = false;
|
|
358
|
+
Object.entries(this.connectionStatusQueueMap).forEach(([slug, status]) => {
|
|
359
|
+
if (chainStatusMap[slug]) {
|
|
360
|
+
if (chainStatusMap[slug].connectionStatus !== status) {
|
|
361
|
+
chainStatusMap[slug].connectionStatus = status;
|
|
362
|
+
chainStatusMap[slug].lastUpdated = Date.now();
|
|
363
|
+
update = true;
|
|
364
|
+
}
|
|
365
|
+
} else {
|
|
366
|
+
chainStatusMap[slug] = {
|
|
367
|
+
slug,
|
|
368
|
+
connectionStatus: status,
|
|
369
|
+
lastUpdated: Date.now()
|
|
370
|
+
};
|
|
371
|
+
update = true;
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
this.connectionStatusQueueMap = {};
|
|
375
|
+
update && this.chainStatusMapSubject.next(chainStatusMap);
|
|
376
|
+
});
|
|
345
377
|
}
|
|
346
378
|
upsertCustomToken(token) {
|
|
347
379
|
if (token.slug.length === 0) {
|
|
@@ -513,13 +545,8 @@ export class ChainService {
|
|
|
513
545
|
providerName
|
|
514
546
|
} = this.getChainCurrentProviderByKey(chainInfo.slug);
|
|
515
547
|
const onUpdateStatus = status => {
|
|
516
|
-
const
|
|
517
|
-
|
|
518
|
-
// Avoid unnecessary update in case disable chain
|
|
519
|
-
if (currentStatus !== status) {
|
|
520
|
-
this.setChainConnectionStatus(chainInfo.slug, status);
|
|
521
|
-
this.updateChainStateMapSubscription();
|
|
522
|
-
}
|
|
548
|
+
const slug = chainInfo.slug;
|
|
549
|
+
this.updateChainConnectionStatus(slug, status);
|
|
523
550
|
};
|
|
524
551
|
if (chainInfo.substrateInfo !== null && chainInfo.substrateInfo !== undefined) {
|
|
525
552
|
if (_MANTA_ZK_CHAIN_GROUP.includes(chainInfo.slug) && MODULE_SUPPORT.MANTA_ZK && this.mantaChainHandler) {
|
|
@@ -618,7 +645,7 @@ export class ChainService {
|
|
|
618
645
|
this.lockChainInfoMap = true;
|
|
619
646
|
chainStateMap[chainSlug].active = false;
|
|
620
647
|
// Set disconnect state for inactive chain
|
|
621
|
-
|
|
648
|
+
this.updateChainConnectionStatus(chainSlug, _ChainConnectionStatus.DISCONNECTED);
|
|
622
649
|
this.destroyApiForChain(chainInfo);
|
|
623
650
|
this.dbService.updateChainStore({
|
|
624
651
|
...chainInfo,
|
|
@@ -711,9 +738,9 @@ export class ChainService {
|
|
|
711
738
|
this.dataMap.chainStateMap[chainInfo.slug] = {
|
|
712
739
|
currentProvider: providerKey,
|
|
713
740
|
slug: chainInfo.slug,
|
|
714
|
-
connectionStatus: _ChainConnectionStatus.DISCONNECTED,
|
|
715
741
|
active: _DEFAULT_ACTIVE_CHAINS.includes(chainInfo.slug)
|
|
716
742
|
};
|
|
743
|
+
this.updateChainConnectionStatus(chainInfo.slug, _ChainConnectionStatus.DISCONNECTED);
|
|
717
744
|
|
|
718
745
|
// create data for storage
|
|
719
746
|
newStorageData.push({
|
|
@@ -764,9 +791,9 @@ export class ChainService {
|
|
|
764
791
|
this.dataMap.chainStateMap[storedSlug] = {
|
|
765
792
|
currentProvider: selectedProvider,
|
|
766
793
|
slug: storedSlug,
|
|
767
|
-
connectionStatus: _ChainConnectionStatus.DISCONNECTED,
|
|
768
794
|
active: canActive && storedChainInfo.active
|
|
769
795
|
};
|
|
796
|
+
this.updateChainConnectionStatus(storedSlug, _ChainConnectionStatus.DISCONNECTED);
|
|
770
797
|
newStorageData.push({
|
|
771
798
|
...mergedChainInfoMap[storedSlug],
|
|
772
799
|
active: canActive && storedChainInfo.active,
|
|
@@ -786,9 +813,9 @@ export class ChainService {
|
|
|
786
813
|
this.dataMap.chainStateMap[duplicatedDefaultSlug] = {
|
|
787
814
|
currentProvider: storedChainInfo.currentProvider,
|
|
788
815
|
slug: duplicatedDefaultSlug,
|
|
789
|
-
connectionStatus: _ChainConnectionStatus.DISCONNECTED,
|
|
790
816
|
active: storedChainInfo.active
|
|
791
817
|
};
|
|
818
|
+
this.updateChainConnectionStatus(duplicatedDefaultSlug, _ChainConnectionStatus.DISCONNECTED);
|
|
792
819
|
newStorageData.push({
|
|
793
820
|
...mergedChainInfoMap[duplicatedDefaultSlug],
|
|
794
821
|
active: storedChainInfo.active,
|
|
@@ -813,9 +840,9 @@ export class ChainService {
|
|
|
813
840
|
currentProvider: storedChainInfo.currentProvider,
|
|
814
841
|
// TODO: review
|
|
815
842
|
slug: storedSlug,
|
|
816
|
-
connectionStatus: _ChainConnectionStatus.DISCONNECTED,
|
|
817
843
|
active: storedChainInfo.active
|
|
818
844
|
};
|
|
845
|
+
this.updateChainConnectionStatus(storedSlug, _ChainConnectionStatus.DISCONNECTED);
|
|
819
846
|
newStorageData.push({
|
|
820
847
|
...mergedChainInfoMap[storedSlug],
|
|
821
848
|
active: storedChainInfo.active,
|
|
@@ -833,9 +860,9 @@ export class ChainService {
|
|
|
833
860
|
this.dataMap.chainStateMap[slug] = {
|
|
834
861
|
currentProvider: Object.keys(chainInfo.providers)[0],
|
|
835
862
|
slug,
|
|
836
|
-
connectionStatus: _ChainConnectionStatus.DISCONNECTED,
|
|
837
863
|
active: _DEFAULT_ACTIVE_CHAINS.includes(slug)
|
|
838
864
|
};
|
|
865
|
+
this.updateChainConnectionStatus(slug, _ChainConnectionStatus.DISCONNECTED);
|
|
839
866
|
newStorageData.push({
|
|
840
867
|
...mergedChainInfoMap[slug],
|
|
841
868
|
active: _DEFAULT_ACTIVE_CHAINS.includes(slug),
|
|
@@ -910,9 +937,7 @@ export class ChainService {
|
|
|
910
937
|
}
|
|
911
938
|
}
|
|
912
939
|
updateChainStateMapSubscription() {
|
|
913
|
-
|
|
914
|
-
this.chainStateMapSubject.next(this.getChainStateMap());
|
|
915
|
-
}, 300, 900);
|
|
940
|
+
this.chainStateMapSubject.next(this.getChainStateMap());
|
|
916
941
|
}
|
|
917
942
|
updateChainInfoMapSubscription() {
|
|
918
943
|
this.chainInfoMapSubject.next(this.getChainInfoMap());
|
|
@@ -1021,10 +1046,17 @@ export class ChainService {
|
|
|
1021
1046
|
const chainStateMap = this.getChainStateMap();
|
|
1022
1047
|
chainStateMap[newChainSlug] = {
|
|
1023
1048
|
active: true,
|
|
1024
|
-
connectionStatus: _ChainConnectionStatus.DISCONNECTED,
|
|
1025
1049
|
currentProvider: params.chainEditInfo.currentProvider,
|
|
1026
1050
|
slug: newChainSlug
|
|
1027
1051
|
};
|
|
1052
|
+
|
|
1053
|
+
// const chainStatusMap = this.getChainStatusMap();
|
|
1054
|
+
// const chainStatusMap[newChainSlug] = {
|
|
1055
|
+
// slug: newChainSlug,
|
|
1056
|
+
// connectionStatus: _ChainConnectionStatus.DISCONNECTED,
|
|
1057
|
+
// lastUpdated: Date.now()
|
|
1058
|
+
// };
|
|
1059
|
+
|
|
1028
1060
|
await this.initApiForChain(chainInfo);
|
|
1029
1061
|
|
|
1030
1062
|
// create a record in assetRegistry for native token and update store/subscription
|
|
@@ -1309,29 +1341,6 @@ export class ChainService {
|
|
|
1309
1341
|
await Promise.all([this.substrateChainHandler.wakeUp(), this.evmChainHandler.wakeUp()]);
|
|
1310
1342
|
this.checkLatestData();
|
|
1311
1343
|
}
|
|
1312
|
-
checkAndUpdateStatusMapForChain(chainSlug) {
|
|
1313
|
-
const substrateApiMap = this.getSubstrateApiMap();
|
|
1314
|
-
const evmApiMap = this.getEvmApiMap();
|
|
1315
|
-
const chainState = this.getChainStateByKey(chainSlug);
|
|
1316
|
-
let update = false;
|
|
1317
|
-
function updateState(current, status) {
|
|
1318
|
-
if (current.connectionStatus !== status) {
|
|
1319
|
-
current.connectionStatus = status;
|
|
1320
|
-
update = true;
|
|
1321
|
-
}
|
|
1322
|
-
}
|
|
1323
|
-
if (chainState.active) {
|
|
1324
|
-
const api = substrateApiMap[chainSlug] || evmApiMap[chainSlug];
|
|
1325
|
-
if (api) {
|
|
1326
|
-
updateState(chainState, api.isApiConnected ? _ChainConnectionStatus.CONNECTED : _ChainConnectionStatus.DISCONNECTED);
|
|
1327
|
-
}
|
|
1328
|
-
} else {
|
|
1329
|
-
updateState(chainState, _ChainConnectionStatus.DISCONNECTED);
|
|
1330
|
-
}
|
|
1331
|
-
if (update) {
|
|
1332
|
-
this.dataMap.chainStateMap[chainSlug] = chainState;
|
|
1333
|
-
}
|
|
1334
|
-
}
|
|
1335
1344
|
async initAssetSettings() {
|
|
1336
1345
|
const assetSettings = await this.getAssetSettings();
|
|
1337
1346
|
const activeChainSlugs = this.getActiveChainSlugs();
|
|
@@ -22,7 +22,11 @@ export interface _ChainState {
|
|
|
22
22
|
slug: string;
|
|
23
23
|
active: boolean;
|
|
24
24
|
currentProvider: string;
|
|
25
|
+
}
|
|
26
|
+
export interface _ChainApiStatus {
|
|
27
|
+
slug: string;
|
|
25
28
|
connectionStatus: _ChainConnectionStatus;
|
|
29
|
+
lastUpdated: number;
|
|
26
30
|
}
|
|
27
31
|
export interface _SubstrateDefaultFormatBalance {
|
|
28
32
|
decimals?: number[] | number;
|