@subwallet/extension-base 1.3.7-0 → 1.3.8-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 (90) hide show
  1. package/background/KoniTypes.d.ts +7 -5
  2. package/background/KoniTypes.js +1 -1
  3. package/cjs/background/KoniTypes.js +1 -1
  4. package/cjs/core/substrate/xcm-parser.js +16 -2
  5. package/cjs/koni/api/contract-handler/utils/index.js +15 -1
  6. package/cjs/koni/background/handlers/Extension.js +42 -3
  7. package/cjs/koni/background/handlers/State.js +11 -2
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/balance-service/transfer/xcm/index.js +31 -1
  10. package/cjs/services/balance-service/transfer/xcm/polygonBridge.js +108 -0
  11. package/cjs/services/chain-online-service/constants.js +32 -0
  12. package/cjs/services/chain-online-service/index.js +190 -0
  13. package/cjs/services/chain-service/index.js +87 -127
  14. package/cjs/services/chain-service/utils/index.js +0 -2
  15. package/cjs/services/chain-service/utils/patch.js +7 -3
  16. package/cjs/services/fee-service/utils/index.js +14 -0
  17. package/cjs/services/inapp-notification-service/consts.js +6 -4
  18. package/cjs/services/inapp-notification-service/index.js +110 -6
  19. package/cjs/services/inapp-notification-service/interfaces.js +9 -1
  20. package/cjs/services/inapp-notification-service/utils/avail.js +88 -0
  21. package/cjs/services/inapp-notification-service/{utils.js → utils/common.js} +1 -84
  22. package/cjs/services/inapp-notification-service/utils/index.js +38 -0
  23. package/cjs/services/inapp-notification-service/utils/polygon.js +66 -0
  24. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBridge.js +37 -0
  25. package/cjs/services/migration-service/scripts/index.js +3 -1
  26. package/cjs/services/setting-service/SettingService.js +8 -0
  27. package/cjs/services/setting-service/constants.js +2 -1
  28. package/cjs/services/storage-service/DatabaseService.js +3 -0
  29. package/cjs/services/transaction-service/index.js +1 -1
  30. package/cjs/stores/ChainlistStore.js +18 -0
  31. package/cjs/types/index.js +11 -0
  32. package/cjs/utils/account/transform.js +1 -1
  33. package/core/substrate/xcm-parser.d.ts +1 -0
  34. package/core/substrate/xcm-parser.js +15 -2
  35. package/koni/api/contract-handler/utils/index.d.ts +2 -0
  36. package/koni/api/contract-handler/utils/index.js +12 -0
  37. package/koni/api/contract-handler/utils/polygon_bridge_abi.json +1004 -0
  38. package/koni/background/handlers/Extension.d.ts +2 -0
  39. package/koni/background/handlers/Extension.js +43 -4
  40. package/koni/background/handlers/State.d.ts +2 -0
  41. package/koni/background/handlers/State.js +11 -2
  42. package/package.json +56 -14
  43. package/packageInfo.js +1 -1
  44. package/services/balance-service/transfer/xcm/index.d.ts +1 -0
  45. package/services/balance-service/transfer/xcm/index.js +29 -1
  46. package/services/balance-service/transfer/xcm/polygonBridge.d.ts +22 -0
  47. package/services/balance-service/transfer/xcm/polygonBridge.js +95 -0
  48. package/services/chain-online-service/constants.d.ts +4 -0
  49. package/services/chain-online-service/constants.js +23 -0
  50. package/services/chain-online-service/index.d.ts +22 -0
  51. package/services/chain-online-service/index.js +182 -0
  52. package/services/chain-service/index.d.ts +6 -7
  53. package/services/chain-service/index.js +78 -116
  54. package/services/chain-service/utils/index.js +0 -2
  55. package/services/chain-service/utils/patch.d.ts +16 -1
  56. package/services/chain-service/utils/patch.js +7 -3
  57. package/services/fee-service/utils/index.js +14 -0
  58. package/services/inapp-notification-service/consts.d.ts +3 -1
  59. package/services/inapp-notification-service/consts.js +6 -4
  60. package/services/inapp-notification-service/index.d.ts +10 -2
  61. package/services/inapp-notification-service/index.js +111 -7
  62. package/services/inapp-notification-service/interfaces.d.ts +27 -3
  63. package/services/inapp-notification-service/interfaces.js +7 -0
  64. package/services/inapp-notification-service/utils/avail.d.ts +40 -0
  65. package/services/inapp-notification-service/utils/avail.js +73 -0
  66. package/services/inapp-notification-service/utils/common.d.ts +11 -0
  67. package/services/inapp-notification-service/{utils.js → utils/common.js} +1 -72
  68. package/services/inapp-notification-service/utils/index.d.ts +3 -0
  69. package/services/inapp-notification-service/utils/index.js +6 -0
  70. package/services/inapp-notification-service/utils/polygon.d.ts +71 -0
  71. package/services/inapp-notification-service/utils/polygon.js +54 -0
  72. package/services/migration-service/scripts/MigrateTransactionHistoryBridge.d.ts +4 -0
  73. package/services/migration-service/scripts/MigrateTransactionHistoryBridge.js +29 -0
  74. package/services/migration-service/scripts/index.js +3 -1
  75. package/services/setting-service/SettingService.d.ts +4 -0
  76. package/services/setting-service/SettingService.js +8 -0
  77. package/services/setting-service/constants.js +2 -1
  78. package/services/storage-service/DatabaseService.d.ts +1 -0
  79. package/services/storage-service/DatabaseService.js +3 -0
  80. package/services/transaction-service/index.js +1 -1
  81. package/stores/ChainlistStore.d.ts +7 -0
  82. package/stores/ChainlistStore.js +10 -0
  83. package/types/{avail-bridge → bridge}/index.d.ts +1 -1
  84. package/types/index.d.ts +1 -0
  85. package/types/index.js +1 -0
  86. package/types/notification/index.d.ts +5 -0
  87. package/utils/account/transform.js +1 -1
  88. package/services/inapp-notification-service/utils.d.ts +0 -55
  89. /package/cjs/types/{avail-bridge → bridge}/index.js +0 -0
  90. /package/types/{avail-bridge → bridge}/index.js +0 -0
