@subwallet/extension-base 1.2.13-0 → 1.2.15-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/background/errors/SwapError.js +5 -1
  2. package/cjs/background/errors/SwapError.js +5 -1
  3. package/cjs/core/logic-validation/swap.js +56 -3
  4. package/cjs/core/substrate/nominationpools-pallet.js +2 -1
  5. package/cjs/koni/api/nft/config.js +37 -23
  6. package/cjs/koni/api/nft/index.js +9 -1
  7. package/cjs/koni/api/nft/unique_network_nft/index.js +12 -20
  8. package/cjs/koni/background/handlers/Extension.js +12 -0
  9. package/cjs/packageInfo.js +1 -1
  10. package/cjs/services/balance-service/transfer/xcm/utils.js +2 -2
  11. package/cjs/services/chain-service/constants.js +2 -1
  12. package/cjs/services/chain-service/handler/SubstrateApi.js +6 -0
  13. package/cjs/services/chain-service/health-check/constants/index.js +4 -4
  14. package/cjs/services/chain-service/health-check/utils/asset-info.js +23 -6
  15. package/cjs/services/chain-service/health-check/utils/chain-info.js +25 -2
  16. package/cjs/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +160 -0
  17. package/cjs/services/chain-service/health-check/utils/new-utils/asset-validate.js +45 -0
  18. package/cjs/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +73 -0
  19. package/cjs/services/chain-service/health-check/utils/new-utils/chain-validate.js +34 -0
  20. package/cjs/services/chain-service/index.js +47 -5
  21. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +49 -19
  22. package/cjs/services/migration-service/scripts/databases/ReloadMetadata.js +35 -0
  23. package/cjs/services/migration-service/scripts/index.js +4 -2
  24. package/cjs/services/price-service/coingecko.js +57 -32
  25. package/cjs/services/price-service/index.js +30 -11
  26. package/cjs/services/storage-service/db-stores/BaseStore.js +4 -0
  27. package/cjs/services/swap-service/handler/asset-hub/handler.js +343 -0
  28. package/cjs/services/swap-service/handler/asset-hub/index.js +12 -0
  29. package/cjs/services/swap-service/handler/asset-hub/router.js +93 -0
  30. package/cjs/services/swap-service/handler/asset-hub/utils.js +158 -0
  31. package/cjs/services/swap-service/index.js +10 -1
  32. package/cjs/services/swap-service/utils.js +10 -1
  33. package/cjs/types/swap/index.js +5 -1
  34. package/core/logic-validation/swap.d.ts +3 -1
  35. package/core/logic-validation/swap.js +55 -4
  36. package/core/substrate/nominationpools-pallet.js +2 -1
  37. package/koni/api/nft/config.d.ts +1 -0
  38. package/koni/api/nft/config.js +31 -19
  39. package/koni/api/nft/index.js +9 -1
  40. package/koni/api/nft/unique_network_nft/index.js +12 -20
  41. package/koni/background/handlers/Extension.js +12 -0
  42. package/package.json +56 -11
  43. package/packageInfo.js +1 -1
  44. package/services/balance-service/transfer/xcm/utils.js +2 -2
  45. package/services/chain-service/constants.d.ts +1 -0
  46. package/services/chain-service/constants.js +2 -1
  47. package/services/chain-service/handler/SubstrateApi.js +6 -0
  48. package/services/chain-service/health-check/constants/index.js +4 -4
  49. package/services/chain-service/health-check/utils/asset-info.d.ts +1 -0
  50. package/services/chain-service/health-check/utils/asset-info.js +20 -4
  51. package/services/chain-service/health-check/utils/chain-info.d.ts +4 -2
  52. package/services/chain-service/health-check/utils/chain-info.js +20 -0
  53. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.d.ts +10 -0
  54. package/services/chain-service/health-check/utils/new-utils/asset-asset-validate.js +146 -0
  55. package/services/chain-service/health-check/utils/new-utils/asset-validate.d.ts +3 -0
  56. package/services/chain-service/health-check/utils/new-utils/asset-validate.js +38 -0
  57. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.d.ts +5 -0
  58. package/services/chain-service/health-check/utils/new-utils/chain-asset-validate.js +64 -0
  59. package/services/chain-service/health-check/utils/new-utils/chain-validate.d.ts +4 -0
  60. package/services/chain-service/health-check/utils/new-utils/chain-validate.js +26 -0
  61. package/services/chain-service/index.js +47 -5
  62. package/services/chain-service/types.d.ts +5 -0
  63. package/services/earning-service/handlers/liquid-staking/acala.js +46 -17
  64. package/services/migration-service/scripts/databases/ReloadMetadata.d.ts +5 -0
  65. package/services/migration-service/scripts/databases/ReloadMetadata.js +27 -0
  66. package/services/migration-service/scripts/index.js +4 -2
  67. package/services/price-service/coingecko.js +54 -32
  68. package/services/price-service/index.js +29 -11
  69. package/services/storage-service/db-stores/BaseStore.d.ts +3 -0
  70. package/services/storage-service/db-stores/BaseStore.js +4 -0
  71. package/services/swap-service/handler/asset-hub/handler.d.ts +31 -0
  72. package/services/swap-service/handler/asset-hub/handler.js +335 -0
  73. package/services/swap-service/handler/asset-hub/index.d.ts +1 -0
  74. package/services/swap-service/handler/asset-hub/index.js +4 -0
  75. package/services/swap-service/handler/asset-hub/router.d.ts +16 -0
  76. package/services/swap-service/handler/asset-hub/router.js +85 -0
  77. package/services/swap-service/handler/asset-hub/utils.d.ts +18 -0
  78. package/services/swap-service/handler/asset-hub/utils.js +133 -0
  79. package/services/swap-service/index.js +10 -1
  80. package/services/swap-service/utils.d.ts +1 -0
  81. package/services/swap-service/utils.js +9 -1
  82. package/types/swap/index.d.ts +15 -2
  83. package/types/swap/index.js +5 -1
  84. /package/cjs/services/migration-service/scripts/{ClearMetadataDatabase.js → databases/ClearMetadataDatabase.js} +0 -0
  85. /package/services/migration-service/scripts/{ClearMetadataDatabase.d.ts → databases/ClearMetadataDatabase.d.ts} +0 -0
  86. /package/services/migration-service/scripts/{ClearMetadataDatabase.js → databases/ClearMetadataDatabase.js} +0 -0
