@subwallet/extension-base 1.3.45-1 → 1.3.47-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 (128) 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/api/nft/ordinal_nft/index.js +3 -2
  8. package/cjs/koni/background/handlers/Extension.js +84 -61
  9. package/cjs/koni/background/handlers/State.js +3 -0
  10. package/cjs/koni/background/handlers/Tabs.js +11 -3
  11. package/cjs/packageInfo.js +1 -1
  12. package/cjs/page/evm/index.js +64 -105
  13. package/cjs/page/index.js +5 -3
  14. package/cjs/page/substrate/Accounts.js +2 -1
  15. package/cjs/services/balance-service/helpers/subscribe/index.js +3 -76
  16. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +8 -14
  17. package/cjs/services/buy-service/index.js +2 -0
  18. package/cjs/services/chain-service/index.js +3 -0
  19. package/cjs/services/chain-service/utils/index.js +34 -1
  20. package/cjs/services/chain-service/utils/patch.js +1 -1
  21. package/cjs/services/earning-service/constants/chains.js +2 -1
  22. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +32 -0
  23. package/cjs/services/earning-service/handlers/native-staking/astar.js +18 -0
  24. package/cjs/services/earning-service/handlers/native-staking/base.js +40 -29
  25. package/cjs/services/earning-service/handlers/native-staking/dtao.js +5 -0
  26. package/cjs/services/earning-service/handlers/native-staking/mythos.js +28 -0
  27. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +17 -0
  28. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +25 -2
  29. package/cjs/services/earning-service/handlers/native-staking/tao.js +5 -0
  30. package/cjs/services/earning-service/handlers/nomination-pool/index.js +6 -3
  31. package/cjs/services/earning-service/service.js +65 -22
  32. package/cjs/services/history-service/index.js +12 -7
  33. package/cjs/services/keyring-service/context/handlers/Json.js +2 -1
  34. package/cjs/services/keyring-service/context/handlers/Ledger.js +7 -2
  35. package/cjs/services/request-service/handler/AuthRequestHandler.js +30 -6
  36. package/cjs/services/subscan-service/index.js +35 -104
  37. package/cjs/services/transaction-service/utils.js +10 -1
  38. package/cjs/strategy/api-request-strategy/index.js +1 -0
  39. package/cjs/strategy/api-request-strategy/utils/index.js +2 -2
  40. package/cjs/strategy/api-request-strategy-v2/index.js +138 -0
  41. package/cjs/strategy/api-request-strategy-v2/types.js +1 -0
  42. package/cjs/types/account/info/keyring.js +1 -0
  43. package/cjs/utils/account/analyze.js +5 -2
  44. package/cjs/utils/account/common.js +93 -2
  45. package/cjs/utils/account/transform.js +10 -0
  46. package/cjs/utils/asset.js +9 -2
  47. package/cjs/utils/gear/combine.js +4 -3
  48. package/cjs/utils/gear/vft.js +104 -135
  49. package/cjs/utils/staticData/index.js +7 -2
  50. package/core/logic-validation/request.js +31 -4
  51. package/core/types.d.ts +3 -2
  52. package/core/utils.js +24 -2
  53. package/koni/api/nft/ordinal_nft/index.js +3 -2
  54. package/koni/background/handlers/Extension.js +31 -8
  55. package/koni/background/handlers/State.js +4 -1
  56. package/koni/background/handlers/Tabs.js +11 -4
  57. package/package.json +21 -9
  58. package/packageInfo.js +1 -1
  59. package/page/evm/index.d.ts +9 -18
  60. package/page/evm/index.js +62 -101
  61. package/page/index.js +5 -3
  62. package/page/substrate/Accounts.js +2 -1
  63. package/services/balance-service/helpers/subscribe/index.d.ts +1 -11
  64. package/services/balance-service/helpers/subscribe/index.js +3 -74
  65. package/services/balance-service/helpers/subscribe/substrate/index.js +8 -14
  66. package/services/buy-service/index.js +2 -0
  67. package/services/chain-service/index.d.ts +1 -0
  68. package/services/chain-service/index.js +3 -0
  69. package/services/chain-service/utils/index.d.ts +10 -2
  70. package/services/chain-service/utils/index.js +29 -2
  71. package/services/chain-service/utils/patch.js +1 -1
  72. package/services/earning-service/constants/chains.d.ts +1 -0
  73. package/services/earning-service/constants/chains.js +2 -1
  74. package/services/earning-service/handlers/native-staking/amplitude.d.ts +1 -0
  75. package/services/earning-service/handlers/native-staking/amplitude.js +32 -0
  76. package/services/earning-service/handlers/native-staking/astar.d.ts +1 -0
  77. package/services/earning-service/handlers/native-staking/astar.js +18 -0
  78. package/services/earning-service/handlers/native-staking/base.d.ts +2 -0
  79. package/services/earning-service/handlers/native-staking/base.js +40 -29
  80. package/services/earning-service/handlers/native-staking/dtao.d.ts +1 -0
  81. package/services/earning-service/handlers/native-staking/dtao.js +5 -0
  82. package/services/earning-service/handlers/native-staking/mythos.d.ts +1 -0
  83. package/services/earning-service/handlers/native-staking/mythos.js +28 -0
  84. package/services/earning-service/handlers/native-staking/para-chain.d.ts +1 -0
  85. package/services/earning-service/handlers/native-staking/para-chain.js +17 -0
  86. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +1 -0
  87. package/services/earning-service/handlers/native-staking/relay-chain.js +25 -2
  88. package/services/earning-service/handlers/native-staking/tao.d.ts +1 -0
  89. package/services/earning-service/handlers/native-staking/tao.js +5 -0
  90. package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -0
  91. package/services/earning-service/handlers/nomination-pool/index.js +6 -3
  92. package/services/earning-service/service.d.ts +3 -0
  93. package/services/earning-service/service.js +68 -25
  94. package/services/history-service/index.js +12 -7
  95. package/services/keyring-service/context/handlers/Json.js +2 -1
  96. package/services/keyring-service/context/handlers/Ledger.js +7 -2
  97. package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
  98. package/services/request-service/handler/AuthRequestHandler.js +30 -6
  99. package/services/request-service/types.d.ts +1 -0
  100. package/services/subscan-service/index.d.ts +13 -27
  101. package/services/subscan-service/index.js +26 -95
  102. package/services/transaction-service/utils.js +11 -2
  103. package/strategy/api-request-strategy/context/base.d.ts +2 -6
  104. package/strategy/api-request-strategy/index.js +1 -0
  105. package/strategy/api-request-strategy/types.d.ts +4 -2
  106. package/strategy/api-request-strategy/utils/index.js +2 -2
  107. package/strategy/api-request-strategy-v2/index.d.ts +22 -0
  108. package/strategy/api-request-strategy-v2/index.js +128 -0
  109. package/strategy/api-request-strategy-v2/types.d.ts +11 -0
  110. package/strategy/api-request-strategy-v2/types.js +1 -0
  111. package/types/account/action/subscribe.d.ts +3 -0
  112. package/types/account/info/keyring.d.ts +3 -0
  113. package/types/account/info/keyring.js +1 -0
  114. package/types/balance/transfer.d.ts +1 -0
  115. package/types/buy.d.ts +1 -1
  116. package/utils/account/analyze.js +5 -2
  117. package/utils/account/common.d.ts +13 -1
  118. package/utils/account/common.js +91 -2
  119. package/utils/account/transform.js +10 -0
  120. package/utils/asset.d.ts +2 -1
  121. package/utils/asset.js +7 -1
  122. package/utils/gear/combine.d.ts +2 -1
  123. package/utils/gear/combine.js +4 -4
  124. package/utils/gear/vft.d.ts +20 -9
  125. package/utils/gear/vft.js +104 -135
  126. package/utils/staticData/assetHubStaking.json +1 -0
  127. package/utils/staticData/index.d.ts +4 -1
  128. package/utils/staticData/index.js +5 -1
