@subwallet/extension-base 1.2.14-0 → 1.2.15-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 (46) hide show
  1. package/cjs/core/substrate/nominationpools-pallet.js +2 -1
  2. package/cjs/koni/api/nft/config.js +9 -5
  3. package/cjs/koni/api/nft/index.js +9 -1
  4. package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
  5. package/cjs/koni/background/handlers/Extension.js +12 -0
  6. package/cjs/packageInfo.js +1 -1
  7. package/cjs/services/chain-service/constants.js +1 -0
  8. package/cjs/services/chain-service/health-check/constants/index.js +4 -4
  9. package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
  10. package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
  11. package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
  12. package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
  13. package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
  14. package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
  15. package/cjs/services/chain-service/index.js +30 -1
  16. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
  17. package/cjs/services/price-service/coingecko.js +57 -32
  18. package/cjs/services/price-service/index.js +30 -11
  19. package/core/substrate/nominationpools-pallet.js +2 -1
  20. package/koni/api/nft/config.d.ts +1 -0
  21. package/koni/api/nft/config.js +3 -1
  22. package/koni/api/nft/index.js +9 -1
  23. package/koni/api/nft/unique_network_nft/index.js +12 -20
  24. package/koni/background/handlers/Extension.js +12 -0
  25. package/package.json +26 -6
  26. package/packageInfo.js +1 -1
  27. package/services/chain-service/constants.d.ts +1 -0
  28. package/services/chain-service/constants.js +1 -0
  29. package/services/chain-service/health-check/constants/index.js +4 -4
  30. package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
  31. package/services/chain-service/health-check/utils/asset-info.js +20 -4
  32. package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
  33. package/services/chain-service/health-check/utils/chain-info.js +20 -0
  34. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
  35. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
  36. package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
  37. package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
  38. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
  39. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
  40. package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
  41. package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
  42. package/services/chain-service/index.js +30 -1
  43. package/services/chain-service/types.d.ts +5 -0
  44. package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
  45. package/services/price-service/coingecko.js +54 -32
  46. package/services/price-service/index.js +29 -11
@@ -15,7 +15,8 @@ function _getActiveStakeInNominationPool(memberInfo) {
15
15
  return new _bignumber.default(memberInfo.points.toString());
16
16
  }
17
17
  function _getUnbondingStakeInNominationPool(memberInfo) {
18
- return new _bignumber.default(Object.values(memberInfo.unbondingEras).reduce((a, b) => a + b, 0));
18
+ const unbondingValues = Object.values(memberInfo.unbondingEras).map(unbonding => new _bignumber.default(unbonding));
19
+ return new _bignumber.default(Object.values(unbondingValues).reduce((a, b) => a.plus(b), new _bignumber.default(0)));
19
20
  }
20
21
  function _getTotalStakeInNominationPool(memberInfo) {
21
22
  return _getActiveStakeInNominationPool(memberInfo).plus(_getUnbondingStakeInNominationPool(memberInfo));
@@ -3,12 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_ENDPOINT = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.IPFS_ETH_ARAGON = exports.IPFS2_RMRK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = exports.BIT_AVATAR_API = void 0;
6
+ exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_ENDPOINT = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.IPFS_ETH_ARAGON = exports.IPFS2_RMRK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = exports.BIT_AVATAR_API = void 0;
7
7
  exports.getRandomIpfsGateway = getRandomIpfsGateway;
8
- var _utils = require("@subwallet/extension-base/utils");
8
+ var _environment = require("@subwallet/extension-base/utils/environment");
9
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
10
  // SPDX-License-Identifier: Apache-2.0
11
11
 
12
+ // do not change to shorten path, avoid circle import
13
+
12
14
  const SINGULAR_V1_ENDPOINT = 'https://singular.rmrk-api.xyz/api/account-rmrk1/';
13
15
  exports.SINGULAR_V1_ENDPOINT = SINGULAR_V1_ENDPOINT;
14
16
  const SINGULAR_V2_ENDPOINT = 'https://singular.rmrk-api.xyz/api/account/';
@@ -110,6 +112,8 @@ exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
110
112
  })(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
111
113
  const SUPPORTED_TRANSFER_EVM_CHAIN = [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonriver, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.astarEvm, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shiden, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shibuya];
112
114
  exports.SUPPORTED_TRANSFER_EVM_CHAIN = SUPPORTED_TRANSFER_EVM_CHAIN;
115
+ const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm'];
116
+ exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME;
113
117
  const TRANSFER_CHAIN_ID = {
114
118
  [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
115
119
  [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam]: 1284,
@@ -134,15 +138,15 @@ exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_C
134
138
  SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME["pioneer"] = "pioneer";
135
139
  })(SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = {}));
136
140
  const RANDOM_IPFS_GATEWAY_SETTING = [];
