@subwallet/extension-base 1.3.68-1 → 1.3.70-2

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 (58) hide show
  1. package/background/KoniTypes.d.ts +11 -0
  2. package/background/KoniTypes.js +3 -0
  3. package/cjs/background/KoniTypes.js +3 -0
  4. package/cjs/koni/background/handlers/Extension.js +62 -0
  5. package/cjs/koni/background/handlers/State.js +5 -2
  6. package/cjs/koni/background/handlers/Tabs.js +11 -4
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/services/balance-service/transfer/token.js +34 -3
  9. package/cjs/services/chain-service/constants.js +17 -5
  10. package/cjs/services/chain-service/utils/index.js +13 -5
  11. package/cjs/services/chain-service/utils/patch.js +1 -1
  12. package/cjs/services/event-service/index.js +1 -0
  13. package/cjs/services/open-gov/handler.js +563 -0
  14. package/cjs/services/open-gov/index.js +273 -0
  15. package/cjs/services/open-gov/interface.js +28 -0
  16. package/cjs/services/open-gov/utils.js +66 -0
  17. package/cjs/services/storage-service/DatabaseService.js +19 -1
  18. package/cjs/services/storage-service/databases/index.js +3 -0
  19. package/cjs/services/storage-service/db-stores/GovLockedInfoStore.js +35 -0
  20. package/cjs/services/transaction-service/helpers/index.js +6 -0
  21. package/cjs/services/transaction-service/index.js +43 -0
  22. package/cjs/services/transaction-service/utils.js +3 -3
  23. package/cjs/utils/account/transform.js +5 -4
  24. package/koni/background/handlers/Extension.d.ts +4 -0
  25. package/koni/background/handlers/Extension.js +62 -0
  26. package/koni/background/handlers/State.d.ts +2 -0
  27. package/koni/background/handlers/State.js +5 -2
  28. package/koni/background/handlers/Tabs.js +11 -4
  29. package/package.json +31 -6
  30. package/packageInfo.js +1 -1
  31. package/services/balance-service/transfer/token.d.ts +4 -0
  32. package/services/balance-service/transfer/token.js +31 -1
  33. package/services/chain-service/constants.d.ts +9 -0
  34. package/services/chain-service/constants.js +14 -3
  35. package/services/chain-service/utils/index.js +13 -5
  36. package/services/chain-service/utils/patch.d.ts +1 -1
  37. package/services/chain-service/utils/patch.js +1 -1
  38. package/services/event-service/index.d.ts +1 -0
  39. package/services/event-service/index.js +1 -0
  40. package/services/event-service/types.d.ts +1 -0
  41. package/services/open-gov/handler.d.ts +27 -0
  42. package/services/open-gov/handler.js +547 -0
  43. package/services/open-gov/index.d.ts +45 -0
  44. package/services/open-gov/index.js +265 -0
  45. package/services/open-gov/interface.d.ts +141 -0
  46. package/services/open-gov/interface.js +21 -0
  47. package/services/open-gov/utils.d.ts +14 -0
  48. package/services/open-gov/utils.js +52 -0
  49. package/services/storage-service/DatabaseService.d.ts +7 -0
  50. package/services/storage-service/DatabaseService.js +19 -1
  51. package/services/storage-service/databases/index.d.ts +2 -0
  52. package/services/storage-service/databases/index.js +3 -0
  53. package/services/storage-service/db-stores/GovLockedInfoStore.d.ts +10 -0
  54. package/services/storage-service/db-stores/GovLockedInfoStore.js +27 -0
  55. package/services/transaction-service/helpers/index.js +6 -0
  56. package/services/transaction-service/index.js +43 -0
  57. package/services/transaction-service/utils.js +3 -3
  58. package/utils/account/transform.js +5 -4
@@ -34,6 +34,7 @@ import { ExtDef } from '@polkadot/types/extrinsic/signedExtensions/types';
34
34
  import { SignerResult } from '@polkadot/types/types/extrinsic';