@@ -37,12 +37,16 @@ const defaultErrorMap = {
37
37
  code: undefined
38
38
  },
39
39
  NOT_ENOUGH_LIQUIDITY: {
40
- message: detectTranslate('There is not enough liquidity to complete the swap. Lower your amount and try again'),
40
+ message: detectTranslate('Insufficient liquidity to complete the swap. Lower your amount and try again'),
41
41
  code: undefined
42
42
  },
43
43
  AMOUNT_CANNOT_BE_ZERO: {
44
44
  message: detectTranslate('Amount must be greater than 0'),
45
45
  code: undefined
46
+ },
47
+ MAKE_POOL_NOT_ENOUGH_EXISTENTIAL_DEPOSIT: {
48
+ message: detectTranslate('Insufficient liquidity to complete the swap. Lower your amount and try again'),
49
+ code: undefined
46
50
  }
47
51
  };
48
52
  export class SwapError extends SWError {
@@ -43,12 +43,16 @@ const defaultErrorMap = {
43
43
  code: undefined
44
44
  },
45
45
  NOT_ENOUGH_LIQUIDITY: {
46
- message: (0, _utils.detectTranslate)('There is not enough liquidity to complete the swap. Lower your amount and try again'),
46
+ message: (0, _utils.detectTranslate)('Insufficient liquidity to complete the swap. Lower your amount and try again'),
47
47
  code: undefined
48
48
  },
49
49
  AMOUNT_CANNOT_BE_ZERO: {
50
50
  message: (0, _utils.detectTranslate)('Amount must be greater than 0'),
51
51
  code: undefined
52
+ },
53
+ MAKE_POOL_NOT_ENOUGH_EXISTENTIAL_DEPOSIT: {
54
+ message: (0, _utils.detectTranslate)('Insufficient liquidity to complete the swap. Lower your amount and try again'),
55
+ code: undefined
52
56
  }
53
57
  };
