@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.
- package/cjs/core/substrate/nominationpools-pallet.js +2 -1
- package/cjs/koni/api/nft/config.js +9 -5
- package/cjs/koni/api/nft/index.js +9 -1
- package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
- package/cjs/koni/background/handlers/Extension.js +12 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/chain-service/constants.js +1 -0
- package/cjs/services/chain-service/health-check/constants/index.js +4 -4
- package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
- package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
- package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
- package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
- package/cjs/services/chain-service/index.js +30 -1
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
- package/cjs/services/price-service/coingecko.js +57 -32
- package/cjs/services/price-service/index.js +30 -11
- package/core/substrate/nominationpools-pallet.js +2 -1
- package/koni/api/nft/config.d.ts +1 -0
- package/koni/api/nft/config.js +3 -1
- package/koni/api/nft/index.js +9 -1
- package/koni/api/nft/unique_network_nft/index.js +12 -20
- package/koni/background/handlers/Extension.js +12 -0
- package/package.json +26 -6
- package/packageInfo.js +1 -1
- package/services/chain-service/constants.d.ts +1 -0
- package/services/chain-service/constants.js +1 -0
- package/services/chain-service/health-check/constants/index.js +4 -4
- package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
- package/services/chain-service/health-check/utils/asset-info.js +20 -4
- package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
- package/services/chain-service/health-check/utils/chain-info.js +20 -0
- package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
- package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
- package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
- package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
- package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
- package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
- package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
- package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
- package/services/chain-service/index.js +30 -1
- package/services/chain-service/types.d.ts +5 -0
- package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
- package/services/price-service/coingecko.js +54 -32
- 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
|
-
|
|
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
|
|
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 (
|
|
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 (
|
|
147
|
+
if (_environment.RuntimeInfo.protocol && _environment.RuntimeInfo.protocol.startsWith('http')) {
|
|
144
148
|
// This is for https
|
|
145
|
-
if (
|
|
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
|
|
26
|
-
const attName =
|
|
27
|
-
const attInfo =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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(
|
|
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);
|
package/cjs/packageInfo.js
CHANGED
|
@@ -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:
|
|
14
|
+
ethereum: 0,
|
|
15
15
|
polygon: 2,
|
|
16
|
-
shidenEvm:
|
|
17
|
-
shiden:
|
|
18
|
-
ajunaPolkadot:
|
|
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
|
|
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:
|
|
122
|
+
decimals: info.decimals,
|
|
124
123
|
minAmount: info.existentialDeposit.toString(),
|
|
125
|
-
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
|
+
}
|