35
35
  import { HexString } from '@polkadot/util/types';
36
36
  import { EarningImpactResult } from '../services/earning-service/handlers/native-staking/dtao';
37
+ import { GovVoteRequest, GovVotingInfo, RemoveVoteRequest, UnlockVoteRequest } from '../services/open-gov/interface';
37
38
  import { TransactionWarning } from './warnings/TransactionWarning';
38
39
  export declare enum RuntimeEnvironment {
39
40
  Web = "Web",
@@ -447,6 +448,9 @@ export declare enum ExtrinsicType {
447
448
  TOKEN_SPENDING_APPROVAL = "token.spending_approval",
448
449
  SWAP = "swap",
449
450
  CLAIM_BRIDGE = "claim.claim_bridge",
451
+ GOV_VOTE = "gov.vote",
452
+ GOV_UNVOTE = "gov.unvote",
453
+ GOV_UNLOCK_VOTE = "gov.unlock-vote",
450
454
  EVM_EXECUTE = "evm.execute",
451
455
  UNKNOWN = "unknown"
452
456
  }
@@ -490,6 +494,9 @@ export interface ExtrinsicDataTypeMap {
490
494
  [ExtrinsicType.CLAIM_BRIDGE]: RequestClaimBridge;
491
495
  [ExtrinsicType.EVM_EXECUTE]: TransactionConfig;
492
496
  [ExtrinsicType.CROWDLOAN]: any;
497
+ [ExtrinsicType.GOV_VOTE]: GovVoteRequest;
498
+ [ExtrinsicType.GOV_UNVOTE]: RemoveVoteRequest;
499
+ [ExtrinsicType.GOV_UNLOCK_VOTE]: UnlockVoteRequest;
493
500
  [ExtrinsicType.SWAP]: SwapTxData;
494
501
  [ExtrinsicType.UNKNOWN]: any;
495
502
  }
@@ -2084,6 +2091,10 @@ export interface KoniRequestSignatures {
2084
2091
  'pri(migrate.migrateUnifiedAndFetchEligibleSoloAccounts)': [RequestMigrateUnifiedAndFetchEligibleSoloAccounts, ResponseMigrateUnifiedAndFetchEligibleSoloAccounts];
2085
2092
  'pri(migrate.migrateSoloAccount)': [RequestMigrateSoloAccount, ResponseMigrateSoloAccount];
2086
2093
  'pri(migrate.pingSession)': [RequestPingSession, boolean];
2094
+ 'pri(openGov.vote)': [GovVoteRequest, SWTransactionResponse];
2095
+ 'pri(openGov.unvote)': [RemoveVoteRequest, SWTransactionResponse];
2096
+ 'pri(openGov.subscribeGovLockedInfo)': [null, GovVotingInfo[], GovVotingInfo[]];
2097
+ 'pri(openGov.unlockVote)': [UnlockVoteRequest, SWTransactionResponse];
2087
2098
  }
2088
2099
  export interface ApplicationMetadataType {
2089
2100
  version: string;
@@ -106,6 +106,9 @@ export let ExtrinsicType;
106
106
  ExtrinsicType["TOKEN_SPENDING_APPROVAL"] = "token.spending_approval";
107
107
  ExtrinsicType["SWAP"] = "swap";
108
108
  ExtrinsicType["CLAIM_BRIDGE"] = "claim.claim_bridge";
109
+ ExtrinsicType["GOV_VOTE"] = "gov.vote";
110
+ ExtrinsicType["GOV_UNVOTE"] = "gov.unvote";
111
+ ExtrinsicType["GOV_UNLOCK_VOTE"] = "gov.unlock-vote";
109
112
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
110
113
  ExtrinsicType["UNKNOWN"] = "unknown";
111
114
  })(ExtrinsicType || (ExtrinsicType = {}));
@@ -121,6 +121,9 @@ exports.ExtrinsicType = ExtrinsicType;
121
121
  ExtrinsicType["TOKEN_SPENDING_APPROVAL"] = "token.spending_approval";