54
58
  class SwapError extends _SWError.SWError {
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports._getChainflipEarlyValidationError = _getChainflipEarlyValidationError;
8
+ exports._getEarlyAssetHubValidationError = _getEarlyAssetHubValidationError;
8
9
  exports._getEarlyHydradxValidationError = _getEarlyHydradxValidationError;
9
10
  exports._validateBalanceToSwap = _validateBalanceToSwap;
11
+ exports._validateBalanceToSwapOnAssetHub = _validateBalanceToSwapOnAssetHub;
10
12
  exports._validateSwapRecipient = _validateSwapRecipient;
11
13
  var _SwapError = require("@subwallet/extension-base/background/errors/SwapError");
12
14
  var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
@@ -19,12 +21,46 @@ var _utilCrypto = require("@polkadot/util-crypto");
19
21
  // Copyright 2019-2022 @subwallet/extension-base
20
22
  // SPDX-License-Identifier: Apache-2.0
21
23
 
24
+ function _validateBalanceToSwapOnAssetHub(fromToken, feeToken, feeTokenChainInfo, feeAmount, fromTokenBalance, feeTokenBalance, swapAmount, isXcmOk, minSwap) {
25
+ const bnFromTokenBalance = new _bignumber.default(fromTokenBalance);
26
+ if (!(0, _utils._isNativeToken)(fromToken) && bnFromTokenBalance.minus(swapAmount).lt((0, _utils._getTokenMinAmount)(fromToken))) {
27
+ const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(bnFromTokenBalance.minus((0, _utils._getTokenMinAmount)(fromToken)), (0, _utils._getAssetDecimals)(fromToken));
28
+ return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
29
+ }
30
+ if (new _bignumber.default(feeTokenBalance).lte(feeAmount)) {
31
+ return new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${feeTokenChainInfo.name}) to pay transaction fee`);
32
+ }
33
+ if (!(0, _utils._isNativeToken)(fromToken) && fromToken.slug === feeToken.slug) {
34
+ // todo: need review and refactor
35
+ if (bnFromTokenBalance.lte(new _bignumber.default(feeAmount).plus(swapAmount))) {
36
+ return new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
37
+ }
38
+ }
39
+ if (isXcmOk) {
40
+ // assume that the swap is valid if XCM is in the process and it was successful
41
+ return undefined;
42
+ }
43
+ if (minSwap) {
44
+ if (bnFromTokenBalance.lte(minSwap)) {
45
+ const parsedMinSwapValue = (0, _utils2.formatNumber)(minSwap, (0, _utils._getAssetDecimals)(fromToken));
46
+ return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
47
+ }
48
+ }
49
+
50
+ if (new _bignumber.default(swapAmount).gte(fromTokenBalance)) {
51
+ const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(fromTokenBalance, (0, _utils._getAssetDecimals)(fromToken));
52
+ return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
53
+ }
54
+ return undefined;
55
+ }
22
56
  function _validateBalanceToSwap(fromToken, feeToken, feeTokenChainInfo, feeAmount, fromTokenBalance, feeTokenBalance, swapAmount, isXcmOk, minSwap) {
57
+ const bnFromTokenBalance = new _bignumber.default(fromTokenBalance);
23
58
  if (new _bignumber.default(feeTokenBalance).lte(feeAmount)) {
24
59
  return new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE, `You don't have enough ${feeToken.symbol} (${feeTokenChainInfo.name}) to pay transaction fee`);
25
60
  }
26
61
  if (fromToken.slug === feeToken.slug) {
27
- if (new _bignumber.default(fromTokenBalance).lte(new _bignumber.default(feeAmount).plus(swapAmount))) {
62
+ // todo: need review and refactor
63
+ if (bnFromTokenBalance.lte(new _bignumber.default(feeAmount).plus(swapAmount))) {
28
64
  return new _TransactionError.TransactionError(_KoniTypes.BasicTxErrorType.NOT_ENOUGH_BALANCE, `Insufficient balance. Deposit ${fromToken.symbol} and try again.`);
29
65
  }
30
66
  }
@@ -33,7 +69,7 @@ function _validateBalanceToSwap(fromToken, feeToken, feeTokenChainInfo, feeAmoun
33
69
  return undefined;
34
70
  }
35
71
  if (minSwap) {
36
- if (new _bignumber.default(fromTokenBalance).lte(minSwap)) {
72
+ if (bnFromTokenBalance.lte(minSwap)) {
37
73
  const parsedMinSwapValue = (0, _utils2.formatNumber)(minSwap, (0, _utils._getAssetDecimals)(fromToken));
38
74
  return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_NOT_ENOUGH_BALANCE, `Insufficient balance. You need more than ${parsedMinSwapValue} ${fromToken.symbol} to start swapping. Deposit ${fromToken.symbol} and try again.`); // todo: min swap or amount?
39
75
  }
@@ -41,7 +77,7 @@ function _validateBalanceToSwap(fromToken, feeToken, feeTokenChainInfo, feeAmoun
41
77
 
42
78
  if (new _bignumber.default(swapAmount).gte(fromTokenBalance)) {
43
79
  const parsedMaxBalanceSwap = (0, _utils2.formatNumber)(fromTokenBalance, (0, _utils._getAssetDecimals)(fromToken));
44
- return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${new _bignumber.default(fromTokenBalance).gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
80
+ return new _TransactionError.TransactionError(_swap.SwapErrorType.SWAP_EXCEED_ALLOWANCE, `Amount too high. Lower your amount ${bnFromTokenBalance.gt(0) ? `below ${parsedMaxBalanceSwap} ${fromToken.symbol}` : ''} and try again`);
45
81
  }
46
82
  return undefined;
47
83
  }
@@ -96,4 +132,21 @@ function _getEarlyHydradxValidationError(error, metadata) {
96
132
  default:
97
133
  return new _SwapError.SwapError(error);
98
134
  }
135
+ }
136
+ function _getEarlyAssetHubValidationError(error, metadata) {
137
+ switch (error) {
138
+ case _swap.SwapErrorType.AMOUNT_CANNOT_BE_ZERO:
139
+ return new _SwapError.SwapError(error, 'Amount too low. Increase your amount above 0 and try again');
140
+ case _swap.SwapErrorType.ASSET_NOT_SUPPORTED:
141
+ return new _SwapError.SwapError(error, 'This swap pair is not supported');
142
+ case _swap.SwapErrorType.UNKNOWN:
143
+ return new _SwapError.SwapError(error, `Undefined error. Check your Internet and ${metadata.chain.slug} connection or contact support`);
144
+ case _swap.SwapErrorType.ERROR_FETCHING_QUOTE:
145
+ return new _SwapError.SwapError(error, 'No swap quote found. Adjust your amount or try again later.');
146
+ case _swap.SwapErrorType.MAKE_POOL_NOT_ENOUGH_EXISTENTIAL_DEPOSIT:
147
+ return new _SwapError.SwapError(error, 'You swap too much. It make pool not enough existential deposit');
148
+ // TODO: i18n this
149
+ default:
150
+ return new _SwapError.SwapError(error);
151
+ }
99
152
  }
@@ -15,7 +15,8 @@ function _getActiveStakeInNominationPool(memberInfo) {
15
15
  return new _bignumber.default(memberInfo.points.toString());
16
16
  }
17
17
  function _getUnbondingStakeInNominationPool(memberInfo) {
18
- return new _bignumber.default(Object.values(memberInfo.unbondingEras).reduce((a, b) => a + b, 0));
18
+ const unbondingValues = Object.values(memberInfo.unbondingEras).map(unbonding => new _bignumber.default(unbonding));
19
+ return new _bignumber.default(Object.values(unbondingValues).reduce((a, b) => a.plus(b), new _bignumber.default(0)));
19
20
  }
20
21
  function _getTotalStakeInNominationPool(memberInfo) {
21
22
  return _getActiveStakeInNominationPool(memberInfo).plus(_getUnbondingStakeInNominationPool(memberInfo));
@@ -3,12 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_ENDPOINT = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.IPFS_ETH_ARAGON = exports.IPFS2_RMRK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = exports.BIT_AVATAR_API = void 0;
6
+ exports.W3S_IPFS = exports.VARA_SCAN_ENDPOINT = exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.UNIQUE_SCAN_ENDPOINT = exports.UNIQUE_IPFS_GATEWAY = exports.TRANSFER_CHAIN_ID = exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = exports.SUPPORTED_TRANSFER_EVM_CHAIN = exports.SUPPORTED_NFT_NETWORKS = exports.SUBWALLET_IPFS = exports.SINGULAR_V2_ENDPOINT = exports.SINGULAR_V2_COLLECTION_ENDPOINT = exports.SINGULAR_V1_ENDPOINT = exports.SINGULAR_V1_COLLECTION_ENDPOINT = exports.RMRK_PINATA_SERVER = exports.QUARTZ_SCAN_ENDPOINT = exports.PINATA_IPFS_GATEWAY = exports.OPAL_SCAN_ENDPOINT = exports.NFT_STORAGE_GATEWAY = exports.KANARIA_EXTERNAL_SERVER = exports.KANARIA_ENDPOINT = exports.IPFS_W3S_LINK = exports.IPFS_IO = exports.IPFS_GATEWAY_4EVERLAND = exports.IPFS_FLEEK = exports.IPFS_ETH_ARAGON = exports.IPFS2_RMRK = exports.GATEWAY_IPFS_IO = exports.DWEB_LINK = exports.CLOUDFLARE_PINATA_SERVER = exports.CF_IPFS_GATEWAY = exports.BIT_COUNTRY_THUMBNAIL_RESOLVER = exports.BIT_COUNTRY_LAND_ESTATE_METADATA_API = exports.BIT_COUNTRY_IPFS_SERVER = exports.BIT_AVATAR_API = void 0;
7
7
  exports.getRandomIpfsGateway = getRandomIpfsGateway;
8
- var _utils = require("@subwallet/extension-base/utils");
8
+ var _environment = require("@subwallet/extension-base/utils/environment");
9
9
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
10
10
  // SPDX-License-Identifier: Apache-2.0
11
11
 
12
+ // do not change to shorten path, avoid circle import
13
+
12
14
  const SINGULAR_V1_ENDPOINT = 'https://singular.rmrk-api.xyz/api/account-rmrk1/';
13
15
  exports.SINGULAR_V1_ENDPOINT = SINGULAR_V1_ENDPOINT;
14
16
  const SINGULAR_V2_ENDPOINT = 'https://singular.rmrk-api.xyz/api/account/';
@@ -110,6 +112,8 @@ exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME;
110
112
  })(SUPPORTED_TRANSFER_EVM_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_EVM_CHAIN_NAME = SUPPORTED_TRANSFER_EVM_CHAIN_NAME = {}));
111
113
  const SUPPORTED_TRANSFER_EVM_CHAIN = [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonriver, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.astarEvm, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shiden, SUPPORTED_TRANSFER_EVM_CHAIN_NAME.shibuya];
112
114
  exports.SUPPORTED_TRANSFER_EVM_CHAIN = SUPPORTED_TRANSFER_EVM_CHAIN;
115
+ const UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = ['unique_evm'];
116
+ exports.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME = UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME;
113
117
  const TRANSFER_CHAIN_ID = {
114
118
  [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbase]: 1287,
115
119
  [SUPPORTED_TRANSFER_EVM_CHAIN_NAME.moonbeam]: 1284,
@@ -134,33 +138,43 @@ exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_C
134
138
  SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME["pioneer"] = "pioneer";
135
139
  })(SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME || (exports.SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = SUPPORTED_TRANSFER_SUBSTRATE_CHAIN_NAME = {}));