@@ -14,8 +14,8 @@ import { CrowdloanContributionsResponse } from '@subwallet/extension-base/servic
14
14
  import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
15
15
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
16
16
  import { AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, StorageDataInterface, SubmitYieldStepData, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo } from '@subwallet/extension-base/types';
17
- import { RequestClaimAvailBridge } from '@subwallet/extension-base/types/avail-bridge';
18
- import { GetNotificationParams, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification';
17
+ import { RequestClaimBridge } from '@subwallet/extension-base/types/bridge';
18
+ import { GetNotificationParams, RequestIsClaimedPolygonBridge, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification';
19
19
  import { InjectedAccount, InjectedAccountWithMeta, MetadataDefBase } from '@subwallet/extension-inject/types';
20
20
  import { KeyringPair$Meta } from '@subwallet/keyring/types';
21
21
  import { KeyringOptions } from '@subwallet/ui-keyring/options/types';
@@ -395,7 +395,7 @@ export declare enum ExtrinsicType {
395
395
  UNSTAKE_VMANTA = "earn.unstake_vmanta",
396
396
  TOKEN_SPENDING_APPROVAL = "token.spending_approval",
397
397
  SWAP = "swap",
398
- CLAIM_AVAIL_BRIDGE = "claim.claim_avail_bridge",
398
+ CLAIM_BRIDGE = "claim.claim_bridge",
399
399
  EVM_EXECUTE = "evm.execute",
400
400
  UNKNOWN = "unknown"
401
401
  }
@@ -435,7 +435,7 @@ export interface ExtrinsicDataTypeMap {
435
435
  [ExtrinsicType.REDEEM_STDOT]: RequestYieldLeave;
436
436
  [ExtrinsicType.REDEEM_VMANTA]: RequestYieldLeave;
437
437
  [ExtrinsicType.TOKEN_SPENDING_APPROVAL]: TokenSpendingApprovalParams;
438
- [ExtrinsicType.CLAIM_AVAIL_BRIDGE]: RequestClaimAvailBridge;
438
+ [ExtrinsicType.CLAIM_BRIDGE]: RequestClaimBridge;
439
439
  [ExtrinsicType.EVM_EXECUTE]: TransactionConfig;
440
440
  [ExtrinsicType.CROWDLOAN]: any;
441
441
  [ExtrinsicType.SWAP]: SwapTxData;
@@ -1680,7 +1680,9 @@ export interface KoniRequestSignatures {
1680
1680
  'pri(inappNotification.switchReadNotificationStatus)': [RequestSwitchStatusParams, null];
1681
1681
  'pri(inappNotification.fetch)': [GetNotificationParams, _NotificationInfo[]];
1682
1682
  'pri(inappNotification.get)': [string, _NotificationInfo];
1683
- 'pri(availBridge.submitClaimAvailBridgeOnAvail)': [RequestClaimAvailBridge, SWTransactionResponse];
1683
+ 'pri(inappNotification.isClaimedPolygonBridge)': [RequestIsClaimedPolygonBridge, boolean];
1684
+ 'pri(availBridge.submitClaimAvailBridgeOnAvail)': [RequestClaimBridge, SWTransactionResponse];
1685
+ 'pri(polygonBridge.submitClaimPolygonBridge)': [RequestClaimBridge, SWTransactionResponse];
1684
1686
  'pri(ledger.generic.allow)': [null, string[], string[]];
1685
1687
  }
1686
1688
  export interface ApplicationMetadataType {
@@ -102,7 +102,7 @@ export let ExtrinsicType;
102
102
  ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
103
103
  ExtrinsicType["TOKEN_SPENDING_APPROVAL"] = "token.spending_approval";
104
104
  ExtrinsicType["SWAP"] = "swap";
105
- ExtrinsicType["CLAIM_AVAIL_BRIDGE"] = "claim.claim_avail_bridge";
105
+ ExtrinsicType["CLAIM_BRIDGE"] = "claim.claim_bridge";
106
106
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
107
107
  ExtrinsicType["UNKNOWN"] = "unknown";
108
108
  })(ExtrinsicType || (ExtrinsicType = {}));
@@ -117,7 +117,7 @@ exports.ExtrinsicType = ExtrinsicType;
117
117
  ExtrinsicType["UNSTAKE_VMANTA"] = "earn.unstake_vmanta";
118
118
  ExtrinsicType["TOKEN_SPENDING_APPROVAL"] = "token.spending_approval";
119
119
  ExtrinsicType["SWAP"] = "swap";
120
- ExtrinsicType["CLAIM_AVAIL_BRIDGE"] = "claim.claim_avail_bridge";
120
+ ExtrinsicType["CLAIM_BRIDGE"] = "claim.claim_bridge";
121
121
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
122
122
  ExtrinsicType["UNKNOWN"] = "unknown";
123
123
  })(ExtrinsicType || (exports.ExtrinsicType = ExtrinsicType = {}));
