@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.
Files changed (67) hide show
  1. package/background/KoniTypes.d.ts +2 -0
  2. package/background/types.d.ts +1 -0
  3. package/cjs/koni/api/dotsama/balance.js +464 -0
  4. package/cjs/koni/api/nft/unique_network_nft/index.js +4 -0
  5. package/cjs/koni/background/handlers/Extension.js +64 -13
  6. package/cjs/koni/background/handlers/State.js +6 -5
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/services/balance-service/helpers/subscribe/balance.js +1 -1
  9. package/cjs/services/chain-service/health-check/constants/index.js +36 -0
  10. package/cjs/services/chain-service/health-check/utils/asset-info.js +282 -0
  11. package/cjs/services/chain-service/health-check/utils/chain-info.js +36 -0
  12. package/cjs/services/chain-service/health-check/utils/index.js +38 -0
  13. package/cjs/services/chain-service/health-check/utils/provider.js +186 -0
  14. package/cjs/services/chain-service/index.js +61 -51
  15. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +42 -26
  16. package/cjs/services/earning-service/service.js +9 -2
  17. package/cjs/services/migration-service/scripts/MigrateEthProvider.js +17 -0
  18. package/cjs/services/migration-service/scripts/MigratePioneerProvider.js +17 -0
  19. package/cjs/services/migration-service/scripts/MigrateProvider.js +29 -0
  20. package/cjs/services/storage-service/index.js +241 -0
  21. package/cjs/services/transaction-service/index.js +6 -4
  22. package/cjs/types.js +1 -0
  23. package/cjs/utils/address.js +34 -0
  24. package/cjs/utils/eth/mergeTransactionAndSignature.js +8 -3
  25. package/cjs/utils/index.js +6 -5
  26. package/cjs/utils/keyring.js +57 -0
  27. package/cjs/utils/staticData/index.js +5 -5
  28. package/koni/api/nft/unique_network_nft/index.d.ts +1 -0
  29. package/koni/api/nft/unique_network_nft/index.js +5 -1
  30. package/koni/api/staking/bonding/utils.d.ts +0 -1
  31. package/koni/background/handlers/Extension.d.ts +1 -0
  32. package/koni/background/handlers/Extension.js +64 -13
  33. package/koni/background/handlers/State.js +2 -1
  34. package/package.json +42 -17
  35. package/packageInfo.js +1 -1
  36. package/services/balance-service/helpers/subscribe/balance.js +1 -1
  37. package/services/chain-service/health-check/constants/index.d.ts +4 -0
  38. package/services/chain-service/health-check/constants/index.js +26 -0
  39. package/services/chain-service/health-check/utils/asset-info.d.ts +14 -0
  40. package/services/chain-service/health-check/utils/asset-info.js +269 -0
  41. package/services/chain-service/health-check/utils/chain-info.d.ts +8 -0
  42. package/services/chain-service/health-check/utils/chain-info.js +28 -0
  43. package/services/chain-service/health-check/utils/index.d.ts +3 -0
  44. package/services/chain-service/health-check/utils/index.js +6 -0
  45. package/services/chain-service/health-check/utils/provider.d.ts +25 -0
  46. package/services/chain-service/health-check/utils/provider.js +172 -0
  47. package/services/chain-service/index.d.ts +7 -3
  48. package/services/chain-service/index.js +52 -43
  49. package/services/chain-service/types.d.ts +4 -0
  50. package/services/earning-service/handlers/native-staking/relay-chain.d.ts +0 -1
  51. package/services/earning-service/handlers/native-staking/relay-chain.js +42 -26
  52. package/services/earning-service/handlers/special.d.ts +0 -1
  53. package/services/earning-service/service.js +10 -3
  54. package/services/transaction-service/index.js +6 -4
  55. package/types/balance.d.ts +0 -1
  56. package/types/yield/info/pallet.d.ts +4 -1
  57. package/utils/eth/mergeTransactionAndSignature.js +8 -3
  58. package/utils/index.d.ts +1 -2
  59. package/utils/index.js +6 -5
  60. package/utils/staticData/buyServiceInfos.json +0 -1
  61. package/utils/staticData/buyTokenConfigs.json +0 -15
  62. package/utils/staticData/chains.json +192 -89
  63. package/utils/staticData/crowdloanFunds.json +433 -58
  64. package/utils/staticData/index.d.ts +1 -2
  65. package/utils/staticData/index.js +4 -3
  66. package/utils/staticData/marketingCampaigns.json +1 -298
  67. 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 _util.BN(val.replace('0x', ''), 16).toString();
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 _util.BN((await web3.eth.getBalance(fromAddress)) || 0);
1302
- if (balance.lt(new _util.BN(estimateGas).add(new _util.BN(autoFormatNumber(transactionParams.value) || '0')))) {
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 _util.BN((0, _utils._getTokenOnChainAssetId)(tokenInfo)))).then(zkBalances => {
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 _util.BN((0, _utils._getTokenOnChainAssetId)(tokenInfo));
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,
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.1.38-1'
16
+ version: '1.1.39-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -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;