@subwallet/extension-base 1.3.23-0 → 1.3.24-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 (41) hide show
  1. package/background/KoniTypes.d.ts +2 -2
  2. package/cjs/constants/environment.js +1 -1
  3. package/cjs/constants/index.js +21 -4
  4. package/cjs/core/logic-validation/transfer.js +23 -8
  5. package/cjs/koni/background/handlers/Extension.js +109 -89
  6. package/cjs/koni/background/handlers/State.js +2 -2
  7. package/cjs/koni/background/handlers/Tabs.js +1 -1
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/balance-service/transfer/smart-contract.js +24 -3
  10. package/cjs/services/chain-service/index.js +11 -0
  11. package/cjs/services/fee-service/utils/tokenPayFee.js +151 -0
  12. package/cjs/services/request-service/handler/MetadataRequestHandler.js +5 -13
  13. package/cjs/services/request-service/index.js +2 -2
  14. package/cjs/services/transaction-service/index.js +8 -5
  15. package/cjs/utils/fee/transfer.js +47 -14
  16. package/constants/environment.js +1 -1
  17. package/constants/index.d.ts +6 -1
  18. package/constants/index.js +14 -1
  19. package/core/logic-validation/transfer.d.ts +1 -1
  20. package/core/logic-validation/transfer.js +25 -10
  21. package/koni/background/handlers/Extension.js +82 -62
  22. package/koni/background/handlers/State.d.ts +1 -1
  23. package/koni/background/handlers/State.js +2 -2
  24. package/koni/background/handlers/Tabs.js +1 -1
  25. package/package.json +11 -6
  26. package/packageInfo.js +1 -1
  27. package/services/balance-service/transfer/smart-contract.d.ts +4 -2
  28. package/services/balance-service/transfer/smart-contract.js +24 -3
  29. package/services/chain-service/index.d.ts +1 -0
  30. package/services/chain-service/index.js +12 -1
  31. package/services/fee-service/interfaces.d.ts +25 -0
  32. package/services/fee-service/utils/tokenPayFee.d.ts +8 -0
  33. package/services/fee-service/utils/tokenPayFee.js +141 -0
  34. package/services/request-service/handler/MetadataRequestHandler.d.ts +1 -1
  35. package/services/request-service/handler/MetadataRequestHandler.js +5 -13
  36. package/services/request-service/index.d.ts +1 -1
  37. package/services/request-service/index.js +2 -2
  38. package/services/transaction-service/index.js +10 -7
  39. package/types/fee/option.d.ts +1 -1
  40. package/utils/fee/transfer.d.ts +1 -1
  41. package/utils/fee/transfer.js +46 -13
@@ -8,7 +8,7 @@ import { CardanoTransactionConfig } from '@subwallet/extension-base/services/bal
8
8
  import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
9
9
  import { _CHAIN_VALIDATION_ERROR } from '@subwallet/extension-base/services/chain-service/handler/types';
10
10
  import { _ChainState, _EvmApi, _NetworkUpsertParams, _SubstrateApi, _ValidateCustomAssetRequest, _ValidateCustomAssetResponse, EnableChainParams, EnableMultiChainParams } from '@subwallet/extension-base/services/chain-service/types';
11
- import { TokenHasBalanceInfo } from '@subwallet/extension-base/services/fee-service/interfaces';
11
+ import { TokenPayFeeInfo } from '@subwallet/extension-base/services/fee-service/interfaces';
12
12
  import { _NotificationInfo, NotificationSetup } from '@subwallet/extension-base/services/inapp-notification-service/interfaces';
13
13
  import { AppBannerData, AppConfirmationData, AppPopupData } from '@subwallet/extension-base/services/mkt-campaign-service/types';
14
14
  import { AuthUrls } from '@subwallet/extension-base/services/request-service/types';
