@subwallet/extension-base 1.1.43-0 → 1.1.44-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 (39) hide show
  1. package/cjs/koni/api/dotsama/transfer.js +9 -9
  2. package/cjs/koni/api/nft/index.js +1 -1
  3. package/cjs/koni/api/nft/ordinal_nft/constants.js +1 -5
  4. package/cjs/koni/api/nft/ordinal_nft/index.js +3 -8
  5. package/cjs/koni/api/nft/transfer.js +22 -12
  6. package/cjs/koni/api/nft/unique_network_nft/index.js +10 -9
  7. package/cjs/koni/background/handlers/Extension.js +1 -1
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/chain-service/constants.js +5 -4
  10. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +63 -0
  11. package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +21 -19
  12. package/cjs/services/migration-service/scripts/index.js +6 -4
  13. package/cjs/services/subscan-service/index.js +80 -18
  14. package/cjs/services/subscan-service/subscan-chain-map.js +3 -1
  15. package/koni/api/dotsama/transfer.js +9 -9
  16. package/koni/api/nft/index.js +2 -2
  17. package/koni/api/nft/ordinal_nft/constants.d.ts +0 -2
  18. package/koni/api/nft/ordinal_nft/constants.js +0 -2
  19. package/koni/api/nft/ordinal_nft/index.d.ts +1 -1
  20. package/koni/api/nft/ordinal_nft/index.js +3 -8
  21. package/koni/api/nft/transfer.d.ts +2 -2
  22. package/koni/api/nft/transfer.js +22 -12
  23. package/koni/api/nft/unique_network_nft/index.js +10 -9
  24. package/koni/background/handlers/Extension.js +1 -1
  25. package/package.json +11 -11
  26. package/packageInfo.js +1 -1
  27. package/services/chain-service/constants.d.ts +0 -1
  28. package/services/chain-service/constants.js +5 -4
  29. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.d.ts +4 -0
  30. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +54 -0
  31. package/services/migration-service/scripts/databases/MigrateAssetSetting.js +21 -19
  32. package/services/migration-service/scripts/index.js +6 -3
  33. package/services/subscan-service/index.d.ts +8 -1
  34. package/services/subscan-service/index.js +79 -18
  35. package/services/subscan-service/subscan-chain-map.js +3 -1
  36. package/services/subscan-service/types.d.ts +7 -0
  37. package/cjs/koni/api/nft/ordinal_nft/utils.js +0 -41
  38. package/koni/api/nft/ordinal_nft/utils.d.ts +0 -2
  39. package/koni/api/nft/ordinal_nft/utils.js +0 -33
@@ -86,9 +86,9 @@ async function checkSupportTransfer(networkKey, tokenInfo, substrateApiMap, chai
86
86
  ) {
87
87
  result.supportTransfer = false;
88
88
  result.supportTransferAll = false;
89
- } else if (_constants._TRANSFER_CHAIN_GROUP.crab.includes(networkKey) && _constants._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
90
- result.supportTransfer = true;
91
- result.supportTransferAll = true;
89
+ // } else if (_TRANSFER_CHAIN_GROUP.crab.includes(networkKey) && _BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
90
+ // result.supportTransfer = true;
91
+ // result.supportTransferAll = true;
92
92
  } else if (isTxBalancesSupported && (0, _utils2._isNativeToken)(tokenInfo)) {
93
93
  result.supportTransfer = true;
94
94
  result.supportTransferAll = true;
@@ -173,12 +173,12 @@ const createTransferExtrinsic = async _ref => {
173
173
  ) {
174
174
  // transfer = api.tx.eqBalances.transfer(_getTokenOnChainAssetId(tokenInfo), to, value);
175
175
  /* empty */
176
- } else if (!(0, _utils2._isNativeToken)(tokenInfo) && (_constants._TRANSFER_CHAIN_GROUP.crab.includes(networkKey) || _constants._BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol))) {
177
- if (transferAll) {
178
- transfer = api.tx.kton.transferAll(to, false);
179
- } else if (value) {
180
- transfer = api.tx.kton.transfer(to, new _util.BN(value));
181
- }
176
+ // } else if (!_isNativeToken(tokenInfo) && (_TRANSFER_CHAIN_GROUP.crab.includes(networkKey) || _BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol))) {
177
+ // if (transferAll) {
178
+ // transfer = api.tx.kton.transferAll(to, false);
179
+ // } else if (value) {
180
+ // transfer = api.tx.kton.transfer(to, new BN(value));
181
+ // }
182
182
  } else if (_constants._TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo)) {
183
183
  transfer = api.tx.currencies.transfer(to, (0, _utils2._getTokenOnChainInfo)(tokenInfo), value);
184
184
  } else if (_constants._TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !(0, _utils2._isNativeToken)(tokenInfo)) {
@@ -136,7 +136,7 @@ class NftHandler {
136
136
  }
137
137
  }
138
138
  }
