@subwallet/extension-base 1.3.54-1 → 1.3.55-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 (129) hide show
  1. package/background/errors/BalanceError.js +4 -4
  2. package/background/errors/BitcoinProviderError.js +7 -7
  3. package/background/errors/EvmProviderError.js +8 -8
  4. package/background/errors/ProviderError.js +6 -5
  5. package/background/errors/SwapError.js +14 -13
  6. package/background/errors/TransactionError.js +22 -22
  7. package/background/warnings/TransactionWarning.js +2 -2
  8. package/cjs/background/errors/BalanceError.js +4 -4
  9. package/cjs/background/errors/BitcoinProviderError.js +7 -7
  10. package/cjs/background/errors/EvmProviderError.js +8 -8
  11. package/cjs/background/errors/ProviderError.js +6 -5
  12. package/cjs/background/errors/SwapError.js +14 -13
  13. package/cjs/background/errors/TransactionError.js +22 -22
  14. package/cjs/background/warnings/TransactionWarning.js +2 -2
  15. package/cjs/core/logic-validation/index.js +15 -3
  16. package/cjs/core/logic-validation/request.js +37 -37
  17. package/cjs/core/logic-validation/transfer.js +21 -17
  18. package/cjs/koni/api/dotsama/parseTransaction.js +1 -1
  19. package/cjs/koni/api/staking/bonding/relayChain.js +1 -1
  20. package/cjs/koni/api/staking/bonding/utils.js +16 -16
  21. package/cjs/koni/api/staking/paraChain.js +1 -1
  22. package/cjs/koni/background/handlers/Extension.js +28 -26
  23. package/cjs/koni/background/handlers/State.js +19 -14
  24. package/cjs/koni/background/handlers/Tabs.js +23 -1
  25. package/cjs/packageInfo.js +1 -1
  26. package/cjs/services/balance-service/index.js +3 -3
  27. package/cjs/services/balance-service/transfer/smart-contract.js +1 -1
  28. package/cjs/services/balance-service/transfer/xcm/index.js +7 -1
  29. package/cjs/services/balance-service/transfer/xcm/utils.js +24 -18
  30. package/cjs/services/chain-service/constants.js +2 -2
  31. package/cjs/services/chain-service/handler/types.js +1 -0
  32. package/cjs/services/chain-service/utils/patch.js +1 -1
  33. package/cjs/services/earning-service/constants/chains.js +1 -2
  34. package/cjs/services/earning-service/handlers/base.js +2 -1
  35. package/cjs/services/earning-service/handlers/lending/base.js +3 -3
  36. package/cjs/services/earning-service/handlers/liquid-staking/base.js +3 -3
  37. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +1 -1
  38. package/cjs/services/earning-service/handlers/native-staking/base-para.js +1 -1
  39. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +2 -2
  40. package/cjs/services/earning-service/handlers/native-staking/tao.js +26 -6
  41. package/cjs/services/earning-service/handlers/nomination-pool/index.js +2 -2
  42. package/cjs/services/earning-service/handlers/special.js +12 -9
  43. package/cjs/services/keyring-service/context/handlers/Derive.js +1 -1
  44. package/cjs/services/keyring-service/context/handlers/Json.js +11 -11
  45. package/cjs/services/keyring-service/context/handlers/Ledger.js +3 -3
  46. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +10 -10
  47. package/cjs/services/keyring-service/context/handlers/Modify.js +3 -3
  48. package/cjs/services/keyring-service/context/handlers/Secret.js +7 -7
  49. package/cjs/services/migration-service/scripts/DeleteEarningData.js +1 -1
  50. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +1 -6
  51. package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +1 -6
  52. package/cjs/services/migration-service/scripts/index.js +3 -3
  53. package/cjs/services/request-service/handler/BitcoinRequestHandler.js +1 -1
  54. package/cjs/services/request-service/handler/CardanoRequestHandler.js +2 -2
  55. package/cjs/services/request-service/handler/EvmRequestHandler.js +5 -5
  56. package/cjs/services/request-service/handler/TonRequestHandler.js +2 -2
  57. package/cjs/services/setting-service/i18n/extend.js +1 -1
  58. package/cjs/services/swap-service/handler/base-handler.js +123 -11
  59. package/cjs/services/swap-service/index.js +1 -1
  60. package/cjs/services/transaction-service/index.js +12 -12
  61. package/cjs/services/transaction-service/utils.js +4 -1
  62. package/cjs/types/account/error/common.js +5 -4
  63. package/cjs/types/account/error/derive.js +8 -7
  64. package/cjs/utils/account/derive/info/solo.js +2 -2
  65. package/cjs/utils/eth/parseTransaction/index.js +1 -1
  66. package/cjs/utils/fee/transfer.js +8 -3
  67. package/cjs/utils/index.js +1 -1
  68. package/core/logic-validation/index.js +15 -3
  69. package/core/logic-validation/request.js +37 -37
  70. package/core/logic-validation/transfer.js +21 -17
  71. package/koni/api/dotsama/parseTransaction.js +1 -1
  72. package/koni/api/staking/bonding/relayChain.js +1 -1
  73. package/koni/api/staking/bonding/utils.js +16 -16
  74. package/koni/api/staking/paraChain.js +1 -1
  75. package/koni/background/handlers/Extension.js +28 -26
  76. package/koni/background/handlers/State.d.ts +1 -0
  77. package/koni/background/handlers/State.js +19 -14
  78. package/koni/background/handlers/Tabs.js +23 -1
  79. package/package.json +6 -6
  80. package/packageInfo.js +1 -1
  81. package/services/balance-service/index.js +3 -3
  82. package/services/balance-service/transfer/smart-contract.js +1 -1
  83. package/services/balance-service/transfer/xcm/index.js +7 -1
  84. package/services/balance-service/transfer/xcm/utils.d.ts +6 -0
  85. package/services/balance-service/transfer/xcm/utils.js +24 -18
  86. package/services/chain-service/constants.js +2 -2
  87. package/services/chain-service/handler/types.d.ts +2 -1
  88. package/services/chain-service/handler/types.js +1 -0
  89. package/services/chain-service/utils/patch.d.ts +1 -1
  90. package/services/chain-service/utils/patch.js +1 -1
  91. package/services/earning-service/constants/chains.d.ts +0 -1
  92. package/services/earning-service/constants/chains.js +1 -2
  93. package/services/earning-service/handlers/base.js +3 -2
  94. package/services/earning-service/handlers/lending/base.js +3 -3
  95. package/services/earning-service/handlers/liquid-staking/base.js +3 -3
  96. package/services/earning-service/handlers/native-staking/amplitude.js +1 -1
  97. package/services/earning-service/handlers/native-staking/base-para.js +1 -1
  98. package/services/earning-service/handlers/native-staking/relay-chain.js +2 -2
  99. package/services/earning-service/handlers/native-staking/tao.js +26 -6
  100. package/services/earning-service/handlers/nomination-pool/index.js +2 -2
  101. package/services/earning-service/handlers/special.js +12 -9
  102. package/services/keyring-service/context/handlers/Derive.js +1 -1
  103. package/services/keyring-service/context/handlers/Json.js +11 -11
  104. package/services/keyring-service/context/handlers/Ledger.js +3 -3
  105. package/services/keyring-service/context/handlers/Mnemonic.js +10 -10
  106. package/services/keyring-service/context/handlers/Modify.js +3 -3
  107. package/services/keyring-service/context/handlers/Secret.js +7 -7
  108. package/services/migration-service/scripts/DeleteEarningData.js +1 -1
  109. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +1 -6
  110. package/services/migration-service/scripts/databases/MigrateAssetSetting.js +1 -6
  111. package/services/migration-service/scripts/index.js +3 -3
  112. package/services/request-service/handler/BitcoinRequestHandler.js +1 -1
  113. package/services/request-service/handler/CardanoRequestHandler.js +2 -2
  114. package/services/request-service/handler/EvmRequestHandler.js +5 -5
  115. package/services/request-service/handler/TonRequestHandler.js +2 -2
  116. package/services/setting-service/i18n/extend.js +1 -1
  117. package/services/swap-service/handler/base-handler.d.ts +2 -1
  118. package/services/swap-service/handler/base-handler.js +124 -12
  119. package/services/swap-service/index.js +1 -1
  120. package/services/transaction-service/index.js +12 -12
  121. package/services/transaction-service/utils.js +4 -1
  122. package/types/account/error/common.js +5 -4
  123. package/types/account/error/derive.js +8 -7
  124. package/types/balance/transfer.d.ts +1 -0
  125. package/utils/account/derive/info/solo.js +2 -2
  126. package/utils/eth/parseTransaction/index.js +1 -1
  127. package/utils/fee/transfer.d.ts +3 -1
  128. package/utils/fee/transfer.js +5 -1
  129. package/utils/index.js +1 -1
