@subwallet/extension-base 1.3.2-0 → 1.3.4-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 (124) hide show
  1. package/background/KoniTypes.d.ts +13 -0
  2. package/background/KoniTypes.js +1 -0
  3. package/cjs/background/KoniTypes.js +1 -0
  4. package/cjs/constants/blocked-actions-list.js +1 -2
  5. package/cjs/constants/index.js +16 -1
  6. package/cjs/constants/remind-notification-time.js +14 -0
  7. package/cjs/core/logic-validation/transfer.js +12 -6
  8. package/cjs/core/substrate/xcm-parser.js +13 -1
  9. package/cjs/koni/api/contract-handler/utils/index.js +20 -1
  10. package/cjs/koni/api/nft/assethub_nft/index.js +30 -7
  11. package/cjs/koni/background/handlers/Extension.js +110 -23
  12. package/cjs/koni/background/handlers/State.js +5 -2
  13. package/cjs/packageInfo.js +1 -1
  14. package/cjs/services/balance-service/helpers/process.js +2 -1
  15. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +11 -12
  16. package/cjs/services/balance-service/transfer/xcm/availBridge.js +198 -0
  17. package/cjs/services/balance-service/transfer/xcm/index.js +50 -5
  18. package/cjs/services/chain-service/handler/EvmApi.js +12 -21
  19. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +29 -0
  20. package/cjs/services/chain-service/index.js +44 -13
  21. package/cjs/services/chain-service/utils/index.js +20 -0
  22. package/cjs/services/earning-service/handlers/base.js +14 -4
  23. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +10 -2
  24. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +2 -0
  25. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +2 -0
  26. package/cjs/services/earning-service/handlers/native-staking/tao.js +25 -38
  27. package/cjs/services/earning-service/handlers/nomination-pool/index.js +9 -4
  28. package/cjs/services/earning-service/service.js +5 -0
  29. package/cjs/services/earning-service/utils/index.js +0 -11
  30. package/cjs/services/inapp-notification-service/consts.js +31 -0
  31. package/cjs/services/inapp-notification-service/index.js +260 -0
  32. package/cjs/services/inapp-notification-service/interfaces.js +32 -0
  33. package/cjs/services/inapp-notification-service/utils.js +197 -0
  34. package/cjs/services/keyring-service/context/account-context.js +9 -0
  35. package/cjs/services/keyring-service/context/state.js +4 -0
  36. package/cjs/services/setting-service/SettingService.js +9 -1
  37. package/cjs/services/setting-service/constants.js +16 -1
  38. package/cjs/services/storage-service/DatabaseService.js +42 -3
  39. package/cjs/services/storage-service/databases/index.js +3 -0
  40. package/cjs/services/storage-service/db-stores/InappNotification.js +81 -0
  41. package/cjs/services/transaction-service/index.js +13 -0
  42. package/cjs/services/transaction-service/utils.js +3 -0
  43. package/cjs/types/avail-bridge/index.js +1 -0
  44. package/cjs/types/notification/index.js +1 -0
  45. package/cjs/utils/account/transform.js +9 -5
  46. package/cjs/utils/staticData/index.js +7 -2
  47. package/constants/blocked-actions-list.js +1 -2
  48. package/constants/index.d.ts +2 -0
  49. package/constants/index.js +3 -1
  50. package/constants/remind-notification-time.d.ts +2 -0
  51. package/constants/remind-notification-time.js +7 -0
  52. package/core/logic-validation/transfer.js +12 -6
  53. package/core/substrate/xcm-parser.d.ts +1 -0
  54. package/core/substrate/xcm-parser.js +12 -1
  55. package/koni/api/contract-handler/utils/avail_bridge_abi.json +1659 -0
  56. package/koni/api/contract-handler/utils/avail_test_bridge_abi.json +1692 -0
  57. package/koni/api/contract-handler/utils/index.d.ts +4 -0
  58. package/koni/api/contract-handler/utils/index.js +15 -0
  59. package/koni/api/nft/assethub_nft/index.d.ts +2 -0
  60. package/koni/api/nft/assethub_nft/index.js +30 -7
  61. package/koni/background/handlers/Extension.d.ts +7 -0
  62. package/koni/background/handlers/Extension.js +112 -25
  63. package/koni/background/handlers/State.d.ts +2 -0
  64. package/koni/background/handlers/State.js +5 -2
  65. package/package.json +54 -6
  66. package/packageInfo.js +1 -1
  67. package/services/balance-service/helpers/process.js +2 -1
  68. package/services/balance-service/helpers/subscribe/substrate/index.js +5 -6
  69. package/services/balance-service/transfer/xcm/availBridge.d.ts +45 -0
  70. package/services/balance-service/transfer/xcm/availBridge.js +186 -0
  71. package/services/balance-service/transfer/xcm/index.d.ts +8 -8
  72. package/services/balance-service/transfer/xcm/index.js +46 -5
  73. package/services/chain-service/handler/EvmApi.js +12 -21
  74. package/services/chain-service/handler/SubstrateChainHandler.d.ts +2 -0
  75. package/services/chain-service/handler/SubstrateChainHandler.js +29 -0
  76. package/services/chain-service/index.d.ts +2 -0
  77. package/services/chain-service/index.js +45 -14
  78. package/services/chain-service/types.d.ts +2 -1
  79. package/services/chain-service/utils/index.d.ts +3 -0
  80. package/services/chain-service/utils/index.js +14 -0
  81. package/services/earning-service/handlers/base.d.ts +2 -0
  82. package/services/earning-service/handlers/base.js +11 -1
  83. package/services/earning-service/handlers/native-staking/amplitude.js +10 -2
  84. package/services/earning-service/handlers/native-staking/para-chain.js +2 -0
  85. package/services/earning-service/handlers/native-staking/relay-chain.js +2 -0
  86. package/services/earning-service/handlers/native-staking/tao.d.ts +15 -11
  87. package/services/earning-service/handlers/native-staking/tao.js +21 -38
  88. package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -1
  89. package/services/earning-service/handlers/nomination-pool/index.js +9 -4
  90. package/services/earning-service/service.d.ts +2 -0
  91. package/services/earning-service/service.js +5 -0
  92. package/services/earning-service/utils/index.d.ts +0 -2
  93. package/services/earning-service/utils/index.js +0 -10
  94. package/services/inapp-notification-service/consts.d.ts +18 -0
  95. package/services/inapp-notification-service/consts.js +22 -0
  96. package/services/inapp-notification-service/index.d.ts +37 -0
  97. package/services/inapp-notification-service/index.js +252 -0
  98. package/services/inapp-notification-service/interfaces.d.ts +77 -0
  99. package/services/inapp-notification-service/interfaces.js +24 -0
  100. package/services/inapp-notification-service/utils.d.ts +55 -0
  101. package/services/inapp-notification-service/utils.js +173 -0
  102. package/services/keyring-service/context/account-context.d.ts +3 -0
  103. package/services/keyring-service/context/account-context.js +9 -0
  104. package/services/keyring-service/context/state.d.ts +1 -0
  105. package/services/keyring-service/context/state.js +4 -0
  106. package/services/setting-service/SettingService.js +9 -1
  107. package/services/setting-service/constants.d.ts +2 -0
  108. package/services/setting-service/constants.js +15 -0
  109. package/services/storage-service/DatabaseService.d.ts +15 -0
  110. package/services/storage-service/DatabaseService.js +42 -3
  111. package/services/storage-service/databases/index.d.ts +2 -0
  112. package/services/storage-service/databases/index.js +3 -0
  113. package/services/storage-service/db-stores/InappNotification.d.ts +14 -0
  114. package/services/storage-service/db-stores/InappNotification.js +73 -0
  115. package/services/transaction-service/index.js +13 -0
  116. package/services/transaction-service/utils.js +3 -0
  117. package/types/avail-bridge/index.d.ts +6 -0
  118. package/types/avail-bridge/index.js +1 -0
  119. package/types/notification/index.d.ts +9 -0
  120. package/types/notification/index.js +1 -0
  121. package/utils/account/transform.js +9 -5
  122. package/utils/staticData/index.d.ts +5 -1
  123. package/utils/staticData/index.js +5 -2
  124. package/utils/staticData/remindNotificationTime.json +1 -0
