@subwallet/extension-base 1.2.10-0 → 1.2.11-1
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 +19 -0
- package/background/types.d.ts +42 -0
- package/cjs/koni/background/handlers/Extension.js +48 -20
- package/cjs/koni/background/handlers/State.js +3 -1
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/index.js +8 -4
- package/cjs/services/chain-service/handler/SubstrateApi.js +20 -14
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +31 -16
- package/cjs/services/migration-service/scripts/ClearMetadataDatabase.js +19 -0
- package/cjs/services/migration-service/scripts/MigrateLedgerAccountV2.js +51 -0
- package/cjs/services/migration-service/scripts/index.js +5 -1
- package/cjs/services/transaction-service/index.js +15 -4
- package/cjs/types/index.js +22 -11
- package/cjs/types/metadata.js +1 -0
- package/cjs/utils/index.js +12 -0
- package/cjs/utils/metadata.js +48 -0
- package/cjs/utils/registry.js +4 -3
- package/koni/background/handlers/Extension.js +49 -21
- package/koni/background/handlers/State.d.ts +2 -0
- package/koni/background/handlers/State.js +3 -1
- package/package.json +26 -5
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/index.js +8 -4
- package/services/chain-service/handler/SubstrateApi.js +20 -14
- package/services/chain-service/handler/SubstrateChainHandler.js +31 -16
- package/services/migration-service/scripts/ClearMetadataDatabase.d.ts +4 -0
- package/services/migration-service/scripts/ClearMetadataDatabase.js +11 -0
- package/services/migration-service/scripts/MigrateLedgerAccountV2.d.ts +4 -0
- package/services/migration-service/scripts/MigrateLedgerAccountV2.js +42 -0
- package/services/migration-service/scripts/index.js +5 -1
- package/services/transaction-service/index.js +16 -5
- package/types/index.d.ts +2 -1
- package/types/index.js +2 -1
- package/types/metadata.d.ts +6 -0
- package/types/metadata.js +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/metadata.d.ts +3 -0
- package/utils/metadata.js +39 -0
- package/utils/registry.d.ts +2 -2
- package/utils/registry.js +4 -3
|
@@ -20,6 +20,7 @@ import { DexieExportJsonStructure } from 'dexie-export-import';
|
|
|
20
20
|
import Web3 from 'web3';
|
|
21
21
|
import { RequestArguments, TransactionConfig } from 'web3-core';
|
|
22
22
|
import { JsonRpcPayload, JsonRpcResponse } from 'web3-core-helpers';
|
|
23
|
+
import { ExtDef } from '@polkadot/types/extrinsic/signedExtensions/types';
|
|
23
24
|
import { SignerResult } from '@polkadot/types/types/extrinsic';
|
|
24
25
|
import { HexString } from '@polkadot/util/types';
|
|
25
26
|
import { KeypairType } from '@polkadot/util-crypto/types';
|
|
@@ -202,6 +203,8 @@ export interface MetadataItem {
|
|
|
202
203
|
genesisHash: string;
|
|
203
204
|
specVersion: string;
|
|
204
205
|
hexValue: HexString;
|
|
206
|
+
types: Record<string, Record<string, string> | string>;
|
|
207
|
+
userExtensions?: ExtDef;
|
|
205
208
|
}
|
|
206
209
|
export interface CrowdloanItem {
|
|
207
210
|
state: APIItemState;
|
|
@@ -744,6 +747,7 @@ export interface CreateHardwareAccountItem {
|
|
|
744
747
|
hardwareType: string;
|
|
745
748
|
name: string;
|
|
746
749
|
isEthereum: boolean;
|
|
750
|
+
isGeneric: boolean;
|
|
747
751
|
}
|
|
748
752
|
export interface RequestAccountCreateHardwareMultiple {
|
|
749
753
|
accounts: CreateHardwareAccountItem[];
|
|
@@ -1051,15 +1055,28 @@ export interface ResponseParseEvmContractInput {
|
|
|
1051
1055
|
result: EvmTransactionData;
|
|
1052
1056
|
}
|
|
1053
1057
|
export interface LedgerNetwork {
|
|
1058
|
+
/** GenesisHash for substrate app */
|
|
1054
1059
|
genesisHash: string;
|
|
1060
|
+
/** Display in selector */
|
|
1055
1061
|
networkName: string;
|
|
1062
|
+
/** Name for account(Ledger X Account) */
|
|
1056
1063
|
accountName: string;
|
|
1064
|
+
/** Name in Ledger */
|
|
1057
1065
|
appName: string;
|
|
1066
|
+
/** Network is predefined in ledger lib */
|
|
1058
1067
|
network: string;
|
|
1068
|
+
/** slug in chain list */
|
|
1059
1069
|
slug: string;
|
|
1070
|
+
/** Deprecated */
|
|
1060
1071
|
icon: 'substrate' | 'ethereum';
|
|
1072
|
+
/** Dev mode on Ledger */
|
|
1061
1073
|
isDevMode: boolean;
|
|
1074
|
+
/** Is use generic Ledger app */
|
|
1075
|
+
isGeneric: boolean;
|
|
1076
|
+
/** Use for evm account */
|
|
1062
1077
|
isEthereum: boolean;
|
|
1078
|
+
/** Slip44 in the derivation path */
|
|
1079
|
+
slip44: number;
|
|
1063
1080
|
}
|
|
1064
1081
|
export interface FormattedMethod {
|
|
1065
1082
|
args?: ArgInfo[];
|
|
@@ -1449,6 +1466,8 @@ export interface RequestFindRawMetadata {
|
|
|
1449
1466
|
export interface ResponseFindRawMetadata {
|
|
1450
1467
|
rawMetadata: string;
|
|
1451
1468
|
specVersion: number;
|
|
1469
|
+
types: Record<string, Record<string, string> | string>;
|
|
1470
|
+
userExtensions?: ExtDef;
|
|
1452
1471
|
}
|
|
1453
1472
|
export interface ResolveDomainRequest {
|
|
1454
1473
|
chain: string;
|
package/background/types.d.ts
CHANGED
|
@@ -28,23 +28,63 @@ export interface AbstractAddressJson extends KeyringPair$Meta {
|
|
|
28
28
|
whenCreated?: number;
|
|
29
29
|
name?: string;
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* @interface AccountJson
|
|
33
|
+
* @prop {number} [accountIndex] - Ledger's account index
|
|
34
|
+
* @prop {number} [addressOffset] - Ledger's address offset
|
|
35
|
+
* @prop {string[]} [availableGenesisHashes] - Ledger's availableGenesisHashes
|
|
36
|
+
* @prop {string|null} [genesisHash] - Ledger's genesisHash
|
|
37
|
+
* @prop {boolean} [isExternal] - Is external account
|
|
38
|
+
* @prop {boolean} [isHardware] - Is hardware account
|
|
39
|
+
* @prop {boolean} [isHidden] - Is hidden account
|
|
40
|
+
* @prop {boolean} [isInjected] - Is injected account
|
|
41
|
+
* @prop {boolean} [isGeneric] - Is generic account
|
|
42
|
+
* @prop {boolean} [isMasterAccount] - Is master account - account has seed
|
|
43
|
+
* @prop {boolean} [isMasterPassword] - Account has migrated with wallet password
|
|
44
|
+
* @prop {boolean} [isReadOnly] - Is readonly account
|
|
45
|
+
* @prop {boolean} [isReadOnly] - Is readonly account
|
|
46
|
+
* @prop {boolean} [isSubWallet] - Import from SubWallet
|
|
47
|
+
* @prop {boolean} [pendingMigrate] - Pending migrate password
|
|
48
|
+
* @prop {string|null} [originGenesisHash] - Ledger's originGenesisHash
|
|
49
|
+
* @prop {string} [source] - Account's source
|
|
50
|
+
* @prop {string} [suri] - Derivate path
|
|
51
|
+
* */
|
|
31
52
|
export interface AccountJson extends AbstractAddressJson {
|
|
53
|
+
/** Ledger's account index */
|
|
32
54
|
accountIndex?: number;
|
|
55
|
+
/** Ledger's address offset */
|
|
33
56
|
addressOffset?: number;
|
|
57
|
+
/** Ledger's availableGenesisHashes */
|
|
34
58
|
availableGenesisHashes?: string[];
|
|
59
|
+
/** Ledger's genesisHash */
|
|
35
60
|
genesisHash?: string | null;
|
|
61
|
+
/** Is external account */
|
|
36
62
|
isExternal?: boolean;
|
|
63
|
+
/** Is hardware account */
|
|
37
64
|
isHardware?: boolean;
|
|
65
|
+
/** Is hidden account */
|
|
38
66
|
isHidden?: boolean;
|
|
67
|
+
/** Is injected account */
|
|
39
68
|
isInjected?: boolean;
|
|
69
|
+
/** Is generic ledger account */
|
|
70
|
+
isGeneric?: boolean;
|
|
71
|
+
/** Is master account - account has seed */
|
|
40
72
|
isMasterAccount?: boolean;
|
|
73
|
+
/** Account has migrated with wallet password */
|
|
41
74
|
isMasterPassword?: boolean;
|
|
75
|
+
/** Is readonly account */
|
|
42
76
|
isReadOnly?: boolean;
|
|
77
|
+
/** Import from SubWallet */
|
|
43
78
|
isSubWallet?: boolean;
|
|
79
|
+
/** Pending migrate password */
|
|
44
80
|
pendingMigrate?: boolean;
|
|
81
|
+
/** Ledger's originGenesisHash */
|
|
45
82
|
originGenesisHash?: string | null;
|
|
83
|
+
/** Parent's address */
|
|
46
84
|
parentAddress?: string;
|
|
85
|
+
/** Account's source */
|
|
47
86
|
source?: string;
|
|
87
|
+
/** Derivate path */
|
|
48
88
|
suri?: string;
|
|
49
89
|
}
|
|
50
90
|
export interface AddressJson extends AbstractAddressJson {
|
|
@@ -283,6 +323,7 @@ export interface RequestSigningApprovePassword {
|
|
|
283
323
|
export interface RequestSigningApproveSignature {
|
|
284
324
|
id: string;
|
|
285
325
|
signature: HexString;
|
|
326
|
+
signedTransaction?: HexString;
|
|
286
327
|
}
|
|
287
328
|
export interface RequestSigningCancel {
|
|
288
329
|
id: string;
|
|
@@ -327,6 +368,7 @@ export declare type TransportResponseMessage<TMessageType extends MessageTypes>
|
|
|
327
368
|
export interface ResponseSigning {
|
|
328
369
|
id: string;
|
|
329
370
|
signature: HexString;
|
|
371
|
+
signedTransaction?: HexString | Uint8Array;
|
|
330
372
|
}
|
|
331
373
|
export interface ResponseDeriveValidate {
|
|
332
374
|
address: string;
|
|
@@ -40,6 +40,7 @@ var _stores = require("@subwallet/extension-base/stores");
|
|
|
40
40
|
var _types2 = require("@subwallet/extension-base/types");
|
|
41
41
|
var _utils4 = require("@subwallet/extension-base/utils");
|
|
42
42
|
var _parseTransaction2 = require("@subwallet/extension-base/utils/eth/parseTransaction");
|
|
43
|
+
var _extensionChains = require("@subwallet/extension-chains");
|
|
43
44
|
var _keyring = require("@subwallet/keyring");
|
|
44
45
|
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
45
46
|
var _utils5 = require("@walletconnect/utils");
|
|
@@ -375,7 +376,8 @@ class KoniExtension {
|
|
|
375
376
|
signingApproveSignature(_ref16) {
|
|
376
377
|
let {
|
|
377
378
|
id,
|
|
378
|
-
signature
|
|
379
|
+
signature,
|
|
380
|
+
signedTransaction
|
|
379
381
|
} = _ref16;
|
|
380
382
|
const queued = this.#koniState.getSignRequest(id);
|
|
381
383
|
(0, _util.assert)(queued, (0, _i18next.t)('Unable to proceed. Please try again'));
|
|
@@ -384,7 +386,8 @@ class KoniExtension {
|
|
|
384
386
|
} = queued;
|
|
385
387
|
resolve({
|
|
386
388
|
id,
|
|
387
|
-
signature
|
|
389
|
+
signature,
|
|
390
|
+
signedTransaction
|
|
388
391
|
});
|
|
389
392
|
return true;
|
|
390
393
|
}
|
|
@@ -2218,6 +2221,7 @@ class KoniExtension {
|
|
|
2218
2221
|
genesisHash,
|
|
2219
2222
|
hardwareType,
|
|
2220
2223
|
isEthereum,
|
|
2224
|
+
isGeneric,
|
|
2221
2225
|
name
|
|
2222
2226
|
} = account;
|
|
2223
2227
|
let result;
|
|
@@ -2227,7 +2231,8 @@ class KoniExtension {
|
|
|
2227
2231
|
accountIndex,
|
|
2228
2232
|
addressOffset,
|
|
2229
2233
|
genesisHash,
|
|
2230
|
-
originGenesisHash: genesisHash
|
|
2234
|
+
originGenesisHash: genesisHash,
|
|
2235
|
+
isGeneric
|
|
2231
2236
|
};
|
|
2232
2237
|
if (isEthereum) {
|
|
2233
2238
|
result = _uiKeyring.keyring.keyring.addFromAddress(address, {
|
|
@@ -2980,7 +2985,7 @@ class KoniExtension {
|
|
|
2980
2985
|
}
|
|
2981
2986
|
|
|
2982
2987
|
/// Signing substrate request
|
|
2983
|
-
signingApprovePasswordV2(_ref70) {
|
|
2988
|
+
async signingApprovePasswordV2(_ref70) {
|
|
2984
2989
|
let {
|
|
2985
2990
|
id
|
|
2986
2991
|
} = _ref70;
|
|
@@ -3009,22 +3014,41 @@ class KoniExtension {
|
|
|
3009
3014
|
const {
|
|
3010
3015
|
payload
|
|
3011
3016
|
} = request;
|
|
3012
|
-
let registry
|
|
3013
|
-
let isEvm = false;
|
|
3017
|
+
let registry;
|
|
3014
3018
|
if (isJsonPayload(payload)) {
|
|
3019
|
+
const [, chainInfo] = this.#koniState.findNetworkKeyByGenesisHash(payload.genesisHash);
|
|
3020
|
+
let metadata;
|
|
3021
|
+
|
|
3015
3022
|
/**
|
|
3016
3023
|
* Get the metadata for the genesisHash
|
|
3017
3024
|
* @todo: need to handle case metadata store in db
|
|
3018
3025
|
*/
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
registry.
|
|
3026
|
+
metadata = this.#koniState.knownMetadata.find(meta => meta.genesisHash === payload.genesisHash);
|
|
3027
|
+
if (metadata) {
|
|
3028
|
+
// we have metadata, expand it and extract the info/registry
|
|
3029
|
+
const expanded = (0, _extensionChains.metadataExpand)(metadata, false);
|
|
3030
|
+
registry = expanded.registry;
|
|
3031
|
+
registry.setSignedExtensions(payload.signedExtensions, expanded.definition.userExtensions);
|
|
3032
|
+
} else {
|
|
3033
|
+
metadata = await this.#koniState.chainService.getMetadataByHash(payload.genesisHash);
|
|
3034
|
+
if (metadata) {
|
|
3035
|
+
var _chainInfo$substrateI, _chainInfo$substrateI2, _chainInfo$substrateI3;
|
|
3036
|
+
registry = new _types3.TypeRegistry();
|
|
3037
|
+
const _metadata = new _types3.Metadata(registry, metadata.hexValue);
|
|
3038
|
+
registry.register(metadata.types);
|
|
3039
|
+
registry.setChainProperties(registry.createType('ChainProperties', {
|
|
3040
|
+
ss58Format: (chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI = chainInfo.substrateInfo) === null || _chainInfo$substrateI === void 0 ? void 0 : _chainInfo$substrateI.addressPrefix) || 42,
|
|
3041
|
+
tokenDecimals: chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI2 = chainInfo.substrateInfo) === null || _chainInfo$substrateI2 === void 0 ? void 0 : _chainInfo$substrateI2.decimals,
|
|
3042
|
+
tokenSymbol: chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI3 = chainInfo.substrateInfo) === null || _chainInfo$substrateI3 === void 0 ? void 0 : _chainInfo$substrateI3.symbol
|
|
3043
|
+
}));
|
|
3044
|
+
registry.setMetadata(_metadata, payload.signedExtensions, metadata.userExtensions);
|
|
3045
|
+
} else {
|
|
3046
|
+
// we have no metadata, create a new registry
|
|
3047
|
+
registry = new _types3.TypeRegistry();
|
|
3048
|
+
registry.setSignedExtensions(payload.signedExtensions);
|
|
3049
|
+
}
|
|
3025
3050
|
}
|
|
3026
|
-
|
|
3027
|
-
if (!currentMetadata) {
|
|
3051
|
+
if (!metadata) {
|
|
3028
3052
|
/*
|
|
3029
3053
|
* Some networks must have metadata to signing,
|
|
3030
3054
|
* so if the chain not active (cannot use metadata from api), it must be rejected
|
|
@@ -3044,15 +3068,15 @@ class KoniExtension {
|
|
|
3044
3068
|
registry = this.#koniState.getSubstrateApi(chainInfo.slug).api.registry;
|
|
3045
3069
|
}
|
|
3046
3070
|
}
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3071
|
+
} else {
|
|
3072
|
+
// for non-payload, just create a registry to use
|
|
3073
|
+
registry = new _types3.TypeRegistry();
|
|
3050
3074
|
}
|
|
3051
3075
|
const result = request.sign(registry, pair);
|
|
3052
3076
|
resolve({
|
|
3053
3077
|
id,
|
|
3054
3078
|
// In case evm chain, must be cut 2 character after 0x
|
|
3055
|
-
signature:
|
|
3079
|
+
signature: result.signature
|
|
3056
3080
|
});
|
|
3057
3081
|
if (this.#alwaysLock) {
|
|
3058
3082
|
this.keyringLock();
|
|
@@ -3706,11 +3730,15 @@ class KoniExtension {
|
|
|
3706
3730
|
} = _ref90;
|
|
3707
3731
|
const {
|
|
3708
3732
|
metadata,
|
|
3709
|
-
specVersion
|
|
3733
|
+
specVersion,
|
|
3734
|
+
types,
|
|
3735
|
+
userExtensions
|
|
3710
3736
|
} = await this.#koniState.findMetadata(genesisHash);
|
|
3711
3737
|
return {
|
|
3712
3738
|
rawMetadata: metadata,
|
|
3713
|
-
specVersion
|
|
3739
|
+
specVersion,
|
|
3740
|
+
types,
|
|
3741
|
+
userExtensions
|
|
3714
3742
|
};
|
|
3715
3743
|
}
|
|
3716
3744
|
async resolveDomainByAddress(request) {
|
|
@@ -1815,7 +1815,9 @@ class KoniState {
|
|
|
1815
1815
|
const metadata = await this.chainService.getMetadataByHash(hash);
|
|
1816
1816
|
return {
|
|
1817
1817
|
metadata: (metadata === null || metadata === void 0 ? void 0 : metadata.hexValue) || '',
|
|
1818
|
-
specVersion: parseInt((metadata === null || metadata === void 0 ? void 0 : metadata.specVersion) || '0')
|
|
1818
|
+
specVersion: parseInt((metadata === null || metadata === void 0 ? void 0 : metadata.specVersion) || '0'),
|
|
1819
|
+
types: (metadata === null || metadata === void 0 ? void 0 : metadata.types) || {},
|
|
1820
|
+
userExtensions: metadata === null || metadata === void 0 ? void 0 : metadata.userExtensions
|
|
1819
1821
|
};
|
|
1820
1822
|
}
|
|
1821
1823
|
getCrowdloanContributions(_ref11) {
|
package/cjs/packageInfo.js
CHANGED
|
@@ -57,12 +57,16 @@ const filterAddress = (addresses, chainInfo) => {
|
|
|
57
57
|
const account = getAccountJsonByAddress(address);
|
|
58
58
|
if (account) {
|
|
59
59
|
if (account.isHardware) {
|
|
60
|
-
|
|
61
|
-
const gen = (0, _utils._getSubstrateGenesisHash)(chainInfo);
|
|
62
|
-
if (availGen.includes(gen)) {
|
|
60
|
+
if (account.isGeneric) {
|
|
63
61
|
fetchList.push(address);
|
|
64
62
|
} else {
|
|
65
|
-
|
|
63
|
+
const availGen = account.availableGenesisHashes || [];
|
|
64
|
+
const gen = (0, _utils._getSubstrateGenesisHash)(chainInfo);
|
|
65
|
+
if (availGen.includes(gen)) {
|
|
66
|
+
fetchList.push(address);
|
|
67
|
+
} else {
|
|
68
|
+
unfetchList.push(address);
|
|
69
|
+
}
|
|
66
70
|
}
|
|
67
71
|
} else {
|
|
68
72
|
fetchList.push(address);
|
|
@@ -23,6 +23,17 @@ var _defaults = require("@polkadot/util-crypto/address/defaults");
|
|
|
23
23
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
24
24
|
// SPDX-License-Identifier: Apache-2.0
|
|
25
25
|
|
|
26
|
+
const typesBundle = {
|
|
27
|
+
..._api4.typesBundle
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Override avail spec for signedExtensions
|
|
31
|
+
const _availSpec = {
|
|
32
|
+
signedExtensions: _availJsSdk.spec.signedExtensions
|
|
33
|
+
};
|
|
34
|
+
if (typesBundle.spec) {
|
|
35
|
+
typesBundle.spec.avail = _availSpec;
|
|
36
|
+
}
|
|
26
37
|
class SubstrateApi {
|
|
27
38
|
useLightClient = false;
|
|
28
39
|
isApiReady = false;
|
|
@@ -62,8 +73,9 @@ class SubstrateApi {
|
|
|
62
73
|
createApi(provider, externalApiPromise) {
|
|
63
74
|
const apiOption = {
|
|
64
75
|
provider,
|
|
65
|
-
typesBundle
|
|
76
|
+
typesBundle,
|
|
66
77
|
registry: this.registry,
|
|
78
|
+
// This line makes this object registry to be the same as the api registry
|
|
67
79
|
noInitWarn: true
|
|
68
80
|
};
|
|
69
81
|
if (this.metadata) {
|
|
@@ -77,32 +89,26 @@ class SubstrateApi {
|
|
|
77
89
|
if (externalApiPromise) {
|
|
78
90
|
api = externalApiPromise;
|
|
79
91
|
} else if (_constants._API_OPTIONS_CHAIN_GROUP.acala.includes(this.chainSlug)) {
|
|
80
|
-
api = new _api3.ApiPromise((0, _api.options)(
|
|
81
|
-
provider,
|
|
82
|
-
noInitWarn: true
|
|
83
|
-
}));
|
|
92
|
+
api = new _api3.ApiPromise((0, _api.options)(apiOption));
|
|
84
93
|
} else if (_constants._API_OPTIONS_CHAIN_GROUP.turing.includes(this.chainSlug)) {
|
|
85
94
|
api = new _api3.ApiPromise({
|
|
86
|
-
|
|
95
|
+
...apiOption,
|
|
87
96
|
rpc: _types.rpc,
|
|
88
|
-
types: _types.types
|
|
89
|
-
noInitWarn: true
|
|
97
|
+
types: _types.types
|
|
90
98
|
});
|
|
91
99
|
} else if (_constants._API_OPTIONS_CHAIN_GROUP.avail.includes(this.chainSlug)) {
|
|
92
100
|
api = new _api3.ApiPromise({
|
|
93
|
-
|
|
101
|
+
...apiOption,
|
|
94
102
|
rpc: _availJsSdk.spec.rpc,
|
|
95
103
|
types: _availJsSdk.spec.types,
|
|
96
|
-
signedExtensions: _availJsSdk.spec.signedExtensions
|
|
97
|
-
noInitWarn: true
|
|
104
|
+
signedExtensions: _availJsSdk.spec.signedExtensions
|
|
98
105
|
});
|
|
99
106
|
} else if (_constants._API_OPTIONS_CHAIN_GROUP.goldberg.includes(this.chainSlug)) {
|
|
100
107
|
api = new _api3.ApiPromise({
|
|
101
|
-
|
|
108
|
+
...apiOption,
|
|
102
109
|
rpc: _availJsSdk.goldbergRpc,
|
|
103
110
|
types: _availJsSdk.goldbergTypes,
|
|
104
|
-
signedExtensions: _availJsSdk.spec.signedExtensions
|
|
105
|
-
noInitWarn: true
|
|
111
|
+
signedExtensions: _availJsSdk.spec.signedExtensions
|
|
106
112
|
});
|
|
107
113
|
} else if (_constants._API_OPTIONS_CHAIN_GROUP.gear.includes(this.chainSlug)) {
|
|
108
114
|
api = new _api2.GearApi({
|
|
@@ -11,6 +11,7 @@ var _AbstractChainHandler = require("@subwallet/extension-base/services/chain-se
|
|
|
11
11
|
var _SubstrateApi2 = require("@subwallet/extension-base/services/chain-service/handler/SubstrateApi");
|
|
12
12
|
var _utils2 = require("@subwallet/extension-base/utils");
|
|
13
13
|
var _apiContract = require("@polkadot/api-contract");
|
|
14
|
+
var _typesKnown = require("@polkadot/types-known");
|
|
14
15
|
var _util = require("@polkadot/util");
|
|
15
16
|
var _logger = require("@polkadot/util/logger");
|
|
16
17
|
var _utils3 = require("../../../koni/api/contract-handler/utils");
|
|
@@ -206,6 +207,32 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
206
207
|
providerName
|
|
207
208
|
} = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
208
209
|
const existed = this.substrateApiMap[chainSlug];
|
|
210
|
+
const metadata = await ((_this$parent2 = this.parent) === null || _this$parent2 === void 0 ? void 0 : _this$parent2.getMetadata(chainSlug));
|
|
211
|
+
const updateMetadata = substrateApi => {
|
|
212
|
+
// Update metadata to database with async methods
|
|
213
|
+
substrateApi.api.isReady.then(async api => {
|
|
214
|
+
var _this$parent3;
|
|
215
|
+
const currentSpecVersion = api.runtimeVersion.specVersion.toString();
|
|
216
|
+
const genesisHash = api.genesisHash.toHex();
|
|
217
|
+
|
|
218
|
+
// Avoid date existed metadata
|
|
219
|
+
if (metadata && metadata.specVersion === currentSpecVersion && metadata.genesisHash === genesisHash) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const systemChain = await api.rpc.system.chain();
|
|
223
|
+
// const _metadata: Option<OpaqueMetadata> = await api.call.metadata.metadataAtVersion(15);
|
|
224
|
+
// const metadataHex = _metadata.isSome ? _metadata.unwrap().toHex().slice(2) : ''; // Need unwrap to create metadata object
|
|
225
|
+
|
|
226
|
+
(_this$parent3 = this.parent) === null || _this$parent3 === void 0 ? void 0 : _this$parent3.upsertMetadata(chainSlug, {
|
|
227
|
+
chain: chainSlug,
|
|
228
|
+
genesisHash: genesisHash,
|
|
229
|
+
specVersion: currentSpecVersion,
|
|
230
|
+
hexValue: api.runtimeMetadata.toHex(),
|
|
231
|
+
types: (0, _typesKnown.getSpecTypes)(api.registry, systemChain, api.runtimeVersion.specName, api.runtimeVersion.specVersion),
|
|
232
|
+
userExtensions: (0, _typesKnown.getSpecExtensions)(api.registry, systemChain, api.runtimeVersion.specName)
|
|
233
|
+
}).catch(console.error);
|
|
234
|
+
}).catch(console.error);
|
|
235
|
+
};
|
|
209
236
|
|
|
210
237
|
// Return existed to avoid re-init metadata
|
|
211
238
|
if (existed) {
|
|
@@ -213,9 +240,11 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
213
240
|
if (apiUrl !== existed.apiUrl) {
|
|
214
241
|
await existed.updateApiUrl(apiUrl);
|
|
215
242
|
}
|
|
243
|
+
|
|
244
|
+
// Update data in case of existed api (if needed - old provider cannot connect)
|
|
245
|
+
updateMetadata(existed);
|
|
216
246
|
return existed;
|
|
217
247
|
}
|
|
218
|
-
const metadata = await ((_this$parent2 = this.parent) === null || _this$parent2 === void 0 ? void 0 : _this$parent2.getMetadata(chainSlug));
|
|
219
248
|
const apiObject = new _SubstrateApi2.SubstrateApi(chainSlug, apiUrl, {
|
|
220
249
|
providerName,
|
|
221
250
|
metadata,
|
|
@@ -223,21 +252,7 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
223
252
|
});
|
|
224
253
|
apiObject.connectionStatusSubject.subscribe(this.handleConnection.bind(this, chainSlug));
|
|
225
254
|
onUpdateStatus && apiObject.connectionStatusSubject.subscribe(onUpdateStatus);
|
|
226
|
-
|
|
227
|
-
// Update metadata to database with async methods
|
|
228
|
-
apiObject.isReady.then(api => {
|
|
229
|
-
var _this$parent3;
|
|
230
|
-
// Avoid date existed metadata
|
|
231
|
-
if (metadata && metadata.specVersion === api.specVersion && metadata.genesisHash === api.api.genesisHash.toHex()) {
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
(_this$parent3 = this.parent) === null || _this$parent3 === void 0 ? void 0 : _this$parent3.upsertMetadata(chainSlug, {
|
|
235
|
-
chain: chainSlug,
|
|
236
|
-
genesisHash: api.api.genesisHash.toHex(),
|
|
237
|
-
specVersion: api.specVersion,
|
|
238
|
-
hexValue: api.api.runtimeMetadata.toHex()
|
|
239
|
-
}).catch(console.error);
|
|
240
|
-
}).catch(console.error);
|
|
255
|
+
updateMetadata(apiObject);
|
|
241
256
|
return apiObject;
|
|
242
257
|
}
|
|
243
258
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class ClearMetadataDatabase extends _Base.default {
|
|
13
|
+
async run() {
|
|
14
|
+
// Clear all old metadata data
|
|
15
|
+
await this.state.dbService.stores.metadata.clear();
|
|
16
|
+
return Promise.resolve();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.default = ClearMetadataDatabase;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _stores = require("@subwallet/extension-base/stores");
|
|
9
|
+
var _util = require("@polkadot/util");
|
|
10
|
+
var _utilCrypto = require("@polkadot/util-crypto");
|
|
11
|
+
var _Base = _interopRequireDefault(require("../Base"));
|
|
12
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
13
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
14
|
+
|
|
15
|
+
class MigrateLedgerAccountV2 extends _Base.default {
|
|
16
|
+
async run() {
|
|
17
|
+
try {
|
|
18
|
+
return new Promise(resolve => {
|
|
19
|
+
const store = new _stores.AccountsStore();
|
|
20
|
+
const update = (key, value) => {
|
|
21
|
+
var _value$meta;
|
|
22
|
+
if (key.startsWith('account:') && value.meta && (0, _util.isString)((_value$meta = value.meta) === null || _value$meta === void 0 ? void 0 : _value$meta.originGenesisHash)) {
|
|
23
|
+
const newValue = {
|
|
24
|
+
...value
|
|
25
|
+
};
|
|
26
|
+
if (value.meta.isHardware) {
|
|
27
|
+
const isEther = (0, _utilCrypto.isEthereumAddress)(value.address);
|
|
28
|
+
if (isEther) {
|
|
29
|
+
newValue.meta.isGeneric = true;
|
|
30
|
+
} else {
|
|
31
|
+
newValue.meta.isGeneric = !newValue.meta.originGenesisHash;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
newValue.meta.availableGenesisHashes = [value.meta.originGenesisHash];
|
|
35
|
+
store.set(key, newValue);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
store.allMap(map => {
|
|
39
|
+
Object.entries(map).forEach(_ref => {
|
|
40
|
+
let [key, value] = _ref;
|
|
41
|
+
update(key, value);
|
|
42
|
+
});
|
|
43
|
+
resolve();
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
} catch (e) {
|
|
47
|
+
console.error(e);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.default = MigrateLedgerAccountV2;
|
|
@@ -16,6 +16,7 @@ var _MigratePioneerProvider = _interopRequireDefault(require("./providers/Migrat
|
|
|
16
16
|
var _MigrateProvidersV1M1P = _interopRequireDefault(require("./providers/MigrateProvidersV1M1P24"));
|
|
17
17
|
var _MigratePolygonUSDCProvider = _interopRequireDefault(require("./tokens/MigratePolygonUSDCProvider"));
|
|
18
18
|
var _AutoEnableChainsTokens = _interopRequireDefault(require("./AutoEnableChainsTokens"));
|
|
19
|
+
var _ClearMetadataDatabase = _interopRequireDefault(require("./ClearMetadataDatabase"));
|
|
19
20
|
var _DeleteChain = _interopRequireDefault(require("./DeleteChain"));
|
|
20
21
|
var _DeleteChainStaking = _interopRequireDefault(require("./DeleteChainStaking"));
|
|
21
22
|
var _EnableVaraChain = _interopRequireDefault(require("./EnableVaraChain"));
|
|
@@ -24,6 +25,7 @@ var _MigrateAutoLock = _interopRequireDefault(require("./MigrateAutoLock"));
|
|
|
24
25
|
var _MigrateChainPatrol = _interopRequireDefault(require("./MigrateChainPatrol"));
|
|
25
26
|
var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedToken"));
|
|
26
27
|
var _MigrateLedgerAccount = _interopRequireDefault(require("./MigrateLedgerAccount"));
|
|
28
|
+
var _MigrateLedgerAccountV = _interopRequireDefault(require("./MigrateLedgerAccountV2"));
|
|
27
29
|
var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
|
|
28
30
|
var _MigrateSettings = _interopRequireDefault(require("./MigrateSettings"));
|
|
29
31
|
var _MigrateTokenDecimals = _interopRequireDefault(require("./MigrateTokenDecimals"));
|
|
@@ -55,11 +57,13 @@ var _default = {
|
|
|
55
57
|
'1.1.24-01': _MigrateProvidersV1M1P.default,
|
|
56
58
|
'1.1.26-01': _MigratePolygonUSDCProvider.default,
|
|
57
59
|
'1.1.28-01': _MigrateEarningVersion.default,
|
|
60
|
+
'1.1.33-01': _MigrateLedgerAccountV.default,
|
|
58
61
|
'1.1.41-01': _DeleteChainStaking.default,
|
|
59
62
|
'1.1.46-01': _AutoEnableSomeTokens.default,
|
|
60
63
|
'1.1.69-03': _MigrateAssetSetting.default,
|
|
61
64
|
'1.1.69-02': _MigrateTransactionHistoryBySymbol.default,
|
|
62
|
-
'1.2.69-01': _MigrateRemoveGenesisHash.default
|
|
65
|
+
'1.2.69-01': _MigrateRemoveGenesisHash.default,
|
|
66
|
+
'1.2.1-01': _ClearMetadataDatabase.default
|
|
63
67
|
// [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
|
|
64
68
|
// [`${EVERYTIME}-1`]: AutoEnableChainsTokens
|
|
65
69
|
};
|
|
@@ -196,7 +196,7 @@ class TransactionService {
|
|
|
196
196
|
}
|
|
197
197
|
async sendTransaction(transaction) {
|
|
198
198
|
// Send Transaction
|
|
199
|
-
const emitter = transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) :
|
|
199
|
+
const emitter = await (transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) : this.signAndSendEvmTransaction(transaction));
|
|
200
200
|
const {
|
|
201
201
|
eventsHandler
|
|
202
202
|
} = transaction;
|
|
@@ -1026,7 +1026,7 @@ class TransactionService {
|
|
|
1026
1026
|
}
|
|
1027
1027
|
return emitter;
|
|
1028
1028
|
}
|
|
1029
|
-
signAndSendSubstrateTransaction(_ref10) {
|
|
1029
|
+
async signAndSendSubstrateTransaction(_ref10) {
|
|
1030
1030
|
let {
|
|
1031
1031
|
address,
|
|
1032
1032
|
chain,
|
|
@@ -1041,7 +1041,10 @@ class TransactionService {
|
|
|
1041
1041
|
warnings: [],
|
|
1042
1042
|
extrinsicHash: id
|
|
1043
1043
|
};
|
|
1044
|
-
transaction
|
|
1044
|
+
const extrinsic = transaction;
|
|
1045
|
+
const registry = extrinsic.registry;
|
|
1046
|
+
const signedExtensions = registry.signedExtensions;
|
|
1047
|
+
const signerOption = {
|
|
1045
1048
|
signer: {
|
|
1046
1049
|
signPayload: async payload => {
|
|
1047
1050
|
const signing = await this.state.requestService.signInternalTransaction(id, address, url || _constants2.EXTENSION_REQUEST_URL, payload);
|
|
@@ -1051,7 +1054,15 @@ class TransactionService {
|
|
|
1051
1054
|
};
|
|
1052
1055
|
}
|
|
1053
1056
|
}
|
|
1054
|
-
}
|
|
1057
|
+
};
|
|
1058
|
+
if ((0, _utils3._isRuntimeUpdated)(signedExtensions)) {
|
|
1059
|
+
try {
|
|
1060
|
+
const metadataHash = await (0, _utils3.getMetadataHash)(chain);
|
|
1061
|
+
signerOption.mode = 1;
|
|
1062
|
+
signerOption.metadataHash = `0x${metadataHash}`;
|
|
1063
|
+
} catch (e) {}
|
|
1064
|
+
}
|
|
1065
|
+
extrinsic.signAsync(address, signerOption).then(async rs => {
|
|
1055
1066
|
// Emit signed event
|
|
1056
1067
|
emitter.emit('signed', eventData);
|
|
1057
1068
|
|
package/cjs/types/index.js
CHANGED
|
@@ -36,6 +36,17 @@ Object.keys(_campaigns).forEach(function (key) {
|
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
});
|
|
39
|
+
var _common = require("./common");
|
|
40
|
+
Object.keys(_common).forEach(function (key) {
|
|
41
|
+
if (key === "default" || key === "__esModule") return;
|
|
42
|
+
if (key in exports && exports[key] === _common[key]) return;
|
|
43
|
+
Object.defineProperty(exports, key, {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () {
|
|
46
|
+
return _common[key];
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
39
50
|
var _fee = require("./fee");
|
|
40
51
|
Object.keys(_fee).forEach(function (key) {
|
|
41
52
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -47,6 +58,17 @@ Object.keys(_fee).forEach(function (key) {
|
|
|
47
58
|
}
|
|
48
59
|
});
|
|
49
60
|
});
|
|
61
|
+
var _metadata = require("./metadata");
|
|
62
|
+
Object.keys(_metadata).forEach(function (key) {
|
|
63
|
+
if (key === "default" || key === "__esModule") return;
|
|
64
|
+
if (key in exports && exports[key] === _metadata[key]) return;
|
|
65
|
+
Object.defineProperty(exports, key, {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
get: function () {
|
|
68
|
+
return _metadata[key];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
50
72
|
var _ordinal = require("./ordinal");
|
|
51
73
|
Object.keys(_ordinal).forEach(function (key) {
|
|
52
74
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -79,15 +101,4 @@ Object.keys(_yield).forEach(function (key) {
|
|
|
79
101
|
return _yield[key];
|
|
80
102
|
}
|
|
81
103
|
});
|
|
82
|
-
});
|
|
83
|
-
var _common = require("./common");
|
|
84
|
-
Object.keys(_common).forEach(function (key) {
|
|
85
|
-
if (key === "default" || key === "__esModule") return;
|
|
86
|
-
if (key in exports && exports[key] === _common[key]) return;
|
|
87
|
-
Object.defineProperty(exports, key, {
|
|
88
|
-
enumerable: true,
|
|
89
|
-
get: function () {
|
|
90
|
-
return _common[key];
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
104
|
});
|