@subwallet/extension-base 1.1.11-2 → 1.1.13-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/types.d.ts +1 -0
- package/cjs/koni/api/dotsama/crowdloan.js +1 -1
- package/cjs/koni/api/tokens/evm/transfer.js +10 -4
- package/cjs/koni/background/handlers/Extension.js +22 -7
- package/cjs/koni/background/handlers/State.js +8 -4
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +10 -2
- package/cjs/services/chain-service/handler/EvmApi.js +24 -12
- package/cjs/services/chain-service/handler/EvmChainHandler.js +3 -1
- package/cjs/services/migration-service/scripts/MigrateTokenDecimals.js +30 -0
- package/cjs/services/migration-service/scripts/index.js +3 -1
- package/cjs/services/setting-service/SettingService.js +5 -1
- package/cjs/utils/environment.js +1 -1
- package/koni/api/dotsama/crowdloan.js +1 -1
- package/koni/api/tokens/evm/transfer.d.ts +1 -1
- package/koni/api/tokens/evm/transfer.js +11 -5
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +22 -7
- package/koni/background/handlers/State.d.ts +1 -1
- package/koni/background/handlers/State.js +8 -4
- package/package.json +11 -6
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.d.ts +6 -0
- package/services/chain-service/constants.js +6 -0
- package/services/chain-service/handler/EvmApi.js +24 -12
- package/services/chain-service/handler/EvmChainHandler.js +2 -1
- package/services/migration-service/scripts/MigrateTokenDecimals.d.ts +4 -0
- package/services/migration-service/scripts/MigrateTokenDecimals.js +22 -0
- package/services/migration-service/scripts/index.js +3 -1
- package/services/setting-service/SettingService.js +5 -1
- package/utils/environment.js +1 -1
package/background/types.d.ts
CHANGED
|
@@ -123,7 +123,7 @@ async function subscribeCrowdloan(addresses, substrateApiMap, callback, chainInf
|
|
|
123
123
|
}
|
|
124
124
|
if (networkKey === _chainList.COMMON_CHAIN_SLUGS.ACALA) {
|
|
125
125
|
const acalaAddresses = substrateAddresses.map(address => (0, _utils2.reformatAddress)(address, (0, _utils._getChainSubstrateAddressPrefix)(chainInfo), (0, _utils._isChainEvmCompatible)(chainInfo)));
|
|
126
|
-
unsubMap.acala = subscribeAcalaContributeInterval(acalaAddresses,
|
|
126
|
+
unsubMap.acala = subscribeAcalaContributeInterval(acalaAddresses, _KoniTypes.CrowdloanParaState.COMPLETED, crowdloanCb);
|
|
127
127
|
} else if (parentChain === _chainList.COMMON_CHAIN_SLUGS.POLKADOT && polkadotFundsStatusMap[paraId]) {
|
|
128
128
|
unsubMap[networkKey] = getRPCCrowdloan(polkadotAPI, paraId, hexAddresses, polkadotFundsStatusMap[paraId], crowdloanCb);
|
|
129
129
|
} else if (parentChain === _chainList.COMMON_CHAIN_SLUGS.KUSAMA && kusamaFundsStatusMap[paraId]) {
|
|
@@ -43,18 +43,24 @@ const handleTransferBalanceResult = _ref => {
|
|
|
43
43
|
callback(response);
|
|
44
44
|
};
|
|
45
45
|
exports.handleTransferBalanceResult = handleTransferBalanceResult;
|
|
46
|
-
async function getEVMTransactionObject(chainInfo, to, value, transferAll, evmApiMap) {
|
|
46
|
+
async function getEVMTransactionObject(chainInfo, from, to, value, transferAll, evmApiMap) {
|
|
47
47
|
const networkKey = chainInfo.slug;
|
|
48
48
|
const web3Api = evmApiMap[networkKey];
|
|
49
49
|
const gasPrice = await web3Api.api.eth.getGasPrice();
|
|
50
50
|
const transactionObject = {
|
|
51
51
|
gasPrice: gasPrice,
|
|
52
|
-
to: to
|
|
52
|
+
to: to,
|
|
53
|
+
value: value,
|
|
54
|
+
from: from
|
|
53
55
|
};
|
|
54
56
|
const gasLimit = await web3Api.api.eth.estimateGas(transactionObject);
|
|
55
57
|
transactionObject.gas = gasLimit;
|
|
56
|
-
const estimateFee =
|
|
57
|
-
transactionObject.value = transferAll ? new _util.BN(value).
|
|
58
|
+
const estimateFee = new _util.BN(gasLimit).mul(new _util.BN(gasPrice));
|
|
59
|
+
transactionObject.value = transferAll ? new _util.BN(value).sub(estimateFee).toString() : value;
|
|
60
|
+
if (_constants.EVM_REFORMAT_DECIMALS.acala.includes(networkKey)) {
|
|
61
|
+
const numberReplace = 18 - 12;
|
|
62
|
+
transactionObject.value = transactionObject.value.substring(0, transactionObject.value.length - 6) + new Array(numberReplace).fill('0').join('');
|
|
63
|
+
}
|
|
58
64
|
return [transactionObject, transactionObject.value.toString()];
|
|
59
65
|
}
|
|
60
66
|
async function getERC20TransactionObject(assetAddress, chainInfo, from, to, value, transferAll, evmApiMap) {
|
|
@@ -1175,7 +1175,7 @@ class KoniExtension {
|
|
|
1175
1175
|
address: _constants.ALL_ACCOUNT_KEY,
|
|
1176
1176
|
currentGenesisHash: allGenesisHash || null,
|
|
1177
1177
|
allGenesisHash
|
|
1178
|
-
});
|
|
1178
|
+
}, undefined, true);
|
|
1179
1179
|
}
|
|
1180
1180
|
changedAccount = true;
|
|
1181
1181
|
}
|
|
@@ -1192,7 +1192,8 @@ class KoniExtension {
|
|
|
1192
1192
|
}
|
|
1193
1193
|
async accountsForgetOverride(_ref36) {
|
|
1194
1194
|
let {
|
|
1195
|
-
address
|
|
1195
|
+
address,
|
|
1196
|
+
lockAfter
|
|
1196
1197
|
} = _ref36;
|
|
1197
1198
|
_uiKeyring.keyring.forgetAccount(address);
|
|
1198
1199
|
await new Promise(resolve => {
|
|
@@ -1224,6 +1225,9 @@ class KoniExtension {
|
|
|
1224
1225
|
}, resolve);
|
|
1225
1226
|
});
|
|
1226
1227
|
await this.#koniState.disableMantaPay(address);
|
|
1228
|
+
if (lockAfter) {
|
|
1229
|
+
this.checkLockAfterMigrate();
|
|
1230
|
+
}
|
|
1227
1231
|
return true;
|
|
1228
1232
|
}
|
|
1229
1233
|
seedCreateV2(_ref37) {
|
|
@@ -1391,9 +1395,10 @@ class KoniExtension {
|
|
|
1391
1395
|
_uiKeyring.keyring.restoreAccounts(file, password);
|
|
1392
1396
|
this._addAddressesToAuthList(addressList, isAllowed);
|
|
1393
1397
|
});
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1398
|
+
|
|
1399
|
+
// if (this.#alwaysLock) {
|
|
1400
|
+
// this.keyringLock();
|
|
1401
|
+
// }
|
|
1397
1402
|
} catch (error) {
|
|
1398
1403
|
throw new Error(error.message);
|
|
1399
1404
|
}
|
|
@@ -1563,7 +1568,7 @@ class KoniExtension {
|
|
|
1563
1568
|
if ((0, _utils._isTokenEvmSmartContract)(tokenInfo) || (0, _utils._isLocalToken)(tokenInfo)) {
|
|
1564
1569
|
[transaction, transferAmount.value] = await (0, _transfer3.getERC20TransactionObject)((0, _utils._getContractAddressOfToken)(tokenInfo), chainInfo, from, to, txVal, !!transferAll, evmApiMap);
|
|
1565
1570
|
} else {
|
|
1566
|
-
[transaction, transferAmount.value] = await (0, _transfer3.getEVMTransactionObject)(chainInfo, to, txVal, !!transferAll, evmApiMap);
|
|
1571
|
+
[transaction, transferAmount.value] = await (0, _transfer3.getEVMTransactionObject)(chainInfo, from, to, txVal, !!transferAll, evmApiMap);
|
|
1567
1572
|
}
|
|
1568
1573
|
} else if ((0, _utils._isMantaZkAsset)(tokenInfo)) {
|
|
1569
1574
|
// TODO
|
|
@@ -2799,7 +2804,7 @@ class KoniExtension {
|
|
|
2799
2804
|
};
|
|
2800
2805
|
}
|
|
2801
2806
|
this.#koniState.updateKeyringState();
|
|
2802
|
-
if (this.#alwaysLock) {
|
|
2807
|
+
if (this.#alwaysLock && !createNew) {
|
|
2803
2808
|
this.keyringLock();
|
|
2804
2809
|
}
|
|
2805
2810
|
return {
|
|
@@ -2810,6 +2815,15 @@ class KoniExtension {
|
|
|
2810
2815
|
|
|
2811
2816
|
// Migrate password
|
|
2812
2817
|
|
|
2818
|
+
checkLockAfterMigrate() {
|
|
2819
|
+
const pairs = _uiKeyring.keyring.getPairs();
|
|
2820
|
+
const needMigrate = !!pairs.filter(acc => acc.address !== _constants.ALL_ACCOUNT_KEY && !acc.meta.isExternal && !acc.meta.isInjected).filter(acc => !acc.meta.isMasterPassword).length;
|
|
2821
|
+
if (!needMigrate) {
|
|
2822
|
+
if (this.#alwaysLock) {
|
|
2823
|
+
this.keyringLock();
|
|
2824
|
+
}
|
|
2825
|
+
}
|
|
2826
|
+
}
|
|
2813
2827
|
keyringMigrateMasterPassword(_ref66) {
|
|
2814
2828
|
let {
|
|
2815
2829
|
address,
|
|
@@ -2817,6 +2831,7 @@ class KoniExtension {
|
|
|
2817
2831
|
} = _ref66;
|
|
2818
2832
|
try {
|
|
2819
2833
|
_uiKeyring.keyring.migrateWithMasterPassword(address, password);
|
|
2834
|
+
this.checkLockAfterMigrate();
|
|
2820
2835
|
} catch (e) {
|
|
2821
2836
|
console.error(e);
|
|
2822
2837
|
return {
|
|
@@ -475,7 +475,7 @@ class KoniState {
|
|
|
475
475
|
subscribeStakingReward() {
|
|
476
476
|
return this.stakingRewardSubject;
|
|
477
477
|
}
|
|
478
|
-
setCurrentAccount(data, callback) {
|
|
478
|
+
setCurrentAccount(data, callback, preventOneAccount) {
|
|
479
479
|
const {
|
|
480
480
|
address,
|
|
481
481
|
currentGenesisHash
|
|
@@ -490,9 +490,13 @@ class KoniState {
|
|
|
490
490
|
if (pairs.length > 1 || !pair) {
|
|
491
491
|
result.allGenesisHash = currentGenesisHash || undefined;
|
|
492
492
|
} else {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
493
|
+
if (!preventOneAccount) {
|
|
494
|
+
result.address = pair.address;
|
|
495
|
+
result.currentGenesisHash = pairGenesisHash || '';
|
|
496
|
+
result.allGenesisHash = pairGenesisHash || undefined;
|
|
497
|
+
} else {
|
|
498
|
+
result.allGenesisHash = currentGenesisHash || undefined;
|
|
499
|
+
}
|
|
496
500
|
}
|
|
497
501
|
}
|
|
498
502
|
this.keyringService.setCurrentAccount(result);
|
package/cjs/packageInfo.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports._ZK_ASSET_PREFIX = 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._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._DEFAULT_MANTA_ZK_CHAIN = 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_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
|
|
6
|
+
exports._ZK_ASSET_PREFIX = 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._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._DEFAULT_MANTA_ZK_CHAIN = 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.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_MAX_RETRY = exports.API_CONNECT_TIMEOUT = 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");
|
|
@@ -237,9 +237,17 @@ const _XCM_TYPE = {
|
|
|
237
237
|
};
|
|
238
238
|
exports._XCM_TYPE = _XCM_TYPE;
|
|
239
239
|
const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS];
|
|
240
|
+
exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
|
|
241
|
+
const EVM_PASS_CONNECT_STATUS = {
|
|
242
|
+
acala: ['acala_evm', 'karura_evm']
|
|
243
|
+
};
|
|
244
|
+
exports.EVM_PASS_CONNECT_STATUS = EVM_PASS_CONNECT_STATUS;
|
|
245
|
+
const EVM_REFORMAT_DECIMALS = {
|
|
246
|
+
acala: ['acala_evm', 'karura_evm']
|
|
247
|
+
};
|
|
240
248
|
|
|
241
249
|
// TODO: review
|
|
242
|
-
exports.
|
|
250
|
+
exports.EVM_REFORMAT_DECIMALS = EVM_REFORMAT_DECIMALS;
|
|
243
251
|
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
|
|
244
252
|
const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
|
|
245
253
|
exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.EvmApi = void 0;
|
|
8
8
|
require("@polkadot/types-augment");
|
|
9
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
9
10
|
var _types = require("@subwallet/extension-base/services/chain-service/types");
|
|
10
11
|
var _promise = require("@subwallet/extension-base/utils/promise");
|
|
11
12
|
var _rxjs = require("rxjs");
|
|
@@ -13,6 +14,7 @@ var _web = _interopRequireDefault(require("web3"));
|
|
|
13
14
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
14
15
|
// SPDX-License-Identifier: Apache-2.0
|
|
15
16
|
|
|
17
|
+
const acalaEvmNetworks = _constants.EVM_PASS_CONNECT_STATUS.acala;
|
|
16
18
|
class EvmApi {
|
|
17
19
|
apiRetry = 0;
|
|
18
20
|
isApiConnectedSubject = new _rxjs.BehaviorSubject(false);
|
|
@@ -75,11 +77,15 @@ class EvmApi {
|
|
|
75
77
|
createIntervalCheckApi() {
|
|
76
78
|
this.clearIntervalCheckApi();
|
|
77
79
|
return setInterval(() => {
|
|
78
|
-
|
|
80
|
+
if (!acalaEvmNetworks.includes(this.chainSlug)) {
|
|
81
|
+
this.api.eth.net.isListening().then(() => {
|
|
82
|
+
this.onConnect();
|
|
83
|
+
}).catch(() => {
|
|
84
|
+
this.onDisconnect();
|
|
85
|
+
});
|
|
86
|
+
} else {
|
|
79
87
|
this.onConnect();
|
|
80
|
-
}
|
|
81
|
-
this.onDisconnect();
|
|
82
|
-
});
|
|
88
|
+
}
|
|
83
89
|
}, 10000);
|
|
84
90
|
}
|
|
85
91
|
clearIntervalCheckApi() {
|
|
@@ -90,17 +96,23 @@ class EvmApi {
|
|
|
90
96
|
const wsProvider = this.provider;
|
|
91
97
|
wsProvider.connect && wsProvider.connect();
|
|
92
98
|
this.updateConnectionStatus(_types._ChainConnectionStatus.CONNECTING);
|
|
99
|
+
|
|
93
100
|
// Check if api is ready
|
|
94
|
-
|
|
101
|
+
if (!acalaEvmNetworks.includes(this.chainSlug)) {
|
|
102
|
+
this.api.eth.net.isListening().then(() => {
|
|
103
|
+
this.isApiReadyOnce = true;
|
|
104
|
+
this.onConnect();
|
|
105
|
+
}).catch(error => {
|
|
106
|
+
this.isApiReadyOnce = false;
|
|
107
|
+
this.isApiReady = false;
|
|
108
|
+
this.isReadyHandler.reject(error);
|
|
109
|
+
this.updateConnectionStatus(_types._ChainConnectionStatus.DISCONNECTED);
|
|
110
|
+
console.warn(`Can not connect to ${this.chainSlug} (EVM) at ${this.apiUrl}`);
|
|
111
|
+
});
|
|
112
|
+
} else {
|
|
95
113
|
this.isApiReadyOnce = true;
|
|
96
114
|
this.onConnect();
|
|
97
|
-
}
|
|
98
|
-
this.isApiReadyOnce = false;
|
|
99
|
-
this.isApiReady = false;
|
|
100
|
-
this.isReadyHandler.reject(error);
|
|
101
|
-
this.updateConnectionStatus(_types._ChainConnectionStatus.DISCONNECTED);
|
|
102
|
-
console.warn(`Can not connect to ${this.chainSlug} (EVM) at ${this.apiUrl}`);
|
|
103
|
-
});
|
|
115
|
+
}
|
|
104
116
|
|
|
105
117
|
// Interval to check connecting status
|
|
106
118
|
this.intervalCheckApi = this.createIntervalCheckApi();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
@@ -8,6 +9,7 @@ var _types = require("@subwallet/chain-list/types");
|
|
|
8
9
|
var _AbstractChainHandler = require("@subwallet/extension-base/services/chain-service/handler/AbstractChainHandler");
|
|
9
10
|
var _EvmApi2 = require("@subwallet/extension-base/services/chain-service/handler/EvmApi");
|
|
10
11
|
var _helper = require("@subwallet/extension-base/services/chain-service/helper");
|
|
12
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
11
13
|
var _logger = require("@polkadot/util/logger");
|
|
12
14
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
13
15
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -134,7 +136,7 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
|
|
|
134
136
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
135
137
|
tokenContract.methods.symbol().call()]);
|
|
136
138
|
name = _symbol;
|
|
137
|
-
decimals = _decimals;
|
|
139
|
+
decimals = new _bignumber.default(_decimals).toNumber();
|
|
138
140
|
symbol = _symbol;
|
|
139
141
|
}
|
|
140
142
|
if (name === '' || symbol === '') {
|
|
@@ -0,0 +1,30 @@
|
|
|
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 _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
9
|
+
var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
class MigrateTokenDecimals extends _Base.default {
|
|
14
|
+
async run() {
|
|
15
|
+
const state = this.state;
|
|
16
|
+
return new Promise(resolve => {
|
|
17
|
+
const assetMap = state.getAssetRegistry();
|
|
18
|
+
for (const [slug, info] of Object.entries(assetMap)) {
|
|
19
|
+
if ((0, _utils._isCustomAsset)(slug)) {
|
|
20
|
+
state.chainService.upsertCustomToken({
|
|
21
|
+
...info,
|
|
22
|
+
decimals: info.decimals ? parseInt(info.decimals.toString()) : info.decimals
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
resolve();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.default = MigrateTokenDecimals;
|
|
@@ -15,6 +15,7 @@ var _MigrateImportedToken = _interopRequireDefault(require("./MigrateImportedTok
|
|
|
15
15
|
var _MigrateLedgerAccount = _interopRequireDefault(require("./MigrateLedgerAccount"));
|
|
16
16
|
var _MigrateNetworkSettings = _interopRequireDefault(require("./MigrateNetworkSettings"));
|
|
17
17
|
var _MigrateSettings = _interopRequireDefault(require("./MigrateSettings"));
|
|
18
|
+
var _MigrateTokenDecimals = _interopRequireDefault(require("./MigrateTokenDecimals"));
|
|
18
19
|
var _MigrateTransactionHistory = _interopRequireDefault(require("./MigrateTransactionHistory"));
|
|
19
20
|
var _MigrateWalletReference = _interopRequireDefault(require("./MigrateWalletReference"));
|
|
20
21
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
@@ -34,7 +35,8 @@ var _default = {
|
|
|
34
35
|
'1.0.9-01': _MigrateLedgerAccount.default,
|
|
35
36
|
'1.0.12-02': _MigrateEthProvider.default,
|
|
36
37
|
'1.1.6-01': _MigrateWalletReference.default,
|
|
37
|
-
'1.1.7': _DeleteChain.default
|
|
38
|
+
'1.1.7': _DeleteChain.default,
|
|
39
|
+
'1.1.13-01': _MigrateTokenDecimals.default
|
|
38
40
|
// [`${EVERYTIME}-1`]: AutoEnableChainsTokens
|
|
39
41
|
};
|
|
40
42
|
exports.default = _default;
|
|
@@ -18,7 +18,7 @@ class SettingService {
|
|
|
18
18
|
passPhishingStore = new _PassPhishingStore.default();
|
|
19
19
|
constructor() {
|
|
20
20
|
let old = localStorage.getItem(_constants.LANGUAGE) || 'en';
|
|
21
|
-
|
|
21
|
+
const updateLanguage = _ref => {
|
|
22
22
|
let {
|
|
23
23
|
language
|
|
24
24
|
} = _ref;
|
|
@@ -26,6 +26,10 @@ class SettingService {
|
|
|
26
26
|
old = language;
|
|
27
27
|
_i18n.default.changeLanguage(language).catch(console.error);
|
|
28
28
|
}
|
|
29
|
+
};
|
|
30
|
+
this.getSettings(updateLanguage);
|
|
31
|
+
this.settingsStore.getSubject().subscribe({
|
|
32
|
+
next: updateLanguage
|
|
29
33
|
});
|
|
30
34
|
}
|
|
31
35
|
getSubject() {
|
package/cjs/utils/environment.js
CHANGED
|
@@ -70,7 +70,7 @@ const getOS = () => {
|
|
|
70
70
|
// @ts-ignore
|
|
71
71
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
72
72
|
const platform = ((_window$navigator = window.navigator) === null || _window$navigator === void 0 ? void 0 : (_window$navigator$use = _window$navigator.userAgentData) === null || _window$navigator$use === void 0 ? void 0 : _window$navigator$use.platform) || window.navigator.platform;
|
|
73
|
-
const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];
|
|
73
|
+
const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K', 'macOS'];
|
|
74
74
|
const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];
|
|
75
75
|
const iosPlatforms = ['iPhone', 'iPad', 'iPod'];
|
|
76
76
|
let os = 'Unknown';
|
|
@@ -108,7 +108,7 @@ export async function subscribeCrowdloan(addresses, substrateApiMap, callback, c
|
|
|
108
108
|
}
|
|
109
109
|
if (networkKey === COMMON_CHAIN_SLUGS.ACALA) {
|
|
110
110
|
const acalaAddresses = substrateAddresses.map(address => reformatAddress(address, _getChainSubstrateAddressPrefix(chainInfo), _isChainEvmCompatible(chainInfo)));
|
|
111
|
-
unsubMap.acala = subscribeAcalaContributeInterval(acalaAddresses,
|
|
111
|
+
unsubMap.acala = subscribeAcalaContributeInterval(acalaAddresses, CrowdloanParaState.COMPLETED, crowdloanCb);
|
|
112
112
|
} else if (parentChain === COMMON_CHAIN_SLUGS.POLKADOT && polkadotFundsStatusMap[paraId]) {
|
|
113
113
|
unsubMap[networkKey] = getRPCCrowdloan(polkadotAPI, paraId, hexAddresses, polkadotFundsStatusMap[paraId], crowdloanCb);
|
|
114
114
|
} else if (parentChain === COMMON_CHAIN_SLUGS.KUSAMA && kusamaFundsStatusMap[paraId]) {
|
|
@@ -11,7 +11,7 @@ interface HandleTransferBalanceResultProps {
|
|
|
11
11
|
updateState?: (promise: Partial<ExternalRequestPromise>) => void;
|
|
12
12
|
}
|
|
13
13
|
export declare const handleTransferBalanceResult: ({ callback, changeValue, networkKey, receipt, response, updateState }: HandleTransferBalanceResultProps) => void;
|
|
14
|
-
export declare function getEVMTransactionObject(chainInfo: _ChainInfo, to: string, value: string, transferAll: boolean, evmApiMap: Record<string, _EvmApi>): Promise<[TransactionConfig, string]>;
|
|
14
|
+
export declare function getEVMTransactionObject(chainInfo: _ChainInfo, from: string, to: string, value: string, transferAll: boolean, evmApiMap: Record<string, _EvmApi>): Promise<[TransactionConfig, string]>;
|
|
15
15
|
export declare function getERC20TransactionObject(assetAddress: string, chainInfo: _ChainInfo, from: string, to: string, value: string, transferAll: boolean, evmApiMap: Record<string, _EvmApi>): Promise<[TransactionConfig, string]>;
|
|
16
16
|
export declare function getERC721Transaction(web3Api: _EvmApi, contractAddress: string, senderAddress: string, recipientAddress: string, tokenId: string): Promise<TransactionConfig>;
|
|
17
17
|
export {};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import { ExternalRequestPromiseStatus } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { getERC20Contract } from '@subwallet/extension-base/koni/api/tokens/evm/web3';
|
|
6
|
-
import { _BALANCE_PARSING_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
6
|
+
import { _BALANCE_PARSING_CHAIN_GROUP, EVM_REFORMAT_DECIMALS } from '@subwallet/extension-base/services/chain-service/constants';
|
|
7
7
|
import { _ERC721_ABI } from '@subwallet/extension-base/services/chain-service/helper';
|
|
8
8
|
import { BN, hexToBn } from '@polkadot/util';
|
|
9
9
|
export const handleTransferBalanceResult = ({
|
|
@@ -32,18 +32,24 @@ export const handleTransferBalanceResult = ({
|
|
|
32
32
|
});
|
|
33
33
|
callback(response);
|
|
34
34
|
};
|
|
35
|
-
export async function getEVMTransactionObject(chainInfo, to, value, transferAll, evmApiMap) {
|
|
35
|
+
export async function getEVMTransactionObject(chainInfo, from, to, value, transferAll, evmApiMap) {
|
|
36
36
|
const networkKey = chainInfo.slug;
|
|
37
37
|
const web3Api = evmApiMap[networkKey];
|
|
38
38
|
const gasPrice = await web3Api.api.eth.getGasPrice();
|
|
39
39
|
const transactionObject = {
|
|
40
40
|
gasPrice: gasPrice,
|
|
41
|
-
to: to
|
|
41
|
+
to: to,
|
|
42
|
+
value: value,
|
|
43
|
+
from: from
|
|
42
44
|
};
|
|
43
45
|
const gasLimit = await web3Api.api.eth.estimateGas(transactionObject);
|
|
44
46
|
transactionObject.gas = gasLimit;
|
|
45
|
-
const estimateFee =
|
|
46
|
-
transactionObject.value = transferAll ? new BN(value).
|
|
47
|
+
const estimateFee = new BN(gasLimit).mul(new BN(gasPrice));
|
|
48
|
+
transactionObject.value = transferAll ? new BN(value).sub(estimateFee).toString() : value;
|
|
49
|
+
if (EVM_REFORMAT_DECIMALS.acala.includes(networkKey)) {
|
|
50
|
+
const numberReplace = 18 - 12;
|
|
51
|
+
transactionObject.value = transactionObject.value.substring(0, transactionObject.value.length - 6) + new Array(numberReplace).fill('0').join('');
|
|
52
|
+
}
|
|
47
53
|
return [transactionObject, transactionObject.value.toString()];
|
|
48
54
|
}
|
|
49
55
|
export async function getERC20TransactionObject(assetAddress, chainInfo, from, to, value, transferAll, evmApiMap) {
|
|
@@ -171,6 +171,7 @@ export default class KoniExtension {
|
|
|
171
171
|
private submitTuringCancelStakeCompound;
|
|
172
172
|
private keyringStateSubscribe;
|
|
173
173
|
private keyringChangeMasterPassword;
|
|
174
|
+
private checkLockAfterMigrate;
|
|
174
175
|
private keyringMigrateMasterPassword;
|
|
175
176
|
private keyringUnlock;
|
|
176
177
|
private keyringLock;
|
|
@@ -1131,7 +1131,7 @@ export default class KoniExtension {
|
|
|
1131
1131
|
address: ALL_ACCOUNT_KEY,
|
|
1132
1132
|
currentGenesisHash: allGenesisHash || null,
|
|
1133
1133
|
allGenesisHash
|
|
1134
|
-
});
|
|
1134
|
+
}, undefined, true);
|
|
1135
1135
|
}
|
|
1136
1136
|
changedAccount = true;
|
|
1137
1137
|
}
|
|
@@ -1147,7 +1147,8 @@ export default class KoniExtension {
|
|
|
1147
1147
|
return addressDict;
|
|
1148
1148
|
}
|
|
1149
1149
|
async accountsForgetOverride({
|
|
1150
|
-
address
|
|
1150
|
+
address,
|
|
1151
|
+
lockAfter
|
|
1151
1152
|
}) {
|
|
1152
1153
|
keyring.forgetAccount(address);
|
|
1153
1154
|
await new Promise(resolve => {
|
|
@@ -1179,6 +1180,9 @@ export default class KoniExtension {
|
|
|
1179
1180
|
}, resolve);
|
|
1180
1181
|
});
|
|
1181
1182
|
await this.#koniState.disableMantaPay(address);
|
|
1183
|
+
if (lockAfter) {
|
|
1184
|
+
this.checkLockAfterMigrate();
|
|
1185
|
+
}
|
|
1182
1186
|
return true;
|
|
1183
1187
|
}
|
|
1184
1188
|
seedCreateV2({
|
|
@@ -1338,9 +1342,10 @@ export default class KoniExtension {
|
|
|
1338
1342
|
keyring.restoreAccounts(file, password);
|
|
1339
1343
|
this._addAddressesToAuthList(addressList, isAllowed);
|
|
1340
1344
|
});
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1345
|
+
|
|
1346
|
+
// if (this.#alwaysLock) {
|
|
1347
|
+
// this.keyringLock();
|
|
1348
|
+
// }
|
|
1344
1349
|
} catch (error) {
|
|
1345
1350
|
throw new Error(error.message);
|
|
1346
1351
|
}
|
|
@@ -1510,7 +1515,7 @@ export default class KoniExtension {
|
|
|
1510
1515
|
if (_isTokenEvmSmartContract(tokenInfo) || _isLocalToken(tokenInfo)) {
|
|
1511
1516
|
[transaction, transferAmount.value] = await getERC20TransactionObject(_getContractAddressOfToken(tokenInfo), chainInfo, from, to, txVal, !!transferAll, evmApiMap);
|
|
1512
1517
|
} else {
|
|
1513
|
-
[transaction, transferAmount.value] = await getEVMTransactionObject(chainInfo, to, txVal, !!transferAll, evmApiMap);
|
|
1518
|
+
[transaction, transferAmount.value] = await getEVMTransactionObject(chainInfo, from, to, txVal, !!transferAll, evmApiMap);
|
|
1514
1519
|
}
|
|
1515
1520
|
} else if (_isMantaZkAsset(tokenInfo)) {
|
|
1516
1521
|
// TODO
|
|
@@ -2724,7 +2729,7 @@ export default class KoniExtension {
|
|
|
2724
2729
|
};
|
|
2725
2730
|
}
|
|
2726
2731
|
this.#koniState.updateKeyringState();
|
|
2727
|
-
if (this.#alwaysLock) {
|
|
2732
|
+
if (this.#alwaysLock && !createNew) {
|
|
2728
2733
|
this.keyringLock();
|
|
2729
2734
|
}
|
|
2730
2735
|
return {
|
|
@@ -2735,12 +2740,22 @@ export default class KoniExtension {
|
|
|
2735
2740
|
|
|
2736
2741
|
// Migrate password
|
|
2737
2742
|
|
|
2743
|
+
checkLockAfterMigrate() {
|
|
2744
|
+
const pairs = keyring.getPairs();
|
|
2745
|
+
const needMigrate = !!pairs.filter(acc => acc.address !== ALL_ACCOUNT_KEY && !acc.meta.isExternal && !acc.meta.isInjected).filter(acc => !acc.meta.isMasterPassword).length;
|
|
2746
|
+
if (!needMigrate) {
|
|
2747
|
+
if (this.#alwaysLock) {
|
|
2748
|
+
this.keyringLock();
|
|
2749
|
+
}
|
|
2750
|
+
}
|
|
2751
|
+
}
|
|
2738
2752
|
keyringMigrateMasterPassword({
|
|
2739
2753
|
address,
|
|
2740
2754
|
password
|
|
2741
2755
|
}) {
|
|
2742
2756
|
try {
|
|
2743
2757
|
keyring.migrateWithMasterPassword(address, password);
|
|
2758
|
+
this.checkLockAfterMigrate();
|
|
2744
2759
|
} catch (e) {
|
|
2745
2760
|
console.error(e);
|
|
2746
2761
|
return {
|
|
@@ -128,7 +128,7 @@ export default class KoniState {
|
|
|
128
128
|
removeAccountRef(address: string, callback: () => void): void;
|
|
129
129
|
getStakingReward(update: (value: StakingRewardJson) => void): void;
|
|
130
130
|
subscribeStakingReward(): Subject<StakingRewardJson>;
|
|
131
|
-
setCurrentAccount(data: CurrentAccountInfo, callback?: () => void): void;
|
|
131
|
+
setCurrentAccount(data: CurrentAccountInfo, callback?: () => void, preventOneAccount?: boolean): void;
|
|
132
132
|
setAccountTie(address: string, genesisHash: string | null): boolean;
|
|
133
133
|
switchEvmNetworkByUrl(shortenUrl: string, networkKey: string): Promise<void>;
|
|
134
134
|
switchNetworkAccount(id: string, url: string, networkKey: string, changeAddress?: string): Promise<boolean>;
|
|
@@ -463,7 +463,7 @@ export default class KoniState {
|
|
|
463
463
|
subscribeStakingReward() {
|
|
464
464
|
return this.stakingRewardSubject;
|
|
465
465
|
}
|
|
466
|
-
setCurrentAccount(data, callback) {
|
|
466
|
+
setCurrentAccount(data, callback, preventOneAccount) {
|
|
467
467
|
const {
|
|
468
468
|
address,
|
|
469
469
|
currentGenesisHash
|
|
@@ -478,9 +478,13 @@ export default class KoniState {
|
|
|
478
478
|
if (pairs.length > 1 || !pair) {
|
|
479
479
|
result.allGenesisHash = currentGenesisHash || undefined;
|
|
480
480
|
} else {
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
481
|
+
if (!preventOneAccount) {
|
|
482
|
+
result.address = pair.address;
|
|
483
|
+
result.currentGenesisHash = pairGenesisHash || '';
|
|
484
|
+
result.allGenesisHash = pairGenesisHash || undefined;
|
|
485
|
+
} else {
|
|
486
|
+
result.allGenesisHash = currentGenesisHash || undefined;
|
|
487
|
+
}
|
|
484
488
|
}
|
|
485
489
|
}
|
|
486
490
|
this.keyringService.setCurrentAccount(result);
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.1.
|
|
20
|
+
"version": "1.1.13-0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -707,6 +707,11 @@
|
|
|
707
707
|
"require": "./cjs/services/migration-service/scripts/MigrateSettings.js",
|
|
708
708
|
"default": "./services/migration-service/scripts/MigrateSettings.js"
|
|
709
709
|
},
|
|
710
|
+
"./services/migration-service/scripts/MigrateTokenDecimals": {
|
|
711
|
+
"types": "./services/migration-service/scripts/MigrateTokenDecimals.d.ts",
|
|
712
|
+
"require": "./cjs/services/migration-service/scripts/MigrateTokenDecimals.js",
|
|
713
|
+
"default": "./services/migration-service/scripts/MigrateTokenDecimals.js"
|
|
714
|
+
},
|
|
710
715
|
"./services/migration-service/scripts/MigrateTransactionHistory": {
|
|
711
716
|
"types": "./services/migration-service/scripts/MigrateTransactionHistory.d.ts",
|
|
712
717
|
"require": "./cjs/services/migration-service/scripts/MigrateTransactionHistory.js",
|
|
@@ -1221,11 +1226,11 @@
|
|
|
1221
1226
|
"@reduxjs/toolkit": "^1.9.1",
|
|
1222
1227
|
"@sora-substrate/type-definitions": "^1.17.7",
|
|
1223
1228
|
"@substrate/connect": "^0.7.26",
|
|
1224
|
-
"@subwallet/chain-list": "0.2.
|
|
1225
|
-
"@subwallet/extension-base": "^1.1.
|
|
1226
|
-
"@subwallet/extension-chains": "^1.1.
|
|
1227
|
-
"@subwallet/extension-dapp": "^1.1.
|
|
1228
|
-
"@subwallet/extension-inject": "^1.1.
|
|
1229
|
+
"@subwallet/chain-list": "^0.2.14",
|
|
1230
|
+
"@subwallet/extension-base": "^1.1.13-0",
|
|
1231
|
+
"@subwallet/extension-chains": "^1.1.13-0",
|
|
1232
|
+
"@subwallet/extension-dapp": "^1.1.13-0",
|
|
1233
|
+
"@subwallet/extension-inject": "^1.1.13-0",
|
|
1229
1234
|
"@subwallet/keyring": "^0.1.1",
|
|
1230
1235
|
"@subwallet/ui-keyring": "^0.1.1",
|
|
1231
1236
|
"@walletconnect/sign-client": "^2.8.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.1.
|
|
10
|
+
version: '1.1.13-0'
|
|
11
11
|
};
|
|
@@ -85,6 +85,12 @@ export declare const _XCM_TYPE: {
|
|
|
85
85
|
PR: string;
|
|
86
86
|
};
|
|
87
87
|
export declare const _DEFAULT_ACTIVE_CHAINS: string[];
|
|
88
|
+
export declare const EVM_PASS_CONNECT_STATUS: {
|
|
89
|
+
acala: string[];
|
|
90
|
+
};
|
|
91
|
+
export declare const EVM_REFORMAT_DECIMALS: {
|
|
92
|
+
acala: string[];
|
|
93
|
+
};
|
|
88
94
|
export declare const _CHAIN_INFO_SRC: string;
|
|
89
95
|
export declare const _CHAIN_ASSET_SRC: string;
|
|
90
96
|
export declare const _ASSET_REF_SRC: string;
|
|
@@ -216,6 +216,12 @@ export const _XCM_TYPE = {
|
|
|
216
216
|
};
|
|
217
217
|
|
|
218
218
|
export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS];
|
|
219
|
+
export const EVM_PASS_CONNECT_STATUS = {
|
|
220
|
+
acala: ['acala_evm', 'karura_evm']
|
|
221
|
+
};
|
|
222
|
+
export const EVM_REFORMAT_DECIMALS = {
|
|
223
|
+
acala: ['acala_evm', 'karura_evm']
|
|
224
|
+
};
|
|
219
225
|
|
|
220
226
|
// TODO: review
|
|
221
227
|
const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import '@polkadot/types-augment';
|
|
5
|
+
import { EVM_PASS_CONNECT_STATUS } from '@subwallet/extension-base/services/chain-service/constants';
|
|
5
6
|
import { _ChainConnectionStatus } from '@subwallet/extension-base/services/chain-service/types';
|
|
6
7
|
import { createPromiseHandler } from '@subwallet/extension-base/utils/promise';
|
|
7
8
|
import { BehaviorSubject } from 'rxjs';
|
|
8
9
|
import Web3 from 'web3';
|
|
10
|
+
const acalaEvmNetworks = EVM_PASS_CONNECT_STATUS.acala;
|
|
9
11
|
export class EvmApi {
|
|
10
12
|
apiRetry = 0;
|
|
11
13
|
isApiConnectedSubject = new BehaviorSubject(false);
|
|
@@ -67,11 +69,15 @@ export class EvmApi {
|
|
|
67
69
|
createIntervalCheckApi() {
|
|
68
70
|
this.clearIntervalCheckApi();
|
|
69
71
|
return setInterval(() => {
|
|
70
|
-
|
|
72
|
+
if (!acalaEvmNetworks.includes(this.chainSlug)) {
|
|
73
|
+
this.api.eth.net.isListening().then(() => {
|
|
74
|
+
this.onConnect();
|
|
75
|
+
}).catch(() => {
|
|
76
|
+
this.onDisconnect();
|
|
77
|
+
});
|
|
78
|
+
} else {
|
|
71
79
|
this.onConnect();
|
|
72
|
-
}
|
|
73
|
-
this.onDisconnect();
|
|
74
|
-
});
|
|
80
|
+
}
|
|
75
81
|
}, 10000);
|
|
76
82
|
}
|
|
77
83
|
clearIntervalCheckApi() {
|
|
@@ -82,17 +88,23 @@ export class EvmApi {
|
|
|
82
88
|
const wsProvider = this.provider;
|
|
83
89
|
wsProvider.connect && wsProvider.connect();
|
|
84
90
|
this.updateConnectionStatus(_ChainConnectionStatus.CONNECTING);
|
|
91
|
+
|
|
85
92
|
// Check if api is ready
|
|
86
|
-
|
|
93
|
+
if (!acalaEvmNetworks.includes(this.chainSlug)) {
|
|
94
|
+
this.api.eth.net.isListening().then(() => {
|
|
95
|
+
this.isApiReadyOnce = true;
|
|
96
|
+
this.onConnect();
|
|
97
|
+
}).catch(error => {
|
|
98
|
+
this.isApiReadyOnce = false;
|
|
99
|
+
this.isApiReady = false;
|
|
100
|
+
this.isReadyHandler.reject(error);
|
|
101
|
+
this.updateConnectionStatus(_ChainConnectionStatus.DISCONNECTED);
|
|
102
|
+
console.warn(`Can not connect to ${this.chainSlug} (EVM) at ${this.apiUrl}`);
|
|
103
|
+
});
|
|
104
|
+
} else {
|
|
87
105
|
this.isApiReadyOnce = true;
|
|
88
106
|
this.onConnect();
|
|
89
|
-
}
|
|
90
|
-
this.isApiReadyOnce = false;
|
|
91
|
-
this.isApiReady = false;
|
|
92
|
-
this.isReadyHandler.reject(error);
|
|
93
|
-
this.updateConnectionStatus(_ChainConnectionStatus.DISCONNECTED);
|
|
94
|
-
console.warn(`Can not connect to ${this.chainSlug} (EVM) at ${this.apiUrl}`);
|
|
95
|
-
});
|
|
107
|
+
}
|
|
96
108
|
|
|
97
109
|
// Interval to check connecting status
|
|
98
110
|
this.intervalCheckApi = this.createIntervalCheckApi();
|
|
@@ -5,6 +5,7 @@ import { _AssetType } from '@subwallet/chain-list/types';
|
|
|
5
5
|
import { AbstractChainHandler } from '@subwallet/extension-base/services/chain-service/handler/AbstractChainHandler';
|
|
6
6
|
import { EvmApi } from '@subwallet/extension-base/services/chain-service/handler/EvmApi';
|
|
7
7
|
import { _ERC20_ABI, _ERC721_ABI } from '@subwallet/extension-base/services/chain-service/helper';
|
|
8
|
+
import BigN from 'bignumber.js';
|
|
8
9
|
import { logger as createLogger } from '@polkadot/util/logger';
|
|
9
10
|
export class EvmChainHandler extends AbstractChainHandler {
|
|
10
11
|
evmApiMap = {};
|
|
@@ -127,7 +128,7 @@ export class EvmChainHandler extends AbstractChainHandler {
|
|
|
127
128
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
128
129
|
tokenContract.methods.symbol().call()]);
|
|
129
130
|
name = _symbol;
|
|
130
|
-
decimals = _decimals;
|
|
131
|
+
decimals = new BigN(_decimals).toNumber();
|
|
131
132
|
symbol = _symbol;
|
|
132
133
|
}
|
|
133
134
|
if (name === '' || symbol === '') {
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { _isCustomAsset } from '@subwallet/extension-base/services/chain-service/utils';
|
|
5
|
+
import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
|
|
6
|
+
export default class MigrateTokenDecimals extends BaseMigrationJob {
|
|
7
|
+
async run() {
|
|
8
|
+
const state = this.state;
|
|
9
|
+
return new Promise(resolve => {
|
|
10
|
+
const assetMap = state.getAssetRegistry();
|
|
11
|
+
for (const [slug, info] of Object.entries(assetMap)) {
|
|
12
|
+
if (_isCustomAsset(slug)) {
|
|
13
|
+
state.chainService.upsertCustomToken({
|
|
14
|
+
...info,
|
|
15
|
+
decimals: info.decimals ? parseInt(info.decimals.toString()) : info.decimals
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
resolve();
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -11,6 +11,7 @@ import MigrateImportedToken from "./MigrateImportedToken.js";
|
|
|
11
11
|
import MigrateLedgerAccount from "./MigrateLedgerAccount.js";
|
|
12
12
|
import MigrateNetworkSettings from "./MigrateNetworkSettings.js";
|
|
13
13
|
import MigrateSettings from "./MigrateSettings.js";
|
|
14
|
+
import MigrateTokenDecimals from "./MigrateTokenDecimals.js";
|
|
14
15
|
import MigrateTransactionHistory from "./MigrateTransactionHistory.js";
|
|
15
16
|
import MigrateWalletReference from "./MigrateWalletReference.js";
|
|
16
17
|
export const EVERYTIME = '__everytime__';
|
|
@@ -26,6 +27,7 @@ export default {
|
|
|
26
27
|
'1.0.9-01': MigrateLedgerAccount,
|
|
27
28
|
'1.0.12-02': MigrateEthProvider,
|
|
28
29
|
'1.1.6-01': MigrateWalletReference,
|
|
29
|
-
'1.1.7': DeleteChain
|
|
30
|
+
'1.1.7': DeleteChain,
|
|
31
|
+
'1.1.13-01': MigrateTokenDecimals
|
|
30
32
|
// [`${EVERYTIME}-1`]: AutoEnableChainsTokens
|
|
31
33
|
};
|
|
@@ -11,13 +11,17 @@ export default class SettingService {
|
|
|
11
11
|
passPhishingStore = new PassPhishingStore();
|
|
12
12
|
constructor() {
|
|
13
13
|
let old = localStorage.getItem(LANGUAGE) || 'en';
|
|
14
|
-
|
|
14
|
+
const updateLanguage = ({
|
|
15
15
|
language
|
|
16
16
|
}) => {
|
|
17
17
|
if (language !== old) {
|
|
18
18
|
old = language;
|
|
19
19
|
i18n.changeLanguage(language).catch(console.error);
|
|
20
20
|
}
|
|
21
|
+
};
|
|
22
|
+
this.getSettings(updateLanguage);
|
|
23
|
+
this.settingsStore.getSubject().subscribe({
|
|
24
|
+
next: updateLanguage
|
|
21
25
|
});
|
|
22
26
|
}
|
|
23
27
|
getSubject() {
|
package/utils/environment.js
CHANGED
|
@@ -63,7 +63,7 @@ export const getOS = () => {
|
|
|
63
63
|
// @ts-ignore
|
|
64
64
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
65
65
|
const platform = ((_window$navigator = window.navigator) === null || _window$navigator === void 0 ? void 0 : (_window$navigator$use = _window$navigator.userAgentData) === null || _window$navigator$use === void 0 ? void 0 : _window$navigator$use.platform) || window.navigator.platform;
|
|
66
|
-
const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];
|
|
66
|
+
const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K', 'macOS'];
|
|
67
67
|
const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];
|
|
68
68
|
const iosPlatforms = ['iPhone', 'iPad', 'iPod'];
|
|
69
69
|
let os = 'Unknown';
|