@@ -19,9 +19,7 @@ var _wasm = require("@subwallet/extension-base/koni/api/contract-handler/wasm");
19
19
  var _utils = require("@subwallet/extension-base/koni/api/contract-handler/wasm/utils");
20
20
  var _constants2 = require("@subwallet/extension-base/services/chain-service/constants");
21
21
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
22
- var _tao = require("@subwallet/extension-base/services/earning-service/handlers/native-staking/tao");
23
- var _utils3 = require("@subwallet/extension-base/services/earning-service/utils");
24
- var _utils4 = require("@subwallet/extension-base/utils");
22
+ var _utils3 = require("@subwallet/extension-base/utils");
25
23
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
26
24
  var _evm = require("../evm");
27
25
  var _equilibrium = require("./equilibrium");
@@ -140,11 +138,11 @@ const subscribeWithSystemAccountPallet = async _ref => {
140
138
  args: addresses
141
139
  });
142
140
  }
143
- let bittensorStakingBalances = new Array(addresses.length).fill(BigInt(0));
141
+ let bittensorStakingBalances = new Array(addresses.length).fill(new _bignumber.default(0));
144
142
  if (['bittensor'].includes(chainInfo.slug)) {
145
143
  bittensorStakingBalances = await Promise.all(addresses.map(async address => {
146
- const rawDelegateState = await (0, _tao.fetchTaoDelegateState)(address);
147
- return (0, _utils3.getTaoTotalStake)(rawDelegateState);
144
+ const TaoTotalStake = await substrateApi.api.query.subtensorModule.totalColdkeyStake(address);
145
+ return new _bignumber.default(TaoTotalStake.toString());
148
146
  }));
149
147
  }