@@ -664,6 +664,7 @@ export interface CreateHardwareAccountItem {
664
664
  isEthereum: boolean;
665
665
  isGeneric: boolean;
666
666
  isLedgerRecovery?: boolean;
667
+ isSubstrateECDSA?: boolean;
667
668
  }
668
669
  export interface RequestAccountCreateHardwareV2 extends CreateHardwareAccountItem {
669
670
  isAllowed?: boolean;
@@ -1235,6 +1236,10 @@ export interface LedgerNetwork {
1235
1236
  /** Slip44 in the derivation path */
1236
1237
  slip44: number;
1237
1238
  }
1239
+ export declare const enum POLKADOT_LEDGER_SCHEME {
1240
+ ED25519 = "ed25519",
1241
+ ECDSA = "ecdsa"
1242
+ }
1238
1243
  export interface MigrationLedgerNetwork extends Omit<LedgerNetwork, 'isGeneric' | 'isEthereum' | 'isDevMode' | 'icon'> {
1239
1244
  ss58_addr_type: number;
1240
1245
  }
@@ -217,6 +217,11 @@ export let CardanoProviderErrorType;
217
217
  CardanoProviderErrorType["SUBMIT_TRANSACTION_FAILURE"] = "SUBMIT_TRANSACTION_FAILURE";
218
218
  CardanoProviderErrorType["SIGN_TRANSACTION_DECLINED"] = "SIGN_TRANSACTION_DECLINED";
219
219
  })(CardanoProviderErrorType || (CardanoProviderErrorType = {}));