@@ -64,7 +64,7 @@ class EvmRequestHandler {
64
64
  // Check duplicate request
65
65
  const duplicated = Object.values(confirmationType).find(c => c.url === url && c.payloadJson === payloadJson);
66
66
  if (duplicated) {
67
- throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Duplicate request'));
67
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('bg.DAPP.services.service.request.EvmHandler.duplicateRequest'));
68
68
  }
69
69
  confirmationType[id] = {
70
70
  id,
@@ -109,7 +109,7 @@ class EvmRequestHandler {
109
109
  // Check duplicate request
110
110
  const exists = confirmationType[id];
111
111
  if (!exists) {
112
- throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Request does not exist'));
112
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('bg.DAPP.services.service.request.EvmHandler.requestDoesNotExist'));
113
113
  }
114
114
  const payloadJson = JSON.stringify(payload);
115
115
  confirmationType[id] = {
@@ -142,7 +142,7 @@ class EvmRequestHandler {
142
142
  case 'eth_signTypedData_v4':
143
143
  return await pair.evm.signMessage(payload, type);
144
144
  default:
145
- throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Unsupported action'));
145
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('bg.DAPP.services.service.request.EvmHandler.unsupportedAction'));
146
146
  }
147
147
  }
148
148
  configToTransaction(config) {
@@ -251,8 +251,8 @@ class EvmRequestHandler {
251
251
  } = this.confirmationsPromiseMap[id];
252
252
  const confirmation = confirmations[type][id];
253
253
  if (!resolver || !confirmation) {
254
- this.#logger.error((0, _i18next.t)('Unable to proceed. Please try again'), type, id);
255
- throw new Error((0, _i18next.t)('Unable to proceed. Please try again'));
254
+ this.#logger.error((0, _i18next.t)('bg.DAPP.services.service.request.EvmHandler.unableToProceed'), type, id);
255
+ throw new Error((0, _i18next.t)('bg.DAPP.services.service.request.EvmHandler.unableToProceed'));
256
256
  }
257
257
 
258
258
  // Fill signature for some special type
@@ -95,8 +95,8 @@ class TonRequestHandler {
95
95
  } = this.confirmationsPromiseMap[id];
96
96
  const confirmation = confirmations[type][id];
97
97
  if (!resolver || !confirmation) {
98
- this.#logger.error((0, _i18next.t)('Unable to proceed. Please try again'), type, id);
99
- throw new Error((0, _i18next.t)('Unable to proceed. Please try again'));
98
+ this.#logger.error((0, _i18next.t)('bg.DAPP.services.service.request.TonHandler.unableToProceed'), type, id);
99
+ throw new Error((0, _i18next.t)('bg.DAPP.services.service.request.TonHandler.unableToProceed'));
100
100
  }
101
101
 
102
102
  // Fill signature for some special type
@@ -10,7 +10,7 @@ var _utils = require("@subwallet/extension-base/utils");
10
10
 
11
11
  const ExternalTranslation = [
12
12
  // Case change password
13
- (0, _utils.detectTranslate)('Invalid master password')];
13
+ (0, _utils.detectTranslate)('bg.SETTING.services.service.setting.i18nExtend.invalidMasterPassword')];
14
14
  exports.ExternalTranslation = ExternalTranslation;