122
122
  ExtrinsicType["SWAP"] = "swap";
123
123
  ExtrinsicType["CLAIM_BRIDGE"] = "claim.claim_bridge";
124
+ ExtrinsicType["GOV_VOTE"] = "gov.vote";
125
+ ExtrinsicType["GOV_UNVOTE"] = "gov.unvote";
126
+ ExtrinsicType["GOV_UNLOCK_VOTE"] = "gov.unlock-vote";
124
127
  ExtrinsicType["EVM_EXECUTE"] = "evm.execute";
125
128
  ExtrinsicType["UNKNOWN"] = "unknown";
126
129
  })(ExtrinsicType || (exports.ExtrinsicType = ExtrinsicType = {}));
@@ -4842,6 +4842,58 @@ class KoniExtension {
4842
4842
  }
4843
4843
  /* Migrate Unified Account */
4844
4844
 
4845
+ /* Open Gov */
4846
+
4847
+ async handleVote(request) {
4848
+ const extrinsic = await this.#koniState.openGovService.handleVote(request);
4849
+ return await this.#koniState.transactionService.handleTransaction({
4850
+ address: request.address,
4851
+ chain: request.chain,
4852
+ transaction: extrinsic,
4853
+ data: request,
4854
+ extrinsicType: _KoniTypes.ExtrinsicType.GOV_VOTE,
4855
+ chainType: _KoniTypes.ChainType.SUBSTRATE
4856
+ });
4857
+ }
4858
+ async handleRemoveVote(request) {
4859
+ const extrinsic = await this.#koniState.openGovService.handleRemoveVote(request);
4860
+ return await this.#koniState.transactionService.handleTransaction({
4861
+ address: request.address,
4862
+ chain: request.chain,
4863
+ transaction: extrinsic,
4864
+ data: request,
4865
+ extrinsicType: _KoniTypes.ExtrinsicType.GOV_UNVOTE,
4866
+ chainType: _KoniTypes.ChainType.SUBSTRATE
4867
+ });
4868
+ }
4869
+ async handleUnlockVote(request) {
4870
+ const extrinsic = await this.#koniState.openGovService.handleUnlockVote(request);
4871
+ return await this.#koniState.transactionService.handleTransaction({
4872
+ address: request.address,
4873
+ chain: request.chain,
4874
+ transaction: extrinsic,
4875
+ data: request,
4876
+ extrinsicType: _KoniTypes.ExtrinsicType.GOV_UNLOCK_VOTE,
4877
+ chainType: _KoniTypes.ChainType.SUBSTRATE
4878
+ });
4879
+ }
4880
+ async subscribeGovLockedInfo(id, port) {
4881
+ const cb = (0, _subscriptions.createSubscription)(id, port);
4882
+ await this.#koniState.openGovService.waitForStarted();
4883
+ const govLockedInfoSubscription = this.#koniState.openGovService.subscribeGovLockedInfoSubject().subscribe({
4884
+ next: rs => {
4885
+ cb(rs);
4886
+ }
4887
+ });
4888
+ this.createUnsubscriptionHandle(id, govLockedInfoSubscription.unsubscribe);
4889
+ port.onDisconnect.addListener(() => {
4890
+ this.cancelSubscription(id);
4891
+ });
4892
+ return await this.#koniState.openGovService.getGovLockedInfoInfo();
4893
+ }
4894
+
4895
+ /* Open Gov */
4896
+
4845
4897
  // --------------------------------------------------------------
4846
4898
  // eslint-disable-next-line @typescript-eslint/require-await