220
+ export let POLKADOT_LEDGER_SCHEME;
221
+ (function (POLKADOT_LEDGER_SCHEME) {
222
+ POLKADOT_LEDGER_SCHEME["ED25519"] = "ed25519";
223
+ POLKADOT_LEDGER_SCHEME["ECDSA"] = "ecdsa";
224
+ })(POLKADOT_LEDGER_SCHEME || (POLKADOT_LEDGER_SCHEME = {}));
220
225
  export let NotificationType;
221
226
  (function (NotificationType) {
222
227
  NotificationType["INFO"] = "info";
@@ -119,6 +119,7 @@ export interface RequestAuthorizeTab {
119
119
  accountAuthTypes?: AccountAuthType[];
120
120
  allowedAccounts?: string[];
121
121
  reConfirm?: boolean;
122
+ canConnectSubstrateEcdsa?: boolean;
122
123
  }
123
124
  export interface RequestAuthorizeApprove {
124
125
  id: string;
@@ -195,6 +196,7 @@ export interface RequestAccountBatchExport {
195
196
  export interface RequestAccountList {
196
197
  anyType?: boolean;
197
198
  accountAuthType?: AccountAuthType;
199
+ isSubstrateConnector?: boolean;
198
200
  }
199
201
  export interface RequestAccountSubscribe {
200
202
  accountAuthType?: AccountAuthType;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WalletUnlockType = exports.TransactionDirection = exports.ThemeNames = exports.StakingType = exports.RuntimeEnvironment = exports.RMRK_VER = exports.ProviderErrorType = exports.NotificationType = exports.NETWORK_STATUS = exports.MobileOS = exports.MantaPayEnableMessage = exports.ExtrinsicType = exports.ExtrinsicStatus = exports.ExternalRequestPromiseStatus = exports.EvmProviderErrorType = exports.CrowdloanParaState = exports.ContractType = exports.ChainType = exports.CardanoProviderErrorType = exports.CampaignDataType = exports.BitcoinProviderErrorType = exports.BalanceErrorType = exports.AssetHubNftType = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
6
+ exports.WalletUnlockType = exports.TransactionDirection = exports.ThemeNames = exports.StakingType = exports.RuntimeEnvironment = exports.RMRK_VER = exports.ProviderErrorType = exports.POLKADOT_LEDGER_SCHEME = exports.NotificationType = exports.NETWORK_STATUS = exports.MobileOS = exports.MantaPayEnableMessage = exports.ExtrinsicType = exports.ExtrinsicStatus = exports.ExternalRequestPromiseStatus = exports.EvmProviderErrorType = exports.CrowdloanParaState = exports.ContractType = exports.ChainType = exports.CardanoProviderErrorType = exports.CampaignDataType = exports.BitcoinProviderErrorType = exports.BalanceErrorType = exports.AssetHubNftType = exports.AccountExternalErrorCode = exports.APIItemState = void 0;
7
7
  // Copyright 2019-2022 @polkadot/extension-koni authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
  let RuntimeEnvironment;
@@ -233,6 +233,12 @@ exports.CardanoProviderErrorType = CardanoProviderErrorType;
233
233
  CardanoProviderErrorType["SUBMIT_TRANSACTION_FAILURE"] = "SUBMIT_TRANSACTION_FAILURE";
234
234
  CardanoProviderErrorType["SIGN_TRANSACTION_DECLINED"] = "SIGN_TRANSACTION_DECLINED";
235
235
  })(CardanoProviderErrorType || (exports.CardanoProviderErrorType = CardanoProviderErrorType = {}));
236
+ let POLKADOT_LEDGER_SCHEME;
237
+ exports.POLKADOT_LEDGER_SCHEME = POLKADOT_LEDGER_SCHEME;
238
+ (function (POLKADOT_LEDGER_SCHEME) {
239
+ POLKADOT_LEDGER_SCHEME["ED25519"] = "ed25519";
240
+ POLKADOT_LEDGER_SCHEME["ECDSA"] = "ecdsa";
241
+ })(POLKADOT_LEDGER_SCHEME || (exports.POLKADOT_LEDGER_SCHEME = POLKADOT_LEDGER_SCHEME = {}));
236
242
  let NotificationType;
237
243
  exports.NotificationType = NotificationType;
238
244
  (function (NotificationType) {
@@ -28,16 +28,17 @@ var _CardanoProviderError = require("@subwallet/extension-base/background/errors
28
28
  var _EvmProviderError = require("@subwallet/extension-base/background/errors/EvmProviderError");
29
29
  var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
30
30
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
31
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
31
32
  var _types = require("@subwallet/extension-base/types");
32
- var _utils = require("@subwallet/extension-base/utils");
33
+ var _utils2 = require("@subwallet/extension-base/utils");
33
34
  var _cardano = require("@subwallet/extension-base/utils/cardano");
34
35
  var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransaction");
35
36
  var _getId = require("@subwallet/extension-base/utils/getId");
36
37
  var _keyring = require("@subwallet/keyring");
37
- var _utils2 = require("@subwallet/keyring/utils");
38
+ var _utils3 = require("@subwallet/keyring/utils");
38
39
  var _validate = require("@subwallet/keyring/utils/address/validate");
39
40
  var _uiKeyring = require("@subwallet/ui-keyring");
40
- var _utils3 = require("@walletconnect/utils");
41
+ var _utils4 = require("@walletconnect/utils");
41
42
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
42
43
  var _bn = _interopRequireDefault(require("bn.js"));
43
44
  var _i18next = require("i18next");
@@ -175,7 +176,7 @@ async function validationAuthMiddleware(koni, url, payload) {
175
176
  return handleAuthError(payload, 'Unable to find account', 'dApp', errors);
176
177
  } else {
177
178
  const authList = await koni.getAuthList();
178
- const authInfo = authList[(0, _utils.stripUrl)(url)];
179
+ const authInfo = authList[(0, _utils2.stripUrl)(url)];
179
180
  if (!authInfo || !authInfo.isAllowed || !authInfo.isAllowedMap[payload.pair.address]) {
180
181
  return handleAuthError(payload, 'Account not in allowed list', 'dApp', errors);
181
182
  }
@@ -248,7 +249,7 @@ async function validationConnectMiddleware(koni, url, payload) {
248
249
 
249
250
  // Calculate transaction data
250
251
  try {
251
- await Promise.race([checkProviderConnected(), (0, _utils.wait)(3000).then(async () => {
252
+ await Promise.race([checkProviderConnected(), (0, _utils2.wait)(3000).then(async () => {
252
253
  if (!currentProviderConnected) {
253
254
  await koni.chainService.initSingleApi(networkKey);
254
255
  await checkProviderConnected();
@@ -272,7 +273,8 @@ async function validationEvmDataTransactionMiddleware(koni, url, payload) {
272
273
  const transactionParams = payload.payloadAfterValidated;
273
274
  const {
274
275
  address: fromAddress,
275
- networkKey
276
+ networkKey,
277
+ pair: pair_
276
278
  } = payload;
277
279
  const evmApi = koni.getEvmApi(networkKey || '');
278
280
  const web3 = evmApi === null || evmApi === void 0 ? void 0 : evmApi.api;
@@ -310,8 +312,25 @@ async function validationEvmDataTransactionMiddleware(koni, url, payload) {
310
312
  if (!fromAddress || !(0, _utilCrypto.isEthereumAddress)(fromAddress)) {
311
313
  handleError('the sender address must be the ethereum address type');
312
314
  }
313
- if (transaction.to && !(0, _utilCrypto.isEthereumAddress)(transaction.to)) {
314
- handleError('invalid recipient address');
315
+ const pair = pair_ || _uiKeyring.keyring.getPair(fromAddress);
316
+ if (!pair) {
317
+ handleError('Not found address to sign');
318
+ }
319
+ if (pair_ !== null && pair_ !== void 0 && pair_.meta.isSubstrateECDSA) {
320
+ handleError('Substrate account can not send this transaction');
321
+ }
322
+ const evmNetwork = koni.getChainInfo(networkKey || '');
323
+ if (transaction.to) {
324
+ if (!(0, _utilCrypto.isEthereumAddress)(transaction.to)) {
325
+ handleError('invalid recipient address');
326
+ } else {
327
+ try {
328
+ const pairTo = _uiKeyring.keyring.getPair(transaction.to);
329
+ if (pairTo && pairTo.meta.isSubstrateECDSA && !(0, _utils._isSubstrateEvmCompatibleChain)(evmNetwork)) {
330
+ handleError('substrate account cannot receive this token');
331
+ }
332
+ } catch (e) {}
333
+ }
315
334
  }
316
335
  if (fromAddress === transaction.to) {
317
336
  handleError('receiving address must be different from sending address');
@@ -321,7 +340,7 @@ async function validationEvmDataTransactionMiddleware(koni, url, payload) {
321
340
  if (transaction.value) {
322
341
  try {
323
342
  const valueBn = new _bignumber.default(transaction.value.toString());
324
- if (!valueBn.eq(_utils.BN_ZERO)) {
343
+ if (!valueBn.eq(_utils2.BN_ZERO)) {
325
344
  handleError('Recipient address not found');
326
345
  }
327
346
  } catch (e) {
@@ -345,7 +364,7 @@ async function validationEvmDataTransactionMiddleware(koni, url, payload) {
345
364
 
346
365
  // Calculate transaction data
347
366
  try {
348
- await Promise.race([getTransactionGas(), (0, _utils.wait)(3000).then(async () => {
367
+ await Promise.race([getTransactionGas(), (0, _utils2.wait)(3000).then(async () => {
349
368
  if (!transaction.gas) {
350
369
  await koni.chainService.initSingleApi(networkKey || '');
351
370
  await getTransactionGas();
@@ -368,7 +387,7 @@ async function validationEvmDataTransactionMiddleware(koni, url, payload) {
368
387
  const gasLimit = transaction.gas || (await evmApi.api.eth.estimateGas(transaction));
369
388
  const id = (0, _getId.getId)();
370
389
  const feeInfo = await koni.feeService.subscribeChainFee(id, networkKey, 'evm');
371
- const feeCombine = (0, _utils.combineEthFee)(feeInfo);
390
+ const feeCombine = (0, _utils2.combineEthFee)(feeInfo);
372
391
  if (transaction.maxFeePerGas) {
373
392
  estimateGas = new _bignumber.default(transaction.maxFeePerGas.toString()).multipliedBy(gasLimit).toFixed(0);
374
393
  } else if (transaction.gasPrice) {
@@ -407,7 +426,6 @@ async function validationEvmDataTransactionMiddleware(koni, url, payload) {
407
426
  handleError(e.message);
408
427
  }
409
428
  const hasError = errors && errors.length > 0 || !networkKey;
410
- const evmNetwork = koni.getChainInfo(networkKey || '');
411
429
  let isToContract = false;
412
430
  let hashPayload = '';
413
431
  let parseData = '';
@@ -443,7 +461,7 @@ async function validationEvmSignMessageMiddleware(koni, url, payload_) {
443
461
  const {
444
462
  promise,
445
463
  resolve
446
- } = (0, _utils.createPromiseHandler)();
464
+ } = (0, _utils2.createPromiseHandler)();
447
465
  let hashPayload = '';
448
466
  let canSign = false;
449
467
  const handleError = message_ => {
@@ -458,6 +476,12 @@ async function validationEvmSignMessageMiddleware(koni, url, payload_) {
458
476
  handleError('Not found address or payload to sign');
459
477
  }
460
478
  const pair = pair_ || _uiKeyring.keyring.getPair(address);
479
+ if (!pair) {
480
+ handleError('Not found address to sign');
481
+ }
482
+ if (pair_ !== null && pair_ !== void 0 && pair_.meta.isSubstrateECDSA) {
483
+ handleError('Substrate account can not sign this message');
484
+ }
461
485
  if (method) {
462
486
  if (['eth_sign', 'personal_sign', 'eth_signTypedData', 'eth_signTypedData_v1', 'eth_signTypedData_v3', 'eth_signTypedData_v4'].indexOf(method) < 0) {
463
487
  handleError('Unsupported action');
@@ -526,14 +550,14 @@ function validationAuthWCMiddleware(koni, url, payload, topic) {
526
550
  const {
527
551
  promise,
528
552
  resolve
529
- } = (0, _utils.createPromiseHandler)();
553
+ } = (0, _utils2.createPromiseHandler)();
530
554
  const {
531
555
  address,
532
556
  errors
533
557
  } = payload;
534
558
  if (!topic) {
535
559
  payload.errorPosition = 'dApp';
536
- errors.push(new Error((0, _utils3.getSdkError)('UNAUTHORIZED_EXTEND_REQUEST').message));
560
+ errors.push(new Error((0, _utils4.getSdkError)('UNAUTHORIZED_EXTEND_REQUEST').message));
537
561
  } else {
538
562
  const requestSession = koni.walletConnectService.getSession(topic);
539
563
  let sessionAccounts = [];
@@ -556,7 +580,7 @@ function validationAuthWCMiddleware(koni, url, payload, topic) {
556
580
  const [message] = convertErrorMessage('Unable to find account');
557
581
  errors.push(new Error(message));
558
582
  }
559
- const isExitsAccount = sessionAccounts.find(account => (0, _utils.isSameAddress)(account, address));
583
+ const isExitsAccount = sessionAccounts.find(account => (0, _utils2.isSameAddress)(account, address));
560
584
  if (!isExitsAccount) {
561
585
  payload.errorPosition = 'dApp';
562
586
  const [message] = convertErrorMessage('Account not in allowed list');
@@ -577,7 +601,7 @@ function validationAuthWCMiddleware(koni, url, payload, topic) {
577
601
  }
578
602
  async function validationAuthCardanoMiddleware(koni, url, payload) {
579
603
  const authList = await koni.getAuthList();
580
- const authInfo = authList[(0, _utils.stripUrl)(url)];
604
+ const authInfo = authList[(0, _utils2.stripUrl)(url)];
581
605
  const {
582
606
  address,
583
607
  errors
@@ -600,14 +624,14 @@ async function validationAuthCardanoMiddleware(koni, url, payload) {
600
624
  if (!authInfo.isAllowedMap[address]) {
601
625
  return handleAuthError(payload, 'Account not in allowed list', 'dApp', errors);
602
626
  }
603
- const addressByChainFormat = (0, _utils.reformatAddress)(currentAddress, currentNetworkId);
604
- if (!(0, _utils.isSameAddress)(addressByChainFormat, address)) {
627
+ const addressByChainFormat = (0, _utils2.reformatAddress)(currentAddress, currentNetworkId);
628
+ if (!(0, _utils2.isSameAddress)(addressByChainFormat, address)) {
605
629
  return handleAuthError(payload, 'Current account is changed', 'dApp', errors);
606
630
  }
607
631
  } else if ((0, _keyring.isCardanoRewardAddress)(address)) {
608
632
  const rewardAddress = pair.cardano.rewardAddress;
609
- const addressByChainFormat = (0, _utils.reformatAddress)(rewardAddress, currentNetworkId);
610
- if (!(0, _utils.isSameAddress)(addressByChainFormat, address)) {
633
+ const addressByChainFormat = (0, _utils2.reformatAddress)(rewardAddress, currentNetworkId);
634
+ if (!(0, _utils2.isSameAddress)(addressByChainFormat, address)) {
611
635
  return handleAuthError(payload, 'Current account is changed', 'dApp', errors);
612
636
  }
613
637
  }
@@ -630,7 +654,7 @@ async function validationCardanoSignDataMiddleware(koni, url, payload_) {
630
654
  const {
631
655
  promise,
632
656
  resolve
633
- } = (0, _utils.createPromiseHandler)();
657
+ } = (0, _utils2.createPromiseHandler)();
634
658
  let canSign = false;
635
659
  const handleError = message_ => {
636
660
  payload_.errorPosition = 'ui';
@@ -734,7 +758,7 @@ async function validationBitcoinSignMessageMiddleware(koni, url, payload_) {
734
758
  const {
735
759
  promise,
736
760
  resolve
737
- } = (0, _utils.createPromiseHandler)();
761
+ } = (0, _utils2.createPromiseHandler)();
738
762
  const handleError = message_ => {
739
763
  payload_.errorPosition = 'ui';
740
764
  payload_.confirmationType = 'bitcoinSignatureRequest';
@@ -791,7 +815,7 @@ async function validationBitcoinSignPsbtMiddleware(koni, url, payload_) {
791
815
  const {
792
816
  promise,
793
817
  resolve
794
- } = (0, _utils.createPromiseHandler)();
818
+ } = (0, _utils2.createPromiseHandler)();
795
819
  const handleError = message_ => {
796
820
  payload_.errorPosition = 'ui';
797
821
  payload_.confirmationType = 'bitcoinSignPsbtRequest';
@@ -815,7 +839,7 @@ async function validationBitcoinSignPsbtMiddleware(koni, url, payload_) {
815
839
  if (!(0, _validate.isBitcoinAddress)(address)) {
816
840
  handleError((0, _i18next.t)('Not found address'));
817
841
  }
818
- const addressInfo = (0, _utils2.getBitcoinAddressInfo)(address);
842
+ const addressInfo = (0, _utils3.getBitcoinAddressInfo)(address);
819
843
  if (psbtParams.network !== addressInfo.network) {
820
844
  handleError((0, _i18next.t)('The account or the network is not matched'));
821
845
  }
@@ -855,8 +879,8 @@ async function validationBitcoinSendTransactionMiddleware(koni, url, payload_) {
855
879
  const {
856
880
  promise,
857
881
  resolve
858
- } = (0, _utils.createPromiseHandler)();
859
- const senderAccountInfo = (0, _utils2.getBitcoinAddressInfo)(address);
882
+ } = (0, _utils2.createPromiseHandler)();
883
+ const senderAccountInfo = (0, _utils3.getBitcoinAddressInfo)(address);
860
884
  const handleError = message_ => {
861
885
  payload_.errorPosition = 'ui';
862
886
  payload_.confirmationType = 'bitcoinSendTransactionRequestAfterConfirmation';
@@ -891,7 +915,7 @@ async function validationBitcoinSendTransactionMiddleware(koni, url, payload_) {
891
915
  }).length > 0) {
892
916
  throw new _BitcoinProviderError.BitcoinProviderError(_KoniTypes.BitcoinProviderErrorType.INVALID_PARAMS);
893
917
  }
894
- const recipientAccountInfo = (0, _utils2.getBitcoinAddressInfo)(transactionParams.recipients[0].address);
918
+ const recipientAccountInfo = (0, _utils3.getBitcoinAddressInfo)(transactionParams.recipients[0].address);
895
919
  if (recipientAccountInfo.network !== transactionParams.network) {
896
920
  handleError((0, _i18next.t)('invalid recipient address'));
897
921
  }
@@ -1012,6 +1036,9 @@ function convertErrorMessage(message_, name) {
1012
1036
  if (message.includes('insufficient balance') || message.includes('insufficient funds')) {
1013
1037
  return [(0, _i18next.t)('Insufficient balance on the sender address. Top up your balance and try again'), (0, _i18next.t)('Unable to sign transaction')];
1014
1038
  }
1039
+ if (message.includes('substrate') && message.includes('receive this token')) {
1040
+ return [(0, _i18next.t)('The recipient account is a Ledger Polkadot (EVM) account, which is not supported for this transaction. Change recipient account and try again'), (0, _i18next.t)('Invalid account type')];
1041
+ }
1015
1042
 
1016
1043
  // Sign Message
1017
1044
  if (message.includes('not found address or payload to sign')) {
package/cjs/core/utils.js CHANGED
@@ -20,8 +20,10 @@ exports.ledgerMustCheckNetwork = ledgerMustCheckNetwork;
20
20
  var _types = require("@subwallet/chain-list/types");
21
21
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
22
22
  var _types2 = require("@subwallet/extension-base/core/substrate/types");
23
+ var _types3 = require("@subwallet/extension-base/core/types");
23
24
  var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/ton/utils");
24
25
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
26
+ var _types4 = require("@subwallet/extension-base/types");
25
27
  var _utils3 = require("@subwallet/extension-base/utils");
26
28
  var _keyring = require("@subwallet/keyring");
27
29
  var _utils4 = require("@subwallet/keyring/utils");
@@ -141,7 +143,9 @@ function _isNotDuplicateAddress(validateRecipientParams) {
141
143
  function _isSupportLedgerAccount(validateRecipientParams) {
142
144
  const {
143
145
  account,
146
+ actionType,
144
147
  allowLedgerGenerics,
148
+ assetInfo,
145
149
  destChainInfo
146
150
  } = validateRecipientParams;
147
151
  if (account !== null && account !== void 0 && account.isHardware) {
@@ -154,6 +158,24 @@ function _isSupportLedgerAccount(validateRecipientParams) {
154
158
  return 'Your Ledger account is not supported by {{network}} network.'.replace('{{network}}', destChainName);
155
159
  }
156
160
  } else {
161
+ if (account.chainType === _types4.AccountChainType.ETHEREUM) {
162
+ // For ecdsa substrate account in polkadot ledger app
163
+ if (account.signMode === _types4.AccountSignMode.ECDSA_SUBSTRATE_LEDGER) {
164
+ if (actionType === _types3.ActionType.SEND_NFT) {
165
+ return 'Ledger Polkadot (EVM) address is not supported for NFT transfer';
166
+ }
167
+ if (!(0, _utils2._isSubstrateEvmCompatibleChain)(destChainInfo)) {
168
+ return 'Ledger Polkadot (EVM) address is not supported for this transfer';
169
+ } else if (assetInfo && !(0, _utils3.isSubstrateEcdsaLedgerAssetSupported)(assetInfo, destChainInfo)) {
170
+ return 'Ledger Polkadot (EVM) address is not supported for this transfer';
171
+ }
172
+ } else {
173
+ if (!(0, _utils2._isChainCompatibleLedgerEvm)(destChainInfo)) {
174
+ return 'Ledger EVM address is not supported for this transfer';
175
+ }
176
+ }
177
+ }
178
+
157
179
  // For ledger generic
158
180
  const ledgerCheck = ledgerMustCheckNetwork(account);
159
181
  if (ledgerCheck !== 'unnecessary' && !allowLedgerGenerics.includes(destChainInfo.slug)) {
@@ -52,10 +52,11 @@ class OrdinalNftApi extends _nft.BaseNftApi {
52
52
  this.subscanService = _subscanService.SubscanService.getInstance();
53
53
  }
54
54
  async handleNft(address, handleNftParams) {
55
- const events = await this.subscanService.getAccountRemarkEvents(this.subscanChain, address);
55
+ const groupId = this.subscanService.getGroupId();
56
+ const events = await this.subscanService.getAccountRemarkEvents(groupId, this.subscanChain, address);
56
57
  if (events && events.length) {
57
58
  const extrinsicIds = events.map(data => data.extrinsic_index);
58
- const extrinsicParams = await this.subscanService.getExtrinsicParams(this.subscanChain, extrinsicIds);
59
+ const extrinsicParams = await this.subscanService.getExtrinsicParams(groupId, this.subscanChain, extrinsicIds);
59
60
  const items = [];
60
61
  for (const data of extrinsicParams) {
61
62
  const {