150
148
  const subscription = substrateApi.subscribeDataWithMulti(params, rs => {
@@ -160,7 +158,8 @@ const subscribeWithSystemAccountPallet = async _ref => {
160
158
  const nominationPoolBalance = poolMemberInfo ? (0, _nominationpoolsPallet._getTotalStakeInNominationPool)(poolMemberInfo) : BigInt(0);
161
159
  totalLockedFromTransfer += nominationPoolBalance;
162
160
  }
163
- totalLockedFromTransfer += bittensorStakingBalances[index];
161
+ const stakeValue = BigInt(bittensorStakingBalances[index].toString());
162
+ totalLockedFromTransfer += stakeValue;
164
163
  return {
165
164
  address: addresses[index],
166
165
  tokenSlug: (0, _utils2._getChainNativeTokenSlug)(chainInfo),
@@ -199,7 +198,7 @@ const subscribeForeignAssetBalance = async _ref2 => {
199
198
  substrateApi
200
199
  } = _ref2;
201
200
  const foreignAssetsAccountKey = 'query_foreignAssets_account';
202
- const tokenMap = (0, _utils4.filterAssetsByChainAndType)(assetMap, chainInfo.slug, [_types._AssetType.LOCAL]);
201
+ const tokenMap = (0, _utils3.filterAssetsByChainAndType)(assetMap, chainInfo.slug, [_types._AssetType.LOCAL]);
203
202
  const unsubList = await Promise.all(Object.values(tokenMap).map(tokenInfo => {
204
203
  try {
205
204
  if ((0, _utils2._isBridgedToken)(tokenInfo)) {
@@ -266,7 +265,7 @@ const subscribePSP22Balance = _ref3 => {
266
265
  } = _ref3;
267
266
  const chain = chainInfo.slug;
268
267
  const psp22ContractMap = {};
269
- const tokenList = (0, _utils4.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.PSP22]);
268
+ const tokenList = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.PSP22]);
270
269
  Object.entries(tokenList).forEach(_ref4 => {
271
270
  let [slug, tokenInfo] = _ref4;
272
271
  psp22ContractMap[slug] = (0, _wasm.getPSP22ContractPromise)(substrateApi.api, (0, _utils2._getContractAddressOfToken)(tokenInfo));
@@ -327,7 +326,7 @@ const subscribeTokensAccountsPallet = async _ref5 => {
327
326
  } = _ref5;
328
327
  const tokensAccountsKey = 'query_tokens_accounts';
329
328
  const tokenTypes = includeNativeToken ? [_types._AssetType.NATIVE, _types._AssetType.LOCAL] : [_types._AssetType.LOCAL];
330
- const tokenMap = (0, _utils4.filterAssetsByChainAndType)(assetMap, chainInfo.slug, tokenTypes);
329
+ const tokenMap = (0, _utils3.filterAssetsByChainAndType)(assetMap, chainInfo.slug, tokenTypes);
331
330
  const unsubList = await Promise.all(Object.values(tokenMap).map(tokenInfo => {
332
331
  try {
333
332
  const params = [{
@@ -373,7 +372,7 @@ const subscribeAssetsAccountPallet = async _ref6 => {
373
372
  substrateApi
374
373
  } = _ref6;
375
374
  const assetsAccountKey = 'query_assets_account';
376
- const tokenMap = (0, _utils4.filterAssetsByChainAndType)(assetMap, chainInfo.slug, [_types._AssetType.LOCAL]);
375
+ const tokenMap = (0, _utils3.filterAssetsByChainAndType)(assetMap, chainInfo.slug, [_types._AssetType.LOCAL]);
377
376
  Object.values(tokenMap).forEach(token => {
378
377
  if (_constants2._MANTA_ZK_CHAIN_GROUP.includes(token.originChain) && token.symbol.startsWith(_constants2._ZK_ASSET_PREFIX)) {
379
378
  delete tokenMap[token.slug];
@@ -442,7 +441,7 @@ const subscribeOrmlTokensPallet = async _ref7 => {
442
441
  substrateApi
443
442
  } = _ref7;
444
443
  const ormlTokensAccountsKey = 'query_ormlTokens_accounts';
445
- const tokenMap = (0, _utils4.filterAssetsByChainAndType)(assetMap, chainInfo.slug, [_types._AssetType.LOCAL]);
444
+ const tokenMap = (0, _utils3.filterAssetsByChainAndType)(assetMap, chainInfo.slug, [_types._AssetType.LOCAL]);
446
445
  const unsubList = Object.values(tokenMap).map(tokenInfo => {
447
446
  try {
448
447
  const params = [{
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AvailBridgeConfig = void 0;
7
+ exports.getAvailBridgeExtrinsicFromAvail = getAvailBridgeExtrinsicFromAvail;
8
+ exports.getAvailBridgeTxFromEth = getAvailBridgeTxFromEth;
9
+ exports.getClaimTxOnAvail = getClaimTxOnAvail;
10
+ exports.getClaimTxOnEthereum = getClaimTxOnEthereum;
11
+ exports.isAvailChainBridge = isAvailChainBridge;
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/fee-service/utils");
16
+ var _utils3 = require("@subwallet/extension-base/services/inapp-notification-service/utils");
17
+ var _keyring = require("@subwallet/keyring");
18
+ var _util = require("@polkadot/util");
19
+ // Copyright 2019-2022 @subwallet/extension-base
20
+ // SPDX-License-Identifier: Apache-2.0
21
+
22
+ const AvailBridgeConfig = {
23
+ ASSET_ID: '0x0000000000000000000000000000000000000000000000000000000000000000',
24
+ ETHEREUM_DOMAIN: 2,
25
+ // todo: check if these config can change later
26
+ AVAIL_DOMAIN: 1
27
+ };
28
+ exports.AvailBridgeConfig = AvailBridgeConfig;
29
+ async function getAvailBridgeTxFromEth(originChainInfo, sender, recipient, value, evmApi) {
30
+ var _priority$maxFeePerGa, _priority$maxPriority;
31
+ const availBridgeContractAddress = (0, _utils.getAvailBridgeGatewayContract)(originChainInfo.slug);
32
+ const ABI = getAvailBridgeAbi(originChainInfo.slug);
33
+ const availBridgeContract = (0, _web.getWeb3Contract)(availBridgeContractAddress, evmApi, ABI);
34
+ const _address = (0, _util.u8aToHex)((0, _keyring.decodeAddress)(recipient));
35
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
36
+ const sendAvail = availBridgeContract.methods.sendAVAIL(_address, value);
37
+ const transferData = sendAvail.encodeABI();
38
+ const priority = await (0, _utils2.calculateGasFeeParams)(evmApi, evmApi.chainSlug);
39
+ const gasLimit = await sendAvail.estimateGas({
40
+ from: sender
41
+ });
42
+ return {
43
+ from: sender,
44
+ to: availBridgeContractAddress,
45
+ value: '0',
46
+ data: transferData,
47
+ gasPrice: priority.gasPrice,
48
+ maxFeePerGas: (_priority$maxFeePerGa = priority.maxFeePerGas) === null || _priority$maxFeePerGa === void 0 ? void 0 : _priority$maxFeePerGa.toString(),
49
+ maxPriorityFeePerGas: (_priority$maxPriority = priority.maxPriorityFeePerGas) === null || _priority$maxPriority === void 0 ? void 0 : _priority$maxPriority.toString(),
50
+ gas: gasLimit
51
+ };
52
+ }
53
+ async function getAvailBridgeExtrinsicFromAvail(recipient, sendingValue, substrateApi) {
54
+ const data = {
55
+ message: {
56
+ FungibleToken: {
57
+ assetId: AvailBridgeConfig.ASSET_ID,
58
+ amount: BigInt(sendingValue)
59
+ }
60
+ },
61
+ to: `${recipient.padEnd(66, '0')}`,
62
+ domain: AvailBridgeConfig.ETHEREUM_DOMAIN
63
+ };
64
+ const chainApi = await substrateApi.isReady;
65
+ return chainApi.api.tx.vector.sendMessage(data.message, data.to, data.domain);
66
+ }
67
+ async function getClaimTxOnAvail(notification, substrateApi) {
68
+ const chainApi = await substrateApi.isReady;
69
+ const chainSlug = chainApi.chainSlug;
70
+ const metadata = notification.metadata;
71
+ const lastestEthHeadSlot = await getLastestEthHeadSlot(chainSlug);
72
+ const lastestBlockHash = await getLastestBlockHash(chainSlug, lastestEthHeadSlot);
73
+ const proof = await getClaimProofOnAvail(chainSlug, lastestBlockHash, metadata.messageId);
74
+ return chainApi.api.tx.vector.execute(lastestEthHeadSlot, getAddressMessage(notification), proof.accountProof, proof.storageProof);
75
+ }
76
+ async function getLastestEthHeadSlot(chainSlug) {
77
+ try {
78
+ const api = getAvailBridgeApi(chainSlug);
79
+ const rawResponse = await fetch(`${api}/eth/head`);
80
+ const response = await rawResponse.json();
81
+ return response.slot;
82
+ } catch (e) {
83
+ console.error(e);
84
+ throw e;
85
+ }
86
+ }
87
+ async function getLastestBlockHash(chainSlug, slot) {
88
+ try {
89
+ const api = getAvailBridgeApi(chainSlug);
90
+ const rawResponse = await fetch(`${api}/beacon/slot/${slot}`);
91
+ const response = await rawResponse.json();
92
+ return response.blockHash;
93
+ } catch (e) {
94
+ console.error(e);
95
+ throw e;
96
+ }
97
+ }
98
+ async function getClaimProofOnAvail(chainSlug, blockHash, messageId) {
99
+ try {
100
+ const api = getAvailBridgeApi(chainSlug);
101
+ const rawResponse = await fetch(`${api}/avl/proof/${blockHash}/${messageId}`);
102
+ return await rawResponse.json();
103
+ } catch (e) {
104
+ console.error(e);
105
+ throw e;
106
+ }
107
+ }
108
+ async function getClaimProofOnEthereum(chainSlug, blockHash, transactionIndex) {
109
+ try {
110
+ const api = getAvailBridgeApi(chainSlug);
111
+ const rawResponse = await fetch(`${api}/eth/proof/${blockHash}?index=${transactionIndex}`);
112
+ return await rawResponse.json();
113
+ } catch (e) {
114
+ console.error(e);
115
+ throw e;
116
+ }
117
+ }
118
+ function getAvailBridgeApi(chainSlug) {
119
+ if (chainSlug === 'avail_mainnet' || chainSlug === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM) {
120
+ // todo: add COMMON_CHAIN_SLUGS for AVAIL, AVAIL TURING
121
+ return _utils3.AVAIL_BRIDGE_API.AVAIL_MAINNET;
122
+ }
123
+ return _utils3.AVAIL_BRIDGE_API.AVAIL_TESTNET;
124
+ }
125
+ async function getClaimTxOnEthereum(chainSlug, notification, evmApi) {
126
+ var _priority$maxFeePerGa2, _priority$maxPriority2;
127
+ const availBridgeContractAddress = (0, _utils.getAvailBridgeGatewayContract)(chainSlug);
128
+ const ABI = getAvailBridgeAbi(chainSlug);
129
+ const availBridgeContract = (0, _web.getWeb3Contract)(availBridgeContractAddress, evmApi, ABI);
130
+ const metadata = notification.metadata;
131
+ const merkleProof = await getClaimProofOnEthereum(chainSlug, metadata.sourceBlockHash, metadata.sourceTransactionIndex);
132
+
133
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
134
+ const transfer = availBridgeContract.methods.receiveAVAIL({
135
+ messageType: '0x02',
136
+ from: merkleProof.message.from,
137
+ to: merkleProof.message.to,
138
+ originDomain: merkleProof.message.originDomain,
139
+ destinationDomain: merkleProof.message.destinationDomain,
140
+ data: evmApi.api.eth.abi.encodeParameters([{
141
+ name: 'assetId',
142
+ type: 'bytes32'
143
+ }, {
144
+ name: 'amount',
145
+ type: 'uint256'
146
+ }], [merkleProof.message.message.fungibleToken.asset_id, BigInt(merkleProof.message.message.fungibleToken.amount)]),
147
+ messageId: merkleProof.message.id
148
+ }, {
149
+ dataRootProof: merkleProof.dataRootProof,
150
+ leafProof: merkleProof.leafProof,
151
+ rangeHash: merkleProof.rangeHash,
152
+ dataRootIndex: merkleProof.dataRootIndex,
153
+ blobRoot: merkleProof.blobRoot,
154
+ bridgeRoot: merkleProof.bridgeRoot,
155
+ leaf: merkleProof.leaf,
156
+ leafIndex: merkleProof.leafIndex
157
+ });
158
+ const transferData = transfer.encodeABI();
159
+ const gasLimit = await transfer.estimateGas({
160
+ from: metadata.receiverAddress
161
+ });
162
+ const priority = await (0, _utils2.calculateGasFeeParams)(evmApi, evmApi.chainSlug);
163
+ return {
164
+ from: metadata.receiverAddress,
165
+ to: availBridgeContractAddress,
166
+ value: '0',
167
+ data: transferData,
168
+ gasPrice: priority.gasPrice,
169
+ maxFeePerGas: (_priority$maxFeePerGa2 = priority.maxFeePerGas) === null || _priority$maxFeePerGa2 === void 0 ? void 0 : _priority$maxFeePerGa2.toString(),
170
+ maxPriorityFeePerGas: (_priority$maxPriority2 = priority.maxPriorityFeePerGas) === null || _priority$maxPriority2 === void 0 ? void 0 : _priority$maxPriority2.toString(),
171
+ gas: gasLimit
172
+ };
173
+ }
174
+ function getAddressMessage(notification) {
175
+ const metadata = notification.metadata;
176
+ return {
177
+ message: {
178
+ FungibleToken: {
179
+ assetId: AvailBridgeConfig.ASSET_ID,
180
+ amount: metadata.amount
181
+ }
182
+ },
183
+ from: `${metadata.depositorAddress.padEnd(66, '0')}`,
184
+ to: (0, _util.u8aToHex)((0, _keyring.decodeAddress)(metadata.receiverAddress)),
185
+ originDomain: AvailBridgeConfig.ETHEREUM_DOMAIN,
186
+ destinationDomain: AvailBridgeConfig.AVAIL_DOMAIN,
187
+ id: metadata.messageId
188
+ };
189
+ }
190
+ function getAvailBridgeAbi(chainSlug) {
191
+ if (chainSlug === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA) {
192
+ return _utils._AVAIL_TEST_BRIDGE_GATEWAY_ABI;
193
+ }
194
+ return _utils._AVAIL_BRIDGE_GATEWAY_ABI;
195
+ }
196
+ function isAvailChainBridge(chainSlug) {
197
+ return ['avail_mainnet', 'availTuringTest'].includes(chainSlug);
198
+ }
@@ -4,8 +4,9 @@ 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 = void 0;
7
+ exports.getXcmMockTxFee = exports.createXcmExtrinsic = exports.createSnowBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = void 0;
8
8
  var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
9
+ var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
9
10
  var _polkadotXcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polkadotXcm");
10
11
  var _snowBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/snowBridge");
11
12
  var _xcmPallet = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xcmPallet");
@@ -33,6 +34,12 @@ const createSnowBridgeExtrinsic = async _ref => {
33
34
  if (!(0, _xcmParser._isSnowBridgeXcm)(originChainInfo, destinationChainInfo)) {
34
35
  throw new Error('This is not a valid SnowBridge transfer');
35
36
  }
37
+ if (!evmApi) {
38
+ throw Error('Evm API is not available');
39
+ }
40
+ if (!sender) {
41
+ throw Error('Sender is required');
42
+ }
36
43
  return (0, _snowBridge.getSnowBridgeEvmTransfer)(originTokenInfo, originChainInfo, destinationChainInfo, sender, recipient, sendingValue, evmApi);
37
44
  };
38
45
  exports.createSnowBridgeExtrinsic = createSnowBridgeExtrinsic;
@@ -47,6 +54,9 @@ const createXcmExtrinsic = async _ref2 => {
47
54
  } = _ref2;
48
55
  const originChainInfo = chainInfoMap[originTokenInfo.originChain];
49
56
  const destinationChainInfo = chainInfoMap[destinationTokenInfo.originChain];
57
+ if (!substrateApi) {
58
+ throw Error('Substrate API is not available');
59
+ }
50
60
  const chainApi = await substrateApi.isReady;
51
61
  const api = chainApi.api;
52
62
  const polkadotXcmSpecialCases = _constants._XCM_CHAIN_GROUP.polkadotXcmSpecialCases.includes(originChainInfo.slug) && (0, _utils._isNativeToken)(originTokenInfo);
@@ -59,24 +69,59 @@ const createXcmExtrinsic = async _ref2 => {
59
69
  return (0, _xTokens.getExtrinsicByXtokensPallet)(originTokenInfo, originChainInfo, destinationChainInfo, recipient, sendingValue, api);
60
70
  };
61
71
  exports.createXcmExtrinsic = createXcmExtrinsic;
72
+ const createAvailBridgeTxFromEth = _ref3 => {
73
+ let {
74
+ chainInfoMap,
75
+ evmApi,
76
+ originTokenInfo,
77
+ recipient,
78
+ sender,
79
+ sendingValue
80
+ } = _ref3;
81
+ const originChainInfo = chainInfoMap[originTokenInfo.originChain];
82
+ if (!evmApi) {
83
+ throw Error('Evm API is not available');
84
+ }
85
+ if (!sender) {
86
+ throw Error('Sender is required');
87
+ }
88
+ return (0, _availBridge.getAvailBridgeTxFromEth)(originChainInfo, sender, recipient, sendingValue, evmApi);
89
+ };
90
+ exports.createAvailBridgeTxFromEth = createAvailBridgeTxFromEth;
91
+ const createAvailBridgeExtrinsicFromAvail = async _ref4 => {
92
+ let {
93
+ recipient,
94
+ sendingValue,
95
+ substrateApi
96
+ } = _ref4;
97
+ if (!substrateApi) {
98
+ throw Error('Substrate API is not available');
99
+ }
100
+ return await (0, _availBridge.getAvailBridgeExtrinsicFromAvail)(recipient, sendingValue, substrateApi);
101
+ };
102
+ exports.createAvailBridgeExtrinsicFromAvail = createAvailBridgeExtrinsicFromAvail;
62
103
  const getXcmMockTxFee = async (substrateApi, chainInfoMap, originTokenInfo, destinationTokenInfo) => {
63
104
  try {
64
105
  var _paymentInfo$partialF;
65
106
  const destChainInfo = chainInfoMap[destinationTokenInfo.originChain];
66
107
  const originChainInfo = chainInfoMap[originTokenInfo.originChain];
67
- const address = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap'; // todo: move this
108
+ const fakeAddress = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap'; // todo: move this
109
+ const substrateAddress = fakeAddress; // todo: move this
110
+ const evmAddress = (0, _util.u8aToHex)((0, _utilCrypto.addressToEvm)(fakeAddress)); // todo: move this
68
111
 
69
112
  // mock receiving account from sender
70
- const recipient = !(0, _utilCrypto.isEthereumAddress)(address) && (0, _utils._isChainEvmCompatible)(destChainInfo) && !(0, _utils._isChainEvmCompatible)(originChainInfo) ? (0, _util.u8aToHex)((0, _utilCrypto.addressToEvm)(address)) : address;
113
+ const sender = (0, _utils._isChainEvmCompatible)(originChainInfo) ? evmAddress : substrateAddress;
114
+ const recipient = (0, _utils._isChainEvmCompatible)(destChainInfo) ? evmAddress : substrateAddress;
71
115
  const mockTx = await createXcmExtrinsic({
72
116
  chainInfoMap,
73
117
  destinationTokenInfo,
74
118
  originTokenInfo,
75
- recipient: recipient,
119
+ sender,
120
+ recipient,
76
121
  sendingValue: '1000000000000000000',
77
122
  substrateApi
78
123
  });
79
- const paymentInfo = await mockTx.paymentInfo(address);
124
+ const paymentInfo = await mockTx.paymentInfo(fakeAddress);
80
125
  return new _bignumber.default((paymentInfo === null || paymentInfo === void 0 ? void 0 : (_paymentInfo$partialF = paymentInfo.partialFee) === null || _paymentInfo$partialF === void 0 ? void 0 : _paymentInfo$partialF.toString()) || '0');
81
126
  } catch (e) {
82
127
  console.error('error mocking xcm tx fee', e);
@@ -80,15 +80,11 @@ class EvmApi {
80
80
  createIntervalCheckApi() {
81
81
  this.clearIntervalCheckApi();
82
82
  return setInterval(() => {
83
- if (!this.ignoreNetListen) {
84
- this.api.eth.net.isListening().then(() => {
85
- this.onConnect();
86
- }).catch(() => {
87
- this.onDisconnect();
88
- });
89
- } else {
83
+ this.api.eth.getChainId().then(() => {
90
84
  this.onConnect();
91
- }
85
+ }).catch(() => {
86
+ this.onDisconnect();
87
+ });
92
88
  }, 10000);
93
89
  }
94
90
  clearIntervalCheckApi() {
@@ -101,21 +97,16 @@ class EvmApi {
101
97
  this.updateConnectionStatus(_types._ChainConnectionStatus.CONNECTING);
102
98
 
103
99
  // Check if api is ready
104
- if (!this.ignoreNetListen) {
105
- this.api.eth.net.isListening().then(() => {
106
- this.isApiReadyOnce = true;
107
- this.onConnect();
108
- }).catch(error => {
109
- this.isApiReadyOnce = false;
110
- this.isApiReady = false;
111
- this.isReadyHandler.reject(error);
112
- this.updateConnectionStatus(_types._ChainConnectionStatus.DISCONNECTED);
113
- console.warn(`Can not connect to ${this.chainSlug} (EVM) at ${this.apiUrl}`);
114
- });
115
- } else {
100
+ this.api.eth.getChainId().then(() => {
116
101
  this.isApiReadyOnce = true;
117
102
  this.onConnect();
118
- }
103
+ }).catch(error => {
104
+ this.isApiReadyOnce = false;
105
+ this.isApiReady = false;
106
+ this.isReadyHandler.reject(error);
107
+ this.updateConnectionStatus(_types._ChainConnectionStatus.DISCONNECTED);
108
+ console.warn(`Can not connect to ${this.chainSlug} (EVM) at ${this.apiUrl}`);
109
+ });
119
110
 
120
111
  // Interval to check connecting status
121
112
  this.intervalCheckApi = this.createIntervalCheckApi();
@@ -186,6 +186,15 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
186
186
  }
187
187
  return [nameRes, decimals, symbolRes, contractError];
188
188
  }
189
+ async getLocalTokenInfo(apiPromise, assetId) {
190
+ const _metadata = await apiPromise.query.assets.metadata(assetId);
191
+ const metadata = _metadata.toPrimitive();
192
+ let idError = false;
193
+ if (!metadata.name || !metadata.symbol) {
194
+ idError = true;
195
+ }
196
+ return [metadata.name, metadata.decimals, metadata.symbol, idError];
197
+ }
189
198
  async getSubstrateContractTokenInfo(contractAddress, tokenType, originChain, contractCaller) {
190
199
  // todo: improve this funtion later
191
200
 
@@ -225,6 +234,26 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
225
234
  };
226
235
  }
227
236
  }
237
+ async getSubstrateAssetIdTokenInfo(assetId, originChain) {
238
+ const apiPromise = this.getSubstrateApiByChain(originChain).api;
239
+ try {
240
+ const [name, decimals, symbol, contractError] = await this.getLocalTokenInfo(apiPromise, assetId);
241
+ return {
242
+ name,
243
+ decimals,
244
+ symbol,
245
+ contractError
246
+ };
247
+ } catch (e) {
248
+ this.logger.error(e);
249
+ return {
250
+ name: '',
251
+ decimals: -1,
252
+ symbol: '',
253
+ contractError: true
254
+ };
255
+ }
256
+ }
228
257
  setSubstrateApi(chainSlug, substrateApi) {
229
258
  this.substrateApiMap[chainSlug] = substrateApi;
230
259
  }
@@ -201,6 +201,15 @@ class ChainService {
201
201
  });
202
202
  return filteredAssetRegistry;
203
203
  }
204
+ getAssetHubToken() {
205
+ const assetHubToken = {};
206
+ Object.values(this.getAssetRegistry()).forEach(asset => {
207
+ if (['statemint', 'statemine'].includes(asset.originChain)) {
208
+ assetHubToken[asset.slug] = asset;
209
+ }
210
+ });
211
+ return assetHubToken;
212
+ }
204
213
  getChainInfoMap() {
205
214
  return this.dataMap.chainInfoMap;
206
215
  }
@@ -458,7 +467,7 @@ class ChainService {
458
467
  upsertCustomToken(token) {
459
468
  if (token.slug.length === 0) {
460
469
  // new token
461
- if (token.assetType === _types._AssetType.NATIVE) {
470
+ if (token.assetType === _types._AssetType.NATIVE || token.assetType === _types._AssetType.LOCAL) {
462
471
  const defaultSlug = this.generateSlugForNativeToken(token.originChain, token.assetType, token.symbol);
463
472
  token.slug = `${_types3._CUSTOM_PREFIX}${defaultSlug}`;
464
473
  } else {
@@ -467,7 +476,7 @@ class ChainService {
467
476
  token.slug = `${_types3._CUSTOM_PREFIX}${defaultSlug}`;
468
477
  }
469
478
  }
470
- if (token.originChain && (0, _utils._isAssetFungibleToken)(token)) {
479
+ if (token.originChain && ((0, _utils._isAssetFungibleToken)(token) || (0, _utils._isLocalToken)(token))) {
471
480
  var _this$getChainInfoByK;
472
481
  token.hasValue = !((_this$getChainInfoByK = this.getChainInfoByKey(token.originChain)) !== null && _this$getChainInfoByK !== void 0 && _this$getChainInfoByK.isTestnet);
473
482
  }
@@ -1540,13 +1549,35 @@ class ChainService {
1540
1549
  contractError: false
1541
1550
  };
1542
1551
  }
1552
+ async getAssetIdTokenInfo(assetId, tokenType, chain) {
1553
+ if ([_types._AssetType.LOCAL].includes(tokenType) && assetId) {
1554
+ return await this.substrateChainHandler.getSubstrateAssetIdTokenInfo(assetId, chain);
1555
+ }
1556
+ return {
1557
+ decimals: -1,
1558
+ name: '',
1559
+ symbol: '',
1560
+ contractError: false
1561
+ };
1562
+ }
1543
1563
  async validateCustomToken(data) {
1544
1564
  const assetRegistry = this.getSmartContractTokens();
1565
+ const asset = this.getAssetHubToken();
1545
1566
  let existedToken;
1546
1567
  for (const token of Object.values(assetRegistry)) {
1547
1568
  var _token$metadata2;
1548
1569
  const contractAddress = token === null || token === void 0 ? void 0 : (_token$metadata2 = token.metadata) === null || _token$metadata2 === void 0 ? void 0 : _token$metadata2.contractAddress;
1549
- if ((0, _utils._isEqualContractAddress)(contractAddress, data.contractAddress) && token.assetType === data.type && token.originChain === data.originChain) {
1570
+ if (data.contractAddress) {
1571
+ if ((0, _utils._isEqualContractAddress)(contractAddress, data.contractAddress) && token.assetType === data.type && token.originChain === data.originChain) {
1572
+ existedToken = token;
1573
+ break;
1574
+ }
1575
+ }
1576
+ }
1577
+ for (const token of Object.values(asset)) {
1578
+ var _token$metadata3;
1579
+ const assetId = token === null || token === void 0 ? void 0 : (_token$metadata3 = token.metadata) === null || _token$metadata3 === void 0 ? void 0 : _token$metadata3.assetId;
1580
+ if (assetId === data.assetId && token.assetType === data.type && token.originChain === data.originChain) {
1550
1581
  existedToken = token;
1551
1582
  break;
1552
1583
  }
@@ -1562,18 +1593,18 @@ class ChainService {
1562
1593
  contractError: false
1563
1594
  };
1564
1595
  }
1565
- const {
1566
- contractError,
1567
- decimals,
1568
- name,
1569
- symbol
1570
- } = await this.getSmartContractTokenInfo(data.contractAddress, data.type, data.originChain, data.contractCaller);
1596
+ let info;
1597
+ if (data.contractAddress) {
1598
+ info = await this.getSmartContractTokenInfo(data.contractAddress, data.type, data.originChain, data.contractCaller);
1599
+ } else {
1600
+ info = await this.getAssetIdTokenInfo(data.assetId, data.type, data.originChain);
1601
+ }
1571
1602
  return {
1572
- name,
1573
- decimals,
1574
- symbol,
1603
+ name: info.name,
1604
+ decimals: info.decimals,
1605
+ symbol: info.symbol,
1575
1606
  isExist: !!existedToken,
1576
- contractError
1607
+ contractError: info.contractError
1577
1608
  };
1578
1609
  }
1579
1610
  generateSlugForSmartContractAsset(originChain, assetType, symbol, contractAddress) {
@@ -42,6 +42,8 @@ var _exportNames = {
42
42
  _isChainSupportWasmNft: true,
43
43
  _isChainSupportEvmERC20: true,
44
44
  _isChainSupportWasmPSP22: true,
45
+ _isAssetHubChain: true,
46
+ _isAssetHubToken: true,
45
47
  _isChainSupportGRC20: true,
46
48
  _isChainSupportVFT: true,
47
49
  _isSupportOrdinal: true,
@@ -77,6 +79,7 @@ var _exportNames = {
77
79
  _getAssetDecimals: true,
78
80
  _getBlockExplorerFromChain: true,
79
81
  _parseMetadataForSmartContractAsset: true,
82
+ _parseMetadataForAssetId: true,
80
83
  _isChainTestNet: true,
81
84
  _isAssetFungibleToken: true,
82
85
  _isAssetAutoEnable: true,
@@ -132,6 +135,8 @@ exports._getXcmTransferType = _getXcmTransferType;
132
135
  exports._isAssetAutoEnable = void 0;
133
136
  exports._isAssetCanPayTxFee = _isAssetCanPayTxFee;
134
137
  exports._isAssetFungibleToken = _isAssetFungibleToken;
138
+ exports._isAssetHubChain = _isAssetHubChain;
139
+ exports._isAssetHubToken = _isAssetHubToken;
135
140
  exports._isAssetSmartContractNft = _isAssetSmartContractNft;
136
141
  exports._isAssetValuable = _isAssetValuable;
137
142
  exports._isBridgedToken = _isBridgedToken;
@@ -176,6 +181,7 @@ exports._isTokenTransferredByTon = _isTokenTransferredByTon;
176
181
  exports._isTokenWasmSmartContract = _isTokenWasmSmartContract;
177
182
  exports._isXcmPathSupported = _isXcmPathSupported;
178
183
  exports._parseAssetRefKey = _parseAssetRefKey;
184
+ exports._parseMetadataForAssetId = _parseMetadataForAssetId;
179
185
  exports._parseMetadataForSmartContractAsset = _parseMetadataForSmartContractAsset;
180
186
  exports.findChainInfoByHalfGenesisHash = exports.findChainInfoByChainId = void 0;
181
187
  exports.randomizeProvider = randomizeProvider;
@@ -388,6 +394,12 @@ function _isChainSupportWasmPSP22(chainInfo) {
388
394
  var _chainInfo$substrateI10, _chainInfo$substrateI11;
389
395
  return ((_chainInfo$substrateI10 = chainInfo.substrateInfo) === null || _chainInfo$substrateI10 === void 0 ? void 0 : (_chainInfo$substrateI11 = _chainInfo$substrateI10.supportSmartContract) === null || _chainInfo$substrateI11 === void 0 ? void 0 : _chainInfo$substrateI11.includes(_types._AssetType.PSP22)) || false;
390
396
  }
397
+ function _isAssetHubChain(chainInfo) {
398
+ return ['statemint', 'statemine'].includes(chainInfo.slug);
399
+ }
400
+ function _isAssetHubToken(token) {
401
+ return ['statemint', 'statemine'].includes(token.originChain);
402
+ }
391
403
  function _isChainSupportGRC20(chainInfo) {
392
404
  var _chainInfo$substrateI12, _chainInfo$substrateI13;
393
405
  return ((_chainInfo$substrateI12 = chainInfo.substrateInfo) === null || _chainInfo$substrateI12 === void 0 ? void 0 : (_chainInfo$substrateI13 = _chainInfo$substrateI12.supportSmartContract) === null || _chainInfo$substrateI13 === void 0 ? void 0 : _chainInfo$substrateI13.includes(_types._AssetType.GRC20)) || false;
@@ -435,6 +447,9 @@ function _getTokenTypesSupportedByChain(chainInfo) {
435
447
  }
436
448
  });
437
449
  }
450
+ if (['statemint', 'statemine'].includes(chainInfo.slug)) {
451
+ result.push(_types._AssetType.LOCAL);
452
+ }
438
453
  return result;
439
454
  }
440
455
  function _getChainNativeTokenBasicInfo(chainInfo) {
@@ -588,6 +603,11 @@ function _parseMetadataForSmartContractAsset(contractAddress) {
588
603
  contractAddress
589
604
  };
590
605
  }
606
+ function _parseMetadataForAssetId(assetId) {
607
+ return {
608
+ assetId
609
+ };
610
+ }
591
611
  function _isChainTestNet(chainInfo) {
592
612
  return chainInfo.isTestnet || false;
593
613
  }