@subwallet/extension-base 1.3.45-1 → 1.3.46-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.
Files changed (73) hide show
  1. package/background/KoniTypes.d.ts +5 -0
  2. package/background/KoniTypes.js +5 -0
  3. package/background/types.d.ts +2 -0
  4. package/cjs/background/KoniTypes.js +7 -1
  5. package/cjs/core/logic-validation/request.js +55 -28
  6. package/cjs/core/utils.js +22 -0
  7. package/cjs/koni/background/handlers/Extension.js +84 -61
  8. package/cjs/koni/background/handlers/Tabs.js +11 -3
  9. package/cjs/packageInfo.js +1 -1
  10. package/cjs/page/evm/index.js +64 -105
  11. package/cjs/page/index.js +5 -3
  12. package/cjs/page/substrate/Accounts.js +2 -1
  13. package/cjs/services/balance-service/helpers/subscribe/index.js +3 -76
  14. package/cjs/services/chain-service/index.js +3 -0
  15. package/cjs/services/chain-service/utils/index.js +31 -1
  16. package/cjs/services/earning-service/constants/chains.js +2 -1
  17. package/cjs/services/earning-service/handlers/native-staking/base.js +3 -0
  18. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +9 -2
  19. package/cjs/services/earning-service/handlers/nomination-pool/index.js +6 -3
  20. package/cjs/services/earning-service/service.js +39 -17
  21. package/cjs/services/keyring-service/context/handlers/Json.js +2 -1
  22. package/cjs/services/keyring-service/context/handlers/Ledger.js +7 -2
  23. package/cjs/services/request-service/handler/AuthRequestHandler.js +30 -6
  24. package/cjs/types/account/info/keyring.js +1 -0
  25. package/cjs/utils/account/analyze.js +5 -2
  26. package/cjs/utils/account/common.js +93 -2
  27. package/cjs/utils/account/transform.js +10 -0
  28. package/cjs/utils/asset.js +9 -2
  29. package/cjs/utils/staticData/index.js +7 -2
  30. package/core/logic-validation/request.js +31 -4
  31. package/core/types.d.ts +3 -2
  32. package/core/utils.js +24 -2
  33. package/koni/background/handlers/Extension.js +31 -8
  34. package/koni/background/handlers/Tabs.js +11 -4
  35. package/package.json +7 -6
  36. package/packageInfo.js +1 -1
  37. package/page/evm/index.d.ts +9 -18
  38. package/page/evm/index.js +62 -101
  39. package/page/index.js +5 -3
  40. package/page/substrate/Accounts.js +2 -1
  41. package/services/balance-service/helpers/subscribe/index.d.ts +1 -11
  42. package/services/balance-service/helpers/subscribe/index.js +3 -74
  43. package/services/chain-service/index.d.ts +1 -0
  44. package/services/chain-service/index.js +3 -0
  45. package/services/chain-service/utils/index.d.ts +10 -2
  46. package/services/chain-service/utils/index.js +26 -2
  47. package/services/earning-service/constants/chains.d.ts +1 -0
  48. package/services/earning-service/constants/chains.js +2 -1
  49. package/services/earning-service/handlers/native-staking/base.d.ts +1 -0
  50. package/services/earning-service/handlers/native-staking/base.js +3 -0
  51. package/services/earning-service/handlers/native-staking/relay-chain.js +9 -2
  52. package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -0
  53. package/services/earning-service/handlers/nomination-pool/index.js +6 -3
  54. package/services/earning-service/service.d.ts +2 -0
  55. package/services/earning-service/service.js +42 -20
  56. package/services/keyring-service/context/handlers/Json.js +2 -1
  57. package/services/keyring-service/context/handlers/Ledger.js +7 -2
  58. package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
  59. package/services/request-service/handler/AuthRequestHandler.js +30 -6
  60. package/services/request-service/types.d.ts +1 -0
  61. package/types/account/action/subscribe.d.ts +3 -0
  62. package/types/account/info/keyring.d.ts +3 -0
  63. package/types/account/info/keyring.js +1 -0
  64. package/types/balance/transfer.d.ts +1 -0
  65. package/utils/account/analyze.js +5 -2
  66. package/utils/account/common.d.ts +13 -1
  67. package/utils/account/common.js +91 -2
  68. package/utils/account/transform.js +10 -0
  69. package/utils/asset.d.ts +2 -1
  70. package/utils/asset.js +7 -1
  71. package/utils/staticData/assetHubStaking.json +1 -0
  72. package/utils/staticData/index.d.ts +4 -1
  73. package/utils/staticData/index.js +5 -1
