@subwallet/extension-base 1.1.43-0 → 1.1.45-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 (47) 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 +9 -6
  10. package/cjs/services/chain-service/index.js +5 -5
  11. package/cjs/services/earning-service/constants/chains.js +1 -1
  12. package/cjs/services/earning-service/service.js +1 -1
  13. package/cjs/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +67 -0
  14. package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +22 -19
  15. package/cjs/services/migration-service/scripts/index.js +6 -4
  16. package/cjs/services/subscan-service/index.js +80 -18
  17. package/cjs/services/subscan-service/subscan-chain-map.js +3 -1
  18. package/cjs/services/transaction-service/utils.js +3 -0
  19. package/koni/api/dotsama/transfer.js +9 -9
  20. package/koni/api/nft/index.js +2 -2
  21. package/koni/api/nft/ordinal_nft/constants.d.ts +0 -2
  22. package/koni/api/nft/ordinal_nft/constants.js +0 -2
  23. package/koni/api/nft/ordinal_nft/index.d.ts +1 -1
  24. package/koni/api/nft/ordinal_nft/index.js +3 -8
  25. package/koni/api/nft/transfer.d.ts +2 -2
  26. package/koni/api/nft/transfer.js +22 -12
  27. package/koni/api/nft/unique_network_nft/index.js +10 -9
  28. package/koni/background/handlers/Extension.js +1 -1
  29. package/package.json +11 -11
  30. package/packageInfo.js +1 -1
  31. package/services/chain-service/constants.d.ts +0 -1
  32. package/services/chain-service/constants.js +9 -6
  33. package/services/chain-service/index.js +5 -5
  34. package/services/earning-service/constants/chains.js +1 -1
  35. package/services/earning-service/service.js +1 -1
  36. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.d.ts +4 -0
  37. package/services/migration-service/scripts/MigrateTransactionHistoryBySymbol.js +58 -0
  38. package/services/migration-service/scripts/databases/MigrateAssetSetting.js +22 -19
  39. package/services/migration-service/scripts/index.js +6 -3
  40. package/services/subscan-service/index.d.ts +8 -1
  41. package/services/subscan-service/index.js +79 -18
  42. package/services/subscan-service/subscan-chain-map.js +3 -1
  43. package/services/subscan-service/types.d.ts +7 -0
  44. package/services/transaction-service/utils.js +3 -0
  45. package/cjs/koni/api/nft/ordinal_nft/utils.js +0 -41
  46. package/koni/api/nft/ordinal_nft/utils.d.ts +0 -2
  47. 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.45-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'],
@@ -100,7 +100,8 @@ const _STAKING_ERA_LENGTH_MAP = {
100
100
  vara_network: 12,
101
101
  goldberg_testnet: 24,
102
102
  manta_network: 6,
103
- krest_network: 4
103
+ krest_network: 4,
104
+ polimec: 6
104
105
  };
105
106
  exports._STAKING_ERA_LENGTH_MAP = _STAKING_ERA_LENGTH_MAP;
