@subwallet/extension-base 1.1.38-1 → 1.1.40-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/background/KoniTypes.d.ts +1 -0
- package/background/types.d.ts +1 -0
- package/cjs/koni/api/nft/unique_network_nft/index.js +4 -0
- package/cjs/koni/background/handlers/Extension.js +48 -12
- package/cjs/koni/background/handlers/State.js +6 -5
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/balance.js +1 -1
- package/cjs/services/chain-service/health-check/constants/index.js +36 -0
- package/cjs/services/chain-service/health-check/utils/asset-info.js +282 -0
- package/cjs/services/chain-service/health-check/utils/chain-info.js +36 -0
- package/cjs/services/chain-service/health-check/utils/index.js +38 -0
- package/cjs/services/chain-service/health-check/utils/provider.js +186 -0
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +42 -26
- package/cjs/services/earning-service/service.js +9 -2
- package/cjs/services/transaction-service/index.js +6 -4
- package/cjs/utils/eth/mergeTransactionAndSignature.js +8 -3
- package/cjs/utils/index.js +6 -5
- package/cjs/utils/staticData/index.js +5 -5
- package/koni/api/nft/unique_network_nft/index.d.ts +1 -0
- package/koni/api/nft/unique_network_nft/index.js +5 -1
- package/koni/api/staking/bonding/utils.d.ts +0 -1
- package/koni/background/handlers/Extension.js +48 -12
- package/koni/background/handlers/State.js +2 -1
- package/package.json +41 -16
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/balance.js +1 -1
- package/services/chain-service/health-check/constants/index.d.ts +4 -0
- package/services/chain-service/health-check/constants/index.js +26 -0
- package/services/chain-service/health-check/utils/asset-info.d.ts +14 -0
- package/services/chain-service/health-check/utils/asset-info.js +269 -0
- package/services/chain-service/health-check/utils/chain-info.d.ts +8 -0
- package/services/chain-service/health-check/utils/chain-info.js +28 -0
- package/services/chain-service/health-check/utils/index.d.ts +3 -0
- package/services/chain-service/health-check/utils/index.js +6 -0
- package/services/chain-service/health-check/utils/provider.d.ts +25 -0
- package/services/chain-service/health-check/utils/provider.js +172 -0
- package/services/earning-service/handlers/native-staking/relay-chain.d.ts +0 -1
- package/services/earning-service/handlers/native-staking/relay-chain.js +42 -26
- package/services/earning-service/handlers/special.d.ts +0 -1
- package/services/earning-service/service.js +10 -3
- package/services/transaction-service/index.js +6 -4
- package/types/balance.d.ts +0 -1
- package/types/yield/info/pallet.d.ts +4 -1
- package/utils/eth/mergeTransactionAndSignature.js +8 -3
- package/utils/index.d.ts +1 -2
- package/utils/index.js +6 -5
- package/utils/staticData/buyServiceInfos.json +0 -1
- package/utils/staticData/buyTokenConfigs.json +0 -15
- package/utils/staticData/chains.json +192 -89
- package/utils/staticData/crowdloanFunds.json +433 -58
- package/utils/staticData/index.d.ts +1 -2
- package/utils/staticData/index.js +4 -3
- package/utils/staticData/marketingCampaigns.json +1 -298
- package/utils/staticData/termAndCondition.json +1 -1
package/background/types.d.ts
CHANGED
|
@@ -47,6 +47,7 @@ export interface AccountJson extends AbstractAddressJson {
|
|
|
47
47
|
}
|
|
48
48
|
export interface AddressJson extends AbstractAddressJson {
|
|
49
49
|
isRecent?: boolean;
|
|
50
|
+
recentChainSlugs?: string[];
|
|
50
51
|
}
|
|
51
52
|
export interface AccountsWithCurrentAddress {
|
|
52
53
|
accounts: AccountJson[];
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.UniqueNftApi = void 0;
|
|
8
8
|
var _config = require("@subwallet/extension-base/koni/api/nft/config");
|
|
9
9
|
var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
|
|
10
|
+
var _utils = require("@subwallet/extension-base/utils");
|
|
10
11
|
var _crossFetch = _interopRequireDefault(require("cross-fetch"));
|
|
11
12
|
var _utilCrypto = require("@polkadot/util-crypto");
|
|
12
13
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
@@ -16,6 +17,9 @@ class UniqueNftApi extends _nft.BaseNftApi {
|
|
|
16
17
|
constructor(chain, addresses) {
|
|
17
18
|
super(chain, undefined, addresses);
|
|
18
19
|
}
|
|
20
|
+
parseUrl(input) {
|
|
21
|
+
return (0, _utils.baseParseIPFSUrl)(input, _config.UNIQUE_IPFS_GATEWAY);
|
|
22
|
+
}
|
|
19
23
|
handleProperties(nft) {
|
|
20
24
|
const propertiesMap = {};
|
|
21
25
|
const attRecord = nft.attributes;
|
|
@@ -34,6 +34,7 @@ var _constants3 = require("@subwallet/extension-base/services/request-service/co
|
|
|
34
34
|
var _constants4 = require("@subwallet/extension-base/services/setting-service/constants");
|
|
35
35
|
var _constants5 = require("@subwallet/extension-base/services/wallet-connect-service/constants");
|
|
36
36
|
var _helpers2 = require("@subwallet/extension-base/services/wallet-connect-service/helpers");
|
|
37
|
+
var _stores = require("@subwallet/extension-base/stores");
|
|
37
38
|
var _types3 = require("@subwallet/extension-base/types");
|
|
38
39
|
var _utils3 = require("@subwallet/extension-base/utils");
|
|
39
40
|
var _eth = require("@subwallet/extension-base/utils/eth");
|
|
@@ -547,11 +548,16 @@ class KoniExtension {
|
|
|
547
548
|
}
|
|
548
549
|
subscribeAddresses(id, port) {
|
|
549
550
|
const _cb = (0, _subscriptions.createSubscription)(id, port);
|
|
551
|
+
let old = '';
|
|
550
552
|
const subscription = this.#koniState.keyringService.addressesSubject.subscribe(subjectInfo => {
|
|
551
553
|
const addresses = (0, _utils3.convertSubjectInfoToAddresses)(subjectInfo);
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
554
|
+
const _new = JSON.stringify(addresses);
|
|
555
|
+
if (old !== _new) {
|
|
556
|
+
_cb({
|
|
557
|
+
addresses: addresses
|
|
558
|
+
});
|
|
559
|
+
old = _new;
|
|
560
|
+
}
|
|
555
561
|
});
|
|
556
562
|
this.createUnsubscriptionHandle(id, subscription.unsubscribe);
|
|
557
563
|
port.onDisconnect.addListener(() => {
|
|
@@ -564,16 +570,42 @@ class KoniExtension {
|
|
|
564
570
|
}
|
|
565
571
|
saveRecentAccount(_ref22) {
|
|
566
572
|
let {
|
|
567
|
-
accountId
|
|
573
|
+
accountId,
|
|
574
|
+
chain
|
|
568
575
|
} = _ref22;
|
|
569
576
|
if ((0, _utilCrypto.isAddress)(accountId)) {
|
|
570
577
|
const address = (0, _utils3.reformatAddress)(accountId);
|
|
571
578
|
const account = _uiKeyring.keyring.getAccount(address);
|
|
572
|
-
const contact = _uiKeyring.keyring.getAddress(address);
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
579
|
+
const contact = _uiKeyring.keyring.getAddress(address, 'address');
|
|
580
|
+
if (account) {
|
|
581
|
+
return account;
|
|
582
|
+
} else {
|
|
583
|
+
let metadata;
|
|
584
|
+
if (contact) {
|
|
585
|
+
metadata = contact.meta;
|
|
586
|
+
} else {
|
|
587
|
+
const _new = _uiKeyring.keyring.saveRecent(address);
|
|
588
|
+
metadata = _new.json.meta;
|
|
589
|
+
}
|
|
590
|
+
if (contact && !metadata.isRecent) {
|
|
591
|
+
return contact;
|
|
592
|
+
}
|
|
593
|
+
const recentChainSlugs = metadata.recentChainSlugs || [];
|
|
594
|
+
if (chain) {
|
|
595
|
+
if (!recentChainSlugs.includes(chain)) {
|
|
596
|
+
recentChainSlugs.push(chain);
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
metadata.recentChainSlugs = recentChainSlugs;
|
|
600
|
+
const result = _uiKeyring.keyring.addresses.add(new _stores.AccountsStore(), address, {
|
|
601
|
+
address: address,
|
|
602
|
+
meta: metadata
|
|
603
|
+
});
|
|
604
|
+
return {
|
|
605
|
+
...result.json,
|
|
606
|
+
publicKey: (0, _utilCrypto.decodeAddress)(address)
|
|
607
|
+
};
|
|
608
|
+
}
|
|
577
609
|
} else {
|
|
578
610
|
throw Error((0, _i18next.t)('This is not an address'));
|
|
579
611
|
}
|
|
@@ -1648,7 +1680,9 @@ class KoniExtension {
|
|
|
1648
1680
|
// Check ed for receiver
|
|
1649
1681
|
if (new _bignumber.default(receiverBalance).plus(transferAmount.value).lt(minAmount)) {
|
|
1650
1682
|
const atLeast = new _bignumber.default(minAmount).minus(receiverBalance).plus((tokenInfo.decimals || 0) === 0 ? 0 : 1);
|
|
1651
|
-
const atLeastStr = (0, _number.formatNumber)(atLeast, tokenInfo.decimals || 0, _number.balanceFormatter
|
|
1683
|
+
const atLeastStr = (0, _number.formatNumber)(atLeast, tokenInfo.decimals || 0, _number.balanceFormatter, {
|
|
1684
|
+
maxNumberFormat: tokenInfo.decimals || 6
|
|
1685
|
+
});
|
|
1652
1686
|
inputTransaction.errors.push(new _TransactionError.TransactionError(_KoniTypes.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('You must transfer at least {{amount}} {{symbol}} to keep the destination account alive', {
|
|
1653
1687
|
replace: {
|
|
1654
1688
|
amount: atLeastStr,
|
|
@@ -1717,7 +1751,9 @@ class KoniExtension {
|
|
|
1717
1751
|
|
|
1718
1752
|
// Check ed for receiver
|
|
1719
1753
|
if (new _bignumber.default(value).lt(atLeast)) {
|
|
1720
|
-
const atLeastStr = (0, _number.formatNumber)(atLeast, destinationTokenInfo.decimals || 0, _number.balanceFormatter
|
|
1754
|
+
const atLeastStr = (0, _number.formatNumber)(atLeast, destinationTokenInfo.decimals || 0, _number.balanceFormatter, {
|
|
1755
|
+
maxNumberFormat: destinationTokenInfo.decimals || 6
|
|
1756
|
+
});
|
|
1721
1757
|
inputTransaction.errors.push(new _TransactionError.TransactionError(_KoniTypes.TransferTxErrorType.RECEIVER_NOT_ENOUGH_EXISTENTIAL_DEPOSIT, (0, _i18next.t)('You must transfer at least {{amount}} {{symbol}} to keep the destination account alive', {
|
|
1722
1758
|
replace: {
|
|
1723
1759
|
amount: atLeastStr,
|
|
@@ -3000,7 +3036,7 @@ class KoniExtension {
|
|
|
3000
3036
|
if (chainInfo && (_constants2._API_OPTIONS_CHAIN_GROUP.avail.includes(chainInfo.slug) || _constants2._API_OPTIONS_CHAIN_GROUP.goldberg.includes(chainInfo.slug))) {
|
|
3001
3037
|
const isChainActive = this.#koniState.getChainStateByKey(chainInfo.slug).active;
|
|
3002
3038
|
if (!isChainActive) {
|
|
3003
|
-
reject(new Error('Please
|
|
3039
|
+
reject(new Error('Please activate {{chain}} network before signing'.replaceAll('{{chain}}', chainInfo.name)));
|
|
3004
3040
|
return false;
|
|
3005
3041
|
} else {
|
|
3006
3042
|
registry = this.#koniState.getSubstrateApi(chainInfo.slug).api.registry;
|
|
@@ -41,6 +41,7 @@ var _promise = require("@subwallet/extension-base/utils/promise");
|
|
|
41
41
|
var _decode = require("@subwallet/keyring/pair/decode");
|
|
42
42
|
var _uiKeyring = require("@subwallet/ui-keyring");
|
|
43
43
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
44
|
+
var _bn = _interopRequireDefault(require("bn.js"));
|
|
44
45
|
var _ethSimpleKeyring = _interopRequireDefault(require("eth-simple-keyring"));
|
|
45
46
|
var _i18next = require("i18next");
|
|
46
47
|
var _rxjs = require("rxjs");
|
|
@@ -1233,7 +1234,7 @@ class KoniState {
|
|
|
1233
1234
|
const web3 = evmApi.api;
|
|
1234
1235
|
const autoFormatNumber = val => {
|
|
1235
1236
|
if (typeof val === 'string' && val.startsWith('0x')) {
|
|
1236
|
-
return new
|
|
1237
|
+
return new _bn.default(val.replace('0x', ''), 16).toString();
|
|
1237
1238
|
} else if (typeof val === 'number') {
|
|
1238
1239
|
return val.toString();
|
|
1239
1240
|
}
|
|
@@ -1298,8 +1299,8 @@ class KoniState {
|
|
|
1298
1299
|
};
|
|
1299
1300
|
|
|
1300
1301
|
// Validate balance
|
|
1301
|
-
const balance = new
|
|
1302
|
-
if (balance.lt(new
|
|
1302
|
+
const balance = new _bn.default((await web3.eth.getBalance(fromAddress)) || 0);
|
|
1303
|
+
if (balance.lt(new _bn.default(estimateGas).add(new _bn.default(autoFormatNumber(transactionParams.value) || '0')))) {
|
|
1303
1304
|
throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.INVALID_PARAMS, (0, _i18next.t)('Insufficient balance'));
|
|
1304
1305
|
}
|
|
1305
1306
|
transaction.nonce = await web3.eth.getTransactionCount(fromAddress);
|
|
@@ -1713,7 +1714,7 @@ class KoniState {
|
|
|
1713
1714
|
return;
|
|
1714
1715
|
}
|
|
1715
1716
|
const assetMap = this.chainService.getMantaZkAssets(chain === null || chain === void 0 ? void 0 : chain.toLowerCase());
|
|
1716
|
-
(_this$chainService26 = this.chainService) === null || _this$chainService26 === void 0 ? void 0 : (_this$chainService26$ = _this$chainService26.mantaPay) === null || _this$chainService26$ === void 0 ? void 0 : (_this$chainService26$2 = _this$chainService26$.privateWallet) === null || _this$chainService26$2 === void 0 ? void 0 : _this$chainService26$2.getMultiZkBalance(Object.values(assetMap).map(tokenInfo => new
|
|
1717
|
+
(_this$chainService26 = this.chainService) === null || _this$chainService26 === void 0 ? void 0 : (_this$chainService26$ = _this$chainService26.mantaPay) === null || _this$chainService26$ === void 0 ? void 0 : (_this$chainService26$2 = _this$chainService26$.privateWallet) === null || _this$chainService26$2 === void 0 ? void 0 : _this$chainService26$2.getMultiZkBalance(Object.values(assetMap).map(tokenInfo => new _bn.default((0, _utils._getTokenOnChainAssetId)(tokenInfo)))).then(zkBalances => {
|
|
1717
1718
|
const assetList = Object.values(assetMap);
|
|
1718
1719
|
for (let i = 0; i < assetList.length; i++) {
|
|
1719
1720
|
var _zkBalances$i;
|
|
@@ -1758,7 +1759,7 @@ class KoniState {
|
|
|
1758
1759
|
}
|
|
1759
1760
|
async getMantaPayZkBalance(address, tokenInfo) {
|
|
1760
1761
|
var _this$chainService32, _this$chainService32$, _this$chainService32$2;
|
|
1761
|
-
const bnAssetId = new
|
|
1762
|
+
const bnAssetId = new _bn.default((0, _utils._getTokenOnChainAssetId)(tokenInfo));
|
|
1762
1763
|
const balance = await ((_this$chainService32 = this.chainService) === null || _this$chainService32 === void 0 ? void 0 : (_this$chainService32$ = _this$chainService32.mantaPay) === null || _this$chainService32$ === void 0 ? void 0 : (_this$chainService32$2 = _this$chainService32$.privateWallet) === null || _this$chainService32$2 === void 0 ? void 0 : _this$chainService32$2.getZkBalance(bnAssetId));
|
|
1763
1764
|
return {
|
|
1764
1765
|
decimals: tokenInfo.decimals || 0,
|
package/cjs/packageInfo.js
CHANGED
|
@@ -48,7 +48,7 @@ const filterAddress = (addresses, chainInfo) => {
|
|
|
48
48
|
const isEvmChain = (0, _utils._isChainEvmCompatible)(chainInfo);
|
|
49
49
|
const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
|
|
50
50
|
if (isEvmChain) {
|
|
51
|
-
return [evmAddresses,
|
|
51
|
+
return [evmAddresses, substrateAddresses];
|
|
52
52
|
} else {
|
|
53
53
|
const fetchList = [];
|
|
54
54
|
const unfetchList = [];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.chainProviderBackup = exports.chainProvider = exports.BIG_TEN = void 0;
|
|
8
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
const chainProvider = {
|
|
13
|
+
default: 0,
|
|
14
|
+
ethereum: 1,
|
|
15
|
+
polygon: 2,
|
|
16
|
+
shidenEvm: 2,
|
|
17
|
+
shiden: 2,
|
|
18
|
+
ajunaPolkadot: 1,
|
|
19
|
+
crabParachain: 1,
|
|
20
|
+
astarEvm: 1,
|
|
21
|
+
shibuya: 1,
|
|
22
|
+
shibuyaEvm: 0
|
|
23
|
+
};
|
|
24
|
+
exports.chainProvider = chainProvider;
|
|
25
|
+
const chainProviderBackup = {
|
|
26
|
+
default: 1,
|
|
27
|
+
pangolin: 0,
|
|
28
|
+
moonbeam: 0,
|
|
29
|
+
moonbase: 0,
|
|
30
|
+
moonriver: 3,
|
|
31
|
+
darwinia2: 2,
|
|
32
|
+
crabParachain: 1
|
|
33
|
+
};
|
|
34
|
+
exports.chainProviderBackup = chainProviderBackup;
|
|
35
|
+
const BIG_TEN = new _bignumber.default(10);
|
|
36
|
+
exports.BIG_TEN = BIG_TEN;
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getSubstrateNativeInfo = exports.getPsp22AssetInfo = exports.getLocalAssetInfo = exports.getEvmNativeInfo = exports.getErc20AssetInfo = exports.compareAsset = void 0;
|
|
8
|
+
var _web = require("@subwallet/extension-base/koni/api/tokens/evm/web3");
|
|
9
|
+
var _utils = require("@subwallet/extension-base/koni/api/tokens/wasm/utils");
|
|
10
|
+
var _helper = require("@subwallet/extension-base/services/chain-service/helper");
|
|
11
|
+
var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
13
|
+
var _apiContract = require("@polkadot/api-contract");
|
|
14
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
15
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
16
|
+
|
|
17
|
+
const BN_TEN = new _bignumber.default(10);
|
|
18
|
+
const getByAssetPallet = async (asset, api) => {
|
|
19
|
+
const [_info, _metadata] = await api.queryMulti([[api.query.assets.asset, (0, _utils2._getTokenOnChainAssetId)(asset)], [api.query.assets.metadata, (0, _utils2._getTokenOnChainAssetId)(asset)]]);
|
|
20
|
+
const info = _info.toPrimitive();
|
|
21
|
+
const metadata = _metadata.toPrimitive();
|
|
22
|
+
return {
|
|
23
|
+
decimals: metadata.decimals,
|
|
24
|
+
minAmount: info.minBalance.toString(),
|
|
25
|
+
symbol: metadata.symbol
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
const getByAssetRegistryWithChainInfoPallet = async (asset, api) => {
|
|
29
|
+
const raw = (0, _utils2._getTokenOnChainInfo)(asset);
|
|
30
|
+
let data;
|
|
31
|
+
if ('ForeignAsset' in raw) {
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
33
|
+
data = {
|
|
34
|
+
ForeignAssetId: raw.ForeignAsset
|
|
35
|
+
};
|
|
36
|
+
} else if ('Erc20' in raw) {
|
|
37
|
+
data = raw;
|
|
38
|
+
} else if ('StableAssetPoolToken' in raw) {
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
40
|
+
data = {
|
|
41
|
+
StableAssetId: raw.StableAssetPoolToken
|
|
42
|
+
};
|
|
43
|
+
} else {
|
|
44
|
+
data = {
|
|
45
|
+
NativeAssetId: raw
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const _metadata = await api.query.assetRegistry.assetMetadatas(data);
|
|
49
|
+
const metadata = _metadata.toPrimitive();
|
|
50
|
+
return {
|
|
51
|
+
decimals: metadata.decimals,
|
|
52
|
+
minAmount: metadata.minimalBalance.toString(),
|
|
53
|
+
symbol: metadata.symbol
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const getByAssetRegistryWithChainInfoPalletV2 = async (asset, api) => {
|
|
57
|
+
const data = (0, _utils2._getTokenOnChainInfo)(asset);
|
|
58
|
+
const _metadata = await api.query.assetRegistry.currencyMetadatas(data);
|
|
59
|
+
const metadata = _metadata.toPrimitive();
|
|
60
|
+
return {
|
|
61
|
+
decimals: metadata.decimals,
|
|
62
|
+
minAmount: metadata.minimalBalance.toString(),
|
|
63
|
+
symbol: metadata.symbol
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
const getByAssetRegistryWithChainInfoPalletV3 = async (asset, api) => {
|
|
67
|
+
const data = (0, _utils2._getTokenOnChainInfo)(asset);
|
|
68
|
+
const _metadata = await api.query.assetRegistry.metadata(data);
|
|
69
|
+
const metadata = _metadata.toPrimitive();
|
|
70
|
+
return {
|
|
71
|
+
decimals: metadata.decimals,
|
|
72
|
+
minAmount: metadata.existentialDeposit.toString(),
|
|
73
|
+
symbol: metadata.symbol
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
const getByOrmlAssetRegistryPallet = async (asset, api) => {
|
|
77
|
+
const data = (0, _utils2._getTokenOnChainInfo)(asset);
|
|
78
|
+
const _metadata = await api.query.ormlAssetRegistry.metadata(data);
|
|
79
|
+
const metadata = _metadata.toPrimitive();
|
|
80
|
+
return {
|
|
81
|
+
decimals: metadata.decimals,
|
|
82
|
+
minAmount: metadata.existentialDeposit.toString(),
|
|
83
|
+
symbol: metadata.symbol
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
const getByAssetManagerWithChainInfoPallet = async (asset, api) => {
|
|
87
|
+
const raw = (0, _utils2._getTokenOnChainInfo)(asset);
|
|
88
|
+
let data;
|
|
89
|
+
if ('ForeignAsset' in raw) {
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
91
|
+
data = {
|
|
92
|
+
ForeignAssetId: raw.ForeignAsset
|
|
93
|
+
};
|
|
94
|
+
} else if ('Erc20' in raw) {
|
|
95
|
+
data = raw;
|
|
96
|
+
} else {
|
|
97
|
+
data = {
|
|
98
|
+
NativeAssetId: raw
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const _metadata = await api.query.assetManager.assetMetadatas(data);
|
|
102
|
+
const metadata = _metadata.toPrimitive();
|
|
103
|
+
return {
|
|
104
|
+
decimals: metadata.decimals,
|
|
105
|
+
minAmount: metadata.minimalBalance.toString(),
|
|
106
|
+
symbol: metadata.symbol
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
const getByAssetManagerWithAssetIdPallet = async (asset, api) => {
|
|
110
|
+
const _metadata = await api.query.assetManager.assetIdMetadata((0, _utils2._getTokenOnChainAssetId)(asset));
|
|
111
|
+
const metadata = _metadata.toPrimitive();
|
|
112
|
+
return {
|
|
113
|
+
decimals: metadata.metadata.decimals,
|
|
114
|
+
minAmount: metadata.minBalance.toString(),
|
|
115
|
+
symbol: metadata.metadata.symbol
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
const getByAssetRegistryWithAssetIdPallet = async (asset, api) => {
|
|
119
|
+
const [_info, _metadata] = await api.queryMulti([[api.query.assetRegistry.assets, (0, _utils2._getTokenOnChainAssetId)(asset)], [api.query.assetRegistry.assetMetadataMap, (0, _utils2._getTokenOnChainAssetId)(asset)]]);
|
|
120
|
+
const info = _info.toPrimitive();
|
|
121
|
+
const metadata = _metadata.toPrimitive();
|
|
122
|
+
return {
|
|
123
|
+
decimals: metadata.decimals,
|
|
124
|
+
minAmount: info.existentialDeposit.toString(),
|
|
125
|
+
symbol: metadata.symbol
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
const getLocalAssetInfo = async (chain, asset, api) => {
|
|
129
|
+
if (['astar', 'shiden', 'shibuya', 'statemint', 'statemine', 'moonbeam', 'moonbase', 'moonriver', 'parallel', 'pangolin', 'darwinia2', 'crabParachain'].includes(chain)) {
|
|
130
|
+
return getByAssetPallet(asset, api);
|
|
131
|
+
} else if (['pioneer', 'bitcountry'].includes(chain)) {
|
|
132
|
+
return getByAssetManagerWithChainInfoPallet(asset, api);
|
|
133
|
+
} else if (['acala', 'karura', 'acala_testnet'].includes(chain)) {
|
|
134
|
+
return getByAssetRegistryWithChainInfoPallet(asset, api);
|
|
135
|
+
} else if (['bifrost', 'bifrost_dot', 'bifrost_testnet'].includes(chain)) {
|
|
136
|
+
return getByAssetRegistryWithChainInfoPalletV2(asset, api);
|
|
137
|
+
} else if (['hydradx_main'].includes(chain)) {
|
|
138
|
+
return getByAssetRegistryWithAssetIdPallet(asset, api);
|
|
139
|
+
} else if (['calamari', 'manta_network'].includes(chain)) {
|
|
140
|
+
return getByAssetManagerWithAssetIdPallet(asset, api);
|
|
141
|
+
} else if (['amplitude', 'pendulum'].includes(chain)) {
|
|
142
|
+
return getByAssetRegistryWithChainInfoPalletV3(asset, api);
|
|
143
|
+
} else if (['centrifuge'].includes(chain)) {
|
|
144
|
+
return getByOrmlAssetRegistryPallet(asset, api);
|
|
145
|
+
}
|
|
146
|
+
throw new Error('Fail to get info');
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/require-await
|
|
150
|
+
exports.getLocalAssetInfo = getLocalAssetInfo;
|
|
151
|
+
const getSubstrateNativeInfo = async api => {
|
|
152
|
+
const minAmount = api.consts.balances ? api.consts.balances.existentialDeposit.toString() : api.consts.eqBalances.existentialDeposit.toString();
|
|
153
|
+
const symbol = api.registry.chainTokens[0];
|
|
154
|
+
const decimals = api.registry.chainDecimals[0];
|
|
155
|
+
return {
|
|
156
|
+
decimals,
|
|
157
|
+
minAmount,
|
|
158
|
+
symbol
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
exports.getSubstrateNativeInfo = getSubstrateNativeInfo;
|
|
162
|
+
const getPsp22AssetInfo = async (asset, api) => {
|
|
163
|
+
const contractAddress = (0, _utils2._getContractAddressOfToken)(asset);
|
|
164
|
+
const tokenContract = new _apiContract.ContractPromise(api, _helper._PSP22_ABI, contractAddress);
|
|
165
|
+
const [nameResp, symbolResp, decimalsResp] = await Promise.all([tokenContract.query['psp22Metadata::tokenName'](contractAddress, {
|
|
166
|
+
gasLimit: (0, _utils.getDefaultWeightV2)(api)
|
|
167
|
+
}),
|
|
168
|
+
// read-only operation so no gas limit
|
|
169
|
+
tokenContract.query['psp22Metadata::tokenSymbol'](contractAddress, {
|
|
170
|
+
gasLimit: (0, _utils.getDefaultWeightV2)(api)
|
|
171
|
+
}), tokenContract.query['psp22Metadata::tokenDecimals'](contractAddress, {
|
|
172
|
+
gasLimit: (0, _utils.getDefaultWeightV2)(api)
|
|
173
|
+
})]);
|
|
174
|
+
if (!(nameResp.result.isOk && symbolResp.result.isOk && decimalsResp.result.isOk) || !nameResp.output || !decimalsResp.output || !symbolResp.output) {
|
|
175
|
+
return {
|
|
176
|
+
decimals: -1,
|
|
177
|
+
symbol: '',
|
|
178
|
+
minAmount: '0'
|
|
179
|
+
};
|
|
180
|
+
} else {
|
|
181
|
+
var _symbolResp$output, _decimalsResp$output, _nameResp$output;
|
|
182
|
+
const symbolObj = (_symbolResp$output = symbolResp.output) === null || _symbolResp$output === void 0 ? void 0 : _symbolResp$output.toHuman();
|
|
183
|
+
const decimalsObj = (_decimalsResp$output = decimalsResp.output) === null || _decimalsResp$output === void 0 ? void 0 : _decimalsResp$output.toHuman();
|
|
184
|
+
const nameObj = (_nameResp$output = nameResp.output) === null || _nameResp$output === void 0 ? void 0 : _nameResp$output.toHuman();
|
|
185
|
+
const name = nameResp.output ? nameObj.Ok || nameObj.ok : '';
|
|
186
|
+
const decimals = decimalsResp.output ? new _bignumber.default(decimalsObj.Ok || decimalsObj.ok).toNumber() : 0;
|
|
187
|
+
const symbol = decimalsResp.output ? symbolObj.Ok || symbolObj.ok : '';
|
|
188
|
+
if (!name || !symbol || typeof name === 'object' || typeof symbol === 'object') {
|
|
189
|
+
return {
|
|
190
|
+
decimals: -1,
|
|
191
|
+
symbol: '',
|
|
192
|
+
minAmount: '0'
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
decimals: decimals,
|
|
197
|
+
symbol: symbol,
|
|
198
|
+
minAmount: '0'
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
exports.getPsp22AssetInfo = getPsp22AssetInfo;
|
|
203
|
+
const getEvmNativeInfo = async api => {
|
|
204
|
+
const chainId = await api.api.eth.getChainId();
|
|
205
|
+
const fetchData = () => {
|
|
206
|
+
return new Promise((resolve, reject) => {
|
|
207
|
+
fetch('https://chainid.network/chains.json').then(res => {
|
|
208
|
+
return res.json();
|
|
209
|
+
}).then(json => {
|
|
210
|
+
const rs = json.find(i => i.chainId === chainId);
|
|
211
|
+
resolve(rs);
|
|
212
|
+
}).catch(e => {
|
|
213
|
+
reject(e);
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
const data = await fetchData();
|
|
218
|
+
if (data) {
|
|
219
|
+
return {
|
|
220
|
+
decimals: data.nativeCurrency.decimals,
|
|
221
|
+
symbol: data.nativeCurrency.symbol,
|
|
222
|
+
minAmount: '0'
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
throw new Error('Cannot get info');
|
|
226
|
+
};
|
|
227
|
+
exports.getEvmNativeInfo = getEvmNativeInfo;
|
|
228
|
+
const getErc20AssetInfo = async (asset, api) => {
|
|
229
|
+
const contractAddress = (0, _utils2._getContractAddressOfToken)(asset);
|
|
230
|
+
const tokenContract = (0, _web.getERC20Contract)('chain', contractAddress, {
|
|
231
|
+
chain: api
|
|
232
|
+
});
|
|
233
|
+
const [_decimals, _symbol, _name] = await Promise.all([
|
|
234
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
235
|
+
tokenContract.methods.decimals().call(),
|
|
236
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
237
|
+
tokenContract.methods.symbol().call(),
|
|
238
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
|
|
239
|
+
tokenContract.methods.name().call()]);
|
|
240
|
+
const name = _name;
|
|
241
|
+
const decimals = new _bignumber.default(_decimals).toNumber();
|
|
242
|
+
const symbol = _symbol;
|
|
243
|
+
if (!name || !symbol || typeof name === 'object' || typeof symbol === 'object') {
|
|
244
|
+
return {
|
|
245
|
+
decimals: -1,
|
|
246
|
+
symbol: '',
|
|
247
|
+
minAmount: '0'
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
decimals: decimals,
|
|
252
|
+
symbol: symbol,
|
|
253
|
+
minAmount: '0'
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
exports.getErc20AssetInfo = getErc20AssetInfo;
|
|
257
|
+
const compareAsset = (assetInfo, asset, errors) => {
|
|
258
|
+
const {
|
|
259
|
+
decimals,
|
|
260
|
+
minAmount,
|
|
261
|
+
symbol
|
|
262
|
+
} = assetInfo;
|
|
263
|
+
const _minAmount = asset.minAmount || '0';
|
|
264
|
+
const _decimals = asset.decimals || 0;
|
|
265
|
+
if (minAmount !== _minAmount) {
|
|
266
|
+
var _asset$minAmount;
|
|
267
|
+
const convert = new _bignumber.default(minAmount).dividedBy(BN_TEN.pow(decimals)).toFixed();
|
|
268
|
+
const _convert = new _bignumber.default(_minAmount).dividedBy(BN_TEN.pow(_decimals)).toFixed();
|
|
269
|
+
errors.push(`Wrong min amount: current - ${(_asset$minAmount = asset.minAmount) !== null && _asset$minAmount !== void 0 ? _asset$minAmount : 'null'} (${_convert}), onChain - ${minAmount} (${convert})`);
|
|
270
|
+
}
|
|
271
|
+
if (symbol !== asset.symbol) {
|
|
272
|
+
const zkSymbol = 'zk' + symbol;
|
|
273
|
+
if (zkSymbol !== asset.symbol) {
|
|
274
|
+
errors.push(`Wrong symbol: current - ${asset.symbol}, onChain - ${symbol}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (decimals !== _decimals) {
|
|
278
|
+
var _asset$decimals;
|
|
279
|
+
errors.push(`Wrong decimals: current - ${(_asset$decimals = asset.decimals) !== null && _asset$decimals !== void 0 ? _asset$decimals : 'null'}, onChain - ${decimals}`);
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
exports.compareAsset = compareAsset;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.compareNativeAsset = void 0;
|
|
8
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/health-check/constants");
|
|
9
|
+
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
const compareNativeAsset = (assetInfo, nativeAsset, errors) => {
|
|
14
|
+
const {
|
|
15
|
+
decimals: _decimals,
|
|
16
|
+
existentialDeposit: _minAmount,
|
|
17
|
+
symbol: _symbol
|
|
18
|
+
} = nativeAsset;
|
|
19
|
+
const {
|
|
20
|
+
decimals,
|
|
21
|
+
minAmount,
|
|
22
|
+
symbol
|
|
23
|
+
} = assetInfo;
|
|
24
|
+
if (minAmount !== _minAmount) {
|
|
25
|
+
const convert = new _bignumber.default(minAmount).dividedBy(_constants.BIG_TEN.pow(decimals)).toFixed();
|
|
26
|
+
const _convert = new _bignumber.default(_minAmount !== null && _minAmount !== void 0 ? _minAmount : '0').dividedBy(_constants.BIG_TEN.pow(_decimals)).toFixed();
|
|
27
|
+
errors.push(`Wrong min amount: current - ${_minAmount} (${_convert}), onChain - ${minAmount} (${convert})`);
|
|
28
|
+
}
|
|
29
|
+
if (symbol !== _symbol) {
|
|
30
|
+
errors.push(`Wrong symbol: current - ${_symbol}, onChain - ${symbol}`);
|
|
31
|
+
}
|
|
32
|
+
if (decimals !== _decimals) {
|
|
33
|
+
errors.push(`Wrong decimals: current - ${_decimals}, onChain - ${decimals}`);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.compareNativeAsset = compareNativeAsset;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _assetInfo = require("./asset-info");
|
|
7
|
+
Object.keys(_assetInfo).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _assetInfo[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _assetInfo[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _chainInfo = require("./chain-info");
|
|
18
|
+
Object.keys(_chainInfo).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _chainInfo[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _chainInfo[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
var _provider = require("./provider");
|
|
29
|
+
Object.keys(_provider).forEach(function (key) {
|
|
30
|
+
if (key === "default" || key === "__esModule") return;
|
|
31
|
+
if (key in exports && exports[key] === _provider[key]) return;
|
|
32
|
+
Object.defineProperty(exports, key, {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return _provider[key];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|