@subwallet/extension-base 1.1.7-0 → 1.1.8-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 (29) hide show
  1. package/background/KoniTypes.d.ts +10 -0
  2. package/cjs/koni/api/dotsama/domain.js +54 -0
  3. package/cjs/koni/api/staking/bonding/relayChain.js +12 -2
  4. package/cjs/koni/background/handlers/Extension.js +13 -0
  5. package/cjs/koni/background/handlers/State.js +3 -0
  6. package/cjs/koni/background/subscription.js +3 -1
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/services/chain-service/index.js +20 -2
  9. package/cjs/services/migration-service/scripts/DeleteChain.js +21 -0
  10. package/cjs/services/migration-service/scripts/index.js +3 -1
  11. package/cjs/services/transaction-service/utils.js +4 -1
  12. package/cjs/services/wallet-connect-service/index.js +1 -0
  13. package/koni/api/dotsama/domain.d.ts +9 -0
  14. package/koni/api/dotsama/domain.js +40 -0
  15. package/koni/api/staking/bonding/relayChain.js +12 -2
  16. package/koni/background/handlers/Extension.d.ts +2 -0
  17. package/koni/background/handlers/Extension.js +13 -0
  18. package/koni/background/handlers/State.d.ts +1 -0
  19. package/koni/background/handlers/State.js +3 -0
  20. package/koni/background/subscription.js +3 -1
  21. package/package.json +17 -6
  22. package/packageInfo.js +1 -1
  23. package/services/chain-service/index.d.ts +1 -0
  24. package/services/chain-service/index.js +20 -2
  25. package/services/migration-service/scripts/DeleteChain.d.ts +4 -0
  26. package/services/migration-service/scripts/DeleteChain.js +13 -0
  27. package/services/migration-service/scripts/index.js +3 -1
  28. package/services/transaction-service/utils.js +4 -1
  29. package/services/wallet-connect-service/index.js +1 -0
@@ -1511,6 +1511,14 @@ export interface ResponseFindRawMetadata {
1511
1511
  rawMetadata: string;
1512
1512
  specVersion: number;
1513
1513
  }