@@ -11,11 +11,13 @@ exports._getXcmMultiLocation = _getXcmMultiLocation;
11
11
  exports._getXcmUnstableWarning = _getXcmUnstableWarning;
12
12
  exports._isAvailBridgeXcm = _isAvailBridgeXcm;
13
13
  exports._isMythosFromHydrationToMythos = _isMythosFromHydrationToMythos;
14
+ exports._isPolygonBridgeXcm = _isPolygonBridgeXcm;
14
15
  exports._isSnowBridgeXcm = _isSnowBridgeXcm;
15
16
  exports._isXcmTransferUnstable = _isXcmTransferUnstable;
16
17
  exports._isXcmWithinSameConsensus = _isXcmWithinSameConsensus;
17
18
  var _chainList = require("@subwallet/chain-list");
18
19
  var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
20
+ var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
19
21
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
20
22
  var _utilCrypto = require("@polkadot/util-crypto");
21
23
  // Copyright 2019-2022 @subwallet/extension-base
@@ -64,7 +66,7 @@ function _getXcmMultiLocation(originChainInfo, destChainInfo, version, recipient
64
66
  };
65
67
  }
66
68
  function _isXcmTransferUnstable(originChainInfo, destChainInfo, assetSlug) {
67
- return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo) || _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug);
69
+ return !_isXcmWithinSameConsensus(originChainInfo, destChainInfo) || _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug) || _isPolygonBridgeXcm(originChainInfo, destChainInfo);
68
70
  }