106
107
  const _EXPECTED_BLOCK_TIME = {
@@ -117,7 +118,8 @@ const _EXPECTED_BLOCK_TIME = {
117
118
  edgeware: 6,
118
119
  creditcoin: 12,
119
120
  vara_network: 3,
120
- goldberg_testnet: 20
121
+ goldberg_testnet: 20,
122
+ polimec: 12
121
123
  };
122
124
  exports._EXPECTED_BLOCK_TIME = _EXPECTED_BLOCK_TIME;
123
125
  const _PARACHAIN_INFLATION_DISTRIBUTION = {
@@ -219,7 +221,7 @@ const _TRANSFER_CHAIN_GROUP = {
219
221
  acala: ['karura', 'acala', 'acala_testnet'],
220
222
  kintsugi: ['kintsugi', 'kintsugi_test', 'interlay', 'mangatax_para'],
221
223
  genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
222
- crab: ['crab', 'pangolin'],
224
+ // crab: ['crab', 'pangolin'],
223
225
  bitcountry: ['pioneer', 'bitcountry', 'bifrost', 'bifrost_dot'],
224
226
  statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet'],
225
227
  riochain: ['riochain'],
@@ -227,7 +229,7 @@ const _TRANSFER_CHAIN_GROUP = {
227
229
  avail: ['kate', 'goldberg_testnet'],
228
230
  pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main'],
229
231
  centrifuge: ['centrifuge'],
230
- disable_transfer: ['invarch']
232
+ disable_transfer: ['invarch', 'crab', 'pangolin']
231
233
  };
232
234
  exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
233
235
  const _BALANCE_PARSING_CHAIN_GROUP = {
@@ -260,7 +262,8 @@ const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS, 'vara_network'];
260
262
  exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
261
263
  const EVM_PASS_CONNECT_STATUS = {
262
264
  arbitrum_one: ['*'],
263
- okxTest: ['*']
265
+ okxTest: ['*'],
266
+ astarZkEvm: ['*']
264
267
  };
265
268
  exports.EVM_PASS_CONNECT_STATUS = EVM_PASS_CONNECT_STATUS;
266
269
  const EVM_REFORMAT_DECIMALS = {
@@ -1518,15 +1518,15 @@ class ChainService {
1518
1518
  const chainInfoMap = this.getChainInfoMap();
1519
1519
  Object.values(chainInfoMap).forEach(i => {
1520
1520
  var _i$extraInfo;
1521
- if (!((_i$extraInfo = i.extraInfo) !== null && _i$extraInfo !== void 0 && _i$extraInfo.subscanSlug)) {
1521
+ const subscanSlug = i.slug === 'goldberg_testnet' ? 'avail-testnet' : (_i$extraInfo = i.extraInfo) === null || _i$extraInfo === void 0 ? void 0 : _i$extraInfo.subscanSlug; // Hotfix for Goldberg testnet
1522
+
1523
+ if (!subscanSlug) {
1522
1524
  return;
1523
1525
  }
1524
1526
  if (!reverse) {
1525
- var _i$extraInfo2;
1526
- result[i.slug] = (_i$extraInfo2 = i.extraInfo) === null || _i$extraInfo2 === void 0 ? void 0 : _i$extraInfo2.subscanSlug;
1527
+ result[i.slug] = subscanSlug;
1527
1528
  } else {
1528
- var _i$extraInfo3;
1529
- result[(_i$extraInfo3 = i.extraInfo) === null || _i$extraInfo3 === void 0 ? void 0 : _i$extraInfo3.subscanSlug] = i.slug;
1529
+ result[subscanSlug] = i.slug;
1530
1530
  }
1531
1531
  });
1532
1532
  return result;
@@ -9,7 +9,7 @@ exports._STAKING_CHAIN_GROUP = exports.ST_LIQUID_TOKEN_ABI = exports.MANTA_VALID
9
9
 
10
10
  const _STAKING_CHAIN_GROUP = {
11
11
  relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet'],
12
- para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network'],
12
+ para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network', 'polimec'],
13
13
  astar: ['astar', 'shiden', 'shibuya'],
14
14
  amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum', 'krest_network'],
15
15
  // amplitude and kilt only share some common logic
@@ -277,7 +277,7 @@ class EarningService {
277
277
  const unsubList = [];
278
278
  for (const handler of Object.values(this.handlers)) {
279
279
  // Force subscribe onchain data
280
- const forceSubscribe = handler.type === _types2.YieldPoolType.LIQUID_STAKING || handler.type === _types2.YieldPoolType.LENDING;
280
+ const forceSubscribe = handler.type === _types2.YieldPoolType.LIQUID_STAKING || handler.type === _types2.YieldPoolType.LENDING || !onlineData[handler.slug];
281
281
  if (!this.useOnlineCacheOnly || forceSubscribe) {
282
282
  handler.subscribePoolInfo(callback).then(unsub => {
283
283
  if (!cancel) {
@@ -0,0 +1,67 @@
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
+ 'tomochain-NATIVE-TOMO': 'tomochain-NATIVE-VIC'
34
+ };
35
+ const allTxs = [];
36
+ await Promise.all(Object.entries(changeSlugsMap).map(async (_ref, i) => {
37
+ let [oldSlug, newSlug] = _ref;
38
+ const oldSlugSplit = oldSlug.split('-');
39
+ const oldChainSlug = oldSlugSplit[0];
40
+ const oldSymbolSlug = oldSlugSplit[2];
41
+ const newSlugSplit = newSlug.split('-');
42
+ const newSymbolSlug = newSlugSplit[2];
43
+ const filterTransactions = await state.dbService.stores.transaction.table.where({
44
+ chain: oldChainSlug
45
+ }).and(tx => {
46
+ var _tx$amount;
47
+ return ((_tx$amount = tx.amount) === null || _tx$amount === void 0 ? void 0 : _tx$amount.symbol) === oldSymbolSlug;
48
+ }).toArray();
49
+ if (filterTransactions.length > 0) {
50
+ for (const transaction of filterTransactions) {
51
+ if (transaction.amount && transaction.amount.symbol === oldSymbolSlug) {
52
+ transaction.amount.symbol = newSymbolSlug;
53
+ }
54
+ if (transaction.fee && transaction.fee.symbol === oldSymbolSlug) {
55
+ transaction.fee.symbol = newSymbolSlug;
56
+ }
57
+ }
58
+ }
59
+ allTxs.push(...filterTransactions);
60
+ }));
61
+ await state.dbService.stores.transaction.table.bulkPut(allTxs);
62
+ } catch (e) {
63
+ this.logger.error(e);
64
+ }
65
+ }
66
+ }
67
+ exports.default = MigrateTransactionHistoryBySymbol;
@@ -12,27 +12,30 @@ 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
+ 'tomochain-NATIVE-TOMO': 'tomochain-NATIVE-VIC'
33
+ };
29
34
  const assetSetting = await this.state.chainService.getAssetSettings();
30
35
  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];
36
+ for (const [oldSlug, newSlug] of Object.entries(changeSlugsMap)) {
37
+ if (Object.keys(assetSetting).includes(oldSlug)) {
38
+ const isVisible = assetSetting[oldSlug].visible;
36
39
  migratedAssetSetting[newSlug] = {
37
40
  visible: isVisible
38
41
  };
@@ -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.45-01': _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;