15
15
  const InternalTranslation = [];
16
16
  exports.InternalTranslation = InternalTranslation;
@@ -318,7 +318,23 @@ class SwapBaseHandler {
318
318
  }
319
319
  return [];
320
320
  }
321
- async validateBridgeStep(receiver, fromToken, toToken, selectedFeeToken, toChainNativeToken, bnBridgeAmount, bnFromTokenBalance, bnBridgeFeeAmount, bnFeeTokenBalance, bnBridgeDeliveryFee) {
321
+ async validateBridgeStep(request) {
322
+ const {
323
+ bnBridgeAmount,
324
+ bnBridgeDeliveryFee,
325
+ bnBridgeFeeAmount,
326
+ bnFeeTokenBalance,
327
+ bnFromTokenBalance,
328
+ fromChain,
329
+ fromToken,
330
+ isFirstBridge,
331
+ receiver,
332
+ selectedFeeToken,
333
+ sender,
334
+ toChain,
335
+ toChainNativeToken,
336
+ toToken
337
+ } = request;
322
338
  const minBridgeAmountRequired = new _bignumber.default((0, _utils3._getTokenMinAmount)(toToken)).multipliedBy(_utils4.FEE_RATE_MULTIPLIER.high);
323
339
  const spendingAndFeePaymentValidation = (0, _logicValidation.validateSpendingAndFeePayment)(fromToken, selectedFeeToken, bnBridgeAmount, bnFromTokenBalance, bnBridgeFeeAmount, bnFeeTokenBalance);
324
340
  if (spendingAndFeePaymentValidation.length > 0) {
@@ -328,7 +344,7 @@ class SwapBaseHandler {
328
344
  const atLeastStr = (0, _utils5.formatNumber)(minBridgeAmountRequired.plus(bnBridgeDeliveryFee), (0, _utils3._getAssetDecimals)(toToken), _utils5.balanceFormatter, {
329
345
  maxNumberFormat: (0, _utils3._getAssetDecimals)(toToken) || 6
330
346
  });
331
- return [new _TransactionError.TransactionError(_types.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('You must transfer at least {{amount}} {{symbol}} to keep the destination account alive', {
347
+ return [new _TransactionError.TransactionError(_types.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('bg.SWAP.services.service.swap.baseHandler.transferMinimumToKeepDestAlive', {
332
348
  replace: {
333
349
  amount: atLeastStr,
334
350
  symbol: fromToken.symbol
@@ -350,7 +366,7 @@ class SwapBaseHandler {
350
366
  // sending token cannot keep account alive, must check with native token
351
367
  const toChainNativeTokenBalance = await this.balanceService.getTotalBalance(receiver, toToken.originChain, toChainNativeToken.slug, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
352
368
  if (!(0, _systemPallet._isAccountActive)(toChainNativeTokenBalance.metadata)) {
353
- return [new _TransactionError.TransactionError(_types.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('The recipient account has less than {{amount}} {{nativeSymbol}}, which can lead to your {{localSymbol}} being lost. Change recipient account and try again', {
369
+ return [new _TransactionError.TransactionError(_types.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('bg.SWAP.services.service.swap.baseHandler.recipientBalanceTooLow', {
354
370
  replace: {
355
371
  amount: toChainNativeTokenBalance.value,
356
372
  nativeSymbol: toChainNativeToken.symbol,
@@ -359,6 +375,27 @@ class SwapBaseHandler {
359
375
  }))];
360
376
  }
361
377
  }
378
+
379
+ // dry-run xcm
380
+ const substrateApi = await this.chainService.getSubstrateApi(fromToken.originChain).isReady;
381
+ const feeInfo = await this.feeService.subscribeChainFee((0, _getId.getId)(), fromToken.originChain, 'substrate');
382
+ const xcmRequest = {
383
+ originTokenInfo: fromToken,
384
+ destinationTokenInfo: toToken,
385
+ sendingValue: bnBridgeAmount.toString(),
386
+ recipient: receiver,
387
+ substrateApi: substrateApi,
388
+ sender: sender,
389
+ destinationChain: toChain,
390
+ originChain: fromChain,
391
+ feeInfo
392
+ };
393
+ const isDryRunSuccess = await (0, _xcm.dryRunXcmExtrinsicV2)(xcmRequest);
394
+
395
+ // temp skip dry-run for later step todo: wait for dry-run-predict
396
+ if (isFirstBridge && !isDryRunSuccess) {
397
+ return [new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SEND, 'Unable to perform transaction. Select another token or destination chain and try again')];
398
+ }
362
399
  }
363
400
  return [];
364
401
  }
@@ -371,7 +408,7 @@ class SwapBaseHandler {
371
408
  const atLeastStr = (0, _utils5.formatNumber)((0, _utils3._getTokenMinAmount)(receivingToken), (0, _utils3._getAssetDecimals)(receivingToken), _utils5.balanceFormatter, {
372
409
  maxNumberFormat: (0, _utils3._getAssetDecimals)(receivingToken) || 6
373
410
  });
374
- return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)('You can\'t receive less than {{number}} {{symbol}}', {
411
+ return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)('bg.SWAP.services.service.swap.baseHandler.receiveMinimumAmount', {
375
412
  replace: {
376
413
  number: atLeastStr,
377
414
  symbol: (0, _utils3._getAssetSymbol)(receivingToken)
@@ -457,7 +494,22 @@ class SwapBaseHandler {
457
494
  // Native token balance has already accounted for ED aka strict mode
458
495
  const bnBridgeFromTokenBalance = new _bignumber.default(bridgeFromTokenBalance.value);
459
496
  const bnBridgeFeeTokenBalance = new _bignumber.default(bridgeFeeTokenBalance.value);
460
- const bridgeStepValidation = await this.validateBridgeStep(bridgeReceiver, bridgeFromToken, bridgeToToken, bridgeSelectedFeeToken, bridgeToChainNativeToken, bnBridgeAmount, bnBridgeFromTokenBalance, bnBridgeFeeAmount, bnBridgeFeeTokenBalance, bnBridgeDeliveryFee);
497
+ const bridgeStepValidation = await this.validateBridgeStep({
498
+ fromChain,
499
+ toChain,
500
+ sender: bridgeSender,
501
+ receiver: bridgeReceiver,
502
+ fromToken: bridgeFromToken,
503
+ toToken: bridgeToToken,
504
+ selectedFeeToken: bridgeSelectedFeeToken,
505
+ toChainNativeToken: bridgeToChainNativeToken,
506
+ bnBridgeAmount,
507
+ bnFromTokenBalance: bnBridgeFromTokenBalance,
508
+ bnBridgeFeeAmount,
509
+ bnFeeTokenBalance: bnBridgeFeeTokenBalance,
510
+ bnBridgeDeliveryFee,
511
+ isFirstBridge: true
512
+ });
461
513
  if (bridgeStepValidation.length > 0) {
462
514
  return bridgeStepValidation;
463
515
  }
@@ -499,7 +551,12 @@ class SwapBaseHandler {
499
551
  const atLeastString = (0, _utils5.formatNumber)((0, _utils3._getTokenMinAmount)(swapToken), (0, _utils3._getAssetDecimals)(swapToken), _utils5.balanceFormatter, {
500
552
  maxNumberFormat: (0, _utils3._getAssetDecimals)(swapToken) || 6
501
553
  });
502
- return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0, _utils3._getAssetSymbol)(swapToken)} and try again`))];
554
+ return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)('bg.SWAP.services.service.swap.baseHandler.swapAmountTooSmall', {
555
+ replace: {
556
+ amount: atLeastString,
557
+ symbol: (0, _utils3._getAssetSymbol)(swapToken)
558
+ }
559
+ }))];
503
560
  }
504
561
  const swapFeeToken = this.chainService.getAssetBySlug(swapFee.selectedFeeToken || swapFee.defaultFeeToken);
505
562
  const swapToChain = this.chainService.getChainInfoByKey(swapMetadata.destinationTokenInfo.originChain);
@@ -542,7 +599,12 @@ class SwapBaseHandler {
542
599
  const atLeastString = (0, _utils5.formatNumber)((0, _utils3._getTokenMinAmount)(swapToken), (0, _utils3._getAssetDecimals)(swapToken), _utils5.balanceFormatter, {
543
600
  maxNumberFormat: (0, _utils3._getAssetDecimals)(swapToken) || 6
544
601
  });
545
- return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0, _utils3._getAssetSymbol)(swapToken)} and try again`))];
602
+ return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)('bg.SWAP.services.service.swap.baseHandler.swapAmountTooSmall', {
603
+ replace: {
604
+ amount: atLeastString,
605
+ symbol: (0, _utils3._getAssetSymbol)(swapToken)
606
+ }
607
+ }))];
546
608
  }
547
609
  const swapFeeToken = this.chainService.getAssetBySlug(swapFee.selectedFeeToken || swapFee.defaultFeeToken);
548
610
  const swapToChain = this.chainService.getChainInfoByKey(swapMetadata.destinationTokenInfo.originChain);
@@ -588,7 +650,22 @@ class SwapBaseHandler {
588
650
  // Native token balance has already accounted for ED aka strict mode
589
651
  const bnBridgeFromTokenBalance = new _bignumber.default(bridgeFromTokenBalance.value).plus(bnSwapReceivingAmount);
590
652
  const bnBridgeFeeTokenBalance = new _bignumber.default(bridgeFeeTokenBalance.value);
591
- const bridgeStepValidation = await this.validateBridgeStep(bridgeReceiver, bridgeFromToken, bridgeToToken, bridgeSelectedFeeToken, bridgeToChainNativeToken, bnBridgeAmount, bnBridgeFromTokenBalance, bnBridgeFeeAmount, bnBridgeFeeTokenBalance, bnBridgeDeliveryFee);
653
+ const bridgeStepValidation = await this.validateBridgeStep({
654
+ fromChain,
655
+ toChain,
656
+ sender: bridgeSender,
657
+ receiver: bridgeReceiver,
658
+ fromToken: bridgeFromToken,
659
+ toToken: bridgeToToken,
660
+ selectedFeeToken: bridgeSelectedFeeToken,
661
+ toChainNativeToken: bridgeToChainNativeToken,
662
+ bnBridgeAmount,
663
+ bnFromTokenBalance: bnBridgeFromTokenBalance,
664
+ bnBridgeFeeAmount,
665
+ bnFeeTokenBalance: bnBridgeFeeTokenBalance,
666
+ bnBridgeDeliveryFee,
667
+ isFirstBridge: false
668
+ });
592
669
  if (bridgeStepValidation.length > 0) {
593
670
  return bridgeStepValidation;
594
671
  }
@@ -627,7 +704,22 @@ class SwapBaseHandler {
627
704
  // Native token balance has already accounted for ED aka strict mode
628
705
  const bnBridgeFromTokenBalance = new _bignumber.default(bridgeFromTokenBalance.value);
629
706
  const bnBridgeFeeTokenBalance = new _bignumber.default(bridgeFeeTokenBalance.value);
630
- const bridgeStepValidation = await this.validateBridgeStep(bridgeReceiver, bridgeFromToken, bridgeToToken, bridgeSelectedFeeToken, bridgeToChainNativeToken, bnBridgeAmount, bnBridgeFromTokenBalance, bnBridgeFeeAmount, bnBridgeFeeTokenBalance, bnBridgeDeliveryFee);
707
+ const bridgeStepValidation = await this.validateBridgeStep({
708
+ fromChain,
709
+ toChain,
710
+ sender: bridgeSender,
711
+ receiver: bridgeReceiver,
712
+ fromToken: bridgeFromToken,
713
+ toToken: bridgeToToken,
714
+ selectedFeeToken: bridgeSelectedFeeToken,
715
+ toChainNativeToken: bridgeToChainNativeToken,
716
+ bnBridgeAmount,
717
+ bnFromTokenBalance: bnBridgeFromTokenBalance,
718
+ bnBridgeFeeAmount,
719
+ bnFeeTokenBalance: bnBridgeFeeTokenBalance,
720
+ bnBridgeDeliveryFee,
721
+ isFirstBridge: true
722
+ });
631
723
  if (bridgeStepValidation.length > 0) {
632
724
  return bridgeStepValidation;
633
725
  }
@@ -669,7 +761,12 @@ class SwapBaseHandler {
669
761
  const atLeastString = (0, _utils5.formatNumber)((0, _utils3._getTokenMinAmount)(swapToken), (0, _utils3._getAssetDecimals)(swapToken), _utils5.balanceFormatter, {
670
762
  maxNumberFormat: (0, _utils3._getAssetDecimals)(swapToken) || 6
671
763
  });
672
- return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)(`Swap amount too small. Increase to more than ${atLeastString} ${(0, _utils3._getAssetSymbol)(swapToken)} and try again`))];
764
+ return [new _TransactionError.TransactionError(_swap.SwapErrorType.NOT_MEET_MIN_SWAP, (0, _i18next.t)('bg.SWAP.services.service.swap.baseHandler.swapAmountTooSmall', {
765
+ replace: {
766
+ amount: atLeastString,
767
+ symbol: (0, _utils3._getAssetSymbol)(swapToken)
768
+ }
769
+ }))];
673
770
  }
674
771
  const swapFeeToken = this.chainService.getAssetBySlug(swapFee.selectedFeeToken || swapFee.defaultFeeToken);
675
772
  const swapToChain = this.chainService.getChainInfoByKey(swapMetadata.destinationTokenInfo.originChain);
@@ -715,7 +812,22 @@ class SwapBaseHandler {
715
812
  // Native token balance has already accounted for ED aka strict mode
716
813
  const bnTransitFromTokenBalance = new _bignumber.default(transitFromTokenBalance.value).plus(bnSwapReceivingAmount);
717
814
  const bnTransitFeeTokenBalance = new _bignumber.default(transitFeeTokenBalance.value);
718
- const transitStepValidation = await this.validateBridgeStep(transitReceiver, transitFromToken, transitToToken, transitSelectedFeeToken, transitToChainNativeToken, bnTransitAmount, bnTransitFromTokenBalance, bnTransitFeeAmount, bnTransitFeeTokenBalance, bnTransitDeliveryFee);
815
+ const transitStepValidation = await this.validateBridgeStep({
816
+ fromChain: fromTransitChain,
817
+ toChain: toTransitChain,
818
+ sender: transitSender,
819
+ receiver: transitReceiver,
820
+ fromToken: transitFromToken,
821
+ toToken: transitToToken,
822
+ selectedFeeToken: transitSelectedFeeToken,
823
+ toChainNativeToken: transitToChainNativeToken,
824
+ bnBridgeAmount: bnTransitAmount,
825
+ bnFromTokenBalance: bnTransitFromTokenBalance,
826
+ bnBridgeFeeAmount: bnTransitFeeAmount,
827
+ bnFeeTokenBalance: bnTransitFeeTokenBalance,
828
+ bnBridgeDeliveryFee: bnTransitDeliveryFee,
829
+ isFirstBridge: false
830
+ });
719
831
  if (transitStepValidation.length > 0) {
720
832
  return transitStepValidation;
721
833
  }
@@ -486,7 +486,7 @@ class SwapService {
486
486
  blockedActionsMap
487
487
  } = blockedActionsFeaturesMap;
488
488
  if (blockedActionsMap.swap.includes(currentAction)) {
489
- return [new _TransactionError.TransactionError(_types3.BasicTxErrorType.UNSUPPORTED, (0, _i18next.t)('Feature under maintenance. Try again later'))];
489
+ return [new _TransactionError.TransactionError(_types3.BasicTxErrorType.UNSUPPORTED, (0, _i18next.t)('bg.SWAP.services.service.swap.featureUnderMaintenance'))];
490
490
  }
491
491
  }
492
492
  if (handler) {
@@ -101,7 +101,7 @@ class TransactionService {
101
101
  // Check support for transaction
102
102
  (0, _transfer.checkSupportForTransaction)(validationResponse, transaction);
103
103
  if (!chainInfo) {
104
- validationResponse.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.INTERNAL_ERROR, (0, _i18next.t)('Cannot find network')));
104
+ validationResponse.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.INTERNAL_ERROR, (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.cannotFindNetwork')));
105
105
  }
106
106
  const substrateApi = this.state.chainService.getSubstrateApi(chainInfo.slug);
107
107
  const evmApi = this.state.chainService.getEvmApi(chainInfo.slug);
@@ -1228,8 +1228,8 @@ class TransactionService {
1228
1228
  const info = (0, _util.isHex)(extrinsicHash) ? extrinsicHash : (0, _helpers.getBaseTransactionInfo)(transaction, this.state.chainService.getChainInfoMap());
1229
1229
  this.state.notificationService.notify({
1230
1230
  type: _KoniTypes.NotificationType.SUCCESS,
1231
- title: (0, _i18next.t)('Transaction completed'),
1232
- message: (0, _i18next.t)('Transaction {{info}} completed', {
1231
+ title: (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.transactionCompleted'),
1232
+ message: (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.transactionInfoCompleted', {
1233
1233
  replace: {
1234
1234
  info
1235
1235
  }
@@ -1268,8 +1268,8 @@ class TransactionService {
1268
1268
  const info = (0, _util.isHex)(transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash) ? transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash : (0, _helpers.getBaseTransactionInfo)(transaction, this.state.chainService.getChainInfoMap());
1269
1269
  this.state.notificationService.notify({
1270
1270
  type: _KoniTypes.NotificationType.ERROR,
1271
- title: (0, _i18next.t)('Transaction failed'),
1272
- message: (0, _i18next.t)('Transaction {{info}} failed', {
1271
+ title: (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.transactionFailed'),
1272
+ message: (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.transactionInfoFailed', {
1273
1273
  replace: {
1274
1274
  info
1275
1275
  }
@@ -1307,8 +1307,8 @@ class TransactionService {
1307
1307
  const info = (0, _util.isHex)(transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash) ? transaction === null || transaction === void 0 ? void 0 : transaction.extrinsicHash : (0, _helpers.getBaseTransactionInfo)(transaction, this.state.chainService.getChainInfoMap());
1308
1308
  this.state.notificationService.notify({
1309
1309
  type: _KoniTypes.NotificationType.ERROR,
1310
- title: (0, _i18next.t)('Transaction timed out'),
1311
- message: (0, _i18next.t)('Transaction {{info}} timed out', {
1310
+ title: (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.transactionTimedOut'),
1311
+ message: (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.transactionInfoTimedOut', {
1312
1312
  replace: {
1313
1313
  info
1314
1314
  }
@@ -1517,7 +1517,7 @@ class TransactionService {
1517
1517
  if (isApproved) {
1518
1518
  let signedTransaction;
1519
1519
  if (!payload) {
1520
- throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('Failed to sign'));
1520
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.failedToSign'));
1521
1521
  }
1522
1522
  const web3Api = this.state.chainService.getEvmApi(chain).api;
1523
1523
  if (!isExternal) {
@@ -1526,7 +1526,7 @@ class TransactionService {
1526
1526
  const signed = (0, _mergeTransactionAndSignature.mergeTransactionAndSignature)(txObject, payload);
1527
1527
  const recover = web3Api.eth.accounts.recoverTransaction(signed);
1528
1528
  if (recover.toLowerCase() !== account.address.toLowerCase()) {
1529
- throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('Wrong signature. Please sign with the account you use in dApp'));
1529
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.wrongSignatureSignWithDappAccount'));
1530
1530
  }
1531
1531
  signedTransaction = signed;
1532
1532
  }
@@ -1610,7 +1610,7 @@ class TransactionService {
1610
1610
  emitter.emit('send', eventData); // This event is needed after sending transaction with queue
1611
1611
 
1612
1612
  if (!signature) {
1613
- throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('Failed to sign'));
1613
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.failedToSign'));
1614
1614
  }
1615
1615
  eventData.extrinsicHash = signature;
1616
1616
  emitter.emit('extrinsicHash', eventData);
@@ -1666,7 +1666,7 @@ class TransactionService {
1666
1666
  emitter.emit('send', eventData);
1667
1667
  transaction.submitSwapOrder().then(isSendSuccess => {
1668
1668
  if (!isSendSuccess) {
1669
- throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('Failed to sign'));
1669
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.failedToSign'));
1670
1670
  }
1671
1671
  this.handleTransactionTimeout(emitter, eventData);
1672
1672
  transaction.cronCheckTxSuccess().then(order => {
@@ -2103,7 +2103,7 @@ class TransactionService {
2103
2103
  const timeout = setTimeout(() => {
2104
2104
  const transaction = this.getTransaction(eventData.id);
2105
2105
  if (transaction.status !== _KoniTypes.ExtrinsicStatus.SUCCESS && transaction.status !== _KoniTypes.ExtrinsicStatus.FAIL) {
2106
- eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.TIMEOUT, (0, _i18next.t)('Transaction timeout')));
2106
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.TIMEOUT, (0, _i18next.t)('bg.TRANSACTION_SERVICE.services.service.transaction.transactionTimeout')));
2107
2107
  emitter.emit('timeout', eventData);
2108
2108
  clearTimeout(timeout);
2109
2109
  }
@@ -24,6 +24,9 @@ function getBlockExplorerAccountRoute(explorerLink) {
24
24
  if (explorerLink.includes('explorer.subspace.network')) {
25
25
  return 'accounts';
26
26
  }
27
+ if (explorerLink.includes('explorer.comstats.org')) {
28
+ return 'accounts';
29
+ }
27
30
  if (explorerLink.includes('edgscan.ink')) {
28
31
  return 'accounts';
29
32
  }
@@ -81,7 +84,7 @@ function getBlockExplorerTxRoute(chainInfo) {
81
84
  if (['gen6_public', 'joystream'].includes(chainInfo.slug)) {
82
85
  return '#/extrinsics';
83
86
  }
84
- if (['edgeware'].includes(chainInfo.slug)) {
87
+ if (['edgeware', 'commune'].includes(chainInfo.slug)) {
85
88
  return 'extrinsics';
86
89
  }
87
90
  if (['mosaicTest', 'polkadex'].includes(chainInfo.slug)) {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.SWCommonAccountError = exports.CommonAccountErrorType = void 0;
7
7
  var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
8
  var _utils = require("@subwallet/extension-base/utils");
9
+ var _i18next = require("i18next");
9
10
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
11
  // SPDX-License-Identifier: Apache-2.0
11
12
  let CommonAccountErrorType;
@@ -17,15 +18,15 @@ exports.CommonAccountErrorType = CommonAccountErrorType;
17
18
  })(CommonAccountErrorType || (exports.CommonAccountErrorType = CommonAccountErrorType = {}));
18
19
  const DEFAULT_DATA = {
19
20
  [CommonAccountErrorType.ACCOUNT_NOT_FOUND]: {
20
- message: (0, _utils.detectTranslate)('Account not found'),
21
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.common.accountNotFound'),
21
22
  code: 1001
22
23
  },
23
24
  [CommonAccountErrorType.ACCOUNT_EXISTED]: {
24
- message: (0, _utils.detectTranslate)('Account already exists under the name "{{name}}"'),
25
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.common.accountAlreadyExistsWithName'),
25
26
  code: 1002
26
27
  },
27
28
  [CommonAccountErrorType.ACCOUNT_NAME_EXISTED]: {
28
- message: (0, _utils.detectTranslate)('Account name already in use'),
29
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.common.accountNameInUse'),
29
30
  code: 1003
30
31
  }
31
32
  };
@@ -33,7 +34,7 @@ class SWCommonAccountError extends _SWError.SWError {
33
34
  errorClass = 'Account';
34
35
  constructor(errorType, _message) {
35
36
  const defaultData = DEFAULT_DATA[errorType];
36
- const message = _message || defaultData.message;
37
+ const message = _message || (0, _i18next.t)(defaultData.message) || '';
37
38
  super(errorType, message, defaultData.code);
38
39
  }
39
40
  }
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.SWDeriveError = exports.DeriveErrorType = void 0;
7
7
  var _SWError = require("@subwallet/extension-base/background/errors/SWError");
8
8
  var _utils = require("@subwallet/extension-base/utils");
9
+ var _i18next = require("i18next");
9
10
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
11
  // SPDX-License-Identifier: Apache-2.0
11
12
  let DeriveErrorType;
@@ -20,27 +21,27 @@ exports.DeriveErrorType = DeriveErrorType;
20
21
  })(DeriveErrorType || (exports.DeriveErrorType = DeriveErrorType = {}));
21
22
  const DEFAULT_DATA = {
22
23
  [DeriveErrorType.INVALID_DERIVATION_PATH]: {
23
- message: (0, _utils.detectTranslate)('Invalid derivation path'),
24
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.derive.invalidDerivationPath'),
24
25
  code: 1001
25
26
  },
26
27
  [DeriveErrorType.INVALID_DERIVATION_TYPE]: {
27
- message: (0, _utils.detectTranslate)('Derivation path not supported'),
28
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.derive.derivationPathNotSupported'),
28
29
  code: 1002
29
30
  },
30
31
  [DeriveErrorType.ROOT_ACCOUNT_NOT_FOUND]: {
31
- message: (0, _utils.detectTranslate)('Account not found'),
32
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.derive.accountNotFound'),
32
33
  code: 1003
33
34
  },
34
35
  [DeriveErrorType.INVALID_ACCOUNT_TYPE]: {
35
- message: (0, _utils.detectTranslate)('Invalid account type'),
36
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.derive.invalidAccountType'),
36
37
  code: 1004
37
38
  },
38
39
  [DeriveErrorType.MAX_DERIVATION_DEPTH]: {
39
- message: (0, _utils.detectTranslate)('Derivation path not supported'),
40
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.derive.derivationPathNotSupported'),
40
41
  code: 1005
41
42
  },
42
43
  [DeriveErrorType.MIN_DERIVATION_DEPTH]: {
43
- message: (0, _utils.detectTranslate)('Derivation path not supported'),
44
+ message: (0, _utils.detectTranslate)('bg.ACCOUNT.types.error.account.derive.derivationPathNotSupported'),
44
45
  code: 1006
45
46
  }
46
47
  };
@@ -48,7 +49,7 @@ class SWDeriveError extends _SWError.SWError {
48
49
  errorClass = 'Derive';
49
50
  constructor(errorType, _message) {
50
51
  const defaultData = DEFAULT_DATA[errorType];
51
- const message = _message || defaultData.message;
52
+ const message = _message || (0, _i18next.t)(defaultData.message) || '';
52
53
  super(errorType, message, defaultData.code);
53
54
  }
54
55
  }
@@ -195,7 +195,7 @@ const findSoloNextDerive = parentAddress => {
195
195
  try {
196
196
  parentPair = _uiKeyring.keyring.getPair(parentAddress);
197
197
  } catch (e) {}
198
- (0, _util.assert)(parentPair, (0, _i18next.t)('Unable to find account'));
198
+ (0, _util.assert)(parentPair, (0, _i18next.t)('bg.ACCOUNT.utils.account.deriveSoloInfo.unableToFindAccount'));
199
199
  const deriveInfo = getSoloDerivationInfo(parentPair.type, parentPair.meta);
200
200
  const needChangeRoot = deriveInfo.depth > 0;
201
201
  let rootPair;
@@ -206,7 +206,7 @@ const findSoloNextDerive = parentAddress => {
206
206
  } else {
207
207
  rootPair = parentPair;
208
208
  }
209
- (0, _util.assert)(rootPair, (0, _i18next.t)('Unable to find parent account'));
209
+ (0, _util.assert)(rootPair, (0, _i18next.t)('bg.ACCOUNT.utils.account.deriveSoloInfo.unableToFindParentAccount'));
210
210
  const rootAddress = rootPair.address;
211
211
  const currentDepth = deriveInfo.depth;
212
212
  const currentIndex = (_deriveInfo$autoIndex = deriveInfo.autoIndexes) === null || _deriveInfo$autoIndex === void 0 ? void 0 : _deriveInfo$autoIndex[currentDepth - 1];
@@ -188,7 +188,7 @@ const getChainInfoByChainId = (networkMap, chainId) => {
188
188
  const parseEvmRlp = async (data, networkMap, evmApiMap) => {
189
189
  const tx = (0, _eth.createTransactionFromRLP)(data);
190
190
  if (!tx) {
191
- throw new Error((0, _i18next.t)('Failed to decode data. Please use a valid QR code'));
191
+ throw new Error((0, _i18next.t)('bg.DAPP.utils.eth.parseTransaction.failedToDecodeQr'));
192
192
  }
193
193
  const result = {
194
194
  input: tx.data,
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.detectTransferTxType = exports.calculateXcmMaxTransferable = exports.calculateTransferMaxTransferable = exports.calculateMaxTransferable = void 0;
7
+ exports.isEvmEIP1559FeeDetail = exports.detectTransferTxType = exports.calculateXcmMaxTransferable = exports.calculateTransferMaxTransferable = exports.calculateMaxTransferable = void 0;
8
8
  var _constants = require("@subwallet/extension-base/constants");
9
9
  var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
10
10
  var _consts = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/cardano/consts");
@@ -99,6 +99,7 @@ const calculateTransferMaxTransferable = async (id, request, freeBalance, fee) =
99
99
  substrateApi,
100
100
  to,
101
101
  tonApi,
102
+ transferAll,
102
103
  value
103
104
  } = request;
104
105
  const feeChainType = fee.type;
@@ -181,7 +182,7 @@ const calculateTransferMaxTransferable = async (id, request, freeBalance, fee) =
181
182
  });
182
183
  } else {
183
184
  [transaction] = await (0, _token.createSubstrateExtrinsic)({
184
- transferAll: false,
185
+ transferAll: !!transferAll,
185
186
  value,
186
187
  from: address,
187
188
  networkKey: srcChain.slug,
@@ -517,4 +518,8 @@ const calculateXcmMaxTransferable = async (id, request, freeBalance, fee) => {
517
518
  error
518
519
  };
519
520
  };
520
- exports.calculateXcmMaxTransferable = calculateXcmMaxTransferable;
521
+ exports.calculateXcmMaxTransferable = calculateXcmMaxTransferable;
522
+ const isEvmEIP1559FeeDetail = fee => {
523
+ return !!fee && fee.type === 'evm' && 'baseGasFee' in fee && typeof fee.baseGasFee === 'string' && 'options' in fee && !!fee.options && typeof fee.options === 'object' && fee.gasPrice === undefined;
524
+ };
525
+ exports.isEvmEIP1559FeeDetail = isEvmEIP1559FeeDetail;
@@ -626,7 +626,7 @@ async function waitTimeout(ms) {
626
626
  return new Promise(resolve => setTimeout(resolve, ms));
627
627
  }
628
628
  const stripUrl = url => {
629
- (0, _util.assert)(url && (url.startsWith('http:') || url.startsWith('https:') || url.startsWith('ipfs:') || url.startsWith('ipns:')), (0, _i18next.t)('Invalid URL for provider'));
629
+ (0, _util.assert)(url && (url.startsWith('http:') || url.startsWith('https:') || url.startsWith('ipfs:') || url.startsWith('ipns:')), (0, _i18next.t)('bg.utils.invalidUrlForProvider'));
630
630
  const parts = url.split('/');
631
631
  return parts[2];
632
632
  };
@@ -14,14 +14,26 @@ export * from "./transfer.js";
14
14
  export function validateSpendingAndFeePayment(spendingToken, feeToken, bnSpendingAmount, bnFromTokenBalance, bnFeeAmount, bnFeeTokenBalance) {
15
15
  if (spendingToken.slug === feeToken.slug) {
16
16
  if (bnFromTokenBalance.lte(bnSpendingAmount.plus(bnFeeAmount).plus(_isNativeToken(spendingToken) ? '0' : _getTokenMinAmount(spendingToken)))) {
17
- return [new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, t(`Insufficient balance. Deposit ${spendingToken.symbol} and try again.`))];
17
+ return [new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, t('bg.core.validation.insufficientSpendingTokenBalance', {
18
+ replace: {
19
+ spendingTokenSymbol: spendingToken.symbol
20
+ }
21
+ }))];
18
22
  }
19
23
  } else {
20
24
  if (bnFromTokenBalance.lte(bnSpendingAmount.plus(_isNativeToken(spendingToken) ? '0' : _getTokenMinAmount(spendingToken)))) {
21
- return [new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, t(`Insufficient balance. Deposit ${spendingToken.symbol} and try again.`))];
25
+ return [new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, t('bg.core.validation.insufficientSpendingTokenBalance', {
26
+ replace: {
27
+ spendingTokenSymbol: spendingToken.symbol
28
+ }
29
+ }))];
22
30
  }
23
31
  if (bnFeeTokenBalance.lte(bnFeeAmount.plus(_isNativeToken(feeToken) ? '0' : _getTokenMinAmount(feeToken)))) {
24
- return [new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, t(`Insufficient balance. Deposit ${feeToken.symbol} and try again.`))];
32
+ return [new TransactionError(BasicTxErrorType.NOT_ENOUGH_BALANCE, t('bg.core.validation.insufficientFeeTokenBalance', {
33
+ replace: {
34
+ feeTokenSymbol: feeToken.symbol
35
+ }
36
+ }))];
25
37
  }
26
38
  }
27
39
  return [];