1514
+ export interface ResolveDomainRequest {
1515
+ chain: string;
1516
+ domain: string;
1517
+ }
1518
+ export interface ResolveAddressToDomainRequest {
1519
+ chain: string;
1520
+ address: string;
1521
+ }
1514
1522
  export interface KoniRequestSignatures {
1515
1523
  'pri(staking.submitTuringCancelCompound)': [RequestTuringCancelStakeCompound, SWTransactionResponse];
1516
1524
  'pri(staking.submitTuringCompound)': [RequestTuringStakeCompound, SWTransactionResponse];
@@ -1606,6 +1614,8 @@ export interface KoniRequestSignatures {
1606
1614
  'pri(accounts.subscribeAddresses)': [null, AddressBookInfo, AddressBookInfo];
1607
1615
  'pri(accounts.editContact)': [RequestEditContactAccount, boolean];
1608
1616
  'pri(accounts.deleteContact)': [RequestDeleteContactAccount, boolean];
1617
+ 'pri(accounts.resolveDomainToAddress)': [ResolveDomainRequest, string | undefined];
1618
+ 'pri(accounts.resolveAddressToDomain)': [ResolveAddressToDomainRequest, string | undefined];
1609
1619
  'pri(settings.changeBalancesVisibility)': [null, boolean];
1610
1620
  'pri(settings.subscribe)': [null, UiSettings, UiSettings];
1611
1621
  'pri(settings.getLogoMaps)': [null, AllLogoMap];
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TZERO_ID_SUFFIX = exports.SUPPORTED_DOMAIN_SUFFIX = exports.ENS_SUFFIX = exports.CHAINS_SUPPORTED_DOMAIN = exports.AZERO_ID_SUFFIX = void 0;
7
+ exports.isAzeroDomain = isAzeroDomain;
8
+ exports.resolveAzeroAddressToDomain = resolveAzeroAddressToDomain;
9
+ exports.resolveAzeroDomainToAddress = resolveAzeroDomainToAddress;
10
+ var _resolverCore = require("@azns/resolver-core");
11
+ // Copyright 2019-2022 @subwallet/extension-base
12
+ // SPDX-License-Identifier: Apache-2.0
13
+
14
+ const ENS_SUFFIX = '.eth';
15
+ exports.ENS_SUFFIX = ENS_SUFFIX;
16
+ const TZERO_ID_SUFFIX = '.tzero';
17
+ exports.TZERO_ID_SUFFIX = TZERO_ID_SUFFIX;
18
+ const AZERO_ID_SUFFIX = '.azero';
19
+ exports.AZERO_ID_SUFFIX = AZERO_ID_SUFFIX;
20
+ const SUPPORTED_DOMAIN_SUFFIX = [ENS_SUFFIX, TZERO_ID_SUFFIX, AZERO_ID_SUFFIX];
21
+ exports.SUPPORTED_DOMAIN_SUFFIX = SUPPORTED_DOMAIN_SUFFIX;
22
+ const CHAINS_SUPPORTED_DOMAIN = ['aleph', 'alephTest'];
23
+ exports.CHAINS_SUPPORTED_DOMAIN = CHAINS_SUPPORTED_DOMAIN;
24
+ async function resolveAzeroDomainToAddress(domain, chain, api) {
25
+ let chainId = _resolverCore.SupportedChainId.AlephZero;
26
+ if (chain === 'alephTest') {
27
+ chainId = _resolverCore.SupportedChainId.AlephZeroTestnet;
28
+ }
29
+ const primaryDomains = await (0, _resolverCore.resolveDomainToAddress)(domain, {
30
+ chainId,
31
+ customApi: api
32
+ });
33
+ if (primaryDomains.error) {
34
+ console.debug(primaryDomains.error);
35
+ }
36
+ return (primaryDomains === null || primaryDomains === void 0 ? void 0 : primaryDomains.address) || undefined;
37
+ }
38
+ async function resolveAzeroAddressToDomain(address, chain, api) {
39
+ let chainId = _resolverCore.SupportedChainId.AlephZero;
40
+ if (chain === 'alephTest') {
41
+ chainId = _resolverCore.SupportedChainId.AlephZeroTestnet;
42
+ }
43
+ const primaryDomains = await (0, _resolverCore.resolveAddressToDomain)(address, {
44
+ chainId,
45
+ customApi: api
46
+ });
47
+ if (primaryDomains.error) {
48
+ console.debug(primaryDomains.error);
49
+ }
50
+ return (primaryDomains === null || primaryDomains === void 0 ? void 0 : primaryDomains.primaryDomain) || undefined;
51
+ }
52
+ function isAzeroDomain(input) {
53
+ return input.includes(AZERO_ID_SUFFIX) || input.includes(TZERO_ID_SUFFIX);
54
+ }
@@ -92,23 +92,33 @@ function validateRelayBondingCondition(chainInfo, amount, selectedValidators, ad
92
92
  }
93
93
  function subscribeRelayChainStakingMetadata(chainInfo, substrateApi, callback) {
94
94
  return substrateApi.api.query.staking.currentEra(async _currentEra => {
95
- var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6;
95
+ var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6, _substrateApi$api$que7;
96
96
  const currentEra = _currentEra.toString();
97
97
  const maxNominations = substrateApi.api.consts.staking.maxNominations.toString();
98
98
  const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
99
99
  const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
100
- const [_minNominatorBond, _minPoolJoin, _minimumActiveStake] = await Promise.all([substrateApi.api.query.staking.minNominatorBond(), (_substrateApi$api$que = substrateApi.api.query) === null || _substrateApi$api$que === void 0 ? void 0 : (_substrateApi$api$que2 = _substrateApi$api$que.nominationPools) === null || _substrateApi$api$que2 === void 0 ? void 0 : _substrateApi$api$que2.minJoinBond(), ((_substrateApi$api$que3 = substrateApi.api.query) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.staking) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.minimumActiveStake) && ((_substrateApi$api$que5 = substrateApi.api.query) === null || _substrateApi$api$que5 === void 0 ? void 0 : (_substrateApi$api$que6 = _substrateApi$api$que5.staking) === null || _substrateApi$api$que6 === void 0 ? void 0 : _substrateApi$api$que6.minimumActiveStake())]);
100
+ const [_totalEraStake, _totalIssuance, _auctionCounter, _minNominatorBond, _minPoolJoin, _minimumActiveStake] = await Promise.all([substrateApi.api.query.staking.erasTotalStake(parseInt(currentEra)), substrateApi.api.query.balances.totalIssuance(), (_substrateApi$api$que = substrateApi.api.query.auctions) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.auctionCounter(), substrateApi.api.query.staking.minNominatorBond(), (_substrateApi$api$que2 = substrateApi.api.query) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.nominationPools) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.minJoinBond(), ((_substrateApi$api$que4 = substrateApi.api.query) === null || _substrateApi$api$que4 === void 0 ? void 0 : (_substrateApi$api$que5 = _substrateApi$api$que4.staking) === null || _substrateApi$api$que5 === void 0 ? void 0 : _substrateApi$api$que5.minimumActiveStake) && ((_substrateApi$api$que6 = substrateApi.api.query) === null || _substrateApi$api$que6 === void 0 ? void 0 : (_substrateApi$api$que7 = _substrateApi$api$que6.staking) === null || _substrateApi$api$que7 === void 0 ? void 0 : _substrateApi$api$que7.minimumActiveStake())]);
101
101
  const minActiveStake = (_minimumActiveStake === null || _minimumActiveStake === void 0 ? void 0 : _minimumActiveStake.toString()) || '0';
102
102
  const minNominatorBond = _minNominatorBond.toString();
103
103
  const bnMinActiveStake = new _util.BN(minActiveStake);
104
104
  const bnMinNominatorBond = new _util.BN(minNominatorBond);
105
105
  const minStake = bnMinActiveStake.gt(bnMinNominatorBond) ? bnMinActiveStake : bnMinNominatorBond;
106
+ const rawTotalEraStake = _totalEraStake.toString();
107
+ const rawTotalIssuance = _totalIssuance.toString();
108
+ const numAuctions = _auctionCounter ? _auctionCounter.toHuman() : 0;
109
+ const bnTotalEraStake = new _util.BN(rawTotalEraStake);
110
+ const bnTotalIssuance = new _util.BN(rawTotalIssuance);
111
+ const inflation = (0, _utils.calculateInflation)(bnTotalEraStake, bnTotalIssuance, numAuctions, chainInfo.slug);
112
+ const expectedReturn = (0, _utils.calculateChainStakedReturn)(inflation, bnTotalEraStake, bnTotalIssuance, chainInfo.slug);
106
113
  const minPoolJoin = (_minPoolJoin === null || _minPoolJoin === void 0 ? void 0 : _minPoolJoin.toString()) || undefined;
107
114
  const unlockingPeriod = parseInt(unlockingEras) * (_constants._STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _constants._STAKING_ERA_LENGTH_MAP.default); // in hours
108
115
 
109
116
  callback(chainInfo.slug, {
110
117
  chain: chainInfo.slug,
111
118
  type: _KoniTypes.StakingType.NOMINATED,
119
+ expectedReturn: !_constants._STAKING_CHAIN_GROUP.ternoa.includes(chainInfo.slug) ? expectedReturn : undefined,
120
+ // in %, annually
121
+ inflation,
112
122
  era: parseInt(currentEra),
113
123
  minStake: minStake.toString(),
114
124
  maxValidatorPerNominator: parseInt(maxNominations),
@@ -15,6 +15,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
15
15
  var _TransactionWarning = require("@subwallet/extension-base/background/warnings/TransactionWarning");
16
16
  var _constants = require("@subwallet/extension-base/constants");
17
17
  var _defaults = require("@subwallet/extension-base/defaults");
18
+ var _domain = require("@subwallet/extension-base/koni/api/dotsama/domain");
18
19
  var _parseTransaction = require("@subwallet/extension-base/koni/api/dotsama/parseTransaction");
19
20
  var _transfer = require("@subwallet/extension-base/koni/api/dotsama/transfer");
20
21
  var _transfer2 = require("@subwallet/extension-base/koni/api/nft/transfer");
@@ -3494,6 +3495,14 @@ class KoniExtension {
3494
3495
  specVersion
3495
3496
  };
3496
3497
  }
3498
+ async resolveDomainByAddress(request) {
3499
+ const chainApi = this.#koniState.getSubstrateApi(request.chain);
3500
+ return await (0, _domain.resolveAzeroDomainToAddress)(request.domain, request.chain, chainApi.api);
3501
+ }
3502
+ async resolveAddressByDomain(request) {
3503
+ const chainApi = this.#koniState.getSubstrateApi(request.chain);
3504
+ return await (0, _domain.resolveAzeroAddressToDomain)(request.address, request.chain, chainApi.api);
3505
+ }
3497
3506
 
3498
3507
  // --------------------------------------------------------------
3499
3508
  // eslint-disable-next-line @typescript-eslint/require-await
@@ -3701,6 +3710,10 @@ class KoniExtension {
3701
3710
  // Subscribe address
3702
3711
  case 'pri(accounts.subscribeAddresses)':
3703
3712
  return this.subscribeAddresses(id, port);
3713
+ case 'pri(accounts.resolveDomainToAddress)':
3714
+ return await this.resolveDomainByAddress(request);
3715
+ case 'pri(accounts.resolveAddressToDomain)':
3716
+ return await this.resolveAddressByDomain(request);
3704
3717
 
3705
3718
  // ChainService
3706
3719
  case 'pri(chainService.subscribeChainInfoMap)':
@@ -864,6 +864,9 @@ class KoniState {
864
864
  removeCustomChain(networkKey) {
865
865
  return this.chainService.removeCustomChain(networkKey);
866
866
  }
867
+ forceRemoveChain(networkKey) {
868
+ this.chainService.forceRemoveChain(networkKey);
869
+ }
867
870
 
868
871
  // TODO: avoids turning off chains related to ledger account
869
872
  getDefaultNetworkKeys = () => {
@@ -132,7 +132,9 @@ class KoniSubscription {
132
132
  maxWithdrawalRequestPerValidator: rs.maxWithdrawalRequestPerValidator,
133
133
  // by default
134
134
  allowCancelUnstaking: rs.allowCancelUnstaking,
135
- unstakingPeriod: rs.unstakingPeriod
135
+ unstakingPeriod: rs.unstakingPeriod,
136
+ expectedReturn: rs.expectedReturn,
137
+ inflation: rs.inflation
136
138
  });
137
139
  });
138
140
  if (onlyRunOnFirstTime) {
@@ -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.7-0'
16
+ version: '1.1.8-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -293,11 +293,29 @@ class ChainService {
293
293
  }
294
294
 
295
295
  // Setter
296
- removeCustomChain(slug) {
296
+ forceRemoveChain(slug) {
297
297
  if (this.lockChainInfoMap) {
298
298
  return false;
299
299
  }
300
+ const chainInfoMap = this.getChainInfoMap();
301
+ const chainStateMap = this.getChainStateMap();
302
+ if (!(slug in chainInfoMap)) {
303
+ return false;
304
+ }
300
305
  this.lockChainInfoMap = true;
306
+ delete chainStateMap[slug];
307
+ delete chainInfoMap[slug];
308
+ this.deleteAssetsByChain(slug);
309
+ this.dbService.removeFromChainStore([slug]).catch(console.error);
310
+ this.updateChainSubscription();
311
+ this.lockChainInfoMap = false;
312
+ this.eventService.emit('chain.updateState', slug);
313
+ return true;
314
+ }
315
+ removeCustomChain(slug) {
316
+ if (this.lockChainInfoMap) {
317
+ return false;
318
+ }
301
319
  const chainInfoMap = this.getChainInfoMap();
302
320
  const chainStateMap = this.getChainStateMap();
303
321
  if (!(slug in chainInfoMap)) {
@@ -309,6 +327,7 @@ class ChainService {
309
327
  if (chainStateMap[slug].active) {
310
328
  return false;
311
329
  }
330
+ this.lockChainInfoMap = true;
312
331
  delete chainStateMap[slug];
313
332
  delete chainInfoMap[slug];
314
333
  this.deleteAssetsByChain(slug);
@@ -428,7 +447,6 @@ class ChainService {
428
447
 
429
448
  // Avoid unnecessary update in case disable chain
430
449
  if (currentStatus !== status) {
431
- console.log(chainInfo.name, currentStatus, status);
432
450
  this.setChainConnectionStatus(chainInfo.slug, status);
433
451
  this.updateChainStateMapSubscription();
434
452
  }
@@ -0,0 +1,21 @@
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 DeleteChain extends _Base.default {
13
+ // eslint-disable-next-line @typescript-eslint/require-await
14
+ async run() {
15
+ ['snow', 'snow_evm', 'arctic_testnet'].forEach(chain => {
16
+ this.state.forceRemoveChain(chain);
17
+ });
18
+ console.log('done job');
19
+ }
20
+ }
21
+ exports.default = DeleteChain;
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = exports.EVERYTIME = void 0;
8
+ var _DeleteChain = _interopRequireDefault(require("@subwallet/extension-base/services/migration-service/scripts/DeleteChain"));
8
9
  var _AutoEnableChainsTokens = _interopRequireDefault(require("./AutoEnableChainsTokens"));
9
10
  var _MigrateAuthUrls = _interopRequireDefault(require("./MigrateAuthUrls"));
10
11
  var _MigrateAutoLock = _interopRequireDefault(require("./MigrateAutoLock"));
@@ -32,7 +33,8 @@ var _default = {
32
33
  '1.0.3-02': _MigrateChainPatrol.default,
33
34
  '1.0.9-01': _MigrateLedgerAccount.default,
34
35
  '1.0.12-02': _MigrateEthProvider.default,
35
- '1.1.6-01': _MigrateWalletReference.default
36
+ '1.1.6-01': _MigrateWalletReference.default,
37
+ '1.1.7': _DeleteChain.default
36
38
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
37
39
  };
38
40
  exports.default = _default;
@@ -18,6 +18,9 @@ function getBlockExplorerAccountRoute(explorerLink) {
18
18
  if (explorerLink.includes('explorer.subspace.network')) {
19
19
  return 'accounts';
20
20
  }
21
+ if (explorerLink.includes('deeperscan.io')) {
22
+ return 'account';
23
+ }
21
24
  if (explorerLink.includes('subscan.io')) {
22
25
  return 'account';
23
26
  }
@@ -27,7 +30,7 @@ function getBlockExplorerTxRoute(chainInfo) {
27
30
  if ((0, _utils._isPureEvmChain)(chainInfo)) {
28
31
  return 'tx';
29
32
  }
30
- if (['aventus'].includes(chainInfo.slug)) {
33
+ if (['aventus', 'deeper_network'].includes(chainInfo.slug)) {
31
34
  return 'transaction';
32
35
  }
33
36
  return 'extrinsic';
@@ -172,6 +172,7 @@ class WalletConnectService {
172
172
  }
173
173
  }
174
174
  await (0, _classPrivateFieldLooseBase2.default)(this, _initClient)[_initClient]();
175
+ (0, _classPrivateFieldLooseBase2.default)(this, _updateSessions)[_updateSessions]();
175
176
  }
176
177
  async disconnect(topic) {
177
178
  var _classPrivateFieldLoo13;
@@ -0,0 +1,9 @@
1
+ import { ApiPromise } from '@polkadot/api';
2
+ export declare const ENS_SUFFIX = ".eth";
3
+ export declare const TZERO_ID_SUFFIX = ".tzero";
4
+ export declare const AZERO_ID_SUFFIX = ".azero";
5
+ export declare const SUPPORTED_DOMAIN_SUFFIX: string[];
6
+ export declare const CHAINS_SUPPORTED_DOMAIN: string[];
7
+ export declare function resolveAzeroDomainToAddress(domain: string, chain: string, api: ApiPromise): Promise<string | undefined>;
8
+ export declare function resolveAzeroAddressToDomain(address: string, chain: string, api: ApiPromise): Promise<string | undefined>;
9
+ export declare function isAzeroDomain(input: string): boolean;
@@ -0,0 +1,40 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { resolveAddressToDomain, resolveDomainToAddress, SupportedChainId } from '@azns/resolver-core';
5
+ export const ENS_SUFFIX = '.eth';
6
+ export const TZERO_ID_SUFFIX = '.tzero';
7
+ export const AZERO_ID_SUFFIX = '.azero';
8
+ export const SUPPORTED_DOMAIN_SUFFIX = [ENS_SUFFIX, TZERO_ID_SUFFIX, AZERO_ID_SUFFIX];
9
+ export const CHAINS_SUPPORTED_DOMAIN = ['aleph', 'alephTest'];
10
+ export async function resolveAzeroDomainToAddress(domain, chain, api) {
11
+ let chainId = SupportedChainId.AlephZero;
12
+ if (chain === 'alephTest') {
13
+ chainId = SupportedChainId.AlephZeroTestnet;
14
+ }
15
+ const primaryDomains = await resolveDomainToAddress(domain, {
16
+ chainId,
17
+ customApi: api
18
+ });
19
+ if (primaryDomains.error) {
20
+ console.debug(primaryDomains.error);
21
+ }
22
+ return (primaryDomains === null || primaryDomains === void 0 ? void 0 : primaryDomains.address) || undefined;
23
+ }
24
+ export async function resolveAzeroAddressToDomain(address, chain, api) {
25
+ let chainId = SupportedChainId.AlephZero;
26
+ if (chain === 'alephTest') {
27
+ chainId = SupportedChainId.AlephZeroTestnet;
28
+ }
29
+ const primaryDomains = await resolveAddressToDomain(address, {
30
+ chainId,
31
+ customApi: api
32
+ });
33
+ if (primaryDomains.error) {
34
+ console.debug(primaryDomains.error);
35
+ }
36
+ return (primaryDomains === null || primaryDomains === void 0 ? void 0 : primaryDomains.primaryDomain) || undefined;
37
+ }
38
+ export function isAzeroDomain(input) {
39
+ return input.includes(AZERO_ID_SUFFIX) || input.includes(TZERO_ID_SUFFIX);
40
+ }
@@ -68,23 +68,33 @@ export function validateRelayBondingCondition(chainInfo, amount, selectedValidat
68
68
  }
69
69
  export function subscribeRelayChainStakingMetadata(chainInfo, substrateApi, callback) {
70
70
  return substrateApi.api.query.staking.currentEra(async _currentEra => {
71
- var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6;
71
+ var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6, _substrateApi$api$que7;
72
72
  const currentEra = _currentEra.toString();
73
73
  const maxNominations = substrateApi.api.consts.staking.maxNominations.toString();
74
74
  const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
75
75
  const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
76
- const [_minNominatorBond, _minPoolJoin, _minimumActiveStake] = await Promise.all([substrateApi.api.query.staking.minNominatorBond(), (_substrateApi$api$que = substrateApi.api.query) === null || _substrateApi$api$que === void 0 ? void 0 : (_substrateApi$api$que2 = _substrateApi$api$que.nominationPools) === null || _substrateApi$api$que2 === void 0 ? void 0 : _substrateApi$api$que2.minJoinBond(), ((_substrateApi$api$que3 = substrateApi.api.query) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.staking) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.minimumActiveStake) && ((_substrateApi$api$que5 = substrateApi.api.query) === null || _substrateApi$api$que5 === void 0 ? void 0 : (_substrateApi$api$que6 = _substrateApi$api$que5.staking) === null || _substrateApi$api$que6 === void 0 ? void 0 : _substrateApi$api$que6.minimumActiveStake())]);
76
+ const [_totalEraStake, _totalIssuance, _auctionCounter, _minNominatorBond, _minPoolJoin, _minimumActiveStake] = await Promise.all([substrateApi.api.query.staking.erasTotalStake(parseInt(currentEra)), substrateApi.api.query.balances.totalIssuance(), (_substrateApi$api$que = substrateApi.api.query.auctions) === null || _substrateApi$api$que === void 0 ? void 0 : _substrateApi$api$que.auctionCounter(), substrateApi.api.query.staking.minNominatorBond(), (_substrateApi$api$que2 = substrateApi.api.query) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.nominationPools) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.minJoinBond(), ((_substrateApi$api$que4 = substrateApi.api.query) === null || _substrateApi$api$que4 === void 0 ? void 0 : (_substrateApi$api$que5 = _substrateApi$api$que4.staking) === null || _substrateApi$api$que5 === void 0 ? void 0 : _substrateApi$api$que5.minimumActiveStake) && ((_substrateApi$api$que6 = substrateApi.api.query) === null || _substrateApi$api$que6 === void 0 ? void 0 : (_substrateApi$api$que7 = _substrateApi$api$que6.staking) === null || _substrateApi$api$que7 === void 0 ? void 0 : _substrateApi$api$que7.minimumActiveStake())]);
77
77
  const minActiveStake = (_minimumActiveStake === null || _minimumActiveStake === void 0 ? void 0 : _minimumActiveStake.toString()) || '0';
78
78
  const minNominatorBond = _minNominatorBond.toString();
79
79
  const bnMinActiveStake = new BN(minActiveStake);
80
80
  const bnMinNominatorBond = new BN(minNominatorBond);
81
81
  const minStake = bnMinActiveStake.gt(bnMinNominatorBond) ? bnMinActiveStake : bnMinNominatorBond;
82
+ const rawTotalEraStake = _totalEraStake.toString();
83
+ const rawTotalIssuance = _totalIssuance.toString();
84
+ const numAuctions = _auctionCounter ? _auctionCounter.toHuman() : 0;
85
+ const bnTotalEraStake = new BN(rawTotalEraStake);
86
+ const bnTotalIssuance = new BN(rawTotalIssuance);
87
+ const inflation = calculateInflation(bnTotalEraStake, bnTotalIssuance, numAuctions, chainInfo.slug);
88
+ const expectedReturn = calculateChainStakedReturn(inflation, bnTotalEraStake, bnTotalIssuance, chainInfo.slug);
82
89
  const minPoolJoin = (_minPoolJoin === null || _minPoolJoin === void 0 ? void 0 : _minPoolJoin.toString()) || undefined;
83
90
  const unlockingPeriod = parseInt(unlockingEras) * (_STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _STAKING_ERA_LENGTH_MAP.default); // in hours
84
91
 
85
92
  callback(chainInfo.slug, {
86
93
  chain: chainInfo.slug,
87
94
  type: StakingType.NOMINATED,
95
+ expectedReturn: !_STAKING_CHAIN_GROUP.ternoa.includes(chainInfo.slug) ? expectedReturn : undefined,
96
+ // in %, annually
97
+ inflation,
88
98
  era: parseInt(currentEra),
89
99
  minStake: minStake.toString(),
90
100
  maxValidatorPerNominator: parseInt(maxNominations),
@@ -207,5 +207,7 @@ export default class KoniExtension {
207
207
  private subscribeMantaPayConfig;
208
208
  private subscribeMantaPaySyncState;
209
209
  private findRawMetadata;
210
+ private resolveDomainByAddress;
211
+ private resolveAddressByDomain;
210
212
  handle<TMessageType extends MessageTypes>(id: string, type: TMessageType, request: RequestTypes[TMessageType], port: chrome.runtime.Port): Promise<ResponseType<TMessageType>>;
211
213
  }
@@ -11,6 +11,7 @@ import { AccountExternalErrorCode, BasicTxErrorType, BasicTxWarningCode, ChainTy
11
11
  import { TransactionWarning } from '@subwallet/extension-base/background/warnings/TransactionWarning';
12
12
  import { ALL_ACCOUNT_KEY, ALL_GENESIS_HASH, XCM_MIN_AMOUNT_RATIO } from '@subwallet/extension-base/constants';
13
13
  import { ALLOWED_PATH } from '@subwallet/extension-base/defaults';
14
+ import { resolveAzeroAddressToDomain, resolveAzeroDomainToAddress } from '@subwallet/extension-base/koni/api/dotsama/domain';
14
15
  import { parseSubstrateTransaction } from '@subwallet/extension-base/koni/api/dotsama/parseTransaction';
15
16
  import { checkReferenceCount, checkSupportTransfer, createTransferExtrinsic } from '@subwallet/extension-base/koni/api/dotsama/transfer';
16
17
  import { getNftTransferExtrinsic, isRecipientSelf } from '@subwallet/extension-base/koni/api/nft/transfer';
@@ -3395,6 +3396,14 @@ export default class KoniExtension {
3395
3396
  specVersion
3396
3397
  };
3397
3398
  }
3399
+ async resolveDomainByAddress(request) {
3400
+ const chainApi = this.#koniState.getSubstrateApi(request.chain);
3401
+ return await resolveAzeroDomainToAddress(request.domain, request.chain, chainApi.api);
3402
+ }
3403
+ async resolveAddressByDomain(request) {
3404
+ const chainApi = this.#koniState.getSubstrateApi(request.chain);
3405
+ return await resolveAzeroAddressToDomain(request.address, request.chain, chainApi.api);
3406
+ }
3398
3407
 
3399
3408
  // --------------------------------------------------------------
3400
3409
  // eslint-disable-next-line @typescript-eslint/require-await
@@ -3602,6 +3611,10 @@ export default class KoniExtension {
3602
3611
  // Subscribe address
3603
3612
  case 'pri(accounts.subscribeAddresses)':
3604
3613
  return this.subscribeAddresses(id, port);
3614
+ case 'pri(accounts.resolveDomainToAddress)':
3615
+ return await this.resolveDomainByAddress(request);
3616
+ case 'pri(accounts.resolveAddressToDomain)':
3617
+ return await this.resolveAddressByDomain(request);
3605
3618
 
3606
3619
  // ChainService
3607
3620
  case 'pri(chainService.subscribeChainInfoMap)':
@@ -183,6 +183,7 @@ export default class KoniState {
183
183
  getActiveChainInfoMap(): Record<string, _ChainInfo>;
184
184
  upsertChainInfo(data: _NetworkUpsertParams): Promise<boolean>;
185
185
  removeCustomChain(networkKey: string): boolean;
186
+ forceRemoveChain(networkKey: string): void;
186
187
  private getDefaultNetworkKeys;
187
188
  disableChain(chainSlug: string): Promise<boolean>;
188
189
  enableChain(chainSlug: string, enableTokens?: boolean): Promise<boolean>;
@@ -848,6 +848,9 @@ export default class KoniState {
848
848
  removeCustomChain(networkKey) {
849
849
  return this.chainService.removeCustomChain(networkKey);
850
850
  }
851
+ forceRemoveChain(networkKey) {
852
+ this.chainService.forceRemoveChain(networkKey);
853
+ }
851
854
 
852
855
  // TODO: avoids turning off chains related to ledger account
853
856
  getDefaultNetworkKeys = () => {
@@ -126,7 +126,9 @@ export class KoniSubscription {
126
126
  maxWithdrawalRequestPerValidator: rs.maxWithdrawalRequestPerValidator,
127
127
  // by default
128
128
  allowCancelUnstaking: rs.allowCancelUnstaking,
129
- unstakingPeriod: rs.unstakingPeriod
129
+ unstakingPeriod: rs.unstakingPeriod,
130
+ expectedReturn: rs.expectedReturn,
131
+ inflation: rs.inflation
130
132
  });
131
133
  });
132
134
  if (onlyRunOnFirstTime) {
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.1.7-0",
20
+ "version": "1.1.8-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -169,6 +169,11 @@
169
169
  "require": "./cjs/koni/api/dotsama/crowdloan.js",
170
170
  "default": "./koni/api/dotsama/crowdloan.js"
171
171
  },
172
+ "./koni/api/dotsama/domain": {
173
+ "types": "./koni/api/dotsama/domain.d.ts",
174
+ "require": "./cjs/koni/api/dotsama/domain.js",
175
+ "default": "./koni/api/dotsama/domain.js"
176
+ },
172
177
  "./koni/api/dotsama/parseTransaction": {
173
178
  "types": "./koni/api/dotsama/parseTransaction.d.ts",
174
179
  "require": "./cjs/koni/api/dotsama/parseTransaction.js",
@@ -650,6 +655,11 @@
650
655
  "require": "./cjs/services/migration-service/scripts/ClearOldStorage.js",
651
656
  "default": "./services/migration-service/scripts/ClearOldStorage.js"
652
657
  },
658
+ "./services/migration-service/scripts/DeleteChain": {
659
+ "types": "./services/migration-service/scripts/DeleteChain.d.ts",
660
+ "require": "./cjs/services/migration-service/scripts/DeleteChain.js",
661
+ "default": "./services/migration-service/scripts/DeleteChain.js"
662
+ },
653
663
  "./services/migration-service/scripts/MigrateAuthUrls": {
654
664
  "types": "./services/migration-service/scripts/MigrateAuthUrls.d.ts",
655
665
  "require": "./cjs/services/migration-service/scripts/MigrateAuthUrls.js",
@@ -1164,6 +1174,7 @@
1164
1174
  "dependencies": {
1165
1175
  "@acala-network/api": "^5.0.2",
1166
1176
  "@apollo/client": "^3.7.14",
1177
+ "@azns/resolver-core": "^1.2.0",
1167
1178
  "@equilab/api": "^1.14.25",
1168
1179
  "@ethereumjs/common": "^2.6.5",
1169
1180
  "@ethereumjs/tx": "^4.0.2",
@@ -1188,11 +1199,11 @@
1188
1199
  "@reduxjs/toolkit": "^1.9.1",
1189
1200
  "@sora-substrate/type-definitions": "^1.17.7",
1190
1201
  "@substrate/connect": "^0.7.26",
1191
- "@subwallet/chain-list": "0.2.9",
1192
- "@subwallet/extension-base": "^1.1.7-0",
1193
- "@subwallet/extension-chains": "^1.1.7-0",
1194
- "@subwallet/extension-dapp": "^1.1.7-0",
1195
- "@subwallet/extension-inject": "^1.1.7-0",
1202
+ "@subwallet/chain-list": "0.2.10",
1203
+ "@subwallet/extension-base": "^1.1.8-0",
1204
+ "@subwallet/extension-chains": "^1.1.8-0",
1205
+ "@subwallet/extension-dapp": "^1.1.8-0",
1206
+ "@subwallet/extension-inject": "^1.1.8-0",
1196
1207
  "@subwallet/keyring": "^0.0.10",
1197
1208
  "@subwallet/ui-keyring": "^0.0.10",
1198
1209
  "@walletconnect/sign-client": "^2.8.4",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.1.7-0'
10
+ version: '1.1.8-0'
11
11
  };
@@ -61,6 +61,7 @@ export declare class ChainService {
61
61
  getXcmEqualAssetByChain(destinationChainSlug: string, originTokenSlug: string): _ChainAsset | undefined;
62
62
  getAssetByChainAndType(chainSlug: string, assetTypes: _AssetType[]): Record<string, _ChainAsset>;
63
63
  getSmartContractNfts(): _ChainAsset[];
64
+ forceRemoveChain(slug: string): boolean;
64
65
  removeCustomChain(slug: string): boolean;
65
66
  resetChainInfoMap(excludedChains?: string[]): boolean;
66
67
  setChainConnectionStatus(slug: string, connectionStatus: _ChainConnectionStatus): void;
@@ -279,11 +279,29 @@ export class ChainService {
279
279
  }
280
280
 
281
281
  // Setter
282
- removeCustomChain(slug) {
282
+ forceRemoveChain(slug) {
283
283
  if (this.lockChainInfoMap) {
284
284
  return false;
285
285
  }
286
+ const chainInfoMap = this.getChainInfoMap();
287
+ const chainStateMap = this.getChainStateMap();
288
+ if (!(slug in chainInfoMap)) {
289
+ return false;
290
+ }
286
291
  this.lockChainInfoMap = true;
292
+ delete chainStateMap[slug];
293
+ delete chainInfoMap[slug];
294
+ this.deleteAssetsByChain(slug);
295
+ this.dbService.removeFromChainStore([slug]).catch(console.error);
296
+ this.updateChainSubscription();
297
+ this.lockChainInfoMap = false;
298
+ this.eventService.emit('chain.updateState', slug);
299
+ return true;
300
+ }
301
+ removeCustomChain(slug) {
302
+ if (this.lockChainInfoMap) {
303
+ return false;
304
+ }
287
305
  const chainInfoMap = this.getChainInfoMap();
288
306
  const chainStateMap = this.getChainStateMap();
289
307
  if (!(slug in chainInfoMap)) {
@@ -295,6 +313,7 @@ export class ChainService {
295
313
  if (chainStateMap[slug].active) {
296
314
  return false;
297
315
  }
316
+ this.lockChainInfoMap = true;
298
317
  delete chainStateMap[slug];
299
318
  delete chainInfoMap[slug];
300
319
  this.deleteAssetsByChain(slug);
@@ -412,7 +431,6 @@ export class ChainService {
412
431
 
413
432
  // Avoid unnecessary update in case disable chain
414
433
  if (currentStatus !== status) {
415
- console.log(chainInfo.name, currentStatus, status);
416
434
  this.setChainConnectionStatus(chainInfo.slug, status);
417
435
  this.updateChainStateMapSubscription();
418
436
  }
@@ -0,0 +1,4 @@
1
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
2
+ export default class DeleteChain extends BaseMigrationJob {
3
+ run(): Promise<void>;
4
+ }
@@ -0,0 +1,13 @@
1
+ // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import BaseMigrationJob from '@subwallet/extension-base/services/migration-service/Base';
5
+ export default class DeleteChain extends BaseMigrationJob {
6
+ // eslint-disable-next-line @typescript-eslint/require-await
7
+ async run() {
8
+ ['snow', 'snow_evm', 'arctic_testnet'].forEach(chain => {
9
+ this.state.forceRemoveChain(chain);
10
+ });
11
+ console.log('done job');
12
+ }
13
+ }
@@ -1,6 +1,7 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
+ import DeleteChain from '@subwallet/extension-base/services/migration-service/scripts/DeleteChain';
4
5
  import AutoEnableChainsTokens from "./AutoEnableChainsTokens.js";
5
6
  import MigrateAuthUrls from "./MigrateAuthUrls.js";
6
7
  import MigrateAutoLock from "./MigrateAutoLock.js";
@@ -24,6 +25,7 @@ export default {
24
25
  '1.0.3-02': MigrateChainPatrol,
25
26
  '1.0.9-01': MigrateLedgerAccount,
26
27
  '1.0.12-02': MigrateEthProvider,
27
- '1.1.6-01': MigrateWalletReference
28
+ '1.1.6-01': MigrateWalletReference,
29
+ '1.1.7': DeleteChain
28
30
  // [`${EVERYTIME}-1`]: AutoEnableChainsTokens
29
31
  };
@@ -12,6 +12,9 @@ function getBlockExplorerAccountRoute(explorerLink) {
12
12
  if (explorerLink.includes('explorer.subspace.network')) {
13
13
  return 'accounts';
14
14
  }
15
+ if (explorerLink.includes('deeperscan.io')) {
16
+ return 'account';
17
+ }
15
18
  if (explorerLink.includes('subscan.io')) {
16
19
  return 'account';
17
20
  }
@@ -21,7 +24,7 @@ function getBlockExplorerTxRoute(chainInfo) {
21
24
  if (_isPureEvmChain(chainInfo)) {
22
25
  return 'tx';
23
26
  }
24
- if (['aventus'].includes(chainInfo.slug)) {
27
+ if (['aventus', 'deeper_network'].includes(chainInfo.slug)) {
25
28
  return 'transaction';
26
29
  }
27
30
  return 'extrinsic';
@@ -165,6 +165,7 @@ export default class WalletConnectService {
165
165
  }
166
166
  }
167
167
  await _classPrivateFieldLooseBase(this, _initClient)[_initClient]();
168
+ _classPrivateFieldLooseBase(this, _updateSessions)[_updateSessions]();
168
169
  }
169
170
  async disconnect(topic) {
170
171
  var _classPrivateFieldLoo13;