@subwallet/extension-base 1.1.65-0 → 1.1.67-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 (65) hide show
  1. package/cjs/koni/api/dotsama/transfer.js +11 -0
  2. package/cjs/koni/api/staking/bonding/relayChain.js +6 -0
  3. package/cjs/koni/api/tokens/wasm/utils.js +5 -3
  4. package/cjs/koni/background/cron.js +13 -0
  5. package/cjs/koni/background/handlers/State.js +2 -0
  6. package/cjs/packageInfo.js +1 -1
  7. package/cjs/services/balance-service/helpers/subscribe/index.js +1 -1
  8. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +67 -0
  9. package/cjs/services/chain-service/constants.js +8 -1
  10. package/cjs/services/chain-service/handler/EvmChainHandler.js +1 -1
  11. package/cjs/services/chain-service/handler/SubstrateApi.js +15 -9
  12. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +76 -57
  13. package/cjs/services/chain-service/index.js +45 -30
  14. package/cjs/services/chain-service/types.js +1 -1
  15. package/cjs/services/chain-service/utils/index.js +38 -15
  16. package/cjs/services/chain-service/utils/patch.js +1 -1
  17. package/cjs/services/earning-service/constants/chains.js +2 -2
  18. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +3 -0
  19. package/cjs/services/earning-service/handlers/nomination-pool/index.js +1 -0
  20. package/cjs/services/earning-service/service.js +2 -2
  21. package/cjs/services/price-service/index.js +31 -17
  22. package/cjs/stores/CurrentCurrencyStore.js +18 -0
  23. package/cjs/stores/index.js +8 -1
  24. package/cjs/utils/gear/grc20.js +141 -0
  25. package/cjs/utils/gear/index.js +16 -0
  26. package/cjs/utils/index.js +40 -28
  27. package/koni/api/dotsama/transfer.js +13 -2
  28. package/koni/api/staking/bonding/relayChain.d.ts +1 -2
  29. package/koni/api/staking/bonding/relayChain.js +6 -0
  30. package/koni/api/tokens/wasm/utils.js +5 -3
  31. package/koni/background/cron.d.ts +2 -0
  32. package/koni/background/cron.js +14 -1
  33. package/koni/background/handlers/State.js +2 -0
  34. package/package.json +32 -15
  35. package/packageInfo.js +1 -1
  36. package/services/balance-service/helpers/subscribe/index.js +1 -1
  37. package/services/balance-service/helpers/subscribe/substrate/index.js +67 -2
  38. package/services/chain-service/constants.d.ts +1 -0
  39. package/services/chain-service/constants.js +8 -1
  40. package/services/chain-service/handler/EvmChainHandler.d.ts +1 -1
  41. package/services/chain-service/handler/EvmChainHandler.js +1 -1
  42. package/services/chain-service/handler/SubstrateApi.js +6 -0
  43. package/services/chain-service/handler/SubstrateChainHandler.d.ts +4 -1
  44. package/services/chain-service/handler/SubstrateChainHandler.js +76 -57
  45. package/services/chain-service/index.js +17 -8
  46. package/services/chain-service/types.js +1 -1
  47. package/services/chain-service/utils/index.d.ts +4 -0
  48. package/services/chain-service/utils/index.js +30 -15
  49. package/services/chain-service/utils/patch.js +1 -1
  50. package/services/earning-service/constants/chains.js +2 -2
  51. package/services/earning-service/handlers/native-staking/relay-chain.js +3 -0
  52. package/services/earning-service/handlers/nomination-pool/index.js +1 -0
  53. package/services/earning-service/service.js +2 -2
  54. package/services/price-service/index.d.ts +4 -1
  55. package/services/price-service/index.js +31 -17
  56. package/stores/CurrentCurrencyStore.d.ts +5 -0
  57. package/stores/CurrentCurrencyStore.js +10 -0
  58. package/stores/index.d.ts +1 -0
  59. package/stores/index.js +2 -1
  60. package/utils/gear/grc20.d.ts +29 -0
  61. package/utils/gear/grc20.js +131 -0
  62. package/utils/gear/index.d.ts +1 -0
  63. package/utils/gear/index.js +4 -0
  64. package/utils/index.d.ts +6 -5
  65. package/utils/index.js +7 -6
@@ -6,11 +6,14 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.checkReferenceCount = checkReferenceCount;
7
7
  exports.checkSupportTransfer = checkSupportTransfer;
8
8
  exports.createTransferExtrinsic = void 0;
