@subwallet/extension-base 1.1.38-1 → 1.1.39-beta.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 +2 -0
- package/background/types.d.ts +1 -0
- package/cjs/koni/api/dotsama/balance.js +464 -0
- package/cjs/koni/api/nft/unique_network_nft/index.js +4 -0
- package/cjs/koni/background/handlers/Extension.js +64 -13
- 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/chain-service/index.js +61 -51
- 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/migration-service/scripts/MigrateEthProvider.js +17 -0
- package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
- package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
- package/cjs/services/storage-service/index.js +241 -0
- package/cjs/services/transaction-service/index.js +6 -4
- package/cjs/types.js +1 -0
- package/cjs/utils/address.js +34 -0
- package/cjs/utils/eth/mergeTransactionAndSignature.js +8 -3
- package/cjs/utils/index.js +6 -5
- package/cjs/utils/keyring.js +57 -0
- 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.d.ts +1 -0
- package/koni/background/handlers/Extension.js +64 -13
- package/koni/background/handlers/State.js +2 -1
- package/package.json +42 -17
- 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/chain-service/index.d.ts +7 -3
- package/services/chain-service/index.js +52 -43
- package/services/chain-service/types.d.ts +4 -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
|
@@ -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
|
+
});
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.timeoutMessage = exports.substrateHandleConnectChain = exports.handleSubstrateProvider = exports.handleEvmProvider = exports.failedMessage = exports.evmHandleConnectChain = void 0;
|
|
7
|
+
var _EvmApi2 = require("@subwallet/extension-base/services/chain-service/handler/EvmApi");
|
|
8
|
+
var _api2 = require("@polkadot/api");
|
|
9
|
+
var _util = require("@polkadot/util");
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
const failedMessage = 'Connect failed';
|
|
14
|
+
exports.failedMessage = failedMessage;
|
|
15
|
+
const timeoutMessage = 'Connect timeout';
|
|
16
|
+
exports.timeoutMessage = timeoutMessage;
|
|
17
|
+
const substrateHandleConnectChain = async (chain, key, provider, hash) => {
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises,no-async-promise-executor
|
|
19
|
+
return new Promise(async resolve => {
|
|
20
|
+
console.log('start', chain, key, provider);
|
|
21
|
+
const _api = new _api2.ApiPromise({
|
|
22
|
+
provider: new _api2.WsProvider(provider)
|
|
23
|
+
});
|
|
24
|
+
let logFail = true;
|
|
25
|
+
const handlerOnFail = e => {
|
|
26
|
+
if (logFail) {
|
|
27
|
+
console.log('error', chain, key);
|
|
28
|
+
resolve([_api, (e === null || e === void 0 ? void 0 : e.message) || failedMessage]);
|
|
29
|
+
}
|
|
30
|
+
logFail = false;
|
|
31
|
+
};
|
|
32
|
+
const timeout = setTimeout(() => {
|
|
33
|
+
console.log('timeout', chain, key);
|
|
34
|
+
resolve([_api, timeoutMessage]);
|
|
35
|
+
logFail = false;
|
|
36
|
+
_api.disconnect().catch(console.error);
|
|
37
|
+
_api.off('disconnected', handlerOnFail);
|
|
38
|
+
_api.off('error', handlerOnFail);
|
|
39
|
+
}, 30 * 1000);
|
|
40
|
+
_api.on('disconnected', handlerOnFail);
|
|
41
|
+
_api.on('error', handlerOnFail);
|
|
42
|
+
const temp = await _api.isReady;
|
|
43
|
+
logFail = false;
|
|
44
|
+
const tempHash = temp.genesisHash.toHex();
|
|
45
|
+
if (hash && hash !== tempHash) {
|
|
46
|
+
resolve([_api, `Wrong genesisHash: current - ${hash}, onChain - ${tempHash}`]);
|
|
47
|
+
}
|
|
48
|
+
await _api.query.system.number();
|
|
49
|
+
_api.off('disconnected', handlerOnFail);
|
|
50
|
+
_api.off('error', handlerOnFail);
|
|
51
|
+
clearTimeout(timeout);
|
|
52
|
+
resolve([_api, '']);
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
exports.substrateHandleConnectChain = substrateHandleConnectChain;
|
|
56
|
+
const evmHandleConnectChain = async (chain, key, provider, chainId) => {
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises,no-async-promise-executor
|
|
58
|
+
return new Promise(async resolve => {
|
|
59
|
+
console.log('start', chain, key, provider);
|
|
60
|
+
let api = null;
|
|
61
|
+
const _api = new _EvmApi2.EvmApi(chain, provider, {
|
|
62
|
+
providerName: key
|
|
63
|
+
});
|
|
64
|
+
let logFail = true;
|
|
65
|
+
const handlerOnFail = e => {
|
|
66
|
+
if (logFail) {
|
|
67
|
+
console.log('error', chain, key);
|
|
68
|
+
resolve([api, (e === null || e === void 0 ? void 0 : e.message) || failedMessage]);
|
|
69
|
+
}
|
|
70
|
+
logFail = false;
|
|
71
|
+
};
|
|
72
|
+
const timeout = setTimeout(() => {
|
|
73
|
+
console.log('timeout', chain, key);
|
|
74
|
+
resolve([api, timeoutMessage]);
|
|
75
|
+
logFail = false;
|
|
76
|
+
_api.destroy().catch(console.error);
|
|
77
|
+
}, 60 * 1000);
|
|
78
|
+
try {
|
|
79
|
+
api = await _api.isReady;
|
|
80
|
+
} catch (e) {
|
|
81
|
+
handlerOnFail(e);
|
|
82
|
+
}
|
|
83
|
+
logFail = false;
|
|
84
|
+
clearTimeout(timeout);
|
|
85
|
+
const tempId = await _api.api.eth.getChainId();
|
|
86
|
+
if (tempId !== chainId) {
|
|
87
|
+
resolve([api, `Wrong chain id: current - ${chainId}, onChain - ${tempId}`]);
|
|
88
|
+
}
|
|
89
|
+
resolve([api, '']);
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
exports.evmHandleConnectChain = evmHandleConnectChain;
|
|
93
|
+
const handleSubstrateProvider = _ref => {
|
|
94
|
+
let {
|
|
95
|
+
awaitDisconnect,
|
|
96
|
+
chain,
|
|
97
|
+
genHash,
|
|
98
|
+
key,
|
|
99
|
+
onError,
|
|
100
|
+
onSuccess,
|
|
101
|
+
onTimeout,
|
|
102
|
+
provider
|
|
103
|
+
} = _ref;
|
|
104
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises,no-async-promise-executor
|
|
105
|
+
return new Promise(async resolve => {
|
|
106
|
+
try {
|
|
107
|
+
const timeHandler = () => {
|
|
108
|
+
onTimeout();
|
|
109
|
+
resolve();
|
|
110
|
+
};
|
|
111
|
+
const timeout = setTimeout(() => {
|
|
112
|
+
timeHandler();
|
|
113
|
+
}, 2 * 60 * 1000);
|
|
114
|
+
const [api, message] = await substrateHandleConnectChain(chain, key, provider, genHash);
|
|
115
|
+
const disconnectApi = async api => {
|
|
116
|
+
if (awaitDisconnect) {
|
|
117
|
+
await (api === null || api === void 0 ? void 0 : api.disconnect());
|
|
118
|
+
} else {
|
|
119
|
+
api === null || api === void 0 ? void 0 : api.disconnect().finally(_util.noop);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
clearTimeout(timeout);
|
|
123
|
+
if (message) {
|
|
124
|
+
await onError(message);
|
|
125
|
+
await disconnectApi(api);
|
|
126
|
+
resolve();
|
|
127
|
+
}
|
|
128
|
+
await onSuccess(api);
|
|
129
|
+
await disconnectApi(api);
|
|
130
|
+
resolve();
|
|
131
|
+
} catch (e) {
|
|
132
|
+
await onError(e.message);
|
|
133
|
+
resolve();
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
};
|
|
137
|
+
exports.handleSubstrateProvider = handleSubstrateProvider;
|
|
138
|
+
const handleEvmProvider = _ref2 => {
|
|
139
|
+
let {
|
|
140
|
+
awaitDisconnect,
|
|
141
|
+
chain,
|
|
142
|
+
chainId,
|
|
143
|
+
key,
|
|
144
|
+
onError,
|
|
145
|
+
onSuccess,
|
|
146
|
+
onTimeout,
|
|
147
|
+
provider
|
|
148
|
+
} = _ref2;
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises,no-async-promise-executor
|
|
150
|
+
return new Promise(async resolve => {
|
|
151
|
+
try {
|
|
152
|
+
const timeHandler = () => {
|
|
153
|
+
onTimeout();
|
|
154
|
+
resolve();
|
|
155
|
+
};
|
|
156
|
+
const timeout = setTimeout(() => {
|
|
157
|
+
timeHandler();
|
|
158
|
+
}, 2 * 60 * 1000);
|
|
159
|
+
const [_api, message] = await evmHandleConnectChain(chain, key, provider, chainId);
|
|
160
|
+
const disconnectApi = async _api => {
|
|
161
|
+
if (awaitDisconnect) {
|
|
162
|
+
await (_api === null || _api === void 0 ? void 0 : _api.destroy());
|
|
163
|
+
} else {
|
|
164
|
+
_api === null || _api === void 0 ? void 0 : _api.destroy().finally(_util.noop);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
console.log('connected', chain, key, provider);
|
|
168
|
+
clearTimeout(timeout);
|
|
169
|
+
if (message) {
|
|
170
|
+
await onError(message);
|
|
171
|
+
await disconnectApi(_api);
|
|
172
|
+
resolve();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
176
|
+
const api = _api;
|
|
177
|
+
await onSuccess(api);
|
|
178
|
+
await disconnectApi(_api);
|
|
179
|
+
resolve();
|
|
180
|
+
} catch (e) {
|
|
181
|
+
await onError(e.message);
|
|
182
|
+
resolve();
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
};
|
|
186
|
+
exports.handleEvmProvider = handleEvmProvider;
|