136
140
  const RANDOM_IPFS_GATEWAY_SETTING = [];
137
- if (_utils.isFirefox) {
141
+ if (_environment.isFirefox) {
138
142
  RANDOM_IPFS_GATEWAY_SETTING.push({
139
143
  provider: SUBWALLET_IPFS,
140
144
  weight: 5000
141
145
  });
142
146
  }
143
- if (_utils.RuntimeInfo.protocol && _utils.RuntimeInfo.protocol.startsWith('http')) {
147
+ if (_environment.RuntimeInfo.protocol && _environment.RuntimeInfo.protocol.startsWith('http')) {
144
148
  // This is for https
145
- if (_utils.RuntimeInfo.protocol.startsWith('https')) {
146
- RANDOM_IPFS_GATEWAY_SETTING.push({
147
- provider: IPFS_FLEEK,
148
- weight: 4
149
- }, {
150
- provider: IPFS_GATEWAY_4EVERLAND,
151
- weight: 2
152
- }, {
153
- provider: IPFS_W3S_LINK,
154
- weight: 1
155
- }, {
156
- provider: CF_IPFS_GATEWAY,
157
- weight: 4
158
- }, {
159
- provider: PINATA_IPFS_GATEWAY,
160
- weight: 1 // Rate limit too low
161
- }, {
162
- provider: IPFS_IO,
163
- weight: 5
149
+ if (_environment.RuntimeInfo.protocol.startsWith('https')) {
150
+ RANDOM_IPFS_GATEWAY_SETTING.push(
151
+ // {
152
+ // provider: IPFS_FLEEK,
153
+ // weight: 4
154
+ // },
155
+ // {
156
+ // provider: IPFS_GATEWAY_4EVERLAND,
157
+ // weight: 2
158
+ // },
159
+ // {
160
+ // provider: IPFS_W3S_LINK,
161
+ // weight: 1
162
+ // },
163
+ // {
164
+ // provider: CF_IPFS_GATEWAY,
165
+ // weight: 4
166
+ // },
167
+ // {
168
+ // provider: PINATA_IPFS_GATEWAY,
169
+ // weight: 1 // Rate limit too low
170
+ // },
171
+ // {
172
+ // provider: IPFS_IO,
173
+ // weight: 5
174
+ // },
175
+ {
176
+ provider: SUBWALLET_IPFS,
177
+ weight: 10
164
178
  });
165
179
  }
166
180
  } else {
@@ -25,7 +25,7 @@ var _assethub_nft = _interopRequireDefault(require("./assethub_nft"));
25
25
  // import UniqueNftApi from '@subwallet/extension-base/koni/api/nft/unique_nft';
26
26
 
27
27
  function createSubstrateNftApi(chain, substrateApi, addresses) {
28
- const [substrateAddresses] = (0, _utils2.categoryAddresses)(addresses);
28
+ const [substrateAddresses, evmAddresses] = (0, _utils2.categoryAddresses)(addresses);
29
29
  if (_constants._NFT_CHAIN_GROUP.acala.includes(chain)) {
30
30
  return [new _acala_nft.AcalaNftApi(substrateApi, substrateAddresses, chain)];
31
31
  } else if (_constants._NFT_CHAIN_GROUP.karura.includes(chain)) {
@@ -38,6 +38,8 @@ function createSubstrateNftApi(chain, substrateApi, addresses) {
38
38
  return [new _assethub_unique.default(substrateApi, substrateAddresses, chain), new _assethub_nft.default(substrateApi, substrateAddresses, chain)];
39
39
  } else if (_constants._NFT_CHAIN_GROUP.unique_network.includes(chain)) {
40
40
  return [new _unique_network_nft.UniqueNftApi(chain, substrateAddresses)];
41
+ } else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(chain)) {
42
+ return [new _unique_network_nft.UniqueNftApi(chain, evmAddresses)];
41
43
  } else if (_constants._NFT_CHAIN_GROUP.bitcountry.includes(chain)) {
42
44
  return [new _bit.BitCountryNftApi(substrateApi, substrateAddresses, chain)];
43
45
  } else if (_constants._NFT_CHAIN_GROUP.vara.includes(chain)) {
@@ -128,6 +130,12 @@ class NftHandler {
128
130
  }
129
131
  }
130
132
  }
133
+ if (chain === 'unique_evm') {
134
+ const handlers = createSubstrateNftApi(chain, null, evmAddresses);
135
+ if (handlers && !!handlers.length) {
136
+ this.handlers.push(...handlers);
137
+ }
138
+ }
131
139
  if ((0, _utils._isChainSupportWasmNft)(chainInfo)) {
132
140
  if (this.substrateApiMap[chain]) {
133
141
  const handler = createWasmNftApi(chain, this.substrateApiMap[chain], substrateAddresses);
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.UniqueNftApi = void 0;
7
7
  var _config = require("@subwallet/extension-base/koni/api/nft/config");
8
8
  var _nft = require("@subwallet/extension-base/koni/api/nft/nft");
9
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
9
10
  var _utils = require("@subwallet/extension-base/utils");
10
11
  var _utilCrypto = require("@polkadot/util-crypto");
11
12
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
@@ -21,23 +22,13 @@ class UniqueNftApi extends _nft.BaseNftApi {
21
22
  handleProperties(nft) {
22
23
  const propertiesMap = {};
23
24
  const attRecord = nft.attributes;
24
- if (attRecord) {
25
- for (const item in attRecord) {
26
- const attName = attRecord[item].name._;
27
- const attInfo = attRecord[item].value;
28
- if (Array.isArray(attInfo)) {
29
- const attList = [];
30
- for (const trait of attInfo) {
31
- attList.push(trait._);
32
- }
33
- propertiesMap[attName] = {
34
- value: attList
35
- };
36
- } else {
37
- propertiesMap[attName] = {
38
- value: attInfo._
39
- };
40
- }
25
+ if (attRecord.length) {
26
+ for (const item of attRecord) {
27
+ const attName = item.trait_type;
28
+ const attInfo = item.value;
29
+ propertiesMap[attName] = {
30
+ value: attInfo
31
+ };
41
32
  }
42
33
  }
43
34
  return propertiesMap;
@@ -84,8 +75,10 @@ class UniqueNftApi extends _nft.BaseNftApi {
84
75
  endpoint = _config.OPAL_SCAN_ENDPOINT;
85
76
  uniqueAddress = address;
86
77
  // Opal address: Normal address
78
+ } else if (_constants._NFT_CHAIN_GROUP.unique_evm.includes(this.chain)) {
79
+ endpoint = _config.UNIQUE_SCAN_ENDPOINT;
80
+ uniqueAddress = address.toLowerCase();
87
81
  }
88
-
89
82
  const resp = await fetch(endpoint, {
90
83
  method: 'post',
91
84
  headers: {
@@ -105,7 +98,6 @@ class UniqueNftApi extends _nft.BaseNftApi {
105
98
  if (nfts) {
106
99
  const collectionMap = {};
107
100
  for (const nft of nfts) {
108
- var _nft$image;
109
101
  // Handle case rendering image on Quartz Network (Temporary solution)
110
102
  if (this.chain === 'quartz' && nft.collection_id.toString() === '141') {
111
103
  continue;
@@ -120,7 +112,7 @@ class UniqueNftApi extends _nft.BaseNftApi {
120
112
  chain: this.chain,
121
113
  owner: address,
122
114
  name: nft.token_name,
123
- image: this.parseUrl((_nft$image = nft.image) === null || _nft$image === void 0 ? void 0 : _nft$image.fullUrl),
115
+ image: this.parseUrl(nft.image),
124
116
  description: nft.collection_description,
125
117
  collectionId: nft.collection_id.toString(),
126
118
  properties: propertiesMap
@@ -20,6 +20,7 @@ var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3
20
20
  var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
21
21
  var _domain = require("@subwallet/extension-base/koni/api/dotsama/domain");
22
22
  var _parseTransaction = require("@subwallet/extension-base/koni/api/dotsama/parseTransaction");
23
+ var _config = require("@subwallet/extension-base/koni/api/nft/config");
23
24
  var _transfer2 = require("@subwallet/extension-base/koni/api/nft/transfer");
24
25
  var _bonding = require("@subwallet/extension-base/koni/api/staking/bonding");
25
26
  var _paraChain = require("@subwallet/extension-base/koni/api/staking/bonding/paraChain");
@@ -1856,6 +1857,17 @@ class KoniExtension {
1856
1857
  } = inputData;
1857
1858
  const contractAddress = params.contractAddress;
1858
1859
  const tokenId = params.tokenId;
1860
+ if (_config.UNSUPPORTED_TRANSFER_EVM_CHAIN_NAME.includes(networkKey)) {
1861
+ return await this.#koniState.transactionService.handleTransaction({
1862
+ address: senderAddress,
1863
+ chain: networkKey,
1864
+ chainType: _KoniTypes.ChainType.EVM,
1865
+ data: inputData,
1866
+ extrinsicType: _KoniTypes.ExtrinsicType.SEND_NFT,
1867
+ transaction: null,
1868
+ url: _constants3.EXTENSION_REQUEST_URL
1869
+ });
1870
+ }
1859
1871
  const transaction = await (0, _smartContract.getERC721Transaction)(this.#koniState.getEvmApi(networkKey), networkKey, contractAddress, senderAddress, recipientAddress, tokenId);
1860
1872
 
1861
1873
  // this.addContact(recipientAddress);
@@ -13,6 +13,6 @@ const packageInfo = {
13
13
  name: '@subwallet/extension-base',
14
14
  path: typeof __dirname === 'string' ? __dirname : 'auto',
15
15
  type: 'cjs',
16
- version: '1.2.13-0'
16
+ version: '1.2.15-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -11,7 +11,7 @@ exports.isUseTeleportProtocol = isUseTeleportProtocol;
11
11
  const STABLE_XCM_VERSION = 3;
12
12
  exports.STABLE_XCM_VERSION = STABLE_XCM_VERSION;
13
13
  function isUseTeleportProtocol(originChainInfo, destChainInfo) {
14
- const relayChainToSystemChain = ['polkadot'].includes(originChainInfo.slug) && ['statemint'].includes(destChainInfo.slug) || ['kusama'].includes(originChainInfo.slug) && ['statemine'].includes(destChainInfo.slug);
15
- const systemChainToRelayChain = ['polkadot'].includes(destChainInfo.slug) && ['statemint'].includes(originChainInfo.slug) || ['kusama'].includes(destChainInfo.slug) && ['statemine'].includes(originChainInfo.slug);
14
+ const relayChainToSystemChain = ['polkadot'].includes(originChainInfo.slug) && ['statemint'].includes(destChainInfo.slug) || ['kusama'].includes(originChainInfo.slug) && ['statemine'].includes(destChainInfo.slug) || ['rococo'].includes(originChainInfo.slug) && ['rococo_assethub'].includes(destChainInfo.slug);
15
+ const systemChainToRelayChain = ['polkadot'].includes(destChainInfo.slug) && ['statemint'].includes(originChainInfo.slug) || ['kusama'].includes(destChainInfo.slug) && ['statemine'].includes(originChainInfo.slug) || ['rococo'].includes(destChainInfo.slug) && ['rococo_assethub'].includes(originChainInfo.slug);
16
16
  return relayChainToSystemChain || systemChainToRelayChain;
17
17
  }
@@ -61,6 +61,7 @@ const _NFT_CHAIN_GROUP = {
61
61
  statemine: ['statemine'],
62
62
  statemint: ['statemint'],
63
63
  unique_network: ['unique_network', 'quartz', 'opal'],
64
+ unique_evm: ['unique_evm'],
64
65
  bitcountry: ['bitcountry', 'pioneer', 'continuum_network'],
65
66
  vara: ['vara_network']
66
67
  };
@@ -272,7 +273,7 @@ const _DEFAULT_MANTA_ZK_CHAIN = 'calamari';
272
273
  exports._DEFAULT_MANTA_ZK_CHAIN = _DEFAULT_MANTA_ZK_CHAIN;
273
274
  const _XCM_CHAIN_GROUP = {
274
275
  polkadotXcm: ['astar', 'shiden', 'statemine', 'statemint', 'equilibrium_parachain', 'rococo_assethub'],
275
- xcmPallet: ['polkadot', 'kusama']
276
+ xcmPallet: ['polkadot', 'kusama', 'rococo']
276
277
  // default is xTokens pallet
277
278
  };
278
279
  exports._XCM_CHAIN_GROUP = _XCM_CHAIN_GROUP;
@@ -31,8 +31,14 @@ const typesBundle = {
31
31
  const _availSpec = {
32
32
  signedExtensions: _availJsSdk.spec.signedExtensions
33
33
  };
34
+
35
+ // Override avail goldberg spec for signedExtensions
36
+ const _goldbergSpec = {
37
+ signedExtensions: _availJsSdk.spec.signedExtensions
38
+ };
34
39
  if (typesBundle.spec) {
35
40
  typesBundle.spec.avail = _availSpec;
41
+ typesBundle.spec['data-avail'] = _goldbergSpec;
36
42
  }
37
43
  class SubstrateApi {
38
44
  useLightClient = false;
@@ -11,11 +11,11 @@ var _bignumber = _interopRequireDefault(require("bignumber.js"));
11
11
 
12
12
  const chainProvider = {
13
13
  default: 0,
14
- ethereum: 1,
14
+ ethereum: 0,
15
15
  polygon: 2,
16
- shidenEvm: 2,
17
- shiden: 2,
18
- ajunaPolkadot: 1,
16
+ shidenEvm: 1,
17
+ shiden: 1,
18
+ ajunaPolkadot: 0,
19
19
  crabParachain: 1,
20
20
  astarEvm: 1,
21
21
  shibuya: 1,
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getSubstrateNativeInfo = exports.getPsp22AssetInfo = exports.getLocalAssetInfo = exports.getEvmNativeInfo = exports.getErc20AssetInfo = exports.compareAsset = void 0;
7
+ exports.validateAsset = exports.getSubstrateNativeInfo = exports.getPsp22AssetInfo = exports.getLocalAssetInfo = exports.getEvmNativeInfo = exports.getErc20AssetInfo = exports.compareAsset = void 0;
8
8
  var _web = require("@subwallet/extension-base/koni/api/contract-handler/evm/web3");
9
9
  var _utils = require("@subwallet/extension-base/koni/api/contract-handler/utils");
10
10
  var _utils2 = require("@subwallet/extension-base/koni/api/contract-handler/wasm/utils");
@@ -116,13 +116,12 @@ const getByAssetManagerWithAssetIdPallet = async (asset, api) => {
116
116
  };
117
117
  };
118
118
  const getByAssetRegistryWithAssetIdPallet = async (asset, api) => {
119
- const [_info, _metadata] = await api.queryMulti([[api.query.assetRegistry.assets, (0, _utils3._getTokenOnChainAssetId)(asset)], [api.query.assetRegistry.assetMetadataMap, (0, _utils3._getTokenOnChainAssetId)(asset)]]);
119
+ const [_info] = await api.queryMulti([[api.query.assetRegistry.assets, (0, _utils3._getTokenOnChainAssetId)(asset)]]);
120
120
  const info = _info.toPrimitive();
121
- const metadata = _metadata.toPrimitive();
122
121
  return {
123
- decimals: metadata.decimals,
122
+ decimals: info.decimals,
124
123
  minAmount: info.existentialDeposit.toString(),
125
- symbol: metadata.symbol
124
+ symbol: info.symbol
126
125
  };
127
126
  };
128
127
  const getLocalAssetInfo = async (chain, asset, api) => {
@@ -277,4 +276,22 @@ const compareAsset = (assetInfo, asset, errors) => {
277
276
  errors.push(`Wrong decimals: current - ${(_asset$decimals = asset.decimals) !== null && _asset$decimals !== void 0 ? _asset$decimals : 'null'}, onChain - ${decimals}`);
278
277
  }
279
278
  };
280
- exports.compareAsset = compareAsset;
279
+ exports.compareAsset = compareAsset;
280
+ const validateAsset = (onchainAsset, chainlistAsset) => {
281
+ const {
282
+ decimals,
283
+ minAmount,
284
+ symbol
285
+ } = onchainAsset;
286
+ const chainlistMinAmount = chainlistAsset.minAmount || '0';
287
+ const chainlistDecimals = chainlistAsset.decimals || 0;
288
+ const chainlistSymbol = chainlistAsset.symbol;
289
+ console.log(`[i] minAmount: current - ${chainlistMinAmount}, onchain - ${minAmount}`);
290
+ console.log(`[i] decimals: current - ${chainlistDecimals}, onchain - ${decimals}`);
291
+ console.log(`[i] symbol: current - ${chainlistSymbol}, onchain - ${symbol}`);
292
+ const isValidSymbol = symbol === chainlistSymbol ? true : 'zk' + symbol === chainlistSymbol;
293
+ const isValidMinAmount = minAmount === chainlistMinAmount;
294
+ const isValidDecimal = decimals === chainlistDecimals;
295
+ return isValidSymbol && isValidMinAmount && isValidDecimal;
296
+ };
297
+ exports.validateAsset = validateAsset;
@@ -4,12 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.compareNativeAsset = void 0;
7
+ exports.compareNativeAsset = exports.checkSs58Prefix = exports.checkParachainId = exports.checkNativeAsset = void 0;
8
8
  var _constants = require("@subwallet/extension-base/services/chain-service/health-check/constants");
9
9
  var _bignumber = _interopRequireDefault(require("bignumber.js"));
10
10
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
11
11
  // SPDX-License-Identifier: Apache-2.0
12
12
 
13
+ // function for old health-check chain
13
14
  const compareNativeAsset = (assetInfo, nativeAsset, errors) => {
14
15
  const {
15
16
  decimals: _decimals,
@@ -33,4 +34,26 @@ const compareNativeAsset = (assetInfo, nativeAsset, errors) => {
33
34
  errors.push(`Wrong decimals: current - ${_decimals}, onChain - ${decimals}`);
34
35
  }
35
36
  };
36
- exports.compareNativeAsset = compareNativeAsset;
37
+ exports.compareNativeAsset = compareNativeAsset;
38
+ const checkNativeAsset = (assetInfo, nativeAsset) => {
39
+ const {
40
+ decimals: _decimals,
41
+ existentialDeposit: _minAmount,
42
+ symbol: _symbol
43
+ } = nativeAsset;
44
+ const {
45
+ decimals,
46
+ minAmount,
47
+ symbol
48
+ } = assetInfo;
49
+ return minAmount === _minAmount && symbol === _symbol && decimals === _decimals;
50
+ };
51
+ exports.checkNativeAsset = checkNativeAsset;
52
+ const checkSs58Prefix = (onchainPrefix, chainlistPrefix) => {
53
+ return onchainPrefix === chainlistPrefix;
54
+ };
55
+ exports.checkSs58Prefix = checkSs58Prefix;
56
+ const checkParachainId = (onchainPrefix, chainlistPrefix) => {
57
+ return onchainPrefix === chainlistPrefix;
58
+ };
59
+ exports.checkParachainId = checkParachainId;