@@ -1692,7 +1692,7 @@ export interface KoniRequestSignatures {
1692
1692
  'pri(accounts.approveSpending)': [TokenSpendingApprovalParams, SWTransactionResponse];
1693
1693
  'pri(accounts.checkCrossChainTransfer)': [RequestCheckCrossChainTransfer, ValidateTransactionResponse];
1694
1694
  'pri(accounts.crossChainTransfer)': [RequestCrossChainTransfer, SWTransactionResponse];
1695
- 'pri(customFee.getTokensCanPayFee)': [RequestGetTokensCanPayFee, TokenHasBalanceInfo[]];
1695
+ 'pri(customFee.getTokensCanPayFee)': [RequestGetTokensCanPayFee, TokenPayFeeInfo];
1696
1696
  'pri(customFee.getAmountForPair)': [RequestGetAmountForPair, string];
1697
1697
  'pri(confirmations.subscribe)': [RequestConfirmationsSubscribe, ConfirmationsQueue, ConfirmationsQueue];
1698
1698
  'pri(confirmationsTon.subscribe)': [RequestConfirmationsSubscribeTon, ConfirmationsQueueTon, ConfirmationsQueueTon];
@@ -11,5 +11,5 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
11
11
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
12
12
  const isProductionMode = PRODUCTION_BRANCHES.indexOf(branchName) > -1;
13
13
  exports.isProductionMode = isProductionMode;
14
- const BACKEND_API_URL = process.env.SUBWALLET_API || (isProductionMode ? 'https://sw-services.subwallet.app/api' : 'https://sw-services.subwallet.app/api'); // TODO: Rollback dev URL
14
+ const BACKEND_API_URL = process.env.SUBWALLET_API || (isProductionMode ? 'https://sw-services.subwallet.app/api' : 'https://be-dev.subwallet.app/api');
15
15
  exports.BACKEND_API_URL = BACKEND_API_URL;
@@ -40,9 +40,11 @@ var _exportNames = {
40
40
  ORDINAL_COLLECTION: true,
41
41
  ORDINAL_METHODS: true,
42
42
  PERMISSIONS_TO_REVOKE: true,
43
- ASSET_HUB_CHAIN_SLUGS: true
43
+ _SUPPORT_TOKEN_PAY_FEE_GROUP: true,
44
+ getSupportTokenPayFeeChain: true,
45
+ isChainSupportTokenPayFee: true
44
46
  };
45
- exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.PERMISSIONS_TO_REVOKE = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_MKT_CAMPAIGN_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_LISTEN_AVAIL_BRIDGE_CLAIM = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.BITTENSOR_REFRESH_STAKE_INFO = exports.BITTENSOR_REFRESH_STAKE_APY = exports.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ASSET_HUB_CHAIN_SLUGS = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ALL_ACCOUNT_AUTH_TYPES = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
47
+ exports.isChainSupportTokenPayFee = exports.getSupportTokenPayFeeChain = exports._SUPPORT_TOKEN_PAY_FEE_GROUP = exports.XCM_MIN_AMOUNT_RATIO = exports.XCM_FEE_RATIO = exports.SUB_TOKEN_REFRESH_BALANCE_INTERVAL = exports.PERMISSIONS_TO_REVOKE = exports.ORDINAL_METHODS = exports.ORDINAL_COLLECTION = exports.NETWORK_MULTI_GAS_FEE = exports.MANTA_PAY_BALANCE_INTERVAL = exports.IGNORE_QR_SIGNER = exports.IGNORE_GET_SUBSTRATE_FEATURES_LIST = exports.GAS_PRICE_RATIO = exports.CRON_SYNC_MANTA_PAY = exports.CRON_REFRESH_STAKING_REWARD_INTERVAL = exports.CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL = exports.CRON_REFRESH_PRICE_INTERVAL = exports.CRON_REFRESH_NFT_INTERVAL = exports.CRON_REFRESH_MKT_CAMPAIGN_INTERVAL = exports.CRON_REFRESH_HISTORY_INTERVAL = exports.CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL = exports.CRON_REFRESH_CHAIN_STAKING_METADATA = exports.CRON_REFRESH_CHAIN_NOMINATOR_METADATA = exports.CRON_RECOVER_HISTORY_INTERVAL = exports.CRON_LISTEN_AVAIL_BRIDGE_CLAIM = exports.CRON_GET_API_MAP_STATUS = exports.CRON_AUTO_RECOVER_WEB3_INTERVAL = exports.CRON_AUTO_RECOVER_DOTSAMA_INTERVAL = exports.BITTENSOR_REFRESH_STAKE_INFO = exports.BITTENSOR_REFRESH_STAKE_APY = exports.BASE_SECOND_INTERVAL = exports.BASE_MINUTE_INTERVAL = exports.ASTAR_REFRESH_BALANCE_INTERVAL = exports.ALL_NETWORK_KEY = exports.ALL_GENESIS_HASH = exports.ALL_ACCOUNT_KEY = exports.ALL_ACCOUNT_AUTH_TYPES = exports.ACALA_REFRESH_CROWDLOAN_INTERVAL = void 0;
46
48
  var _blockedActions = require("./blocked-actions");
47
49
  Object.keys(_blockedActions).forEach(function (key) {
48
50
  if (key === "default" || key === "__esModule") return;
@@ -190,5 +192,20 @@ const ORDINAL_METHODS = ['drc-20', 'pol-20'];
190
192
  exports.ORDINAL_METHODS = ORDINAL_METHODS;
191
193
  const PERMISSIONS_TO_REVOKE = ['eth_accounts'];
192
194
  exports.PERMISSIONS_TO_REVOKE = PERMISSIONS_TO_REVOKE;
193
- const ASSET_HUB_CHAIN_SLUGS = ['paseo_assethub', 'westend_assethub', 'rococo_assethub', 'statemine', 'statemint'];
194
- exports.ASSET_HUB_CHAIN_SLUGS = ASSET_HUB_CHAIN_SLUGS;
195
+ const _SUPPORT_TOKEN_PAY_FEE_GROUP = {
196
+ assetHub: ['paseo_assethub', 'westend_assethub', 'rococo_assethub', 'statemine', 'statemint'],
197
+ hydration: ['hydradx_main', 'hydradx_rococo']
198
+ };
199
+ exports._SUPPORT_TOKEN_PAY_FEE_GROUP = _SUPPORT_TOKEN_PAY_FEE_GROUP;
200
+ const getSupportTokenPayFeeChain = () => {
201
+ return Object.values(_SUPPORT_TOKEN_PAY_FEE_GROUP).flat();
202
+ };
203
+ exports.getSupportTokenPayFeeChain = getSupportTokenPayFeeChain;
204
+ const isChainSupportTokenPayFee = chainSlug => {
205
+ if (!chainSlug) {
206
+ console.error('You must provide chain slug!');
207
+ return false;
208
+ }
209
+ return getSupportTokenPayFeeChain().includes(chainSlug);
210
+ };
211
+ exports.isChainSupportTokenPayFee = isChainSupportTokenPayFee;
@@ -348,7 +348,7 @@ function checkSupportForTransaction(validationResponse, transaction) {
348
348
  }
349
349
  }
350
350
  }
351
- async function estimateFeeForTransaction(validationResponse, transaction, chainInfo, evmApi, substrateApi, feeInfo, nativeTokenInfo, tokenPayFeeInfo, isTransferLocalTokenAndPayThatTokenAsFee) {
351
+ async function estimateFeeForTransaction(validationResponse, transaction, chainInfo, evmApi, substrateApi, priceMap, feeInfo, nativeTokenInfo, nonNativeTokenPayFeeInfo, isTransferLocalTokenAndPayThatTokenAsFee) {
352
352
  const estimateFee = {
353
353
  symbol: '',
354
354
  decimals: 0,
@@ -394,11 +394,25 @@ async function estimateFeeForTransaction(validationResponse, transaction, chainI
394
394
  }
395
395
  }
396
396
  }
397
- if (tokenPayFeeInfo) {
397
+ const isCustomTokenPayFeeAssetHub = !!nonNativeTokenPayFeeInfo && _constants._SUPPORT_TOKEN_PAY_FEE_GROUP.assetHub.includes(nonNativeTokenPayFeeInfo.originChain);
398
+ const isCustomTokenPayFeeHydration = !!nonNativeTokenPayFeeInfo && _constants._SUPPORT_TOKEN_PAY_FEE_GROUP.hydration.includes(nonNativeTokenPayFeeInfo.originChain);
399
+ if (isCustomTokenPayFeeAssetHub) {
398
400
  const estimatedFeeAmount = isTransferLocalTokenAndPayThatTokenAsFee ? (BigInt(estimateFee.value) * BigInt(_utils4.FEE_COVERAGE_PERCENTAGE_SPECIAL_CASE) / BigInt(100)).toString() : estimateFee.value;
399
- estimateFee.decimals = tokenPayFeeInfo.decimals || 0;
400
- estimateFee.symbol = tokenPayFeeInfo.symbol;
401
- estimateFee.value = await (0, _utils4.calculateToAmountByReservePool)(substrateApi.api, nativeTokenInfo, tokenPayFeeInfo, estimatedFeeAmount);
401
+ estimateFee.decimals = (0, _utils3._getAssetDecimals)(nonNativeTokenPayFeeInfo);
402
+ estimateFee.symbol = (0, _utils3._getAssetSymbol)(nonNativeTokenPayFeeInfo);
403
+ estimateFee.value = await (0, _utils4.calculateToAmountByReservePool)(substrateApi.api, nativeTokenInfo, nonNativeTokenPayFeeInfo, estimatedFeeAmount);
404
+ }
405
+ if (isCustomTokenPayFeeHydration) {
406
+ const nativePriceId = (0, _utils3._getAssetPriceId)(nativeTokenInfo);
407
+ const nativeDecimals = (0, _utils3._getAssetDecimals)(nativeTokenInfo);
408
+ const nativePrice = priceMap[nativePriceId];
409
+ const tokenPriceId = (0, _utils3._getAssetPriceId)(nonNativeTokenPayFeeInfo);
410
+ const tokenDecimals = (0, _utils3._getAssetDecimals)(nonNativeTokenPayFeeInfo);
411
+ const tokenPrice = priceMap[tokenPriceId];
412
+ const rate = new _bignumber.default(nativePrice).div(tokenPrice).multipliedBy(10 ** (tokenDecimals - nativeDecimals)).toFixed();
413
+ estimateFee.decimals = (0, _utils3._getAssetDecimals)(nonNativeTokenPayFeeInfo);
414
+ estimateFee.symbol = (0, _utils3._getAssetSymbol)(nonNativeTokenPayFeeInfo);
415
+ estimateFee.value = new _bignumber.default(estimateFee.value).multipliedBy(rate).toFixed(0);
402
416
  }
403
417
  return estimateFee;
404
418
  }
@@ -438,10 +452,11 @@ function checkBalanceWithTransactionFee(validationResponse, transactionInput, na
438
452
  edAsWarning,
439
453
  extrinsicType,
440
454
  isTransferAll,
441
- nonNativeTokenPayFeeSlug,
442
- skipFeeValidation
455
+ skipFeeValidation,
456
+ tokenPayFeeSlug
443
457
  } = transactionInput;
444
- if (skipFeeValidation || nonNativeTokenPayFeeSlug) {
458
+ if (skipFeeValidation || tokenPayFeeSlug && !(0, _utils3._isNativeTokenBySlug)(tokenPayFeeSlug)) {
459
+ // todo: need improve: input should be balance of fee token and check this again
445
460
  return;
446
461
  }
447
462
  const bnFee = new _bignumber.default(validationResponse.estimateFee.value);