137
- if (_utils.isFirefox) {
141
+ if (_environment.isFirefox) {
138
142
  RANDOM_IPFS_GATEWAY_SETTING.push({
139
143
  provider: SUBWALLET_IPFS,
140
144
  weight: 5000
141
145
  });
142
146
  }
143
- if (_utils.RuntimeInfo.protocol && _utils.RuntimeInfo.protocol.startsWith('http')) {
147
+ if (_environment.RuntimeInfo.protocol && _environment.RuntimeInfo.protocol.startsWith('http')) {
144
148
  // This is for https
145
- if (_utils.RuntimeInfo.protocol.startsWith('https')) {
149
+ if (_environment.RuntimeInfo.protocol.startsWith('https')) {
146
150
  RANDOM_IPFS_GATEWAY_SETTING.push(
147
151
  // {
148
152
  // provider: IPFS_FLEEK,
@@ -25,7 +25,7 @@ var _assethub_nft = _interopRequireDefault(require("./assethub_nft"));
25
25
  // import UniqueNftApi from '@subwallet/extension-base/koni/api/nft/unique_nft';
26
26
 
27
27
  function createSubstrateNftApi(chain, substrateApi, addresses) {
28
- const [substrateAddresses] = (0, _utils2.categoryAddresses)(addresses);
28
+ const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
29
29
  if (_constants._NFT_CHAIN_GROUP.acala.includes(chain)) {
30
30
  return [new _acala_nft.AcalaNftApi(substrateApi, substrateAddresses, chain)];
31
31
  } else if (_constants._NFT_CHAIN_GROUP.karura.includes(chain)) {
@@ -38,6 +38,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
38
38
  return [new _assethub_unique.default(substrateApi, substrateAddresses, chain), new _assethub_nft.default(substrateApi, substrateAddresses, chain)];
39
39
  } else if (_constants._NFT_CHAIN_GROUP.unique_network.includes(chain)) {
40
40
  return [new _unique_network_nft.UniqueNftApi(chain, substrateAddresses)];
41
+ } else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(chain)) {
42
+ return [new _unique_network_nft.UniqueNftApi(chain, evmAddresses)];
41
43
  } else if (_constants._NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
42
44
  return [new _bit.BitCountryNftApi(substrateApi, substrateAddresses, chain)];
43
45
  } else if (_constants._NFT_CHAIN_GROUP.vara.includes(chain)) {
@@ -128,6 +130,12 @@ class NftHandler {
128
130
  }
129
131
  }
130
132
  }
133
+ if (chain === 'unique_evm') {
134
+ const handlers = createSubstrateNftApi(chain, null, evmAddresses);
135
+ if (handlers && !!handlers.length) {
136
+ this.handlers.push(...handlers);
137
+ }
138
+ }
131
139
  if ((0, _utils._isChainSupportWasmNft)(chainInfo)) {
132
140
  if (this.substrateApiMap[chain]) {
133
141
  const handler = createWasmNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.UniqueNftApi = void 0;
7
7
  var _config = require("@subwallet/extension-base/koni/api/nft/config");
8
8
  var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
9
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
9
10
  var _utils = require("@subwallet/extension-base/utils");
10
11
  var _utilCrypto = require("@polkadot/util-crypto");
11
12
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -21,23 +22,13 @@ class UniqueNftApi extends _nft.BaseNftApi {
21
22
  handleProperties(nft) {
22
23
  const propertiesMap = {};
23
24
  const attRecord = nft.attributes;
24
- if (attRecord) {
25
- for (const item in attRecord) {
26
- const attName = attRecord[item].name._;
27
- const attInfo = attRecord[item].value;
28
- if (Array.isArray(attInfo)) {
29
- const attList = [];
30
- for (const trait of attInfo) {
31
- attList.push(trait._);
32
- }
33
- propertiesMap[attName] = {
34
- value: attList
35
- };
36
- } else {
37
- propertiesMap[attName] = {
38
- value: attInfo._
39
- };
40
- }
25
+ if (attRecord.length) {
26
+ for (const item of attRecord) {
27
+ const attName = item.trait_type;
28
+ const attInfo = item.value;
29
+ propertiesMap[attName] = {
30
+ value: attInfo
31
+ };
41
32
  }
42
33
  }
43
34
  return propertiesMap;
@@ -84,8 +75,10 @@ class UniqueNftApi extends _nft.BaseNftApi {
84
75
  endpoint = _config.OPAL_SCAN_ENDPOINT;
85
76
  uniqueAddress = address;
86
77
  // Opal address: Normal address
78
+ } else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(this.chain)) {
79
+ endpoint = _config.UNIQUE_SCAN_ENDPOINT;
80
+ uniqueAddress = address.toLowerCase();
87
81
  }
88
-
89
82
  const resp = await fetch(endpoint, {
90
83
  method: 'post',
91
84
  headers: {
@@ -105,7 +98,6 @@ class UniqueNftApi extends _nft.BaseNftApi {
105
98
  if (nfts) {
106
99
  const collectionMap = {};
107
100
  for (const nft of nfts) {
108
- var _nft$image;
109
101
  // Handle case rendering image on Quartz Network (Temporary solution)
110
102
  if (this.chain === 'quartz' && nft.collection_id.toString() === '141') {
111
103
  continue;
@@ -120,7 +112,7 @@ class UniqueNftApi extends _nft.BaseNftApi {
120
112
  chain: this.chain,
121
113
  owner: address,
122
114
  name: nft.token_name,
123
- image: this.parseUrl((_nft$image = nft.image) === null || _nft$image === void 0 ? void 0 : _nft$image.fullUrl),
115
+ image: this.parseUrl(nft.image),
124
116
  description: nft.collection_description,
125
117
  collectionId: nft.collection_id.toString(),
126
118
  properties: propertiesMap
@@ -20,6 +20,7 @@ var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3
20
20
  var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
21
21
  var _domain = require("@subwallet/extension-base/koni/api/dotsama/domain");
22
22
  var _parseTransaction = require("@subwallet/extension-base/koni/api/dotsama/parseTransaction");
23
+ var _config = require("@subwallet/extension-base/koni/api/nft/config");
23
24
  var _transfer2 = require("@subwallet/extension-base/koni/api/nft/transfer");
24
25
  var _bonding = require("@subwallet/extension-base/koni/api/staking/bonding");
25
26
  var _paraChain = require("@subwallet/extension-base/koni/api/staking/bonding/paraChain");
@@ -1856,6 +1857,17 @@ class KoniExtension {
1856
1857
  } = inputData;
1857
1858
  const contractAddress = params.contractAddress;
1858
1859
  const tokenId = params.tokenId;
1860
+ if (_config.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME.includes(networkKey)) {
1861
+ return await this.#koniState.transactionService.handleTransaction({
1862
+ address: senderAddress,
1863
+ chain: networkKey,
1864
+ chainType: _KoniTypes.ChainType.EVM,
1865
+ data: inputData,
1866
+ extrinsicType: _KoniTypes.ExtrinsicType.SEND_NFT,
1867
+ transaction: null,
1868
+ url: _constants3.EXTENSION_REQUEST_URL
1869
+ });
1870
+ }
1859
1871
  const transaction = await (0, _smartContract.getERC721Transaction)(this.#koniState.getEvmApi(networkKey), networkKey, contractAddress, senderAddress, recipientAddress, tokenId);
1860
1872
 
1861
1873
  // this.addContact(recipientAddress);
@@ -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.2.14-0'
16
+ version: '1.2.15-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -61,6 +61,7 @@ const _NFT_CHAIN_GROUP = {
61
61
  statemine: ['statemine'],
62
62
  statemint: ['statemint'],
63
63
  unique_network: ['unique_network', 'quartz', 'opal'],
64
+ unique_evm: ['unique_evm'],
64
65
  bitcountry: ['bitcountry', 'pioneer', 'continuum_network'],
65
66
  vara: ['vara_network']
66
67
  };
@@ -11,11 +11,11 @@ var _bignumber = _interopRequireDefault(require("bignumber.js"));
11
11
 
12
12
  const chainProvider = {
13
13
  default: 0,
14
- ethereum: 1,
14
+ ethereum: 0,
15
15
  polygon: 2,
16
- shidenEvm: 2,
17
- shiden: 2,
18
- ajunaPolkadot: 1,
16
+ shidenEvm: 1,
17
+ shiden: 1,
18
+ ajunaPolkadot: 0,
19
19
  crabParachain: 1,
20
20
  astarEvm: 1,
21
21
  shibuya: 1,
@@ -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.getSubstrateNativeInfo = exports.getPsp22AssetInfo = exports.getLocalAssetInfo = exports.getEvmNativeInfo = exports.getErc20AssetInfo = exports.compareAsset = void 0;
7
+ exports.validateAsset = exports.getSubstrateNativeInfo = exports.getPsp22AssetInfo = exports.getLocalAssetInfo = exports.getEvmNativeInfo = exports.getErc20AssetInfo = exports.compareAsset = void 0;
8
8
  var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3");
9
9
  var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
10
10
  var _utils2 = require("@subwallet/extension-base/koni/api/contract-handler/wasm/utils");
@@ -116,13 +116,12 @@ const getByAssetManagerWithAssetIdPallet = async (asset, api) => {
116
116
  };
117
117
  };
118
118
  const getByAssetRegistryWithAssetIdPallet = async (asset, api) => {
119
- const [_info, _metadata] = await api.queryMulti([[api.query.assetRegistry.assets, (0, _utils3._getTokenOnChainAssetId)(asset)], [api.query.assetRegistry.assetMetadataMap, (0, _utils3._getTokenOnChainAssetId)(asset)]]);
119
+ const [_info] = await api.queryMulti([[api.query.assetRegistry.assets, (0, _utils3._getTokenOnChainAssetId)(asset)]]);
120
120
  const info = _info.toPrimitive();
121
- const metadata = _metadata.toPrimitive();
122
121
  return {
123
- decimals: metadata.decimals,
122
+ decimals: info.decimals,
124
123
  minAmount: info.existentialDeposit.toString(),
125
- symbol: metadata.symbol
124
+ symbol: info.symbol
126
125
  };
127
126
  };
128
127
  const getLocalAssetInfo = async (chain, asset, api) => {
@@ -277,4 +276,22 @@ const compareAsset = (assetInfo, asset, errors) => {
277
276
  errors.push(`Wrong decimals: current - ${(_asset$decimals = asset.decimals) !== null && _asset$decimals !== void 0 ? _asset$decimals : 'null'}, onChain - ${decimals}`);
278
277
  }
279
278
  };
280
- exports.compareAsset = compareAsset;
279
+ exports.compareAsset = compareAsset;
280
+ const validateAsset = (onchainAsset, chainlistAsset) => {
281
+ const {
282
+ decimals,
283
+ minAmount,
284
+ symbol
285
+ } = onchainAsset;
286
+ const chainlistMinAmount = chainlistAsset.minAmount || '0';
287
+ const chainlistDecimals = chainlistAsset.decimals || 0;
288
+ const chainlistSymbol = chainlistAsset.symbol;
289
+ console.log(`[i] minAmount: current - ${chainlistMinAmount}, onchain - ${minAmount}`);
290
+ console.log(`[i] decimals: current - ${chainlistDecimals}, onchain - ${decimals}`);
291
+ console.log(`[i] symbol: current - ${chainlistSymbol}, onchain - ${symbol}`);
292
+ const isValidSymbol = symbol === chainlistSymbol ? true : 'zk' + symbol === chainlistSymbol;
293
+ const isValidMinAmount = minAmount === chainlistMinAmount;
294
+ const isValidDecimal = decimals === chainlistDecimals;
295
+ return isValidSymbol && isValidMinAmount && isValidDecimal;
296
+ };
297
+ exports.validateAsset = validateAsset;
@@ -4,12 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.compareNativeAsset = void 0;
7
+ exports.compareNativeAsset = exports.checkSs58Prefix = exports.checkParachainId = exports.checkNativeAsset = void 0;
8
8
  var _constants = require("@subwallet/extension-base/services/chain-service/health-check/constants");
9
9
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
10
10
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
11
11
  // SPDX-License-Identifier: Apache-2.0
12
12
 
13
+ // function for old health-check chain
13
14
  const compareNativeAsset = (assetInfo, nativeAsset, errors) => {
14
15
  const {
15
16
  decimals: _decimals,
@@ -33,4 +34,26 @@ const compareNativeAsset = (assetInfo, nativeAsset, errors) => {
33
34
  errors.push(`Wrong decimals: current - ${_decimals}, onChain - ${decimals}`);
34
35
  }
35
36
  };
36
- exports.compareNativeAsset = compareNativeAsset;
37
+ exports.compareNativeAsset = compareNativeAsset;
38
+ const checkNativeAsset = (assetInfo, nativeAsset) => {
39
+ const {
40
+ decimals: _decimals,
41
+ existentialDeposit: _minAmount,
42
+ symbol: _symbol
43
+ } = nativeAsset;
44
+ const {
45
+ decimals,
46
+ minAmount,
47
+ symbol
48
+ } = assetInfo;
49
+ return minAmount === _minAmount && symbol === _symbol && decimals === _decimals;
50
+ };
51
+ exports.checkNativeAsset = checkNativeAsset;
52
+ const checkSs58Prefix = (onchainPrefix, chainlistPrefix) => {
53
+ return onchainPrefix === chainlistPrefix;
54
+ };
55
+ exports.checkSs58Prefix = checkSs58Prefix;
56
+ const checkParachainId = (onchainPrefix, chainlistPrefix) => {
57
+ return onchainPrefix === chainlistPrefix;
58
+ };
59
+ exports.checkParachainId = checkParachainId;
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.checkMultichainAssetValid = checkMultichainAssetValid;
7
+ exports.checkSwapAssetRef = checkSwapAssetRef;
8
+ exports.checkValidSupportStaking = checkValidSupportStaking;
9
+ exports.validateAssetGroupPrice = validateAssetGroupPrice;
10
+ exports.validateAssetsGroupPrice = validateAssetsGroupPrice;
11
+ exports.validateNativeLocalTransferMetadata = validateNativeLocalTransferMetadata;
12
+ exports.validateNotDuplicateSmartcontract = validateNotDuplicateSmartcontract;
13
+ exports.validateSwapAlterAsset = validateSwapAlterAsset;
14
+ exports.validateXcmMetadata = validateXcmMetadata;
15
+ var _chainList = require("@subwallet/chain-list");
16
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
17
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
18
+ // SPDX-License-Identifier: Apache-2.0
19
+
20
+ // Check priceId valid in group asset
21
+
22
+ function validateAssetGroupPrice(multiChainAsset, chainAsset) {
23
+ if (chainAsset.multiChainAsset !== multiChainAsset.slug) {
24
+ throw new Error(`Asset ${chainAsset.slug} are not in ${multiChainAsset.slug} group asset`);
25
+ }
26
+ return multiChainAsset.priceId === chainAsset.priceId;
27
+ }
28
+ function validateAssetsGroupPrice(chainAsset1, chainAsset2) {
29
+ if (chainAsset1.multiChainAsset !== chainAsset2.multiChainAsset) {
30
+ throw new Error(`Asset ${chainAsset1.slug} and asset ${chainAsset2.slug} are not in a group asset`);
31
+ }
32
+ return chainAsset1.priceId === chainAsset2.priceId;
33
+ }
34
+
35
+ // Check priceId valid in group asset
36
+
37
+ // Check multichainAsset valid
38
+
39
+ function checkMultichainAssetValid(chainAsset) {
40
+ if (!chainAsset.multiChainAsset) {
41
+ return true;
42
+ }
43
+ return Object.keys(_chainList.MultiChainAssetMap).includes(chainAsset.multiChainAsset);
44
+ }
45
+
46
+ // Check multichainAsset valid
47
+
48
+ // Check slug asset ref
49
+
50
+ function checkSwapAssetRef(slug, assetRef) {
51
+ return slug === `${assetRef.srcAsset}___${assetRef.destAsset}`;
52
+ }
53
+
54
+ // Check slug asset ref
55
+
56
+ // Check duplicate smartcontract
57
+
58
+ function validateNotDuplicateSmartcontract(chainAsset) {
59
+ if (!['ERC20', 'ERC721', 'PSP22', 'PSP34', 'GRC20', 'GRC721'].includes(chainAsset.assetType)) {
60
+ throw new Error(`${chainAsset.slug} is not smart contract asset`);
61
+ }
62
+ const slug = chainAsset.slug;
63
+ const isDuplicate = Object.entries(_chainList.ChainAssetMap).some(_ref => {
64
+ var _chainAsset$metadata, _tokenInfo$metadata;
65
+ let [key, tokenInfo] = _ref;
66
+ return slug !== key && (chainAsset === null || chainAsset === void 0 ? void 0 : (_chainAsset$metadata = chainAsset.metadata) === null || _chainAsset$metadata === void 0 ? void 0 : _chainAsset$metadata.contractAddress) === (tokenInfo === null || tokenInfo === void 0 ? void 0 : (_tokenInfo$metadata = tokenInfo.metadata) === null || _tokenInfo$metadata === void 0 ? void 0 : _tokenInfo$metadata.contractAddress);
67
+ });
68
+ return !isDuplicate;
69
+ }
70
+
71
+ // Check duplicate smartcontract
72
+
73
+ // ---------------------
74
+
75
+ // TRANSFER
76
+
77
+ function validateNativeLocalTransferMetadata(chainAsset) {
78
+ if (!chainAsset.metadata) {
79
+ // recheck this
80
+ throw new Error(`Asset ${chainAsset.slug} is lack of metadata`);
81
+ }
82
+ const moonbeamGroup = ['moonbeam, moonbase, moonriver'];
83
+ const onChainInfoLocalGroup = [_constants._TRANSFER_CHAIN_GROUP.centrifuge, ..._constants._TRANSFER_CHAIN_GROUP.bitcountry, ..._constants._TRANSFER_CHAIN_GROUP.acala, ..._constants._TRANSFER_CHAIN_GROUP.kintsugi, 'pendulum', 'amplitude'];
84
+ const onChainInfoNativeGroup = [_constants._TRANSFER_CHAIN_GROUP.centrifuge, ..._constants._TRANSFER_CHAIN_GROUP.acala, ..._constants._TRANSFER_CHAIN_GROUP.kintsugi];
85
+ const assetIdLocalGroup = [..._constants._TRANSFER_CHAIN_GROUP.statemine, ..._constants._TRANSFER_CHAIN_GROUP.genshiro, ...moonbeamGroup, 'hydradx'];
86
+ const assetIdNativeGroup = [..._constants._TRANSFER_CHAIN_GROUP.sora_substrate, 'hydradx'];
87
+ const chain = chainAsset.originChain;
88
+ const isLocal = chainAsset.assetType === 'LOCAL';
89
+ const isNative = chainAsset.assetType === 'NATIVE';
90
+ if (isLocal && onChainInfoLocalGroup.includes(chain)) {
91
+ return !!chainAsset.metadata.onChainInfo;
92
+ }
93
+ if (isNative && onChainInfoNativeGroup.includes(chain)) {
94
+ return !!chainAsset.metadata.onChainInfo;
95
+ }
96
+ if (isLocal && assetIdLocalGroup.includes(chain)) {
97
+ return !!chainAsset.metadata.assetId;
98
+ }
99
+ if (isNative && assetIdNativeGroup.includes(chain)) {
100
+ return !!chainAsset.metadata.assetId;
101
+ }
102
+ throw new Error(`${chainAsset.slug} is not local or native asset`);
103
+ }
104
+
105
+ // TRANSFER
106
+
107
+ // SWAP
108
+
109
+ function validateSwapAlterAsset(assetRef) {
110
+ var _assetRef$metadata;
111
+ if (assetRef.path !== 'SWAP') {
112
+ throw new Error(`${assetRef.srcAsset}___${assetRef.destAsset} is not SWAP`);
113
+ }
114
+ const srcAsset = assetRef.srcAsset;
115
+ const alterAsset = (_assetRef$metadata = assetRef.metadata) === null || _assetRef$metadata === void 0 ? void 0 : _assetRef$metadata.alternativeAsset;
116
+ if (!alterAsset) {
117
+ throw new Error(`${assetRef.srcAsset}___${assetRef.destAsset} does not has alternativeAsset`);
118
+ }
119
+ if (!_chainList.ChainAssetMap[srcAsset] || !_chainList.ChainAssetMap[alterAsset]) {
120
+ throw new Error(`${srcAsset} or ${alterAsset} do not exist`);
121
+ }
122
+ return _chainList.ChainAssetMap[srcAsset].multiChainAsset === _chainList.ChainAssetMap[alterAsset].multiChainAsset;
123
+ }
124
+
125
+ // SWAP
126
+
127
+ // XCM
128
+
129
+ function validateXcmMetadata(assetRef) {
130
+ var _ChainAssetMap$srcAss, _ChainAssetMap$destAs;
131
+ if (assetRef.path !== 'XCM') {
132
+ throw new Error(`${assetRef.srcAsset}___${assetRef.destAsset} is not XCM`);
133
+ }
134
+ const srcAsset = assetRef.srcAsset;
135
+ const destAsset = assetRef.destAsset;
136
+ if (!_chainList.ChainAssetMap[srcAsset] || !_chainList.ChainAssetMap[destAsset]) {
137
+ throw new Error(`${srcAsset} or ${destAsset} do not exist`);
138
+ }
139
+ return ((_ChainAssetMap$srcAss = _chainList.ChainAssetMap[srcAsset].metadata) === null || _ChainAssetMap$srcAss === void 0 ? void 0 : _ChainAssetMap$srcAss.multilocation) && ((_ChainAssetMap$destAs = _chainList.ChainAssetMap[destAsset].metadata) === null || _ChainAssetMap$destAs === void 0 ? void 0 : _ChainAssetMap$destAs.multilocation) || false;
140
+ }
141
+
142
+ // XCM
143
+
144
+ // EARNING
145
+
146
+ // @ts-ignore
147
+ function checkValidSupportStaking(chainInfo) {
148
+ if (!chainInfo.substrateInfo) {
149
+ throw new Error(`chain ${chainInfo.slug} is not substrate chain`);
150
+ }
151
+ if (!chainInfo.substrateInfo.supportStaking) {
152
+ return true;
153
+ }
154
+
155
+ // todo: check has related pallet staking
156
+ }
157
+
158
+ // todo: check alternativeAsset
159
+
160
+ // EARNING
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.validateAssetSlug = validateAssetSlug;
7
+ exports.validateBrigeToken = validateBrigeToken;
8
+ var _types = require("@subwallet/chain-list/types");
9
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
10
+ // SPDX-License-Identifier: Apache-2.0
11
+
12
+ function validateAssetSlug(chainAsset) {
13
+ const slug = chainAsset.slug;
14
+ const originChain = chainAsset.originChain;
15
+ const assetType = chainAsset.assetType;
16
+ const symbol = chainAsset.symbol;
17
+ if ([_types._AssetType.LOCAL, _types._AssetType.NATIVE, _types._AssetType.BRC20].includes(assetType)) {
18
+ return slug === `${originChain}-${assetType}-${symbol}`;
19
+ }
20
+ if ([_types._AssetType.RUNE].includes(assetType)) {
21
+ var _chainAsset$metadata;
22
+ const runeId = (_chainAsset$metadata = chainAsset.metadata) === null || _chainAsset$metadata === void 0 ? void 0 : _chainAsset$metadata.runeId;
23
+ if (!runeId) {
24
+ throw new Error(`${slug} is ${assetType} but lack of runeId metadata`);
25
+ }
26
+ return slug === `${originChain}-${assetType}-${symbol}-${runeId}`;
27
+ }
28
+ if ([_types._AssetType.ERC20, _types._AssetType.ERC721, _types._AssetType.PSP22, _types._AssetType.PSP34, _types._AssetType.GRC20, _types._AssetType.GRC721].includes(assetType)) {
29
+ var _chainAsset$metadata2;
30
+ const contractAddress = (_chainAsset$metadata2 = chainAsset.metadata) === null || _chainAsset$metadata2 === void 0 ? void 0 : _chainAsset$metadata2.contractAddress;
31
+ if (!contractAddress) {
32
+ throw new Error(`${slug} is ${assetType} but lack of contractAddress metadata`);
33
+ }
34
+ return slug === `${originChain}-${assetType}-${symbol}-${contractAddress}`;
35
+ }
36
+ throw new Error(`${slug} has unknown token type ${assetType}`);
37
+ }
38
+ function validateBrigeToken(chainAsset) {
39
+ var _chainAsset$metadata3, _chainAsset$metadata4;
40
+ const isBridged = (_chainAsset$metadata3 = chainAsset.metadata) === null || _chainAsset$metadata3 === void 0 ? void 0 : _chainAsset$metadata3.isBridged;
41
+ if (!isBridged) {
42
+ throw new Error(`${chainAsset.slug} is not bridged token`);
43
+ }
44
+ return !!((_chainAsset$metadata4 = chainAsset.metadata) !== null && _chainAsset$metadata4 !== void 0 && _chainAsset$metadata4.onChainInfo);
45
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.validateAssetTypeSupportByChain = validateAssetTypeSupportByChain;
7
+ exports.validateChainDisableEvmTransfer = validateChainDisableEvmTransfer;
8
+ exports.validateNativeInfoByChain = validateNativeInfoByChain;
9
+ exports.validateTokenHasValueByChain = validateTokenHasValueByChain;
10
+ var _chainList = require("@subwallet/chain-list");
11
+ var _types = require("@subwallet/chain-list/types");
12
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
13
+ // SPDX-License-Identifier: Apache-2.0
14
+
15
+ function validateTokenHasValueByChain(chainAsset) {
16
+ const chainInfo = _chainList.ChainInfoMap[chainAsset.originChain];
17
+ const isTestnet = chainInfo && chainInfo.isTestnet;
18
+ if (!chainInfo) {
19
+ throw new Error(`${chainAsset.originChain} is not existed`);
20
+ }
21
+ return isTestnet !== chainAsset.hasValue; // todo: also check multichainAsset hasValue if has.
22
+ }
23
+
24
+ function validateNativeInfoByChain(chainAsset) {
25
+ var _chainInfo$evmInfo, _chainInfo$substrateI, _chainInfo$bitcoinInf, _chainInfo$evmInfo2, _chainInfo$substrateI2, _chainInfo$bitcoinInf2, _chainInfo$evmInfo3, _chainInfo$substrateI3, _chainInfo$bitcoinInf3;
26
+ const chainInfo = _chainList.ChainInfoMap[chainAsset.originChain];
27
+ if (!chainInfo) {
28
+ throw new Error(`${chainAsset.originChain} is not existed`);
29
+ }
30
+ const nativeSymbol = chainInfo !== null && chainInfo !== void 0 && chainInfo.evmInfo ? chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$evmInfo = chainInfo.evmInfo) === null || _chainInfo$evmInfo === void 0 ? void 0 : _chainInfo$evmInfo.symbol : chainInfo !== null && chainInfo !== void 0 && chainInfo.substrateInfo ? chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI = chainInfo.substrateInfo) === null || _chainInfo$substrateI === void 0 ? void 0 : _chainInfo$substrateI.symbol : chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$bitcoinInf = chainInfo.bitcoinInfo) === null || _chainInfo$bitcoinInf === void 0 ? void 0 : _chainInfo$bitcoinInf.symbol;
31
+ const nativeDecimal = chainInfo !== null && chainInfo !== void 0 && chainInfo.evmInfo ? chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$evmInfo2 = chainInfo.evmInfo) === null || _chainInfo$evmInfo2 === void 0 ? void 0 : _chainInfo$evmInfo2.decimals : chainInfo !== null && chainInfo !== void 0 && chainInfo.substrateInfo ? chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI2 = chainInfo.substrateInfo) === null || _chainInfo$substrateI2 === void 0 ? void 0 : _chainInfo$substrateI2.decimals : chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$bitcoinInf2 = chainInfo.bitcoinInfo) === null || _chainInfo$bitcoinInf2 === void 0 ? void 0 : _chainInfo$bitcoinInf2.decimals;
32
+ const nativeED = chainInfo !== null && chainInfo !== void 0 && chainInfo.evmInfo ? chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$evmInfo3 = chainInfo.evmInfo) === null || _chainInfo$evmInfo3 === void 0 ? void 0 : _chainInfo$evmInfo3.existentialDeposit : chainInfo !== null && chainInfo !== void 0 && chainInfo.substrateInfo ? chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$substrateI3 = chainInfo.substrateInfo) === null || _chainInfo$substrateI3 === void 0 ? void 0 : _chainInfo$substrateI3.existentialDeposit : chainInfo === null || chainInfo === void 0 ? void 0 : (_chainInfo$bitcoinInf3 = chainInfo.bitcoinInfo) === null || _chainInfo$bitcoinInf3 === void 0 ? void 0 : _chainInfo$bitcoinInf3.existentialDeposit;
33
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
34
+ const nativeTokenSlug = `${chainInfo.slug}-NATIVE-${nativeSymbol}`;
35
+ return nativeSymbol === chainAsset.symbol && nativeDecimal === chainAsset.decimals && nativeED === chainAsset.minAmount && nativeTokenSlug === chainAsset.slug;
36
+ }
37
+ function validateAssetTypeSupportByChain(chainAsset) {
38
+ const chainInfo = _chainList.ChainInfoMap[chainAsset.originChain];
39
+ if (!chainInfo) {
40
+ throw new Error(`${chainAsset.originChain} is not existed`);
41
+ }
42
+ const bitcoinSupportAssetTypes = [_types._AssetType.NATIVE, _types._AssetType.RUNE, _types._AssetType.BRC20];
43
+ const evmSupportAssetTypes = [_types._AssetType.NATIVE, _types._AssetType.ERC20, _types._AssetType.ERC721];
44
+ const substrateSupportAssetTypes = [_types._AssetType.NATIVE, _types._AssetType.LOCAL, _types._AssetType.PSP22, _types._AssetType.PSP34, _types._AssetType.GRC20, _types._AssetType.GRC721];
45
+
46
+ // recheck chain with two types.
47
+ if (chainInfo.substrateInfo) {
48
+ return substrateSupportAssetTypes.includes(chainAsset.assetType);
49
+ }
50
+ if (chainInfo.evmInfo) {
51
+ return evmSupportAssetTypes.includes(chainAsset.assetType);
52
+ }
53
+ if (chainInfo.bitcoinInfo) {
54
+ return bitcoinSupportAssetTypes.includes(chainAsset.assetType);
55
+ }
56
+ throw new Error(`${chainAsset.originChain} does not has a suitable chainInfo`);
57
+ }
58
+ function validateChainDisableEvmTransfer(chainAsset) {
59
+ var _chainInfo$evmInfo4;
60
+ const chainInfo = _chainList.ChainInfoMap[chainAsset.originChain];
61
+ if (!chainInfo) {
62
+ throw new Error(`${chainAsset.originChain} is not existed`);
63
+ }
64
+ if (!chainInfo.evmInfo) {
65
+ throw new Error(`${chainAsset.originChain} is not Evm chain`);
66
+ }
67
+ const isChainMatchCondition = ((_chainInfo$evmInfo4 = chainInfo.evmInfo) === null || _chainInfo$evmInfo4 === void 0 ? void 0 : _chainInfo$evmInfo4.evmChainId) === -1 && chainInfo.substrateInfo;
68
+ if (isChainMatchCondition) {
69
+ var _chainAsset$metadata;
70
+ return (_chainAsset$metadata = chainAsset.metadata) === null || _chainAsset$metadata === void 0 ? void 0 : _chainAsset$metadata.disableEvmTransfer;
71
+ }
72
+ return false;
73
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.checkEvmSupportSmartContract = checkEvmSupportSmartContract;
7
+ exports.validateChainHasProvider = validateChainHasProvider;
8
+ exports.validateParaId = validateParaId;
9
+ var _types = require("@subwallet/chain-list/types");
10
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
11
+ // SPDX-License-Identifier: Apache-2.0
12
+
13
+ function validateChainHasProvider(chainInfo) {
14
+ const chainStatus = chainInfo.chainStatus;
15
+ const providers = Object.keys(chainInfo.providers);
16
+ const validChainLive = chainStatus === _types._ChainStatus.ACTIVE && providers.length > 0;
17
+ const chainNotLive = chainStatus !== _types._ChainStatus.ACTIVE;
18
+ return validChainLive || chainNotLive;
19
+ }
20
+ function validateParaId(chainInfo) {
21
+ if (!chainInfo.substrateInfo) {
22
+ throw new Error('Not substrate chain');
23
+ }
24
+ const paraId = chainInfo.substrateInfo.paraId;
25
+ const chainType = chainInfo.substrateInfo.chainType;
26
+ const relaySlug = chainInfo.substrateInfo.relaySlug;
27
+ return paraId ? chainType === _types._SubstrateChainType.PARACHAIN && !!relaySlug : chainType === _types._SubstrateChainType.RELAYCHAIN && !relaySlug;
28
+ }
29
+ function checkEvmSupportSmartContract(chainInfo) {
30
+ if (!chainInfo.evmInfo) {
31
+ throw new Error('Not Evm chain');
32
+ }
33
+ return !!chainInfo.evmInfo.supportSmartContract;
34
+ }