139
- if ((0, _utils._isSupportOrdinal)(chain)) {
139
+ if ((0, _utils._isSupportOrdinal)(chain) && _utils2.targetIsWeb) {
140
140
  var _chainInfo$extraInfo;
141
141
  const subscanChain = (_chainInfo$extraInfo = chainInfo.extraInfo) === null || _chainInfo$extraInfo === void 0 ? void 0 : _chainInfo$extraInfo.subscanSlug;
142
142
  if (subscanChain) {
@@ -3,14 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.GET_EXTRINSIC_PARAMS_API = exports.GET_EVENT_LIST_API = exports.BASE_FETCH_ORDINAL_EVENT_DATA = void 0;
6
+ exports.BASE_FETCH_ORDINAL_EVENT_DATA = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
- const GET_EVENT_LIST_API = 'https://{{chain}}.api.subscan.io/api/v2/scan/events';
11
- exports.GET_EVENT_LIST_API = GET_EVENT_LIST_API;
12
- const GET_EXTRINSIC_PARAMS_API = 'https://{{chain}}.api.subscan.io/api/scan/extrinsic/params';
13
- exports.GET_EXTRINSIC_PARAMS_API = GET_EXTRINSIC_PARAMS_API;
14
10
  const BASE_FETCH_ORDINAL_EVENT_DATA = {
15
11
  event_id: 'Remarked',
16
12
  module: 'system',
@@ -5,9 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _constants = require("@subwallet/extension-base/constants");
8
- var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
9
- var _utils = require("@subwallet/extension-base/koni/api/nft/ordinal_nft/utils");
10
8
  var _handlers = require("@subwallet/extension-base/koni/background/handlers");
9
+ var _nft = require("../nft");
11
10
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
12
11
  // SPDX-License-Identifier: Apache-2.0
13
12
 
@@ -52,14 +51,10 @@ class OrdinalNftApi extends _nft.BaseNftApi {
52
51
  this.subscanChain = subscanChain;
53
52
  }
54
53
  async handleNft(address, handleNftParams) {
55
- const events = await _handlers.state.subscanService.addRequest(async () => {
56
- return await (0, _utils.fetchRemarkEvent)(this.subscanChain, address);
57
- });
54
+ const events = await _handlers.state.subscanService.getAccountRemarkEvents(this.subscanChain, address);
58
55
  if (events && events.length) {
59
56
  const extrinsicIds = events.map(data => data.extrinsic_index);
60
- const extrinsicParams = await _handlers.state.subscanService.addRequest(async () => {
61
- return await (0, _utils.fetchExtrinsicParams)(this.subscanChain, extrinsicIds);
62
- });
57
+ const extrinsicParams = await _handlers.state.subscanService.getExtrinsicParams(this.subscanChain, extrinsicIds);
63
58
  const items = [];
64
59
  for (const data of extrinsicParams) {
65
60
  const {
@@ -41,13 +41,24 @@ function rmrkGetExtrinsic(substrateApi, senderAddress, recipientAddress, params)
41
41
  return null;
42
42
  }
43
43
  }
44
- function uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params) {
44
+ async function uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params) {
45
45
  try {
46
46
  const itemId = params.itemId;
47
47
  const collectionId = params.collectionId;
48
- return substrateApi.api.tx.unique.transfer({
49
- Substrate: recipientAddress
50
- }, collectionId, itemId, 1);
48
+
49
+ // @ts-ignore
50
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
51
+ const collectionInfo = (await substrateApi.api.rpc.unique.collectionById(collectionId)).toHuman();
52
+ const isTransfersEnabled = collectionInfo.limits.transfersEnabled;
53
+
54
+ // isTransfersEnabled equal to null mean that it's set as default (enable transfer)
55
+ if (isTransfersEnabled || isTransfersEnabled === null) {
56
+ return substrateApi.api.tx.unique.transfer({
57
+ Substrate: recipientAddress
58
+ }, collectionId, itemId, 1);
59
+ } else {
60
+ return null;
61
+ }
51
62
  } catch (e) {
52
63
  console.error(e);
53
64
  return null;
@@ -73,7 +84,7 @@ function statemintGetExtrinsic(substrateApi, senderAddress, recipientAddress, pa
73
84
  return null;
74
85
  }
75
86
  }
76
- function getNftTransferExtrinsic(networkKey, substrateApi, senderAddress, recipientAddress, params) {
87
+ async function getNftTransferExtrinsic(networkKey, substrateApi, senderAddress, recipientAddress, params) {
77
88
  switch (networkKey) {
78
89
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.acala:
79
90
  return acalaGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
@@ -81,13 +92,12 @@ function getNftTransferExtrinsic(networkKey, substrateApi, senderAddress, recipi
81
92
  return acalaGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
82
93
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.kusama:
83
94
  return rmrkGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
84
- // temporary prevent send nfts on Unique network-based chains
85
- // case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.uniqueNft:
86
- // return uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
87
- // case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.quartz:
88
- // return uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
89
- // case SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.opal:
90
- // return uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
95
+ case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.uniqueNft:
96
+ return await uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
97
+ case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.quartz:
98
+ return await uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
99
+ case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.opal:
100
+ return await uniqueGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
91
101
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.statemine:
92
102
  return statemineGetExtrinsic(substrateApi, senderAddress, recipientAddress, params);
93
103
  case _config.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME.statemint:
@@ -25,18 +25,19 @@ class UniqueNftApi extends _nft.BaseNftApi {
25
25
  const attRecord = nft.attributes;
26
26
  if (attRecord) {
27
27
  for (const item in attRecord) {
28
- if (attRecord[item].name._.toLowerCase() === 'traits') {
29
- const traits = [];
30
- const traitValues = attRecord[item].value;
31
- for (const trait in traitValues) {
32
- traits.push(traitValues[trait]._);
28
+ const attName = attRecord[item].name._;
29
+ const attInfo = attRecord[item].value;
30
+ if (Array.isArray(attInfo)) {
31
+ const attList = [];
32
+ for (const trait of attInfo) {
33
+ attList.push(trait._);
33
34
  }
34
- propertiesMap.traits = {
35
- value: traits
35
+ propertiesMap[attName] = {
36
+ value: attList
36
37
  };
37
38
  } else {
38
- propertiesMap[attRecord[item].name._] = {
39
- value: attRecord[item].value._
39
+ propertiesMap[attName] = {
40
+ value: attInfo._
40
41
  };
41
42
  }
42
43
  }
@@ -2067,7 +2067,7 @@ class KoniExtension {
2067
2067
  const isPSP34 = params === null || params === void 0 ? void 0 : params.isPsp34;
2068
2068
  const networkKey = params === null || params === void 0 ? void 0 : params.networkKey;
2069
2069
  const apiProps = this.#koniState.getSubstrateApi(networkKey);
2070
- const extrinsic = !isPSP34 ? (0, _transfer2.getNftTransferExtrinsic)(networkKey, apiProps, senderAddress, recipientAddress, params || {}) : await (0, _wasm.getPSP34TransferExtrinsic)(networkKey, apiProps, senderAddress, recipientAddress, params || {});
2070
+ const extrinsic = !isPSP34 ? await (0, _transfer2.getNftTransferExtrinsic)(networkKey, apiProps, senderAddress, recipientAddress, params || {}) : await (0, _wasm.getPSP34TransferExtrinsic)(networkKey, apiProps, senderAddress, recipientAddress, params || {});
2071
2071
 
2072
2072
  // this.addContact(recipientAddress);
2073
2073
 
@@ -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.1.43-0'
16
+ version: '1.1.44-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -40,7 +40,7 @@ const _BALANCE_CHAIN_GROUP = {
40
40
  genshiro: ['genshiro_testnet', 'genshiro'],
41
41
  equilibrium_parachain: ['equilibrium_parachain'],
42
42
  bifrost: ['bifrost', 'acala', 'karura', 'acala_testnet', 'pioneer', 'bitcountry', 'bifrost_dot', 'hydradx_main', 'pendulum', 'amplitude', 'continuum_network'],
43
- statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet'],
43
+ statemine: ['statemine', 'astar', 'shiden', 'statemint', 'moonbeam', 'moonbase', 'moonriver', 'crabParachain', 'darwinia2', 'parallel', 'calamari', 'manta_network', 'rococo_assethub', 'liberlandTest', 'liberland', 'dentnet', 'pangolin'],
44
44
  kusama: ['kusama', 'kintsugi', 'kintsugi_test', 'interlay', 'acala', 'statemint', 'karura', 'bifrost'],
45
45
  // perhaps there are some runtime updates
46
46
  centrifuge: ['centrifuge'],
@@ -219,7 +219,7 @@ const _TRANSFER_CHAIN_GROUP = {
219
219
  acala: ['karura', 'acala', 'acala_testnet'],
220
220
  kintsugi: ['kintsugi', 'kintsugi_test', 'interlay', 'mangatax_para'],
221
221
  genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
222
- crab: ['crab', 'pangolin'],
222
+ // crab: ['crab', 'pangolin'],
223
223
  bitcountry: ['pioneer', 'bitcountry', 'bifrost', 'bifrost_dot'],
224
224
  statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet'],
225
225
  riochain: ['riochain'],
@@ -227,7 +227,7 @@ const _TRANSFER_CHAIN_GROUP = {
227
227
  avail: ['kate', 'goldberg_testnet'],
228
228
  pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main'],
229
229
  centrifuge: ['centrifuge'],
230
- disable_transfer: ['invarch']
230
+ disable_transfer: ['invarch', 'crab', 'pangolin']
231
231
  };
232
232
  exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
233
233
  const _BALANCE_PARSING_CHAIN_GROUP = {
@@ -260,7 +260,8 @@ const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS, 'vara_network'];
260
260
  exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
261
261
  const EVM_PASS_CONNECT_STATUS = {
262
262
  arbitrum_one: ['*'],
263
- okxTest: ['*']
263
+ okxTest: ['*'],
264
+ astarZkEvm: ['*']
264
265
  };
265
266
  exports.EVM_PASS_CONNECT_STATUS = EVM_PASS_CONNECT_STATUS;
266
267
  const EVM_REFORMAT_DECIMALS = {
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/Base"));
9
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ class MigrateTransactionHistoryBySymbol extends _Base.default {
13
+ async run() {
14
+ const state = this.state;
15
+ try {
16
+ const changeSlugsMap = {
17
+ 'ethereum-ERC20-WFTM-0x4E15361FD6b4BB609Fa63C81A2be19d873717870': 'ethereum-ERC20-FTM-0x4E15361FD6b4BB609Fa63C81A2be19d873717870',
18
+ 'moonbeam-ERC20-CSG-0x2Dfc76901bB2ac2A5fA5fc479590A490BBB10a5F': 'moonbeam-ERC20-CGS-0x2Dfc76901bB2ac2A5fA5fc479590A490BBB10a5F',
19
+ 'astar-LOCAL-aUSD': 'astar-LOCAL-aSEED',
20
+ 'astarEvm-ERC20-aUSD-0xfFFFFfFF00000000000000010000000000000001': 'astarEvm-ERC20-aSEED-0xfFFFFfFF00000000000000010000000000000001',
21
+ 'moonriver-LOCAL-xcaUSD': 'moonriver-LOCAL-xcaSeed',
22
+ 'moonriver-LOCAL-xckBTC': 'moonriver-LOCAL-xcKBTC',
23
+ 'bifrost-LOCAL-aUSD': 'bifrost-LOCAL-KUSD',
24
+ 'calamari-LOCAL-aUSD': 'calamari-LOCAL-AUSD',
25
+ 'shiden-LOCAL-aUSD': 'shiden-LOCAL-aSEED',
26
+ 'shidenEvm-ERC20-aUSD-0xfFFfFFfF00000000000000010000000000000000': 'shidenEvm-ERC20-aSEED-0xfFFfFFfF00000000000000010000000000000000',
27
+ 'ethereum_goerli-NATIVE-GoerliETH': 'ethereum_goerli-NATIVE-ETH',
28
+ 'binance_test-NATIVE-BNB': 'binance_test-NATIVE-tBNB',
29
+ 'pangolin-LOCAL-CKTON': 'pangolin-LOCAL-PKTON',
30
+ 'zeta_test-NATIVE-aZETA': 'zeta_test-NATIVE-ZETA',
31
+ 'origintrail-NATIVE-OTP': 'origintrail-NATIVE-NEURO',
32
+ 'moonbeam-LOCAL-xciBTC': 'moonbeam-LOCAL-xcIBTC'
33
+ };
34
+ const allTxs = [];
35
+ await Promise.all(Object.entries(changeSlugsMap).map(async (_ref, i) => {
36
+ let [oldSlug, newSlug] = _ref;
37
+ const oldSlugSplit = oldSlug.split('-');
38
+ const oldChainSlug = oldSlugSplit[0];
39
+ const oldSymbolSlug = oldSlugSplit[2];
40
+ const newSlugSplit = newSlug.split('-');
41
+ const newSymbolSlug = newSlugSplit[2];
42
+ const filterTransactions = await state.dbService.stores.transaction.table.where({
43
+ chain: oldChainSlug
44
+ }).and(tx => {
45
+ var _tx$amount;
46
+ return ((_tx$amount = tx.amount) === null || _tx$amount === void 0 ? void 0 : _tx$amount.symbol) === oldSymbolSlug;
47
+ }).toArray();
48
+ if (filterTransactions.length > 0) {
49
+ for (const transaction of filterTransactions) {
50
+ if (transaction.amount && transaction.amount.symbol === oldSymbolSlug) {
51
+ transaction.amount.symbol = newSymbolSlug;
52
+ }
53
+ }
54
+ }
55
+ allTxs.push(...filterTransactions);
56
+ }));
57
+ await state.dbService.stores.transaction.table.bulkPut(allTxs);
58
+ } catch (e) {
59
+ this.logger.error(e);
60
+ }
61
+ }
62
+ }
63
+ exports.default = MigrateTransactionHistoryBySymbol;
@@ -12,27 +12,29 @@ var _Base = _interopRequireDefault(require("@subwallet/extension-base/services/m
12
12
  class MigrateAssetSetting extends _Base.default {
13
13
  async run() {
14
14
  try {
15
- const oldSlugs = ['ethereum-ERC20-WFTM-0x4E15361FD6b4BB609Fa63C81A2be19d873717870', 'moonbeam-ERC20-CSG-0x2Dfc76901bB2ac2A5fA5fc479590A490BBB10a5F', 'astar-LOCAL-aUSD', 'astarEvm-ERC20-aUSD-0xfFFFFfFF00000000000000010000000000000001',
16
- //
17
- 'moonriver-LOCAL-xcaUSD',
18
- //
19
- 'moonriver-LOCAL-xckBTC', 'bifrost-LOCAL-aUSD', 'calamari-LOCAL-AUSD', 'shiden-LOCAL-aUSD', 'shidenEvm-ERC20-aUSD-0xfFFfFFfF00000000000000010000000000000000',
20
- //
21
- 'ethereum_goerli-NATIVE-GoerliETH', 'binance_test-NATIVE-BNB',
22
- //
23
- 'pangolin-LOCAL-CKTON',
24
- //
25
- 'zeta_test-NATIVE-aZETA' //
26
- ];
27
-
28
- const newSlugs = ['ethereum-ERC20-FTM-0x4E15361FD6b4BB609Fa63C81A2be19d873717870', 'moonbeam-ERC20-CGS-0x2Dfc76901bB2ac2A5fA5fc479590A490BBB10a5F', 'astar-LOCAL-aSEED', 'astarEvm-ERC20-aSEED-0xfFFFFfFF00000000000000010000000000000001', 'moonriver-LOCAL-xcaSeed', 'moonriver-LOCAL-xcKBTC', 'bifrost-LOCAL-KUSD', 'calamari-LOCAL-AUSD', 'shiden-LOCAL-aSEED', 'shidenEvm-ERC20-aSEED-0xfFFfFFfF00000000000000010000000000000000', 'ethereum_goerli-NATIVE-ETH', 'binance_test-NATIVE-tBNB', 'pangolin-LOCAL-PKTON', 'zeta_test-NATIVE-ZETA'];
15
+ const changeSlugsMap = {
16
+ 'ethereum-ERC20-WFTM-0x4E15361FD6b4BB609Fa63C81A2be19d873717870': 'ethereum-ERC20-FTM-0x4E15361FD6b4BB609Fa63C81A2be19d873717870',
17
+ 'moonbeam-ERC20-CSG-0x2Dfc76901bB2ac2A5fA5fc479590A490BBB10a5F': 'moonbeam-ERC20-CGS-0x2Dfc76901bB2ac2A5fA5fc479590A490BBB10a5F',
18
+ 'astar-LOCAL-aUSD': 'astar-LOCAL-aSEED',
19
+ 'astarEvm-ERC20-aUSD-0xfFFFFfFF00000000000000010000000000000001': 'astarEvm-ERC20-aSEED-0xfFFFFfFF00000000000000010000000000000001',
20
+ 'moonriver-LOCAL-xcaUSD': 'moonriver-LOCAL-xcaSeed',
21
+ 'moonriver-LOCAL-xckBTC': 'moonriver-LOCAL-xcKBTC',
22
+ 'bifrost-LOCAL-aUSD': 'bifrost-LOCAL-KUSD',
23
+ 'calamari-LOCAL-aUSD': 'calamari-LOCAL-AUSD',
24
+ 'shiden-LOCAL-aUSD': 'shiden-LOCAL-aSEED',
25
+ 'shidenEvm-ERC20-aUSD-0xfFFfFFfF00000000000000010000000000000000': 'shidenEvm-ERC20-aSEED-0xfFFfFFfF00000000000000010000000000000000',
26
+ 'ethereum_goerli-NATIVE-GoerliETH': 'ethereum_goerli-NATIVE-ETH',
27
+ 'binance_test-NATIVE-BNB': 'binance_test-NATIVE-tBNB',
28
+ 'pangolin-LOCAL-CKTON': 'pangolin-LOCAL-PKTON',
29
+ 'zeta_test-NATIVE-aZETA': 'zeta_test-NATIVE-ZETA',
30
+ 'origintrail-NATIVE-OTP': 'origintrail-NATIVE-NEURO',
31
+ 'moonbeam-LOCAL-xciBTC': 'moonbeam-LOCAL-xcIBTC'
32
+ };
29
33
  const assetSetting = await this.state.chainService.getAssetSettings();
30
34
  const migratedAssetSetting = {};
31
- for (let i = 0; i < oldSlugs.length; i++) {
32
- const slug = oldSlugs[i];
33
- if (Object.keys(assetSetting).includes(slug)) {
34
- const isVisible = assetSetting[slug].visible;
35
- const newSlug = newSlugs[i];
35
+ for (const [oldSlug, newSlug] of Object.entries(changeSlugsMap)) {
36
+ if (Object.keys(assetSetting).includes(oldSlug)) {
37
+ const isVisible = assetSetting[oldSlug].visible;
36
38
  migratedAssetSetting[newSlug] = {
37
39
  visible: isVisible
38
40
  };
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = exports.EVERYTIME = void 0;
8
8
  var _DeleteEarningData = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/DeleteEarningData"));
9
+ var _MigrateTransactionHistoryBySymbol = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/MigrateTransactionHistoryBySymbol"));
10
+ var _MigrateAssetSetting = _interopRequireDefault(require("./databases/MigrateAssetSetting"));
9
11
  var _MigrateEarningVersion = _interopRequireDefault(require("./databases/MigrateEarningVersion"));
10
12
  var _MigrateEthProvider = _interopRequireDefault(require("./providers/MigrateEthProvider"));
11
13
  var _MigratePioneerProvider = _interopRequireDefault(require("./providers/MigratePioneerProvider"));
@@ -28,8 +30,6 @@ var _MigrateWalletReference = _interopRequireDefault(require("./MigrateWalletRef
28
30
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
29
31
  // SPDX-License-Identifier: Apache-2.0
30
32
 
31
- // import MigrateAssetSetting from './databases/MigrateAssetSetting';
32
-
33
33
  const EVERYTIME = '__everytime__';
34
34
  exports.EVERYTIME = EVERYTIME;
35
35
  var _default = {
@@ -53,8 +53,10 @@ var _default = {
53
53
  '1.1.24-01': _MigrateProvidersV1M1P.default,
54
54
  '1.1.26-01': _MigratePolygonUSDCProvider.default,
55
55
  '1.1.28-01': _MigrateEarningVersion.default,
56
- '1.1.41-01': _DeleteChainStaking.default
57
- // '1.1.41-02': MigrateAssetSetting
56
+ '1.1.41-01': _DeleteChainStaking.default,
57
+ '1.1.44-01': _MigrateAssetSetting.default,
58
+ '1.1.44-02': _MigrateTransactionHistoryBySymbol.default
59
+ // [`${EVERYTIME}-1.1.42-02`]: MigrateTransactionHistoryBySymbol
58
60
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
59
61
  };
60
62
  exports.default = _default;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.SubscanService = void 0;
8
8
  var _SWError = require("@subwallet/extension-base/background/errors/SWError");
9
+ var _constants = require("@subwallet/extension-base/koni/api/nft/ordinal_nft/constants");
9
10
  var _utils = require("@subwallet/extension-base/utils");
10
11
  var _crossFetch = _interopRequireDefault(require("cross-fetch"));
11
12
  // Copyright 2019-2022 @subwallet/extension-base
@@ -13,9 +14,12 @@ var _crossFetch = _interopRequireDefault(require("cross-fetch"));
13
14
 
14
15
  const QUERY_ROW = 100;
15
16
  class SubscanService {
16
- limitRate = 2; // limit per interval check
17
+ callRate = 2; // limit per interval check
18
+ limitRate = 2; // max rate per interval check
17
19
  intervalCheck = 1000; // interval check in ms
18
20
  maxRetry = 9; // interval check in ms
21
+ rollbackRateTime = 30 * 1000; // rollback rate time in ms
22
+ timeoutRollbackRate = undefined;
19
23
  requestMap = {};
20
24
  nextId = 0;
21
25
  isRunning = false;
@@ -24,10 +28,18 @@ class SubscanService {
24
28
  }
25
29
  constructor(subscanChainMap, options) {
26
30
  this.subscanChainMap = subscanChainMap;
31
+ this.callRate = (options === null || options === void 0 ? void 0 : options.limitRate) || this.callRate;
27
32
  this.limitRate = (options === null || options === void 0 ? void 0 : options.limitRate) || this.limitRate;
28
33
  this.intervalCheck = (options === null || options === void 0 ? void 0 : options.intervalCheck) || this.intervalCheck;
29
34
  this.maxRetry = (options === null || options === void 0 ? void 0 : options.maxRetry) || this.maxRetry;
30
35
  }
36
+ reduceLimitRate() {
37
+ clearTimeout(this.timeoutRollbackRate);
38
+ this.callRate = Math.ceil(this.limitRate / 2);
39
+ this.timeoutRollbackRate = setTimeout(() => {
40
+ this.callRate = this.limitRate;
41
+ }, this.rollbackRateTime);
42
+ }
31
43
  getApiUrl(chain, path) {
32
44
  const subscanChain = this.subscanChainMap[chain];
33
45
  if (!subscanChain) {
@@ -44,13 +56,14 @@ class SubscanService {
44
56
  body: JSON.stringify(body)
45
57
  });
46
58
  }
47
- addRequest(run) {
59
+ addRequest(run, ordinal) {
48
60
  const newId = this.getId();
49
61
  return new Promise((resolve, reject) => {
50
62
  this.requestMap[newId] = {
51
63
  id: newId,
52
64
  status: 'pending',
53
65
  retry: -1,
66
+ ordinal,
54
67
  run,
55
68
  resolve,
56
69
  reject
@@ -72,7 +85,7 @@ class SubscanService {
72
85
  }
73
86
 
74
87
  // Get first this.limit requests base on id
75
- const requests = remainingRequests.filter(request => request.status !== 'running').sort((a, b) => a.id - b.id).slice(0, this.limitRate);
88
+ const requests = remainingRequests.filter(request => request.status !== 'running').sort((a, b) => a.id - b.id).sort((a, b) => a.ordinal - b.ordinal).slice(0, this.callRate);
76
89
 
77
90
  // Start requests
78
91
  requests.forEach(request => {
@@ -80,12 +93,20 @@ class SubscanService {
80
93
  request.run().then(rs => {
81
94
  request.resolve(rs);
82
95
  }).catch(e => {
83
- if (request.retry < maxRetry) {
84
- request.status = 'pending';
85
- request.retry++;
96
+ const error = JSON.parse(e.message);
97
+
98
+ // Limit rate
99
+ if (error.code === 20008) {
100
+ if (request.retry < maxRetry) {
101
+ request.status = 'pending';
102
+ request.retry++;
103
+ this.reduceLimitRate();
104
+ } else {
105
+ // Reject request
106
+ request.reject(new _SWError.SWError('MAX_RETRY', String(e)));
107
+ }
86
108
  } else {
87
- // Reject request
88
- request.reject(new _SWError.SWError('MAX_RETRY', String(e)));
109
+ request.reject(new _SWError.SWError('UNKNOWN', String(e)));
89
110
  }
90
111
  });
91
112
  });
@@ -109,7 +130,7 @@ class SubscanService {
109
130
  }
110
131
  const jsonData = await rs.json();
111
132
  return jsonData.data;
112
- });
133
+ }, 1);
113
134
  }
114
135
  getCrowdloanContributions(relayChain, address) {
115
136
  let page = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
@@ -125,7 +146,7 @@ class SubscanService {
125
146
  }
126
147
  const jsonData = await rs.json();
127
148
  return jsonData.data;
128
- });
149
+ }, 2);
129
150
  }
130
151
  getExtrinsicsList(chain, address) {
131
152
  let page = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
@@ -137,7 +158,7 @@ class SubscanService {
137
158
  return `${blockRange.from || 0}-${blockRange.to}`;
138
159
  })();
139
160
  return this.addRequest(async () => {
140
- const rs = await this.postRequest(this.getApiUrl(chain, 'api/scan/extrinsics'), {
161
+ const rs = await this.postRequest(this.getApiUrl(chain, 'api/v2/scan/extrinsics'), {
141
162
  page,
142
163
  row: QUERY_ROW,
143
164
  address,
@@ -148,7 +169,7 @@ class SubscanService {
148
169
  }
149
170
  const jsonData = await rs.json();
150
171
  return jsonData.data;
151
- });
172
+ }, 0);
152
173
  }
153
174
  async fetchAllPossibleExtrinsicItems(chain, address, cbAfterEachRequest) {
154
175
  let limit = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
@@ -170,11 +191,26 @@ class SubscanService {
170
191
  if (res.count > maxCount) {
171
192
  maxCount = res.count;
172
193
  }
173
- cbAfterEachRequest === null || cbAfterEachRequest === void 0 ? void 0 : cbAfterEachRequest(res.extrinsics);
174
- res.extrinsics.forEach(item => {
194
+ const extrinsics = res.extrinsics;
195
+ const extrinsicIndexes = extrinsics.map(item => item.extrinsic_index);
196
+ const extrinsicParams = await this.getExtrinsicParams(chain, extrinsicIndexes, 0);
197
+ for (const data of extrinsicParams) {
198
+ const {
199
+ extrinsic_index: extrinsicIndex,
200
+ params
201
+ } = data;
202
+ const extrinsic = extrinsics.find(item => item.extrinsic_index === extrinsicIndex);
203
+ if (extrinsic) {
204
+ extrinsic.params = JSON.stringify(params);
205
+ }
206
+ }
207
+
208
+ // Call callback after each request, for parse data
209
+ cbAfterEachRequest === null || cbAfterEachRequest === void 0 ? void 0 : cbAfterEachRequest(extrinsics);
210
+ for (const item of extrinsics) {
175
211
  resultMap[item.extrinsic_hash] = item;
176
- });
177
- currentCount += res.extrinsics.length;
212
+ }
213
+ currentCount += extrinsics.length;
178
214
  if (page > limit.page || currentCount > limit.record) {
179
215
  return;
180
216
  }
@@ -207,7 +243,7 @@ class SubscanService {
207
243
  }
208
244
  const jsonData = await rs.json();
209
245
  return jsonData.data;
210
- });
246
+ }, 0);
211
247
  }
212
248
  async fetchAllPossibleTransferItems(chain, address, direction, cbAfterEachRequest) {
213
249
  let limit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {
@@ -266,7 +302,33 @@ class SubscanService {
266
302
  }
267
303
  const jsonData = await rs.json();
268
304
  return jsonData.data;
269
- });
305
+ }, 2);
306
+ }
307
+ getAccountRemarkEvents(chain, address) {
308
+ return this.addRequest(async () => {
309
+ const rs = await this.postRequest(this.getApiUrl(chain, 'api/v2/scan/events'), {
310
+ ..._constants.BASE_FETCH_ORDINAL_EVENT_DATA,
311
+ address
312
+ });
313
+ if (rs.status !== 200) {
314
+ throw new _SWError.SWError('SubscanService.getAccountRemarkEvents', await rs.text());
315
+ }
316
+ const jsonData = await rs.json();
317
+ return jsonData.data.events;
318
+ }, 3);
319
+ }
320
+ getExtrinsicParams(chain, extrinsicIndexes) {
321
+ let ordinal = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;
322
+ return this.addRequest(async () => {
323
+ const rs = await this.postRequest(this.getApiUrl(chain, 'api/scan/extrinsic/params'), {
324
+ extrinsic_index: extrinsicIndexes
325
+ });
326
+ if (rs.status !== 200) {
327
+ throw new _SWError.SWError('SubscanService.getExtrinsicParams', await rs.text());
328
+ }
329
+ const jsonData = await rs.json();
330
+ return jsonData.data;
331
+ }, ordinal);
270
332
  }
271
333
  }
272
334
  exports.SubscanService = SubscanService;
@@ -138,7 +138,9 @@ const SUBSCAN_BALANCE_CHAIN_MAP = {
138
138
  vara_network: 'vara',
139
139
  bifrost: 'bifrost',
140
140
  creditcoin: 'creditcoin',
141
- joystream: 'joystream'
141
+ joystream: 'joystream',
142
+ manta_network: 'manta',
143
+ continuum_network: 'continuum'
142
144
  };
143
145
  exports.SUBSCAN_BALANCE_CHAIN_MAP = SUBSCAN_BALANCE_CHAIN_MAP;
144
146
  const SUBSCAN_BALANCE_CHAIN_MAP_REVERSE = Object.fromEntries(Object.entries(SUBSCAN_BALANCE_CHAIN_MAP).map(_ref => {
@@ -78,9 +78,9 @@ export async function checkSupportTransfer(networkKey, tokenInfo, substrateApiMa
78
78
  ) {
79
79
  result.supportTransfer = false;
80
80
  result.supportTransferAll = false;
81
- } else if (_TRANSFER_CHAIN_GROUP.crab.includes(networkKey) && _BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
82
- result.supportTransfer = true;
83
- result.supportTransferAll = true;
81
+ // } else if (_TRANSFER_CHAIN_GROUP.crab.includes(networkKey) && _BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol)) {
82
+ // result.supportTransfer = true;
83
+ // result.supportTransferAll = true;
84
84
  } else if (isTxBalancesSupported && _isNativeToken(tokenInfo)) {
85
85
  result.supportTransfer = true;
86
86
  result.supportTransferAll = true;
@@ -164,12 +164,12 @@ export const createTransferExtrinsic = async ({
164
164
  ) {
165
165
  // transfer = api.tx.eqBalances.transfer(_getTokenOnChainAssetId(tokenInfo), to, value);
166
166
  /* empty */
167
- } else if (!_isNativeToken(tokenInfo) && (_TRANSFER_CHAIN_GROUP.crab.includes(networkKey) || _BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol))) {
168
- if (transferAll) {
169
- transfer = api.tx.kton.transferAll(to, false);
170
- } else if (value) {
171
- transfer = api.tx.kton.transfer(to, new BN(value));
172
- }
167
+ // } else if (!_isNativeToken(tokenInfo) && (_TRANSFER_CHAIN_GROUP.crab.includes(networkKey) || _BALANCE_TOKEN_GROUP.crab.includes(tokenInfo.symbol))) {
168
+ // if (transferAll) {
169
+ // transfer = api.tx.kton.transferAll(to, false);
170
+ // } else if (value) {
171
+ // transfer = api.tx.kton.transfer(to, new BN(value));
172
+ // }
173
173
  } else if (_TRANSFER_CHAIN_GROUP.bitcountry.includes(networkKey) && !_isNativeToken(tokenInfo)) {
174
174
  transfer = api.tx.currencies.transfer(to, _getTokenOnChainInfo(tokenInfo), value);
175
175
  } else if (_TRANSFER_CHAIN_GROUP.statemine.includes(networkKey) && !_isNativeToken(tokenInfo)) {
@@ -14,7 +14,7 @@ import { VaraNftApi } from '@subwallet/extension-base/koni/api/nft/vara_nft';
14
14
  import { WasmNftApi } from '@subwallet/extension-base/koni/api/nft/wasm_nft';
15
15
  import { _NFT_CHAIN_GROUP } from '@subwallet/extension-base/services/chain-service/constants';
16
16
  import { _isChainSupportEvmNft, _isChainSupportNativeNft, _isChainSupportWasmNft, _isSupportOrdinal } from '@subwallet/extension-base/services/chain-service/utils';
17
- import { categoryAddresses } from '@subwallet/extension-base/utils';
17
+ import { categoryAddresses, targetIsWeb } from '@subwallet/extension-base/utils';
18
18
  import StatemintNftApi from "./statemint_nft/index.js";
19
19
  function createSubstrateNftApi(chain, substrateApi, addresses) {
20
20
  const [substrateAddresses] = categoryAddresses(addresses);
@@ -127,7 +127,7 @@ export class NftHandler {
127
127
  }
128
128
  }
129
129
  }
130
- if (_isSupportOrdinal(chain)) {
130
+ if (_isSupportOrdinal(chain) && targetIsWeb) {
131
131
  var _chainInfo$extraInfo;
132
132
  const subscanChain = (_chainInfo$extraInfo = chainInfo.extraInfo) === null || _chainInfo$extraInfo === void 0 ? void 0 : _chainInfo$extraInfo.subscanSlug;
133
133
  if (subscanChain) {