69
71
  function getAssetHubBridgeUnstableWarning(originChainInfo) {
70
72
  switch (originChainInfo.slug) {
@@ -92,8 +94,17 @@ function getMythosFromHydrationToMythosWarning() {
92
94
  function getAvailBridgeWarning() {
93
95
  return 'Cross-chain transfer of this token may take up to 90 minutes, and you’ll need to manually claim the funds on the destination network to complete the transfer. Do you still want to continue?';
94
96
  }
97
+ function getPolygonBridgeWarning(originChainInfo) {
98
+ if (originChainInfo.slug === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM || originChainInfo.slug === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA) {
99
+ return 'Cross-chain transfer of this token may take up to 40 minutes. Do you still want to continue?';
100
+ } else {
101
+ return 'Cross-chain transfer of this token may take up to 3 hours, and you’ll need to manually claim the funds on the destination network to complete the transfer. Do you still want to continue?';
102
+ }
103
+ }
95
104
  function _getXcmUnstableWarning(originChainInfo, destChainInfo, assetSlug) {
96
- if (_isAvailBridgeXcm(originChainInfo, destChainInfo)) {
105
+ if (_isPolygonBridgeXcm(originChainInfo, destChainInfo)) {
106
+ return getPolygonBridgeWarning(originChainInfo);
107
+ } else if (_isAvailBridgeXcm(originChainInfo, destChainInfo)) {
97
108
  return getAvailBridgeWarning();
98
109
  } else if (_isSnowBridgeXcm(originChainInfo, destChainInfo)) {
99
110
  return getSnowBridgeUnstableWarning(originChainInfo);
@@ -117,6 +128,9 @@ function _isAvailBridgeXcm(originChainInfo, destChainInfo) {
117
128
  function _isMythosFromHydrationToMythos(originChainInfo, destChainInfo, assetSlug) {
118
129
  return originChainInfo.slug === 'hydradx_main' && destChainInfo.slug === 'mythos' && assetSlug === 'hydradx_main-LOCAL-MYTH';
119
130
  }
131
+ function _isPolygonBridgeXcm(originChainInfo, destChainInfo) {
132
+ return (0, _polygonBridge._isPolygonChainBridge)(originChainInfo.slug, destChainInfo.slug);
133
+ }
120
134
 
121
135
  // ---------------------------------------------------------------------------------------------------------------------
122
136
 
@@ -3,8 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._TEST_ERC721_ABI = exports._SNOWBRIDGE_GATEWAY_ABI = exports._PSP34_ABI = exports._PSP22_ABI = exports._PINK_PSP34_ABI = exports._NEUROGUNS_PSP34_ABI = exports._ERC721_ABI = exports._ERC20_ABI = exports._AZERO_DOMAIN_REGISTRY_ABI = exports._AVAIL_TEST_BRIDGE_GATEWAY_ABI = exports._AVAIL_BRIDGE_GATEWAY_ABI = void 0;
6
+ exports._TEST_ERC721_ABI = exports._SNOWBRIDGE_GATEWAY_ABI = exports._PSP34_ABI = exports._PSP22_ABI = exports._POLYGON_BRIDGE_ABI = exports._PINK_PSP34_ABI = exports._NEUROGUNS_PSP34_ABI = exports._ERC721_ABI = exports._ERC20_ABI = exports._AZERO_DOMAIN_REGISTRY_ABI = exports._AVAIL_TEST_BRIDGE_GATEWAY_ABI = exports._AVAIL_BRIDGE_GATEWAY_ABI = void 0;
7
7
  exports.getAvailBridgeGatewayContract = getAvailBridgeGatewayContract;
8
+ exports.getPolygonBridgeContract = getPolygonBridgeContract;
8
9
  exports.getSnowBridgeGatewayContract = getSnowBridgeGatewayContract;
9
10
  exports.isAvailBridgeGatewayContract = isAvailBridgeGatewayContract;
10
11
  exports.isSnowBridgeGatewayContract = isSnowBridgeGatewayContract;
@@ -44,7 +45,10 @@ const _AVAIL_BRIDGE_GATEWAY_ABI = require('./avail_bridge_abi.json');
44
45
  // eslint-disable-next-line @typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-assignment
45
46
  exports._AVAIL_BRIDGE_GATEWAY_ABI = _AVAIL_BRIDGE_GATEWAY_ABI;
46
47
  const _AVAIL_TEST_BRIDGE_GATEWAY_ABI = require('./avail_test_bridge_abi.json');
48
+ // eslint-disable-next-line @typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-assignment
47
49
  exports._AVAIL_TEST_BRIDGE_GATEWAY_ABI = _AVAIL_TEST_BRIDGE_GATEWAY_ABI;
50
+ const _POLYGON_BRIDGE_ABI = require('./polygon_bridge_abi.json');
51
+ exports._POLYGON_BRIDGE_ABI = _POLYGON_BRIDGE_ABI;
48
52
  const SNOWBRIDGE_GATEWAY_ETHEREUM_CONTRACT_ADDRESS = '0x27ca963C279c93801941e1eB8799c23f407d68e7';
49
53
  const SNOWBRIDGE_GATEWAY_SEPOLIA_CONTRACT_ADDRESS = '0x5B4909cE6Ca82d2CE23BD46738953c7959E710Cd';
50
54
  function getSnowBridgeGatewayContract(chain) {
@@ -66,4 +70,14 @@ function getAvailBridgeGatewayContract(chain) {
66
70
  }
67
71
  function isAvailBridgeGatewayContract(contractAddress) {
68
72
  return [AVAILBRIDGE_GATEWAY_ETHEREUM_CONTRACT_ADDRESS, AVAILBRIDGE_GATEWAY_SEPOLIA_CONTRACT_ADDRESS].includes(contractAddress);
73
+ }
74
+ const POLYGONBRIDGE_GATEWAY_ETHEREUM_CONTRACT_ADDRESS = '0x2a3DD3EB832aF982ec71669E178424b10Dca2EDe';
75
+ const POLYGONBRIDGE_GATEWAY_SEPOLIA_CONTRACT_ADDRESS = '0x528e26b25a34a4A5d0dbDa1d57D318153d2ED582';
76
+ function getPolygonBridgeContract(chain) {
77
+ if (chain === 'polygonzkEvm_cardona' || chain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA) {
78
+ return POLYGONBRIDGE_GATEWAY_SEPOLIA_CONTRACT_ADDRESS;
79
+ } else if (chain === 'polygonZkEvm' || chain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM) {
80
+ return POLYGONBRIDGE_GATEWAY_ETHEREUM_CONTRACT_ADDRESS;
81
+ }
82
+ throw new Error('Invalid chain');
69
83
  }
@@ -33,6 +33,7 @@ var _token = require("@subwallet/extension-base/services/balance-service/transfe
33
33
  var _tonTransfer = require("@subwallet/extension-base/services/balance-service/transfer/ton-transfer");
34
34
  var _xcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm");
35
35
  var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
36
+ var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
36
37
  var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
37
38
  var _types2 = require("@subwallet/extension-base/services/chain-service/types");
38
39
  var _utils4 = require("@subwallet/extension-base/services/chain-service/utils");
@@ -1295,6 +1296,7 @@ class KoniExtension {
1295
1296
  const isAvailBridgeFromEvm = (0, _utils4._isPureEvmChain)(chainInfoMap[originNetworkKey]) && (0, _availBridge.isAvailChainBridge)(destinationNetworkKey);
1296
1297
  const isAvailBridgeFromAvail = (0, _availBridge.isAvailChainBridge)(originNetworkKey) && (0, _utils4._isPureEvmChain)(chainInfoMap[destinationNetworkKey]);
1297
1298
  const isSnowBridgeEvmTransfer = (0, _utils4._isPureEvmChain)(chainInfoMap[originNetworkKey]) && (0, _xcmParser._isSnowBridgeXcm)(chainInfoMap[originNetworkKey], chainInfoMap[destinationNetworkKey]) && !isAvailBridgeFromEvm;
1299
+ const isPolygonBridgeTransfer = (0, _polygonBridge._isPolygonChainBridge)(originNetworkKey, destinationNetworkKey);
1298
1300
  let additionalValidator;
1299
1301
  let eventsHandler;
1300
1302
  if (fromKeyPair && destinationTokenInfo) {
@@ -1311,7 +1313,9 @@ class KoniExtension {
1311
1313
  evmApi
1312
1314
  };
1313
1315
  let funcCreateExtrinsic;
1314
- if (isSnowBridgeEvmTransfer) {
1316
+ if (isPolygonBridgeTransfer) {
1317
+ funcCreateExtrinsic = _xcm.createPolygonBridgeExtrinsic;
1318
+ } else if (isSnowBridgeEvmTransfer) {
1315
1319
  funcCreateExtrinsic = _xcm.createSnowBridgeExtrinsic;
1316
1320
  } else if (isAvailBridgeFromEvm) {
1317
1321
  funcCreateExtrinsic = _xcm.createAvailBridgeTxFromEth;
@@ -1376,7 +1380,7 @@ class KoniExtension {
1376
1380
  transaction: extrinsic,
1377
1381
  data: inputData,
1378
1382
  extrinsicType: _KoniTypes.ExtrinsicType.TRANSFER_XCM,
1379
- chainType: !isSnowBridgeEvmTransfer && !isAvailBridgeFromEvm ? _KoniTypes.ChainType.SUBSTRATE : _KoniTypes.ChainType.EVM,
1383
+ chainType: !isSnowBridgeEvmTransfer && !isAvailBridgeFromEvm && !isPolygonBridgeTransfer ? _KoniTypes.ChainType.SUBSTRATE : _KoniTypes.ChainType.EVM,
1380
1384
  transferNativeAmount: (0, _utils4._isNativeToken)(originTokenInfo) ? value : '0',
1381
1385
  ignoreWarnings,
1382
1386
  isTransferAll: transferAll,
@@ -3452,7 +3456,7 @@ class KoniExtension {
3452
3456
  chain,
3453
3457
  notification
3454
3458
  } = data;
3455
- const extrinsicType = _KoniTypes.ExtrinsicType.CLAIM_AVAIL_BRIDGE;
3459
+ const extrinsicType = _KoniTypes.ExtrinsicType.CLAIM_BRIDGE;
3456
3460
  let transaction = null;
3457
3461
  let chainType;
3458
3462
  if ((0, _keyring.isSubstrateAddress)(address)) {
@@ -3473,6 +3477,32 @@ class KoniExtension {
3473
3477
  chainType
3474
3478
  });
3475
3479
  }
3480
+ async getIsClaimedPolygonBridge(data) {
3481
+ const evmApi = this.#koniState.getEvmApi(data.chainslug);
3482
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
3483
+ const isClaimed = await (0, _polygonBridge.isClaimedPolygonBridge)(data.chainslug, data.counter, data.sourceNetwork, evmApi);
3484
+ return isClaimed;
3485
+ }
3486
+ async submitClaimPolygonBridge(data) {
3487
+ const {
3488
+ address,
3489
+ chain,
3490
+ notification
3491
+ } = data;
3492
+ const extrinsicType = _KoniTypes.ExtrinsicType.CLAIM_BRIDGE;
3493
+ let transaction = null;
3494
+ const evmApi = this.#koniState.getEvmApi(chain);
3495
+ transaction = await (0, _polygonBridge.getClaimPolygonBridge)(chain, notification, evmApi);
3496
+ const chainType = _KoniTypes.ChainType.EVM;
3497
+ return await this.#koniState.transactionService.handleTransaction({
3498
+ address,
3499
+ chain,
3500
+ transaction,
3501
+ data,
3502
+ extrinsicType,
3503
+ chainType
3504
+ });
3505
+ }
3476
3506
 
3477
3507
  /* Ledger */
3478
3508
 
@@ -4060,6 +4090,8 @@ class KoniExtension {
4060
4090
  return this.fetchInappNotifications(request);
4061
4091
  case 'pri(inappNotification.get)':
4062
4092
  return this.getInappNotification(request);
4093
+ case 'pri(inappNotification.isClaimedPolygonBridge)':
4094
+ return this.getIsClaimedPolygonBridge(request);
4063
4095
  /* Notification service */
4064
4096
 
4065
4097
  /* Avail Bridge */
@@ -4067,6 +4099,13 @@ class KoniExtension {
4067
4099
  return this.submitClaimAvailBridge(request);
4068
4100
  /* Avail Bridge */
4069
4101
 
4102
+ /* Polygon Bridge */
4103
+
4104
+ case 'pri(polygonBridge.submitClaimPolygonBridge)':
4105
+ return this.submitClaimPolygonBridge(request);
4106
+
4107
+ /* Polygon Bridge */
4108
+
4070
4109
  /* Ledger */
4071
4110
  case 'pri(ledger.generic.allow)':
4072
4111
  return this.subscribeLedgerGenericAllowChains(id, port);
@@ -15,6 +15,7 @@ var _balanceService = require("@subwallet/extension-base/services/balance-servic
15
15
  var _types = require("@subwallet/extension-base/services/base/types");
16
16
  var _buyService = _interopRequireDefault(require("@subwallet/extension-base/services/buy-service"));
17
17
  var _campaignService = _interopRequireDefault(require("@subwallet/extension-base/services/campaign-service"));
18
+ var _chainOnlineService = require("@subwallet/extension-base/services/chain-online-service");
18
19
  var _chainService = require("@subwallet/extension-base/services/chain-service");
19
20
  var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
20
21
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
@@ -112,6 +113,7 @@ class KoniState {
112
113
  this.feeService = new _service2.default(this);
113
114
  this.swapService = new _swapService.SwapService(this);
114
115
  this.inappNotificationService = new _inappNotificationService.InappNotificationService(this.dbService, this.keyringService, this.eventService, this.chainService);
116
+ this.chainOnlineService = new _chainOnlineService.ChainOnlineService(this.chainService, this.settingService, this.eventService, this.dbService);
115
117
  this.subscription = new _subscription.KoniSubscription(this, this.dbService);
116
118
  this.cron = new _cron.KoniCron(this, this.subscription, this.dbService);
117
119
  this.logger = (0, _util.logger)('State');
@@ -206,7 +208,6 @@ class KoniState {
206
208
  async init() {
207
209
  await this.eventService.waitCryptoReady;
208
210
  await this.chainService.init();
209
- this.afterChainServiceInit();
210
211
  await this.migrationService.run();
211
212
  this.campaignService.init();
212
213
  this.mktCampaignService.init();
@@ -222,7 +223,11 @@ class KoniState {
222
223
  // TODO: consider moving this to a separate service
223
224
  await this.dbService.stores.crowdloan.removeEndedCrowdloans();
224
225
  await this.startSubscription();
226
+ this.chainOnlineService.checkLatestData();
225
227
  this.chainService.checkLatestData();
228
+ this.chainService.subscribeChainInfoMap().subscribe(() => {
229
+ this.afterChainServiceInit();
230
+ });
226
231
  }
227
232
  async initMantaPay(password) {
228
233
  var _this$chainService, _this$chainService$ma;
@@ -792,6 +797,7 @@ class KoniState {
792
797
  return this.chainService.stopAllChainApis();
793
798
  }
794
799
  async resumeAllNetworks() {
800
+ this.chainOnlineService.checkLatestData();
795
801
  return this.chainService.resumeAllChainApis();
796
802
  }
797
803
  publishCrowdloan(reset) {
@@ -1351,8 +1357,11 @@ class KoniState {
1351
1357
  this.chainService.resetWallet(resetAll);
1352
1358
  await this.walletConnectService.resetWallet(resetAll);
1353
1359
  await this.chainService.init();
1354
- this.afterChainServiceInit();
1360
+ this.chainOnlineService.checkLatestData();
1355
1361
  this.chainService.checkLatestData();
1362
+ this.chainService.subscribeChainInfoMap().subscribe(() => {
1363
+ this.afterChainServiceInit();
1364
+ });
1356
1365
  }
1357
1366
  async enableMantaPay(updateStore, address, password, seedPhrase) {
1358
1367
  var _this$chainService3, _this$chainService3$m, _this$chainService4, _this$chainService4$m, _this$chainService4$m2, _this$chainService11, _this$chainService11$, _this$chainService11$2;
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.3.7-0'
16
+ version: '1.3.8-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -4,10 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getXcmMockTxFee = exports.createXcmExtrinsic = exports.createSnowBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = void 0;
7
+ exports.getXcmMockTxFee = exports.createXcmExtrinsic = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = void 0;
8
8
  var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
9
9
  var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
10
10
  var _polkadotXcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polkadotXcm");
11
+ var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
11
12
  var _snowBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/snowBridge");
12
13
  var _xcmPallet = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xcmPallet");
13
14
  var _xTokens = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xTokens");
@@ -100,6 +101,35 @@ const createAvailBridgeExtrinsicFromAvail = async _ref4 => {
100
101
  return await (0, _availBridge.getAvailBridgeExtrinsicFromAvail)(recipient, sendingValue, substrateApi);
101
102
  };
102
103
  exports.createAvailBridgeExtrinsicFromAvail = createAvailBridgeExtrinsicFromAvail;
104
+ const createPolygonBridgeExtrinsic = async _ref5 => {
105
+ let {
106
+ chainInfoMap,
107
+ destinationTokenInfo,
108
+ evmApi,
109
+ originTokenInfo,
110
+ recipient,
111
+ sender,
112
+ sendingValue
113
+ } = _ref5;
114
+ const originChainInfo = chainInfoMap[originTokenInfo.originChain];
115
+ const destinationChainInfo = chainInfoMap[destinationTokenInfo.originChain];
116
+ if (!(0, _xcmParser._isPolygonBridgeXcm)(originChainInfo, destinationChainInfo)) {
117
+ throw new Error('This is not a valid PolygonBridge transfer');
118
+ }
119
+ if (!evmApi) {
120
+ throw Error('Evm API is not available');
121
+ }
122
+ if (!sender) {
123
+ throw Error('Sender is required');
124
+ }
125
+ const sourceChain = originChainInfo.slug;
126
+ if (sourceChain === 'polygonzkEvm_cardona' || sourceChain === 'polygonZkEvm') {
127
+ return (0, _polygonBridge._createPolygonBridgeL2toL1Extrinsic)(originTokenInfo, originChainInfo, sender, recipient, sendingValue, evmApi);
128
+ } else {
129
+ return (0, _polygonBridge._createPolygonBridgeL1toL2Extrinsic)(originTokenInfo, originChainInfo, sender, recipient, sendingValue, evmApi);
130
+ }
131
+ };
132
+ exports.createPolygonBridgeExtrinsic = createPolygonBridgeExtrinsic;
103
133
  const getXcmMockTxFee = async (substrateApi, chainInfoMap, originTokenInfo, destinationTokenInfo) => {
104
134
  try {
105
135
  var _paymentInfo$partialF;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.POLYGON_PROOF_INDEXER = exports.POLYGON_GAS_INDEXER = void 0;
7
+ exports._createPolygonBridgeL1toL2Extrinsic = _createPolygonBridgeL1toL2Extrinsic;
8
+ exports._createPolygonBridgeL2toL1Extrinsic = _createPolygonBridgeL2toL1Extrinsic;
9
+ exports._isPolygonChainBridge = _isPolygonChainBridge;
10
+ exports.getClaimPolygonBridge = getClaimPolygonBridge;
11
+ exports.isClaimedPolygonBridge = isClaimedPolygonBridge;
12
+ var _chainList = require("@subwallet/chain-list");
13
+ var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3");
14
+ var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
15
+ var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
16
+ var _utils3 = require("@subwallet/extension-base/services/fee-service/utils");
17
+ // Copyright 2019-2022 @subwallet/extension-base
18
+ // SPDX-License-Identifier: Apache-2.0
19
+
20
+ const POLYGON_PROOF_INDEXER = {
21
+ MAINNET: 'https://api-gateway.polygon.technology/api/v3/proof/mainnet/merkle-proof',
22
+ TESTNET: 'https://api-gateway.polygon.technology/api/v3/proof/testnet/merkle-proof'
23
+ };
24
+ exports.POLYGON_PROOF_INDEXER = POLYGON_PROOF_INDEXER;
25
+ const POLYGON_GAS_INDEXER = {
26
+ MAINNET: 'https://gasstation.polygon.technology/zkevm',
27
+ TESTNET: 'https://gasstation.polygon.technology/zkevm/cardona'
28
+ };
29
+ exports.POLYGON_GAS_INDEXER = POLYGON_GAS_INDEXER;
30
+ async function createPolygonBridgeTransaction(tokenInfo, originChainInfo, sender, recipientAddress, value, destinationNetwork, evmApi) {
31
+ var _priority$maxFeePerGa, _priority$maxPriority;
32
+ const polygonBridgeContractAddress = (0, _utils.getPolygonBridgeContract)(originChainInfo.slug);
33
+ const polygonBridgeContract = (0, _web.getWeb3Contract)(polygonBridgeContractAddress, evmApi, _utils._POLYGON_BRIDGE_ABI);
34
+ const tokenContract = (0, _utils2._getContractAddressOfToken)(tokenInfo) || '0x0000000000000000000000000000000000000000'; // FOR Ethereum: use null address
35
+
36
+ if (tokenContract !== '0x0000000000000000000000000000000000000000') {
37
+ throw new Error('Only native token transfer is supported');
38
+ }
39
+
40
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
41
+ const transferCall = polygonBridgeContract.methods.bridgeAsset(destinationNetwork, recipientAddress, value, tokenContract, true, '0x');
42
+ const transferEncodedCall = transferCall.encodeABI();
43
+ const priority = await (0, _utils3.calculateGasFeeParams)(evmApi, evmApi.chainSlug);
44
+ const transactionConfig = {
45
+ from: sender,
46
+ to: polygonBridgeContractAddress,
47
+ value: value,
48
+ data: transferEncodedCall,
49
+ gasPrice: priority.gasPrice,
50
+ maxFeePerGas: priority === null || priority === void 0 ? void 0 : (_priority$maxFeePerGa = priority.maxFeePerGas) === null || _priority$maxFeePerGa === void 0 ? void 0 : _priority$maxFeePerGa.toString(),
51
+ maxPriorityFeePerGas: priority === null || priority === void 0 ? void 0 : (_priority$maxPriority = priority.maxPriorityFeePerGas) === null || _priority$maxPriority === void 0 ? void 0 : _priority$maxPriority.toString()
52
+ };
53
+ const gasLimit = await evmApi.api.eth.estimateGas(transactionConfig).catch(() => 200000);
54
+ transactionConfig.gas = gasLimit.toString();
55
+ return transactionConfig;
56
+ }
57
+ async function _createPolygonBridgeL1toL2Extrinsic(tokenInfo, originChainInfo, sender, recipientAddress, value, evmApi) {
58
+ return createPolygonBridgeTransaction(tokenInfo, originChainInfo, sender, recipientAddress, value, 1, evmApi);
59
+ }
60
+ async function _createPolygonBridgeL2toL1Extrinsic(tokenInfo, originChainInfo, sender, recipientAddress, value, evmApi) {
61
+ return createPolygonBridgeTransaction(tokenInfo, originChainInfo, sender, recipientAddress, value, 0, evmApi);
62
+ }
63
+ async function getClaimPolygonBridge(chainSlug, notification, evmApi) {
64
+ var _priority$maxFeePerGa2, _priority$maxPriority2;
65
+ const polygonBridgeContractAddress = (0, _utils.getPolygonBridgeContract)(chainSlug);
66
+ const polygonBridgeContract = (0, _web.getWeb3Contract)(polygonBridgeContractAddress, evmApi, _utils._POLYGON_BRIDGE_ABI);
67
+ const metadata = notification.metadata;
68
+ const isTestnet = chainSlug === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA;
69
+ const proofDomain = isTestnet ? POLYGON_PROOF_INDEXER.TESTNET : POLYGON_PROOF_INDEXER.MAINNET;
70
+ const proofResponse = await fetch(`${proofDomain}?networkId=${metadata.sourceNetwork}&depositCount=${metadata.counter}`).then(res => res.json());
71
+ const proof = proofResponse.proof;
72
+
73
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
74
+ const transferCall = polygonBridgeContract.methods.claimAsset(proof.merkle_proof, proof.rollup_merkle_proof, metadata.counter, proof.main_exit_root, proof.rollup_exit_root, metadata.originTokenNetwork, metadata.originTokenAddress, metadata.destinationNetwork, metadata.receiver, metadata.amounts[0], '0x');
75
+ const transferEncodedCall = transferCall.encodeABI();
76
+ const priority = await (0, _utils3.calculateGasFeeParams)(evmApi, evmApi.chainSlug);
77
+ const transactionConfig = {
78
+ from: metadata.userAddress,
79
+ to: polygonBridgeContractAddress,
80
+ value: '0',
81
+ data: transferEncodedCall,
82
+ gasPrice: priority.gasPrice,
83
+ maxFeePerGas: (_priority$maxFeePerGa2 = priority.maxFeePerGas) === null || _priority$maxFeePerGa2 === void 0 ? void 0 : _priority$maxFeePerGa2.toString(),
84
+ maxPriorityFeePerGas: (_priority$maxPriority2 = priority.maxPriorityFeePerGas) === null || _priority$maxPriority2 === void 0 ? void 0 : _priority$maxPriority2.toString()
85
+ };
86
+ const gasLimit = await evmApi.api.eth.estimateGas(transactionConfig).catch(() => 200000);
87
+ transactionConfig.gas = gasLimit.toString();
88
+ return transactionConfig;
89
+ }
90
+ async function isClaimedPolygonBridge(chainSlug, counter, sourceNetwork, evmApi) {
91
+ const polygonBridgeContractAddress = (0, _utils.getPolygonBridgeContract)(chainSlug);
92
+ const polygonBridgeContract = (0, _web.getWeb3Contract)(polygonBridgeContractAddress, evmApi, _utils._POLYGON_BRIDGE_ABI);
93
+
94
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-member-access
95
+ return await polygonBridgeContract.methods.isClaimed(counter, sourceNetwork).call();
96
+ }
97
+ function _isPolygonChainBridge(srcChain, destChain) {
98
+ if (srcChain === 'polygonzkEvm_cardona' && destChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA) {
99
+ return true;
100
+ } else if (srcChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA && destChain === 'polygonzkEvm_cardona') {
101
+ return true;
102
+ } else if (srcChain === 'polygonZkEvm' && destChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM) {
103
+ return true;
104
+ } else if (srcChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM && destChain === 'polygonZkEvm') {
105
+ return true;
106
+ }
107
+ return false;
108
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LATEST_CHAIN_PATCH_FETCHING_INTERVAL = void 0;
7
+ exports.md5HashChainAsset = md5HashChainAsset;
8
+ exports.md5HashChainInfo = md5HashChainInfo;
9
+ var _tsMd = require("ts-md5");
10
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
11
+ // SPDX-License-Identifier: Apache-2.0
12
+
13
+ const LATEST_CHAIN_PATCH_FETCHING_INTERVAL = 180000;
14
+ exports.LATEST_CHAIN_PATCH_FETCHING_INTERVAL = LATEST_CHAIN_PATCH_FETCHING_INTERVAL;
15
+ function md5HashChainInfo(data) {
16
+ // todo: use from chain list package later
17
+ const {
18
+ chainStatus,
19
+ icon,
20
+ providers,
21
+ ...chainBaseInfo
22
+ } = data;
23
+ return _tsMd.Md5.hashStr(JSON.stringify(chainBaseInfo));
24
+ }
25
+ function md5HashChainAsset(data) {
26
+ // todo: use from chain list package later
27
+ const {
28
+ icon,
29
+ ...assetBaseInfo
30
+ } = data;
31
+ return _tsMd.Md5.hashStr(JSON.stringify(assetBaseInfo));
32
+ }