4847
4899
  async handle(id, type, request, port) {
@@ -5500,6 +5552,16 @@ class KoniExtension {
5500
5552
  return this.migrateSoloAccount(request);
5501
5553
  case 'pri(migrate.pingSession)':
5502
5554
  return this.pingSession(request);
5555
+
5556
+ /* Gov */
5557
+ case 'pri(openGov.vote)':
5558
+ return this.handleVote(request);
5559
+ case 'pri(openGov.unvote)':
5560
+ return this.handleRemoveVote(request);
5561
+ case 'pri(openGov.unlockVote)':
5562
+ return this.handleUnlockVote(request);
5563
+ case 'pri(openGov.subscribeGovLockedInfo)':
5564
+ return this.subscribeGovLockedInfo(id, port);
5503
5565
  // Default
5504
5566
  default:
5505
5567
  throw new Error(`Unable to handle message of type ${type}`);
@@ -34,6 +34,7 @@ var _mintCampaignService = _interopRequireDefault(require("@subwallet/extension-
34
34
  var _mktCampaignService = _interopRequireDefault(require("@subwallet/extension-base/services/mkt-campaign-service"));
35
35
  var _nftService = _interopRequireDefault(require("@subwallet/extension-base/services/nft-service"));
36
36
  var _NotificationService = _interopRequireDefault(require("@subwallet/extension-base/services/notification-service/NotificationService"));
37
+ var _openGov = _interopRequireDefault(require("@subwallet/extension-base/services/open-gov"));
37
38
  var _priceService = require("@subwallet/extension-base/services/price-service");
38
39
  var _requestService = _interopRequireDefault(require("@subwallet/extension-base/services/request-service"));
39
40
  var _PopupHandler = require("@subwallet/extension-base/services/request-service/handler/PopupHandler");
@@ -128,6 +129,7 @@ class KoniState {
128
129
  this.swapService = new _swapService.SwapService(this);
129
130
  this.inappNotificationService = new _inappNotificationService.InappNotificationService(this.dbService, this.keyringService, this.eventService, this.chainService);
130
131
  this.chainOnlineService = new _chainOnlineService.ChainOnlineService(this.chainService, this.settingService, this.eventService, this.dbService);
132
+ this.openGovService = new _openGov.default(this);
131
133
  this.subscription = new _subscription.KoniSubscription(this, this.dbService);
132
134
  this.cron = new _cron.KoniCron(this, this.subscription, this.dbService);
133
135
  this.logger = (0, _util.logger)('State');
@@ -232,6 +234,7 @@ class KoniState {
232
234
  await this.earningService.init();
233
235
  await this.swapService.init();
234
236
  await this.inappNotificationService.init();
237
+ await this.openGovService.init();
235
238
 
236
239
  // this.onReady();
237
240
  this.onAccountAdd();
@@ -1687,7 +1690,7 @@ class KoniState {
1687
1690
  this.campaignService.stop();
1688
1691
  await Promise.all([this.cron.stop(), this.subscription.stop()]);
1689
1692
  await this.pauseAllNetworks(undefined, 'IDLE mode');
1690
- await Promise.all([this.historyService.stop(), this.priceService.stop(), this.balanceService.stop(), this.earningService.stop(), this.swapService.stop(), this.inappNotificationService.stop()]);
1693
+ await Promise.all([this.historyService.stop(), this.priceService.stop(), this.balanceService.stop(), this.earningService.stop(), this.swapService.stop(), this.inappNotificationService.stop(), this.openGovService.stop()]);
1691
1694
 
1692
1695
  // Complete sleeping
1693
1696
  sleeping.resolve();
@@ -1743,7 +1746,7 @@ class KoniState {
1743
1746
  this.generalStatus = _types.ServiceStatus.STARTING_FULL;
1744
1747
  const startingFull = (0, _promise.createPromiseHandler)();
1745
1748
  this.waitStartingFull = startingFull.promise;
1746
- await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.earningService.start(), this.swapService.start(), this.inappNotificationService.start()]);
1749
+ await Promise.all([this.cron.start(), this.subscription.start(), this.historyService.start(), this.priceService.start(), this.balanceService.start(), this.earningService.start(), this.swapService.start(), this.inappNotificationService.start(), this.openGovService.start()]);
1747
1750
  this.eventService.emit('general.start_full', true);
1748
1751
  this.waitStartingFull = null;
1749
1752
  this.generalStatus = _types.ServiceStatus.STARTED_FULL;
@@ -272,11 +272,18 @@ class KoniTabs {
272
272
  if (isInDenyList) {
273
273
  return this.checkPassList(url);
274
274
  }
275
+
276
+ // TODO: Temporarily disable the "Advanced phishing detection" feature
277
+ // because it produces incorrect results. It incorrectly flags
278
+ // YouTube, Facebook, and other social media platforms as phishing.
279
+
275
280
  if (this.#chainPatrolService) {
276
- const isInChainPatrolDenyList = await chainPatrolCheckUrl(url);
277
- if (isInChainPatrolDenyList) {
278
- return this.checkPassList(url);
279
- }
281
+ // const isInChainPatrolDenyList = await chainPatrolCheckUrl(url);
282
+ //
283
+ // if (isInChainPatrolDenyList) {
284
+ // return this.checkPassList(url);
285
+ // }
286
+ return false;
280
287
  }
281
288
  return false;
282
289
  }
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.3.68-1'
16
+ version: '1.3.70-2'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getTransferMockTxFee = exports.createSubstrateExtrinsic = void 0;
7
+ exports.getTransferMockTxFee = exports.getAccountNetuidTokenInfo = exports.createSubstrateExtrinsic = void 0;
8
8
  var _api = require("@gear-js/api");
9
9
  var _types = require("@subwallet/chain-list/types");
10
10
  var _wasm = require("@subwallet/extension-base/koni/api/contract-handler/wasm");
@@ -24,7 +24,7 @@ var _utilCrypto = require("@polkadot/util-crypto");
24
24
  // SPDX-License-Identifier: Apache-2.0
25
25
 
26
26
  const createSubstrateExtrinsic = async _ref => {
27
- var _tokenInfo$metadata;
27
+ var _tokenInfo$metadata, _tokenInfo$metadata2;
28
28
  let {
29
29
  from,
30
30
  networkKey,
@@ -120,6 +120,18 @@ const createSubstrateExtrinsic = async _ref => {
120
120
  }
121
121
  } else if (_constants._TRANSFER_CHAIN_GROUP.truth.includes(networkKey)) {
122
122
  transfer = api.tx.assetManager.transfer(to, (0, _utils3._getTokenOnChainInfo)(tokenInfo), value);
123
+ } else if (_constants._TRANSFER_CHAIN_GROUP.bittensor.includes(networkKey) && (_tokenInfo$metadata2 = tokenInfo.metadata) !== null && _tokenInfo$metadata2 !== void 0 && _tokenInfo$metadata2.netuid) {
124
+ var _tokenInfo$metadata3;
125
+ const {
126
+ accountHotKey,
127
+ isEnableTransferSubnet
128
+ } = await getAccountNetuidTokenInfo(from, tokenInfo, substrateApi);
129
+ const tokenNetuid = (_tokenInfo$metadata3 = tokenInfo.metadata) === null || _tokenInfo$metadata3 === void 0 ? void 0 : _tokenInfo$metadata3.netuid;
130
+ if (isEnableTransferSubnet && accountHotKey) {
131
+ transfer = api.tx.subtensorModule.transferStake(from, accountHotKey, tokenNetuid, tokenNetuid, value);
132
+ } else {
133
+ return [null, value];
134
+ }
123
135
  }
124
136
  return [transfer, transferAmount || value];
125
137
  };
@@ -180,4 +192,23 @@ const getTransferMockTxFee = async (address, chainInfo, tokenInfo, api) => {
180
192
  return new _bignumber.default(0);
181
193
  }
182
194
  };
183
- exports.getTransferMockTxFee = getTransferMockTxFee;
195
+ exports.getTransferMockTxFee = getTransferMockTxFee;
196
+ const getAccountNetuidTokenInfo = async (address, tokenInfo, substrateApi) => {
197
+ var _tokenInfo$metadata4;
198
+ const tokenNetuid = (_tokenInfo$metadata4 = tokenInfo.metadata) === null || _tokenInfo$metadata4 === void 0 ? void 0 : _tokenInfo$metadata4.netuid;
199
+ if (!tokenNetuid) {
200
+ return {
201
+ isEnableTransferSubnet: false,
202
+ accountHotKey: undefined
203
+ };
204
+ }
205
+ const [isTransferToggle, rawStakeInfoForColdKey] = await Promise.all([substrateApi.api.query.subtensorModule.transferToggle(tokenNetuid), substrateApi.api.call.stakeInfoRuntimeApi.getStakeInfoForColdkey(address)]);
206
+ const isEnableTransferSubnet = isTransferToggle.toPrimitive();
207
+ const taoStakeInfos = rawStakeInfoForColdKey.toPrimitive();
208
+ const accountHotKey = taoStakeInfos.find(value => value.netuid === tokenNetuid);
209
+ return {
210
+ isEnableTransferSubnet,
211
+ accountHotKey: accountHotKey === null || accountHotKey === void 0 ? void 0 : accountHotKey.hotkey
212
+ };
213
+ };
214
+ exports.getAccountNetuidTokenInfo = getAccountNetuidTokenInfo;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._ZK_ASSET_PREFIX = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_LOCKED_ID_GROUP = exports._BALANCE_CHAIN_GROUP = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
6
+ exports._ZK_ASSET_PREFIX = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._GOVERNANCE_CHAIN_GROUP = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_LOCKED_ID_GROUP = exports._BALANCE_CHAIN_GROUP = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
7
7
  var _chainList = require("@subwallet/chain-list");
8
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
9
9
  // Copyright 2019-2022 @subwallet/extension-base
@@ -30,9 +30,18 @@ const _PREDEFINED_SINGLE_MODES = {
30
30
  };
31
31
  exports._PREDEFINED_SINGLE_MODES = _PREDEFINED_SINGLE_MODES;
32
32
  const _PURE_EVM_CHAINS = ['binance', 'binance_test', 'ethereum', 'ethereum_goerli', 'astarEvm', 'shidenEvm', 'shibuyaEvm', 'crabEvm', 'pangolinEvm', 'cloverEvm', 'boba_rinkeby', 'boba', 'bobabase', 'bobabeam', 'watr_network_evm'];
33
+ exports._PURE_EVM_CHAINS = _PURE_EVM_CHAINS;
34
+ const _GOVERNANCE_CHAIN_GROUP = {
35
+ polkadot: ['statemint', 'bifrost_dot', 'hydradx_main', 'ajunaPolkadot', 'astar', 'phala', 'litentry', 'acala', 'centrifuge', 'interlay', 'laos_network'],
36
+ kusama: ['statemine', 'bifrost', 'basilisk', 'karura', 'kintsugi'],
37
+ westend_assethub: ['westend_assethub'],
38
+ paseo: ['paseo_assethub'],
39
+ solo: ['vara_network', 'zkverify'],
40
+ testnet: ['zkverify_testnet']
41
+ };
33
42
 
34
43
  // Get balance----------------------------------------------------------------------------------------------------------
35
- exports._PURE_EVM_CHAINS = _PURE_EVM_CHAINS;
44
+ exports._GOVERNANCE_CHAIN_GROUP = _GOVERNANCE_CHAIN_GROUP;
36
45
  const _BALANCE_CHAIN_GROUP = {
37
46
  kintsugi: ['kintsugi', 'interlay', 'kintsugi_test', 'mangatax_para'],
38
47
  genshiro: ['genshiro_testnet', 'genshiro'],
@@ -139,6 +148,8 @@ const _EXPECTED_BLOCK_TIME = {
139
148
  statemint: 6,
140
149
  statemine: 6,
141
150
  polkadex: 12,
151
+ westend_assethub: 6,
152
+ paseo_assethub: 6,
142
153
  ternoa: 6,
143
154
  ternoa_alphanet: 6,
144
155
  westend: 6,
@@ -149,8 +160,8 @@ const _EXPECTED_BLOCK_TIME = {
149
160
  vara_testnet: 3,
150
161
  goldberg_testnet: 20,
151
162
  polimec: 12,
152
- bifrost: 13,
153
- // expect 12 but actual 13
163
+ bifrost: 6,
164
+ // bifrost kusama
154
165
  moonbeam: 12,
155
166
  moonriver: 12,
156
167
  moonbase: 6,
@@ -302,7 +313,8 @@ const _TRANSFER_CHAIN_GROUP = {
302
313
  pendulum: ['pendulum', 'amplitude', 'amplitude_test', 'hydradx_main', 'bifrost', 'bifrost_dot', 'jamton', 'hydradx_hollarnet'],
303
314
  centrifuge: ['centrifuge'],
304
315
  disable_transfer: ['crab', 'pangolin'],
305
- truth: ['truth_network']
316
+ truth: ['truth_network'],
317
+ bittensor: ['bittensor']
306
318
  };
307
319
  exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
308
320
  const _MANTA_ZK_CHAIN_GROUP = ['calamari'];
@@ -515,28 +515,36 @@ function _getChainNativeTokenBasicInfo(chainInfo) {
515
515
  return defaultTokenInfo;
516
516
  }
517
517
  if (chainInfo.substrateInfo) {
518
- // substrate by default
519
518
  return {
519
+ ...defaultTokenInfo,
520
520
  symbol: chainInfo.substrateInfo.symbol,
521
521
  decimals: chainInfo.substrateInfo.decimals
522
522
  };
523
- } else if (chainInfo.evmInfo) {
523
+ }
524
+ if (chainInfo.evmInfo) {
524
525
  return {
526
+ ...defaultTokenInfo,
525
527
  symbol: chainInfo.evmInfo.symbol,
526
528
  decimals: chainInfo.evmInfo.decimals
527
529
  };
528
- } else if (chainInfo.tonInfo) {
530
+ }
531
+ if (chainInfo.tonInfo) {
529
532
  return {
533
+ ...defaultTokenInfo,
530
534
  symbol: chainInfo.tonInfo.symbol,
531
535
  decimals: chainInfo.tonInfo.decimals
532
536
  };
533
- } else if (chainInfo.cardanoInfo) {
537
+ }
538
+ if (chainInfo.cardanoInfo) {
534
539
  return {
540
+ ...defaultTokenInfo,
535
541
  symbol: chainInfo.cardanoInfo.symbol,
536
542
  decimals: chainInfo.cardanoInfo.decimals
537
543
  };
538
- } else if (chainInfo.bitcoinInfo) {
544
+ }
545
+ if (chainInfo.bitcoinInfo) {
539
546
  return {
547
+ ...defaultTokenInfo,
540
548
  symbol: chainInfo.bitcoinInfo.symbol,
541
549
  decimals: chainInfo.bitcoinInfo.decimals
542
550
  };
@@ -12,7 +12,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
12
12
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
13
13
  const fetchDomain = process.env.PATCH_CHAIN_LIST_URL || (PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev');
14
14
  const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
15
- const ChainListVersion = '0.2.121'; // update this when build chain-list
15
+ const ChainListVersion = '0.2.122'; // update this when build chain-list
16
16
 
17
17
  // todo: move this interface to chainlist
18
18
  exports.ChainListVersion = ChainListVersion;
@@ -40,6 +40,7 @@ class EventService extends _eventemitter.default {
40
40
  this.waitBuyServiceReady = this.generateWaitPromise('buy.services.ready');
41
41
  this.waitEarningReady = this.generateWaitPromise('earning.ready');
42
42
  this.waitLedgerReady = this.generateWaitPromise('ledger.ready');
43
+ this.waitOpenGovReady = this.generateWaitPromise('open-gov.ready');
43
44
  }
44
45
  generateWaitPromise(eventType) {
45
46
  return new Promise(resolve => {