@@ -4,124 +4,51 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = void 0;
7
+ exports.createSubWalletEvmProvider = createSubWalletEvmProvider;
8
8
  var _safeEventEmitter = _interopRequireDefault(require("@metamask/safe-event-emitter"));
9
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
10
  // SPDX-License-Identifier: Apache-2.0
11
11
 
12
- let subscribeFlag = false;
13
- class SubWalletEvmProvider extends _safeEventEmitter.default {
14
- isSubWallet = true;
15
- isMetaMask = false;
16
- _connected = false;
17
- constructor(sendMessage, version) {
18
- super();
19
- this.version = version;
20
- this.sendMessage = sendMessage;
21
- this._connected = true;
22
- }
23
- get connected() {
24
- return this._connected;
25
- }
26
- isConnected() {
27
- return this._connected;
28
- }
29
- subscribeExtensionEvents() {
12
+ function createSubWalletEvmProvider(sendMessage, version) {
13
+ const emitter = new _safeEventEmitter.default();
14
+ let connected = true;
15
+ let subscribeFlag = false;
16
+ const provider = Object.assign(emitter, {
17
+ isSubWallet: true,
18
+ isMetaMask: false,
19
+ version
20
+ });
21
+ function subscribeExtensionEvents() {
30
22
  if (subscribeFlag) {
31
23
  return;
32
24
  }
33
- this.sendMessage('evm(events.subscribe)', null, _ref => {
25
+ sendMessage('evm(events.subscribe)', null, _ref => {
34
26
  let {
35
27
  payload,
36
28
  type
37
29
  } = _ref;
38
30
  if (['connect', 'disconnect', 'accountsChanged', 'chainChanged', 'message', 'data', 'reconnect', 'error'].includes(type)) {
39
31
  if (type === 'connect') {
40
- this._connected = true;
32
+ connected = true;
41
33
  } else if (type === 'disconnect') {
42
- this._connected = false;
34
+ connected = false;
43
35
  }
44
36
  const finalType = type === 'data' ? 'message' : type;
45
-
46
- // eslint-disable-next-line @typescript-eslint/no-unsafe-call
47
- this.emit(finalType, payload);
37
+ emitter.emit(finalType, payload);
48
38
  } else {
49
39
  console.warn('Can not handle event', type, payload);
50
40
  }
51
- }).then(done => {
41
+ }).then(() => {
52
42
  subscribeFlag = true;
53
43
  }).catch(() => {
54
44
  subscribeFlag = false;
55
45
  });
56
- subscribeFlag = true;
57
- }
58
- async enable() {
59
- return this.request({
60
- method: 'eth_requestAccounts'
61
- });
62
- }
63
- on(eventName, listener) {
64
- this.subscribeExtensionEvents();
65
- super.on(eventName, listener);
66
- return this;
67
46
  }
68
- once(eventName, listener) {
69
- this.subscribeExtensionEvents();
70
- super.once(eventName, listener);
71
- return this;
72
- }
73
- request(_ref2) {
74
- let {
75
- method,
76
- params
77
- } = _ref2;
78
- // if (!this._isEnable) {
79
- // if (method === 'eth_accounts') {
80
- // return this.request<T>({ method: 'eth_requestAccounts' });
81
- // }
82
- // }
83
-
84
- // Subscribe events
85
- switch (method) {
86
- case 'eth_requestAccounts':
87
- return new Promise((resolve, reject) => {
88
- const origin = document.title !== '' ? document.title : window.location.hostname;
89
- this.sendMessage('pub(authorize.tabV2)', {
90
- origin,
91
- accountAuthTypes: ['evm']
92
- }).then(() => {
93
- // Return account list
94
- this.request({
95
- method: 'eth_accounts'
96
- }).then(accounts => {
97
- // @ts-ignore
98
- resolve(accounts);
99
- }).catch(e => {
100
- reject(e);
101
- });
102
- }).catch(e => {
103
- reject(e);
104
- });
105
- });
106
- default:
107
- return new Promise((resolve, reject) => {
108
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
109
- this.sendMessage('evm(request)', {
110
- params,
111
- method
112
- }).then(result => {
113
- resolve(result);
114
- }).catch(e => {
115
- reject(e);
116
- });
117
- });
118
- }
119
- }
120
- _sendSync(payload) {
47
+ const _sendSync = payload => {
121
48
  let result;
122
49
  switch (payload.method) {
123
50
  case 'net_version':
124
- result = this.version ? `SubWallet v${this.version}` : null;
51
+ result = version ? `SubWallet v${version}` : null;
125
52
  break;
126
53
  default:
127
54
  throw new Error(`Not support ${payload.method}`);
@@ -131,29 +58,61 @@ class SubWalletEvmProvider extends _safeEventEmitter.default {
131
58
  jsonrpc: payload.jsonrpc,
132
59
  result
133
60
  };
134
- }
135
- send(methodOrPayload, callbackOrArgs) {
61
+ };
62
+ provider.isConnected = () => connected;
63
+ provider.request = arg => {
64
+ if (arg.method === 'eth_requestAccounts') {
65
+ const origin = document.title || window.location.hostname;
66
+ return sendMessage('pub(authorize.tabV2)', {
67
+ origin,
68
+ accountAuthTypes: ['evm']
69
+ }).then(() => provider.request({
70
+ method: 'eth_accounts'
71
+ }));
72
+ }
73
+ return sendMessage('evm(request)', arg);
74
+ };
75
+ provider.send = (methodOrPayload, callbackOrArgs) => {
136
76
  if (typeof methodOrPayload === 'string' && (!callbackOrArgs || Array.isArray(callbackOrArgs))) {
137
- return this.request({
77
+ return provider.request({
138
78
  method: methodOrPayload,
139
79
  params: callbackOrArgs
140
80
  });
141
- } else if (methodOrPayload && typeof methodOrPayload === 'object' && typeof callbackOrArgs === 'function') {
142
- return this.request(methodOrPayload).then(rs => {
143
- callbackOrArgs(rs);
81
+ } else if (typeof methodOrPayload === 'object' && typeof callbackOrArgs === 'function') {
82
+ return provider.request(methodOrPayload).then(result => {
83
+ callbackOrArgs(null, result);
144
84
  });
145
85
  }
146
- return this._sendSync(methodOrPayload);
147
- }
148
- sendAsync(payload, callback) {
149
- this.request(payload).then(result => {
150
- // @ts-ignore
86
+ return _sendSync(methodOrPayload);
87
+ };
88
+ provider.enable = async () => {
89
+ const accounts = await provider.request({
90
+ method: 'eth_requestAccounts'
91
+ });
92
+ connected = accounts.length > 0;
93
+ return accounts;
94
+ };
95
+ provider.sendAsync = (payload, callback) => {
96
+ provider.request(payload).then(result => {
151
97
  callback(null, {
98
+ id: payload.id,
99
+ jsonrpc: payload.jsonrpc,
100
+ // @ts-ignore
152
101
  result
153
102
  });
154
103
  }).catch(e => {
155
104
  callback(e);
156
105
  });
157
- }
158
- }
159
- exports.default = SubWalletEvmProvider;
106
+ };
107
+ provider.on = (eventName, listener) => {
108
+ subscribeExtensionEvents();
109
+ _safeEventEmitter.default.prototype.on.call(emitter, eventName, listener);
110
+ return provider;
111
+ };
112
+ provider.once = (eventName, listener) => {
113
+ subscribeExtensionEvents();
114
+ _safeEventEmitter.default.prototype.once.call(emitter, eventName, listener);
115
+ return provider;
116
+ };
117
+ return provider;
118
+ }
package/cjs/page/index.js CHANGED
@@ -14,7 +14,7 @@ var _ProviderError = require("@subwallet/extension-base/background/errors/Provid
14
14
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
15
15
  var _bitcoin = _interopRequireDefault(require("@subwallet/extension-base/page/bitcoin"));
16
16
  var _cardano = _interopRequireDefault(require("@subwallet/extension-base/page/cardano"));
17
- var _evm = _interopRequireDefault(require("@subwallet/extension-base/page/evm"));
17
+ var _evm = require("@subwallet/extension-base/page/evm");
18
18
  var _substrate = _interopRequireDefault(require("@subwallet/extension-base/page/substrate"));
19
19
  var _defaults = require("../defaults");
20
20
  var _getId = require("../utils/getId");
@@ -48,9 +48,11 @@ function sendMessage(message, request, subscriber) {
48
48
 
49
49
  async function enable(origin, opt) {
50
50
  const accountAuthTypes = (opt === null || opt === void 0 ? void 0 : opt.accountAuthType) === 'both' ? ['substrate', 'evm'] : [(opt === null || opt === void 0 ? void 0 : opt.accountAuthType) || 'substrate'];
51
+ const canConnectSubstrateEcdsa = accountAuthTypes.includes('evm');
51
52
  await sendMessage('pub(authorize.tabV2)', {
52
53
  origin,
53
- accountAuthTypes
54
+ accountAuthTypes,
55
+ canConnectSubstrateEcdsa
54
56
  });
55
57
  return new _substrate.default(sendMessage);
56
58
  }
@@ -74,7 +76,7 @@ function handleResponse(data) {
74
76
  }
75
77
  }
76
78
  function initEvmProvider(version) {
77
- return new _evm.default(sendMessage, version);
79
+ return (0, _evm.createSubWalletEvmProvider)(sendMessage, version);
78
80
  }
79
81
  function initCardanoProvider() {
80
82
  return new _cardano.default(sendMessage);
@@ -15,7 +15,8 @@ class Accounts {
15
15
  }
16
16
  get(anyType) {
17
17
  return sendRequest('pub(accounts.listV2)', {
18
- anyType
18
+ anyType,
19
+ isSubstrateConnector: true
19
20
  });
20
21
  }
21
22
  subscribe(cb) {
@@ -1,94 +1,21 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
- exports.getAccountJsonByAddress = void 0;
8
6
  exports.subscribeBalance = subscribeBalance;
9
7
  var _types = require("@subwallet/chain-list/types");
10
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
11
- var _bitcoin2 = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/bitcoin");
9
+ var _bitcoin = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/bitcoin");
12
10
  var _cardano = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano");
13
11
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
14
12
  var _utils2 = require("@subwallet/extension-base/utils");
15
- var _uiKeyring = _interopRequireDefault(require("@subwallet/ui-keyring"));
16
13
  var _ton = require("./ton/ton");
17
14
  var _evm = require("./evm");
18
15
  var _substrate = require("./substrate");
19
16
  // Copyright 2019-2022 @subwallet/extension-base
20
17
  // SPDX-License-Identifier: Apache-2.0
21
18
 
22
- /**
23
- * @function getAccountJsonByAddress
24
- * @desc Get account info by address
25
- * <p>
26
- * Note: Use on the background only
27
- * </p>
28
- * @param {string} address - Address
29
- * @returns {AccountJson|null} - Account info or null if not found
30
- */
31
- const getAccountJsonByAddress = address => {
32
- try {
33
- const pair = _uiKeyring.default.getPair(address);
34
- if (pair) {
35
- return (0, _utils2.pairToAccount)(pair);
36
- } else {
37
- return null;
38
- }
39
- } catch (e) {
40
- console.warn(e);
41
- return null;
42
- }
43
- };
44
-
45
- /** Filter addresses to subscribe by chain info */
46
- exports.getAccountJsonByAddress = getAccountJsonByAddress;
47
- const filterAddress = (addresses, chainInfo) => {
48
- const {
49
- _bitcoin,
50
- bitcoin,
51
- cardano,
52
- evm,
53
- substrate,
54
- ton
55
- } = (0, _utils2.getAddressesByChainTypeMap)(addresses, chainInfo);
56
- if ((0, _utils._isChainEvmCompatible)(chainInfo)) {
57
- return [evm, [bitcoin, substrate, ton, cardano, _bitcoin].flat()];
58
- } else if ((0, _utils._isChainBitcoinCompatible)(chainInfo)) {
59
- return [bitcoin, [evm, substrate, ton, cardano, _bitcoin].flat()];
60
- } else if ((0, _utils._isChainTonCompatible)(chainInfo)) {
61
- return [ton, [bitcoin, evm, substrate, cardano, _bitcoin].flat()];
62
- } else if ((0, _utils._isChainCardanoCompatible)(chainInfo)) {
63
- return [cardano, [bitcoin, evm, substrate, ton, _bitcoin].flat()];
64
- } else {
65
- const fetchList = [];
66
- const unfetchList = [];
67
- substrate.forEach(address => {
68
- const account = getAccountJsonByAddress(address);
69
- if (account) {
70
- if (account.isHardware) {
71
- if (account.isGeneric) {
72
- fetchList.push(address);
73
- } else {
74
- const availGen = account.availableGenesisHashes || [];
75
- const gen = (0, _utils._getSubstrateGenesisHash)(chainInfo);
76
- if (availGen.includes(gen)) {
77
- fetchList.push(address);
78
- } else {
79
- unfetchList.push(address);
80
- }
81
- }
82
- } else {
83
- fetchList.push(address);
84
- }
85
- } else {
86
- fetchList.push(address);
87
- }
88
- });
89
- return [fetchList, [unfetchList, bitcoin, evm, ton, cardano, _bitcoin].flat()];
90
- }
91
- };
92
19
  const handleUnsupportedOrPendingAddresses = (addresses, chainSlug, chainAssetMap, state, callback) => {
93
20
  const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20, _types._AssetType.VFT, _types._AssetType.TEP74, _types._AssetType.CIP26]);
94
21
  const now = new Date().getTime();
@@ -120,7 +47,7 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
120
47
  // Looping over each chain
121
48
  const unsubList = Object.values(chainInfoMap).map(async chainInfo => {
122
49
  const chainSlug = chainInfo.slug;
123
- const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
50
+ const [useAddresses, notSupportAddresses] = (0, _utils2.filterAddressByChainInfo)(addresses, chainInfo);
124
51
  if (notSupportAddresses.length) {
125
52
  handleUnsupportedOrPendingAddresses(notSupportAddresses, chainSlug, chainAssetMap, _KoniTypes.APIItemState.NOT_SUPPORT, callback);
126
53
  }
@@ -156,7 +83,7 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
156
83
  }
157
84
  const bitcoinApi = bitcoinApiMap[chainSlug];
158
85
  if ((0, _utils._isPureBitcoinChain)(chainInfo)) {
159
- return (0, _bitcoin2.subscribeBitcoinBalance)({
86
+ return (0, _bitcoin.subscribeBitcoinBalance)({
160
87
  addresses: useAddresses,
161
88
  assetMap: chainAssetMap,
162
89
  bitcoinApi,
@@ -1043,6 +1043,9 @@ class ChainService {
1043
1043
  async fetchLatestSufficientChains() {
1044
1044
  return (await (0, _utils2.fetchStaticData)('chains/supported-sufficient-chains')) || [];
1045
1045
  }
1046
+ async fetchAhMapChain() {
1047
+ return await (0, _utils2.fetchStaticData)('asset-hub-staking-map');
1048
+ }
1046
1049
  async initChains() {
1047
1050
  const storedChainSettings = await this.dbService.getAllChainStore();
1048
1051
  const defaultChainInfoMap = filterChainInfoMap(_chainList.ChainInfoMap, ignoredList);
@@ -28,6 +28,8 @@ var _exportNames = {
28
28
  _isBridgedToken: true,
29
29
  _getTokenMinAmount: true,
30
30
  _isChainEvmCompatible: true,
31
+ _isChainCompatibleLedgerEvm: true,
32
+ _isSubstrateEvmCompatibleChain: true,
31
33
  _isChainBitcoinCompatible: true,
32
34
  _isChainTonCompatible: true,
33
35
  _isChainCardanoCompatible: true,
@@ -56,6 +58,7 @@ var _exportNames = {
56
58
  _getTokenTypesSupportedByChain: true,
57
59
  _getChainNativeTokenBasicInfo: true,
58
60
  _getChainNativeTokenSlug: true,
61
+ _getChainSubstrateTokenSymbol: true,
59
62
  _isLocalToken: true,
60
63
  _isTokenEvmSmartContract: true,
61
64
  _isTokenTonSmartContract: true,
@@ -120,6 +123,7 @@ exports._getChainName = _getChainName;
120
123
  exports._getChainNativeTokenBasicInfo = _getChainNativeTokenBasicInfo;
121
124
  exports._getChainNativeTokenSlug = _getChainNativeTokenSlug;
122
125
  exports._getChainSubstrateAddressPrefix = _getChainSubstrateAddressPrefix;
126
+ exports._getChainSubstrateTokenSymbol = _getChainSubstrateTokenSymbol;
123
127
  exports._getContractAddressOfToken = _getContractAddressOfToken;
124
128
  exports._getCrowdloanUrlFromChain = _getCrowdloanUrlFromChain;
125
129
  exports._getCustomAssets = _getCustomAssets;
@@ -152,6 +156,7 @@ exports._isBridgedToken = _isBridgedToken;
152
156
  exports._isCIP26Token = _isCIP26Token;
153
157
  exports._isChainBitcoinCompatible = _isChainBitcoinCompatible;
154
158
  exports._isChainCardanoCompatible = _isChainCardanoCompatible;
159
+ exports._isChainCompatibleLedgerEvm = _isChainCompatibleLedgerEvm;
155
160
  exports._isChainEnabled = _isChainEnabled;
156
161
  exports._isChainEvmCompatible = _isChainEvmCompatible;
157
162
  exports._isChainInfoCompatibleWithAccountInfo = void 0;
@@ -184,6 +189,7 @@ exports._isPureSubstrateChain = _isPureSubstrateChain;
184
189
  exports._isPureTonChain = _isPureTonChain;
185
190
  exports._isRelayChain = _isRelayChain;
186
191
  exports._isSmartContractToken = _isSmartContractToken;
192
+ exports._isSubstrateEvmCompatibleChain = _isSubstrateEvmCompatibleChain;
187
193
  exports._isSubstrateParaChain = _isSubstrateParaChain;
188
194
  exports._isSubstrateRelayChain = _isSubstrateRelayChain;
189
195
  exports._isSupportOrdinal = void 0;
@@ -358,6 +364,12 @@ function _getTokenMinAmount(tokenInfo) {
358
364
  function _isChainEvmCompatible(chainInfo) {
359
365
  return !!chainInfo.evmInfo;
360
366
  }
367
+ function _isChainCompatibleLedgerEvm(chainInfo) {
368
+ return !!chainInfo.evmInfo && chainInfo.evmInfo.evmChainId > 0;
369
+ }
370
+ function _isSubstrateEvmCompatibleChain(chainInfo) {
371
+ return !!chainInfo.evmInfo && !!chainInfo.substrateInfo;
372
+ }
361
373
  function _isChainBitcoinCompatible(chainInfo) {
362
374
  return !!chainInfo.bitcoinInfo;
363
375
  }
@@ -529,6 +541,13 @@ function _getChainNativeTokenSlug(chainInfo) {
529
541
  }
530
542
  return `${chainInfo.slug}-${_types._AssetType.NATIVE}-${_getChainNativeTokenBasicInfo(chainInfo).symbol}`;
531
543
  }
544
+ function _getChainSubstrateTokenSymbol(chainInfo) {
545
+ if (chainInfo.substrateInfo) {
546
+ return chainInfo.substrateInfo.symbol || '';
547
+ } else {
548
+ return '';
549
+ }
550
+ }
532
551
  function _isLocalToken(tokenInfo) {
533
552
  return tokenInfo.assetType === _types._AssetType.LOCAL;
534
553
  }
@@ -816,11 +835,22 @@ const _chainInfoToChainType = chainInfo => {
816
835
  return _types3.AccountChainType.SUBSTRATE;
817
836
  };
818
837
  exports._chainInfoToChainType = _chainInfoToChainType;
819
- const _isChainInfoCompatibleWithAccountInfo = (chainInfo, accountChainType, accountType) => {
838
+ const _isChainInfoCompatibleWithAccountInfo = (chainInfo, accountInfo) => {
839
+ const {
840
+ chainType: accountChainType,
841
+ signMode: accountSignMode,
842
+ type: accountType
843
+ } = accountInfo;
820
844
  if (accountChainType === _types3.AccountChainType.SUBSTRATE) {
821
845
  return _isPureSubstrateChain(chainInfo) && _types4.SubstrateKeypairTypes.includes(accountType);
822
846
  }
823
847
  if (accountChainType === _types3.AccountChainType.ETHEREUM) {
848
+ if (accountSignMode === _types3.AccountSignMode.ECDSA_SUBSTRATE_LEDGER) {
849
+ return _isSubstrateEvmCompatibleChain(chainInfo) && _types4.EthereumKeypairTypes.includes(accountType);
850
+ }
851
+ if (accountSignMode === _types3.AccountSignMode.GENERIC_LEDGER) {
852
+ return _isChainCompatibleLedgerEvm(chainInfo) && _types4.EthereumKeypairTypes.includes(accountType);
853
+ }
824
854
  return _isChainEvmCompatible(chainInfo) && _types4.EthereumKeypairTypes.includes(accountType);
825
855
  }
826
856
  if (accountChainType === _types3.AccountChainType.TON) {
@@ -8,7 +8,8 @@ exports._STAKING_CHAIN_GROUP = exports.TON_CHAINS = exports.ST_LIQUID_TOKEN_ABI
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
10
  const _STAKING_CHAIN_GROUP = {
11
- relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet', 'dentnet', 'cere'],
11
+ relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet', 'dentnet', 'cere', 'statemine', 'statemint', 'westend_assethub'],
12
+ assetHub: ['statemine', 'statemint', 'westend_assethub'],
12
13
  para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network', 'polimec'],
13
14
  astar: ['astar', 'shiden', 'shibuya'],
14
15
  amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum', 'krest_network'],
@@ -23,6 +23,9 @@ class BaseNativeStakingPoolHandler extends _base.default {
23
23
  withdraw: true,
24
24
  claimReward: false
25
25
  };
26
+ static generateSlug(symbol, chain) {
27
+ return `${symbol}___native_staking___${chain}`;
28
+ }
26
29
  constructor(state, chain) {
27
30
  super(state, chain);
28
31
  const _chainAsset = this.nativeToken;
@@ -659,8 +659,15 @@ class RelayNativeStakingPoolHandler extends _base.default {
659
659
  async handleYieldWithdraw(address, unstakingInfo) {
660
660
  const chainApi = await this.substrateApi.isReady;
661
661
  if (chainApi.api.tx.staking.withdrawUnbonded.meta.args.length === 1) {
662
- const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
663
- const slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
662
+ let slashingSpanCount;
663
+ if (chainApi.api.query.staking.nominatorSlashInEra) {
664
+ const currentEra = await chainApi.api.query.staking.currentEra();
665
+ const slashingSpans = (await chainApi.api.query.staking.nominatorSlashInEra(currentEra.toPrimitive(), address)).toPrimitive();
666
+ slashingSpanCount = slashingSpans !== null ? slashingSpans.toString() : '0';
667
+ } else {
668
+ const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
669
+ slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
670
+ }
664
671
  return chainApi.api.tx.staking.withdrawUnbonded(slashingSpanCount);
665
672
  } else {
666
673
  // @ts-ignore
@@ -29,6 +29,9 @@ class NominationPoolHandler extends _base.default {
29
29
  withdraw: true,
30
30
  claimReward: true
31
31
  };
32
+ static generateSlug(symbol, chain) {
33
+ return `${symbol}___nomination_pool___${chain}`;
34
+ }
32
35
  constructor(state, chain) {
33
36
  super(state, chain);
34
37
  const _chainAsset = this.nativeToken;
@@ -87,7 +90,8 @@ class NominationPoolHandler extends _base.default {
87
90
  const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
88
91
  const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
89
92
  const maxSupportedEras = substrateApi.api.consts.staking.historyDepth.toString();
90
- const erasPerDay = 24 / _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug]; // Can be exactly calculate from epochDuration, blockTime, sessionsPerEra
93
+ const eraInHours = _constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _constants._STAKING_ERA_LENGTH_MAP.default; // in hours
94
+ const erasPerDay = 24 / eraInHours; // Can be exactly calculate from epochDuration, blockTime, sessionsPerEra
91
95
 
92
96
  const supportedDays = (0, _utils.getSupportedDaysByHistoryDepth)(erasPerDay, parseInt(maxSupportedEras), parseInt(currentEra) / erasPerDay);
93
97
  const startEra = parseInt(currentEra) - supportedDays * erasPerDay;
@@ -569,8 +573,7 @@ class NominationPoolHandler extends _base.default {
569
573
  async handleYieldWithdraw(address, unstakingInfo) {
570
574
  const chainApi = await this.substrateApi.isReady;
571
575
  if (chainApi.api.tx.nominationPools.withdrawUnbonded.meta.args.length === 2) {
572
- const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
573
- const slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
576
+ const slashingSpanCount = await chainApi.api.call.nominationPoolsApi.memberPendingSlash(address);
574
577
  return chainApi.api.tx.nominationPools.withdrawUnbonded({
575
578
  Id: address
576
579
  }, slashingSpanCount);