9
+ var _api = require("@gear-js/api");
9
10
  var _wasm = require("@subwallet/extension-base/koni/api/tokens/wasm");
10
11
  var _utils = require("@subwallet/extension-base/koni/api/tokens/wasm/utils");
11
12
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
12
13
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
14
+ var _utils3 = require("@subwallet/extension-base/utils");
13
15
  var _util = require("@polkadot/util");
16
+ var _utilCrypto = require("@polkadot/util-crypto");
14
17
  // Copyright 2019-2022 @subwallet/extension-base
15
18
  // SPDX-License-Identifier: Apache-2.0
16
19
 
@@ -149,6 +152,14 @@ const createTransferExtrinsic = async _ref => {
149
152
  gasLimit
150
153
  }, to, value, {});
151
154
  transferAmount = value;
155
+ } else if ((0, _utils2._isTokenGearSmartContract)(tokenInfo) && api instanceof _api.GearApi) {
156
+ const contractPromise = (0, _utils3.getGRC20ContractPromise)(api, (0, _utils2._getContractAddressOfToken)(tokenInfo));
157
+ const transaction = await contractPromise.transfer((0, _util.u8aToHex)((0, _utilCrypto.decodeAddress)(to)), BigInt(value)) // Create transfer transaction
158
+ .withAccount(from) // Set sender account
159
+ .calculateGas(); // Add account arg to extrinsic
160
+
161
+ transfer = transaction.tx;
162
+ transferAmount = value;
152
163
  } else if (_constants._TRANSFER_CHAIN_GROUP.acala.includes(networkKey)) {
153
164
  if (!(0, _utils2._isNativeToken)(tokenInfo)) {
154
165
  if (isTxCurrenciesSupported) {
@@ -708,6 +708,7 @@ async function getRelayBondingExtrinsic(substrateApi, amount, targetValidators,
708
708
  if (paramsCount === 2) {
709
709
  bondTx = chainApi.api.tx.staking.bond(binaryAmount, bondDest);
710
710
  } else {
711
+ // @ts-ignore
711
712
  bondTx = chainApi.api.tx.staking.bond(address, binaryAmount, bondDest);
712
713
  }
713
714
  nominateTx = chainApi.api.tx.staking.nominate(validatorParamList);
@@ -718,6 +719,7 @@ async function getRelayBondingExtrinsic(substrateApi, amount, targetValidators,
718
719
  if (paramsCount === 2) {
719
720
  bondTx = chainApi.api.tx.staking.bond(binaryAmount, bondDest);
720
721
  } else {
722
+ // @ts-ignore
721
723
  bondTx = chainApi.api.tx.staking.bond(nominatorMetadata.address, binaryAmount, bondDest);
722
724
  }
723
725
  nominateTx = chainApi.api.tx.staking.nominate(validatorParamList);
@@ -735,6 +737,8 @@ async function getRelayBondingExtrinsic(substrateApi, amount, targetValidators,
735
737
  } else if (nominateTx && !bondTx) {
736
738
  return nominateTx;
737
739
  }
740
+
741
+ // @ts-ignore
738
742
  return chainApi.api.tx.utility.batchAll([bondTx, nominateTx]);
739
743
  }
740
744
  async function getRelayUnbondingExtrinsic(substrateApi, amount, nominatorMetadata) {
@@ -755,6 +759,7 @@ async function getRelayWithdrawalExtrinsic(substrateApi, address) {
755
759
  const slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
756
760
  return chainApi.api.tx.staking.withdrawUnbonded(slashingSpanCount);
757
761
  } else {
762
+ // @ts-ignore
758
763
  return chainApi.api.tx.staking.withdrawUnbonded();
759
764
  }
760
765
  }
@@ -799,6 +804,7 @@ async function getPoolingWithdrawalExtrinsic(substrateApi, nominatorMetadata) {
799
804
  Id: nominatorMetadata.address
800
805
  }, slashingSpanCount);
801
806
  } else {
807
+ // @ts-ignore
802
808
  return chainApi.api.tx.nominationPools.withdrawUnbonded({
803
809
  Id: nominatorMetadata.address
804
810
  });
@@ -42,11 +42,13 @@ async function getWasmContractGasLimit(api, callerAddress, message, contract) {
42
42
  storageDepositLimit,
43
43
  value
44
44
  } = options;
45
-
46
- // @ts-ignore
47
45
  const {
48
46
  gasRequired
49
- } = await api.call.contractsApi.call(callerAddress, contract.address, value !== null && value !== void 0 ? value : new _util.BN(0), gasLimit !== null && gasLimit !== void 0 ? gasLimit : null, storageDepositLimit !== null && storageDepositLimit !== void 0 ? storageDepositLimit : null, abiMessage === null || abiMessage === void 0 ? void 0 : (_abiMessage$value = abiMessage.value) === null || _abiMessage$value === void 0 ? void 0 : _abiMessage$value.toU8a(args));
47
+ } = await api.call.contractsApi.call(callerAddress, contract.address, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
48
+ value !== null && value !== void 0 ? value : new _util.BN(0), // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
49
+ gasLimit !== null && gasLimit !== void 0 ? gasLimit : null, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
50
+ storageDepositLimit !== null && storageDepositLimit !== void 0 ? storageDepositLimit : null, // @ts-ignore
51
+ abiMessage === null || abiMessage === void 0 ? void 0 : (_abiMessage$value = abiMessage.value) === null || _abiMessage$value === void 0 ? void 0 : _abiMessage$value.toU8a(args));
50
52
  return gasRequired;
51
53
  } catch {
52
54
  return getDefaultWeightV2(api, true);
@@ -98,6 +98,11 @@ class KoniCron {
98
98
  (commonReload || needUpdateNft) && this.resetNft(address);
99
99
  (commonReload || needUpdateNft) && this.removeCron('refreshNft');
100
100
  commonReload && this.removeCron('refreshPoolingStakingReward');
101
+ if (chainUpdated) {
102
+ this.stopPoolInfo();
103
+ this.removeCron('fetchPoolInfo');
104
+ this.addCron('fetchPoolInfo', this.fetchPoolInfo, _constants.CRON_REFRESH_CHAIN_STAKING_METADATA);
105
+ }
101
106
 
102
107
  // Chains
103
108
  if (this.checkNetworkAvailable(serviceInfo)) {
@@ -107,6 +112,7 @@ class KoniCron {
107
112
  }
108
113
  };
109
114
  this.state.eventService.onLazy(this.eventHandler);
115
+ this.addCron('fetchPoolInfo', this.fetchPoolInfo, _constants.CRON_REFRESH_CHAIN_STAKING_METADATA);
110
116
  if (!(currentAccountInfo !== null && currentAccountInfo !== void 0 && currentAccountInfo.address)) {
111
117
  return;
112
118
  }
@@ -133,6 +139,7 @@ class KoniCron {
133
139
  this.serviceSubscription = undefined;
134
140
  }
135
141
  this.removeAllCrons();
142
+ this.stopPoolInfo();
136
143
  this.status = 'stopped';
137
144
  return Promise.resolve();
138
145
  };
@@ -141,6 +148,12 @@ class KoniCron {
141
148
  this.state.syncMantaPay().catch(console.warn);
142
149
  }
143
150
  };
151
+ fetchPoolInfo = () => {
152
+ this.state.earningService.runSubscribePoolsInfo().catch(console.error);
153
+ };
154
+ stopPoolInfo = () => {
155
+ this.state.earningService.runUnsubscribePoolsInfo();
156
+ };
144
157
  refreshNft = (address, apiMap, smartContractNfts, chainInfoMap) => {
145
158
  return () => {
146
159
  this.subscriptions.subscribeNft(address, apiMap.substrate, apiMap.evm, smartContractNfts, chainInfoMap);
@@ -67,6 +67,7 @@ const generateDefaultCrowdloanMap = () => {
67
67
  const crowdloanMap = {};
68
68
  return crowdloanMap;
69
69
  };
70
+ const DEFAULT_CURRENCY = 'USD';
70
71
  class KoniState {
71
72
  injectedProviders = new Map();
72
73
  unsubscriptionMap = {};
@@ -1570,6 +1571,7 @@ class KoniState {
1570
1571
  this.accountRefStore.set('refList', []);
1571
1572
  if (resetAll) {
1572
1573
  this.settingService.resetWallet();
1574
+ await this.priceService.setPriceCurrency(DEFAULT_CURRENCY);
1573
1575
  }
1574
1576
  this.chainService.resetWallet(resetAll);
1575
1577
  await this.walletConnectService.resetWallet(resetAll);
@@ -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.65-0'
16
+ version: '1.1.67-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -102,7 +102,7 @@ function subscribeBalance(addresses, chains, tokens, _chainAssetMap, _chainInfoM
102
102
  const chainSlug = chainInfo.slug;
103
103
  const [useAddresses, notSupportAddresses] = filterAddress(addresses, chainInfo);
104
104
  if (notSupportAddresses.length) {
105
- const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL]);
105
+ const tokens = (0, _utils2.filterAssetsByChainAndType)(chainAssetMap, chainSlug, [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.PSP22, _types._AssetType.LOCAL, _types._AssetType.GRC20]);
106
106
  const now = new Date().getTime();
107
107
  Object.values(tokens).forEach(token => {
108
108
  const items = notSupportAddresses.map(address => ({
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.subscribeSubstrateBalance = void 0;
8
+ var _api = require("@gear-js/api");
8
9
  var _types = require("@subwallet/chain-list/types");
9
10
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
11
  var _constants = require("@subwallet/extension-base/constants");
@@ -16,6 +17,7 @@ var _utils3 = require("@subwallet/extension-base/utils");
16
17
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
17
18
  var _rxjs = require("rxjs");
18
19
  var _util = require("@polkadot/util");
20
+ var _utilCrypto = require("@polkadot/util-crypto");
19
21
  var _evm = require("../evm");
20
22
  var _equilibrium = require("./equilibrium");
21
23
  // Copyright 2019-2022 @subwallet/extension-base
@@ -27,6 +29,7 @@ const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substra
27
29
  let unsubEvmContractToken;
28
30
  let unsubWasmContractToken;
29
31
  let unsubBridgedToken;
32
+ let unsubGrcToken;
30
33
  const chain = chainInfo.slug;
31
34
  const baseParams = {
32
35
  addresses,
@@ -78,15 +81,21 @@ const subscribeSubstrateBalance = async (addresses, chainInfo, assetMap, substra
78
81
  // Get sub-token for substrate-based chains
79
82
  unsubWasmContractToken = subscribePSP22Balance(substrateParams);
80
83
  }
84
+ if ((0, _utils2._checkSmartContractSupportByChain)(chainInfo, _types._AssetType.GRC20)) {
85
+ // Get sub-token for substrate-based chains
86
+ unsubGrcToken = subscribeGRC20Balance(substrateParams);
87
+ }
81
88
  } catch (err) {
82
89
  console.warn(err);
83
90
  }
84
91
  return () => {
92
+ var _unsubGrcToken;
85
93
  unsubNativeToken && unsubNativeToken();
86
94
  unsubLocalToken && unsubLocalToken();
87
95
  unsubEvmContractToken && unsubEvmContractToken();
88
96
  unsubWasmContractToken && unsubWasmContractToken();
89
97
  unsubBridgedToken && unsubBridgedToken();
98
+ (_unsubGrcToken = unsubGrcToken) === null || _unsubGrcToken === void 0 ? void 0 : _unsubGrcToken();
90
99
  };
91
100
  };
92
101
 
@@ -478,4 +487,62 @@ const subscribeOrmlTokensPallet = async _ref9 => {
478
487
  }).catch(console.error);
479
488
  });
480
489
  };
490
+ };
491
+ const subscribeGRC20Balance = _ref10 => {
492
+ let {
493
+ addresses,
494
+ assetMap,
495
+ callback,
496
+ chainInfo,
497
+ substrateApi
498
+ } = _ref10;
499
+ if (!(substrateApi instanceof _api.GearApi)) {
500
+ console.warn('Cannot subscribe GRC20 balance without GearApi instance');
501
+ return _util.noop;
502
+ }
503
+ const chain = chainInfo.slug;
504
+ const psp22ContractMap = {};
505
+ const tokenList = (0, _utils3.filterAssetsByChainAndType)(assetMap, chain, [_types._AssetType.GRC20]);
506
+ Object.entries(tokenList).forEach(_ref11 => {
507
+ let [slug, tokenInfo] = _ref11;
508
+ psp22ContractMap[slug] = (0, _utils3.getGRC20ContractPromise)(substrateApi, (0, _utils2._getContractAddressOfToken)(tokenInfo));
509
+ });
510
+ const getTokenBalances = () => {
511
+ Object.values(tokenList).map(async tokenInfo => {
512
+ try {
513
+ const contract = psp22ContractMap[tokenInfo.slug];
514
+ const balances = await Promise.all(addresses.map(async address => {
515
+ try {
516
+ const actor = (0, _util.u8aToHex)((0, _utilCrypto.decodeAddress)(address));
517
+ const _balanceOf = await contract.balanceOf(actor, address);
518
+ return {
519
+ address: address,
520
+ tokenSlug: tokenInfo.slug,
521
+ free: _balanceOf.toString(10),
522
+ locked: '0',
523
+ state: _KoniTypes.APIItemState.READY
524
+ };
525
+ } catch (err) {
526
+ console.error(`Error on get balance of account ${address} for token ${tokenInfo.slug}`, err);
527
+ return {
528
+ address: address,
529
+ tokenSlug: tokenInfo.slug,
530
+ free: '0',
531
+ locked: '0',
532
+ state: _KoniTypes.APIItemState.READY
533
+ };
534
+ }
535
+ }));
536
+ callback(balances);
537
+ } catch (err) {
538
+ console.warn(tokenInfo.slug, err); // TODO: error createType
539
+ }
540
+ });
541
+ };
542
+
543
+ getTokenBalances();
544
+ const interval = setInterval(getTokenBalances, _constants.SUB_TOKEN_REFRESH_BALANCE_INTERVAL);
545
+ return () => {
546
+ clearInterval(interval);
547
+ };
481
548
  };
@@ -20,7 +20,8 @@ const _API_OPTIONS_CHAIN_GROUP = {
20
20
  acala: ['acala', 'karura', 'origintrail', 'kintsugi'],
21
21
  turing: ['turingStaging', 'turing'],
22
22
  avail: ['kate', 'availTuringTest', 'avail_mainnet'],
23
- goldberg: ['goldberg_testnet']
23
+ goldberg: ['goldberg_testnet'],
24
+ gear: ['vara_network', 'vara_testnet']
24
25
  };
25
26
  exports._API_OPTIONS_CHAIN_GROUP = _API_OPTIONS_CHAIN_GROUP;
26
27
  const _PREDEFINED_SINGLE_MODES = {
@@ -99,6 +100,7 @@ const _STAKING_ERA_LENGTH_MAP = {
99
100
  kate: 6,
100
101
  creditcoin: 24,
101
102
  vara_network: 12,
103
+ vara_testnet: 12,
102
104
  goldberg_testnet: 24,
103
105
  manta_network: 6,
104
106
  krest_network: 4,
@@ -123,6 +125,7 @@ const _EXPECTED_BLOCK_TIME = {
123
125
  edgeware: 6,
124
126
  creditcoin: 12,
125
127
  vara_network: 3,
128
+ vara_testnet: 3,
126
129
  goldberg_testnet: 20,
127
130
  polimec: 12,
128
131
  bifrost: 13,
@@ -229,6 +232,10 @@ const _KNOWN_CHAIN_INFLATION_PARAMS = {
229
232
  vara_network: {
230
233
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
231
234
  stakeTarget: 0.8
235
+ },
236
+ vara_testnet: {
237
+ ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
238
+ stakeTarget: 0.8
232
239
  }
233
240
  };
234
241
 
@@ -109,7 +109,7 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
109
109
  }
110
110
  return result;
111
111
  }
112
- async getSmartContractTokenInfo(contractAddress, tokenType, originChain) {
112
+ async getEvmContractTokenInfo(contractAddress, tokenType, originChain) {
113
113
  let tokenContract;
114
114
  let name = '';
115
115
  let decimals = -1;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.SubstrateApi = void 0;
7
7
  require("@polkadot/types-augment");
8
8
  var _api = require("@acala-network/api");
9
+ var _api2 = require("@gear-js/api");
9
10
  var _types = require("@oak-foundation/types");
10
11
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
11
12
  var _lightClient = require("@subwallet/extension-base/services/chain-service/handler/light-client");
@@ -14,8 +15,8 @@ var _types2 = require("@subwallet/extension-base/services/chain-service/types");
14
15
  var _promise = require("@subwallet/extension-base/utils/promise");
15
16
  var _availJsSdk = require("avail-js-sdk");
16
17
  var _rxjs = require("rxjs");
17
- var _api2 = require("@polkadot/api");
18
- var _api3 = require("@polkadot/apps-config/api");
18
+ var _api3 = require("@polkadot/api");
19
+ var _api4 = require("@polkadot/apps-config/api");
19
20
  var _create = require("@polkadot/types/create");
20
21
  var _util = require("@polkadot/util");
21
22
  var _defaults = require("@polkadot/util-crypto/address/defaults");
@@ -55,13 +56,13 @@ class SubstrateApi {
55
56
  return (0, _lightClient.getSubstrateConnectProvider)(apiUrl.replace('light://substrate-connect/', ''));
56
57
  } else {
57
58
  this.useLightClient = true;
58
- return new _api2.WsProvider(apiUrl, _constants.API_AUTO_CONNECT_MS, {}, _constants.API_CONNECT_TIMEOUT);
59
+ return new _api3.WsProvider(apiUrl, _constants.API_AUTO_CONNECT_MS, {}, _constants.API_CONNECT_TIMEOUT);
59
60
  }
60
61
  }
61
62
  createApi(provider, externalApiPromise) {
62
63
  const apiOption = {
63
64
  provider,
64
- typesBundle: _api3.typesBundle,
65
+ typesBundle: _api4.typesBundle,
65
66
  registry: this.registry,
66
67
  noInitWarn: true
67
68
  };
@@ -76,19 +77,19 @@ class SubstrateApi {
76
77
  if (externalApiPromise) {
77
78
  api = externalApiPromise;
78
79
  } else if (_constants._API_OPTIONS_CHAIN_GROUP.acala.includes(this.chainSlug)) {
79
- api = new _api2.ApiPromise((0, _api.options)({
80
+ api = new _api3.ApiPromise((0, _api.options)({
80
81
  provider,
81
82
  noInitWarn: true
82
83
  }));
83
84
  } else if (_constants._API_OPTIONS_CHAIN_GROUP.turing.includes(this.chainSlug)) {
84
- api = new _api2.ApiPromise({
85
+ api = new _api3.ApiPromise({
85
86
  provider,
86
87
  rpc: _types.rpc,
87
88
  types: _types.types,
88
89
  noInitWarn: true
89
90
  });
90
91
  } else if (_constants._API_OPTIONS_CHAIN_GROUP.avail.includes(this.chainSlug)) {
91
- api = new _api2.ApiPromise({
92
+ api = new _api3.ApiPromise({
92
93
  provider,
93
94
  rpc: _availJsSdk.spec.rpc,
94
95
  types: _availJsSdk.spec.types,
@@ -96,15 +97,20 @@ class SubstrateApi {
96
97
  noInitWarn: true
97
98
  });
98
99
  } else if (_constants._API_OPTIONS_CHAIN_GROUP.goldberg.includes(this.chainSlug)) {
99
- api = new _api2.ApiPromise({
100
+ api = new _api3.ApiPromise({
100
101
  provider,
101
102
  rpc: _availJsSdk.goldbergRpc,
102
103
  types: _availJsSdk.goldbergTypes,
103
104
  signedExtensions: _availJsSdk.spec.signedExtensions,
104
105
  noInitWarn: true
105
106
  });
107
+ } else if (_constants._API_OPTIONS_CHAIN_GROUP.gear.includes(this.chainSlug)) {
108
+ api = new _api2.GearApi({
109
+ provider,
110
+ noInitWarn: true
111
+ });
106
112
  } else {
107
- api = new _api2.ApiPromise(apiOption);
113
+ api = new _api3.ApiPromise(apiOption);
108
114
  }
109
115
  api.on('ready', this.onReady.bind(this));
110
116
  api.on('connected', this.onConnect.bind(this));
@@ -4,10 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.SubstrateChainHandler = exports.DEFAULT_AUX = void 0;
7
+ var _api = require("@gear-js/api");
7
8
  var _types = require("@subwallet/chain-list/types");
8
9
  var _utils = require("@subwallet/extension-base/koni/api/tokens/wasm/utils");
9
10
  var _AbstractChainHandler = require("@subwallet/extension-base/services/chain-service/handler/AbstractChainHandler");
10
11
  var _SubstrateApi2 = require("@subwallet/extension-base/services/chain-service/handler/SubstrateApi");
12
+ var _utils2 = require("@subwallet/extension-base/utils");
11
13
  var _apiContract = require("@polkadot/api-contract");
12
14
  var _util = require("@polkadot/util");
13
15
  var _logger = require("@polkadot/util/logger");
@@ -93,69 +95,86 @@ class SubstrateChainHandler extends _AbstractChainHandler.AbstractChainHandler {
93
95
  result.existentialDeposit = substrateApi.api.consts.balances.existentialDeposit.toString();
94
96
  return result;
95
97
  }
96
- async getSmartContractTokenInfo(contractAddress, tokenType, originChain, contractCaller) {
97
- let tokenContract;
98
+ async getPsp22TokenInfo(apiPromise, contractAddress, contractCaller) {
99
+ const tokenContract = new _apiContract.ContractPromise(apiPromise, _helper._PSP22_ABI, contractAddress);
100
+ const [nameResp, symbolResp, decimalsResp] = await Promise.all([tokenContract.query['psp22Metadata::tokenName'](contractCaller || contractAddress, {
101
+ gasLimit: (0, _utils.getDefaultWeightV2)(apiPromise)
102
+ }),
103
+ // read-only operation so no gas limit
104
+ tokenContract.query['psp22Metadata::tokenSymbol'](contractCaller || contractAddress, {
105
+ gasLimit: (0, _utils.getDefaultWeightV2)(apiPromise)
106
+ }), tokenContract.query['psp22Metadata::tokenDecimals'](contractCaller || contractAddress, {
107
+ gasLimit: (0, _utils.getDefaultWeightV2)(apiPromise)
108
+ })]);
109
+ if (!(nameResp.result.isOk && symbolResp.result.isOk && decimalsResp.result.isOk) || !nameResp.output || !decimalsResp.output || !symbolResp.output) {
110
+ return ['', 1, '', true];
111
+ } else {
112
+ var _symbolResp$output, _decimalsResp$output, _nameResp$output;
113
+ let contractError = false;
114
+ const symbolObj = (_symbolResp$output = symbolResp.output) === null || _symbolResp$output === void 0 ? void 0 : _symbolResp$output.toHuman();
115
+ const decimalsObj = (_decimalsResp$output = decimalsResp.output) === null || _decimalsResp$output === void 0 ? void 0 : _decimalsResp$output.toHuman();
116
+ const nameObj = (_nameResp$output = nameResp.output) === null || _nameResp$output === void 0 ? void 0 : _nameResp$output.toHuman();
117
+ const name = nameResp.output ? nameObj.Ok || nameObj.ok : '';
118
+ const decimals = decimalsResp.output ? new _util.BN(decimalsObj.Ok || decimalsObj.ok).toNumber() : 0;
119
+ const symbol = decimalsResp.output ? symbolObj.Ok || symbolObj.ok : '';
120
+ if (!name || !symbol || typeof name === 'object' || typeof symbol === 'object') {
121
+ contractError = true;
122
+ }
123
+ return [name, decimals, symbol, contractError];
124
+ }
125
+ }
126
+ async getPsp34TokenInfo(apiPromise, contractAddress, contractCaller) {
127
+ const tokenContract = new _apiContract.ContractPromise(apiPromise, _helper._PSP34_ABI, contractAddress);
128
+ const collectionIdResp = await tokenContract.query['psp34::collectionId'](contractCaller || contractAddress, {
129
+ gasLimit: (0, _utils.getDefaultWeightV2)(apiPromise)
130
+ }); // read-only operation so no gas limit
131
+
132
+ if (!collectionIdResp.result.isOk || !collectionIdResp.output) {
133
+ return ['', -1, '', true];
134
+ } else {
135
+ var _collectionIdResp$out;
136
+ let contractError = false;
137
+ const collectionIdDict = (_collectionIdResp$out = collectionIdResp.output) === null || _collectionIdResp$out === void 0 ? void 0 : _collectionIdResp$out.toHuman();
138
+ if (collectionIdDict.Bytes === '') {
139
+ contractError = true;
140
+ }
141
+ return ['', -1, '', contractError];
142
+ }
143
+ }
144
+ async getGrc20TokenInfo(apiPromise, contractAddress) {
145
+ if (!(apiPromise instanceof _api.GearApi)) {
146
+ console.warn('Cannot subscribe GRC20 balance without GearApi instance');
147
+ return ['', -1, '', true];
148
+ }
149
+ let contractError = false;
150
+ const tokenContract = (0, _utils2.getGRC20ContractPromise)(apiPromise, contractAddress);
151
+ const [nameRes, symbolRes, decimalsRes] = await Promise.all([tokenContract.name(_utils2.DEFAULT_GEAR_ADDRESS.ALICE), tokenContract.symbol(_utils2.DEFAULT_GEAR_ADDRESS.ALICE), tokenContract.decimals(_utils2.DEFAULT_GEAR_ADDRESS.ALICE)]);
152
+ const decimals = typeof decimalsRes === 'string' ? parseInt(decimalsRes) : decimalsRes;
153
+ if (!nameRes || !symbolRes) {
154
+ contractError = true;
155
+ }
156
+ return [nameRes, decimals, symbolRes, contractError];
157
+ }
158
+ async getSubstrateContractTokenInfo(contractAddress, tokenType, originChain, contractCaller) {
159
+ // todo: improve this funtion later
160
+
98
161
  let name = '';
99
162
  let decimals = -1;
100
163
  let symbol = '';
101
164
  let contractError = false;
102
- const substrateApi = this.getSubstrateApiByChain(originChain);
165
+ const apiPromise = this.getSubstrateApiByChain(originChain).api;
103
166
  try {
104
- if (tokenType === _types._AssetType.PSP22) {
105
- tokenContract = new _apiContract.ContractPromise(substrateApi.api, _helper._PSP22_ABI, contractAddress);
106
- const [nameResp, symbolResp, decimalsResp] = await Promise.all([tokenContract.query['psp22Metadata::tokenName'](contractCaller || contractAddress, {
107
- gasLimit: (0, _utils.getDefaultWeightV2)(substrateApi.api)
108
- }),
109
- // read-only operation so no gas limit
110
- tokenContract.query['psp22Metadata::tokenSymbol'](contractCaller || contractAddress, {
111
- gasLimit: (0, _utils.getDefaultWeightV2)(substrateApi.api)
112
- }), tokenContract.query['psp22Metadata::tokenDecimals'](contractCaller || contractAddress, {
113
- gasLimit: (0, _utils.getDefaultWeightV2)(substrateApi.api)
114
- })]);
115
- if (!(nameResp.result.isOk && symbolResp.result.isOk && decimalsResp.result.isOk) || !nameResp.output || !decimalsResp.output || !symbolResp.output) {
116
- return {
117
- name: '',
118
- decimals: -1,
119
- symbol: '',
120
- contractError: true
121
- };
122
- } else {
123
- var _symbolResp$output, _decimalsResp$output, _nameResp$output;
124
- const symbolObj = (_symbolResp$output = symbolResp.output) === null || _symbolResp$output === void 0 ? void 0 : _symbolResp$output.toHuman();
125
- const decimalsObj = (_decimalsResp$output = decimalsResp.output) === null || _decimalsResp$output === void 0 ? void 0 : _decimalsResp$output.toHuman();
126
- const nameObj = (_nameResp$output = nameResp.output) === null || _nameResp$output === void 0 ? void 0 : _nameResp$output.toHuman();
127
- name = nameResp.output ? nameObj.Ok || nameObj.ok : '';
128
- decimals = decimalsResp.output ? new _util.BN(decimalsObj.Ok || decimalsObj.ok).toNumber() : 0;
129
- symbol = decimalsResp.output ? symbolObj.Ok || symbolObj.ok : '';
130
- if (!name || !symbol || typeof name === 'object' || typeof symbol === 'object') {
131
- contractError = true;
132
- }
133
- console.log('validate PSP22', name, symbol, decimals);
134
- }
135
- } else {
136
- tokenContract = new _apiContract.ContractPromise(substrateApi.api, _helper._PSP34_ABI, contractAddress);
137
- const collectionIdResp = await tokenContract.query['psp34::collectionId'](contractCaller || contractAddress, {
138
- gasLimit: (0, _utils.getDefaultWeightV2)(substrateApi.api)
139
- }); // read-only operation so no gas limit
140
-
141
- if (!collectionIdResp.result.isOk || !collectionIdResp.output) {
142
- return {
143
- name: '',
144
- decimals: -1,
145
- symbol: '',
146
- contractError: true
147
- };
148
- } else {
149
- var _collectionIdResp$out;
150
- const collectionIdDict = (_collectionIdResp$out = collectionIdResp.output) === null || _collectionIdResp$out === void 0 ? void 0 : _collectionIdResp$out.toHuman();
151
- if (collectionIdDict.Bytes === '') {
152
- contractError = true;
153
- } else {
154
- name = ''; // no function to get collection name, let user manually put in the name
155
- }
156
- }
167
+ switch (tokenType) {
168
+ case _types._AssetType.PSP22:
169
+ [name, decimals, symbol, contractError] = await this.getPsp22TokenInfo(apiPromise, contractAddress, contractCaller);
170
+ break;
171
+ case _types._AssetType.PSP34:
172
+ [name, decimals, symbol, contractError] = await this.getPsp34TokenInfo(apiPromise, contractAddress, contractCaller);
173
+ break;
174
+ case _types._AssetType.GRC20:
175
+ [name, decimals, symbol, contractError] = await this.getGrc20TokenInfo(apiPromise, contractAddress);
176
+ break;
157
177
  }
158
-
159
178
  return {
160
179
  name,
161
180
  decimals,