@subwallet/extension-base 1.3.66-0 → 1.3.68-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 (81) hide show
  1. package/background/KoniTypes.d.ts +12 -1
  2. package/cjs/constants/environment.js +1 -3
  3. package/cjs/constants/index.js +4 -1
  4. package/cjs/core/substrate/system-pallet.js +4 -0
  5. package/cjs/core/substrate/xcm-parser.js +0 -176
  6. package/cjs/koni/api/nft/rari/index.js +1 -1
  7. package/cjs/koni/background/cron.js +16 -0
  8. package/cjs/koni/background/handlers/Extension.js +166 -90
  9. package/cjs/koni/background/handlers/State.js +25 -0
  10. package/cjs/packageInfo.js +1 -1
  11. package/cjs/services/balance-service/helpers/group.js +31 -2
  12. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +51 -13
  13. package/cjs/services/balance-service/helpers/subscribe/substrate/utils.js +69 -0
  14. package/cjs/services/balance-service/index.js +36 -11
  15. package/cjs/services/balance-service/transfer/smart-contract.js +56 -23
  16. package/cjs/services/balance-service/transfer/xcm/index.js +30 -44
  17. package/cjs/services/balance-service/transfer/xcm/utils.js +53 -18
  18. package/cjs/services/chain-service/constants.js +8 -46
  19. package/cjs/services/chain-service/handler/EvmChainHandler.js +6 -3
  20. package/cjs/services/earning-service/handlers/base.js +7 -1
  21. package/cjs/services/nft-service/index.js +173 -0
  22. package/cjs/services/swap-service/handler/base-handler.js +18 -21
  23. package/cjs/services/transaction-service/index.js +1 -1
  24. package/cjs/types/balance/index.js +26 -1
  25. package/cjs/utils/fee/transfer.js +5 -2
  26. package/cjs/utils/index.js +25 -2
  27. package/cjs/utils/setup-api-sdk.js +0 -5
  28. package/constants/environment.d.ts +0 -1
  29. package/constants/environment.js +0 -1
  30. package/constants/index.d.ts +1 -0
  31. package/constants/index.js +1 -0
  32. package/core/substrate/system-pallet.d.ts +1 -0
  33. package/core/substrate/system-pallet.js +3 -0
  34. package/core/substrate/types.d.ts +14 -0
  35. package/core/substrate/xcm-parser.d.ts +1 -49
  36. package/core/substrate/xcm-parser.js +1 -173
  37. package/koni/api/nft/rari/index.js +1 -1
  38. package/koni/background/cron.d.ts +1 -0
  39. package/koni/background/cron.js +17 -1
  40. package/koni/background/handlers/Extension.d.ts +3 -0
  41. package/koni/background/handlers/Extension.js +88 -14
  42. package/koni/background/handlers/State.d.ts +4 -0
  43. package/koni/background/handlers/State.js +25 -0
  44. package/package.json +16 -21
  45. package/packageInfo.js +1 -1
  46. package/services/balance-service/helpers/group.js +31 -2
  47. package/services/balance-service/helpers/subscribe/substrate/index.js +51 -13
  48. package/services/balance-service/helpers/subscribe/substrate/utils.d.ts +7 -0
  49. package/services/balance-service/helpers/subscribe/substrate/utils.js +58 -0
  50. package/services/balance-service/index.d.ts +4 -2
  51. package/services/balance-service/index.js +26 -6
  52. package/services/balance-service/transfer/smart-contract.d.ts +4 -0
  53. package/services/balance-service/transfer/smart-contract.js +54 -23
  54. package/services/balance-service/transfer/xcm/index.d.ts +2 -2
  55. package/services/balance-service/transfer/xcm/index.js +18 -32
  56. package/services/balance-service/transfer/xcm/utils.d.ts +1 -2
  57. package/services/balance-service/transfer/xcm/utils.js +51 -15
  58. package/services/chain-service/constants.d.ts +5 -24
  59. package/services/chain-service/constants.js +6 -35
  60. package/services/chain-service/handler/EvmChainHandler.js +6 -3
  61. package/services/earning-service/handlers/base.js +7 -1
  62. package/services/nft-service/index.d.ts +9 -0
  63. package/services/nft-service/index.js +165 -0
  64. package/services/swap-service/handler/base-handler.d.ts +0 -1
  65. package/services/swap-service/handler/base-handler.js +19 -22
  66. package/services/transaction-service/index.js +1 -1
  67. package/services/transaction-service/types.d.ts +2 -1
  68. package/types/balance/index.d.ts +14 -0
  69. package/types/balance/index.js +21 -1
  70. package/utils/fee/transfer.js +6 -3
  71. package/utils/index.js +25 -2
  72. package/utils/setup-api-sdk.js +1 -6
  73. package/cjs/services/balance-service/transfer/xcm/polkadotXcm.js +0 -30
  74. package/cjs/services/balance-service/transfer/xcm/xTokens.js +0 -32
  75. package/cjs/services/balance-service/transfer/xcm/xcmPallet.js +0 -23
  76. package/services/balance-service/transfer/xcm/polkadotXcm.d.ts +0 -3
  77. package/services/balance-service/transfer/xcm/polkadotXcm.js +0 -24
  78. package/services/balance-service/transfer/xcm/xTokens.d.ts +0 -3
  79. package/services/balance-service/transfer/xcm/xTokens.js +0 -26
  80. package/services/balance-service/transfer/xcm/xcmPallet.d.ts +0 -3
  81. package/services/balance-service/transfer/xcm/xcmPallet.js +0 -17
@@ -4,18 +4,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createXcmExtrinsic = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
7
+ exports.getXcmOriginFee = exports.dryRunXcmExtrinsicV2 = exports.createXcmExtrinsicV2 = exports.createSnowBridgeExtrinsic = exports.createPolygonBridgeExtrinsic = exports.createAvailBridgeTxFromEth = exports.createAvailBridgeExtrinsicFromAvail = exports.createAcrossBridgeExtrinsic = void 0;
8
8
  var _xcmParser = require("@subwallet/extension-base/core/substrate/xcm-parser");
9
9
  var _availBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge");
10
- var _polkadotXcm = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polkadotXcm");
11
10
  var _polygonBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge");
12
11
  var _snowBridge = require("@subwallet/extension-base/services/balance-service/transfer/xcm/snowBridge");
13
12
  var _utils = require("@subwallet/extension-base/services/balance-service/transfer/xcm/utils");
14
- var _xcmPallet = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xcmPallet");
15
- var _xTokens = require("@subwallet/extension-base/services/balance-service/transfer/xcm/xTokens");
16
- var _constants = require("@subwallet/extension-base/services/chain-service/constants");
17
- var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
18
- var _utils3 = require("@subwallet/extension-base/utils");
13
+ var _utils2 = require("@subwallet/extension-base/utils");
19
14
  var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
20
15
  var _posBridge = require("./posBridge");
21
16
  // Copyright 2019-2022 @subwallet/extension-base
@@ -46,34 +41,8 @@ const createSnowBridgeExtrinsic = async _ref => {
46
41
  }
47
42
  return (0, _snowBridge.getSnowBridgeEvmTransfer)(originTokenInfo, originChain, destinationChain, sender, recipient, sendingValue, evmApi, feeInfo, feeCustom, feeOption);
48
43
  };
49
-
50
- // deprecated
51
44
  exports.createSnowBridgeExtrinsic = createSnowBridgeExtrinsic;
52
- const createXcmExtrinsic = async _ref2 => {
53
- let {
54
- destinationChain,
55
- originChain,
56
- originTokenInfo,
57
- recipient,
58
- sendingValue,
59
- substrateApi
60
- } = _ref2;
61
- if (!substrateApi) {
62
- throw Error('Substrate API is not available');
63
- }
64
- const chainApi = await substrateApi.isReady;
65
- const api = chainApi.api;
66
- const polkadotXcmSpecialCases = _constants._XCM_CHAIN_GROUP.polkadotXcmSpecialCases.includes(originChain.slug) && (0, _utils2._isNativeToken)(originTokenInfo);
67
- if (_constants._XCM_CHAIN_GROUP.polkadotXcm.includes(originTokenInfo.originChain) || polkadotXcmSpecialCases) {
68
- return (0, _polkadotXcm.getExtrinsicByPolkadotXcmPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
69
- }
70
- if (_constants._XCM_CHAIN_GROUP.xcmPallet.includes(originTokenInfo.originChain)) {
71
- return (0, _xcmPallet.getExtrinsicByXcmPalletPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
72
- }
73
- return (0, _xTokens.getExtrinsicByXtokensPallet)(originTokenInfo, originChain, destinationChain, recipient, sendingValue, api);
74
- };
75
- exports.createXcmExtrinsic = createXcmExtrinsic;
76
- const createAvailBridgeTxFromEth = _ref3 => {
45
+ const createAvailBridgeTxFromEth = _ref2 => {
77
46
  let {
78
47
  evmApi,
79
48
  feeCustom,
@@ -83,7 +52,7 @@ const createAvailBridgeTxFromEth = _ref3 => {
83
52
  recipient,
84
53
  sender,
85
54
  sendingValue
86
- } = _ref3;
55
+ } = _ref2;
87
56
  if (!evmApi) {
88
57
  throw Error('Evm API is not available');
89
58
  }
@@ -93,19 +62,19 @@ const createAvailBridgeTxFromEth = _ref3 => {
93
62
  return (0, _availBridge.getAvailBridgeTxFromEth)(originChain, sender, recipient, sendingValue, evmApi, feeInfo, feeCustom, feeOption);
94
63
  };
95
64
  exports.createAvailBridgeTxFromEth = createAvailBridgeTxFromEth;
96
- const createAvailBridgeExtrinsicFromAvail = async _ref4 => {
65
+ const createAvailBridgeExtrinsicFromAvail = async _ref3 => {
97
66
  let {
98
67
  recipient,
99
68
  sendingValue,
100
69
  substrateApi
101
- } = _ref4;
70
+ } = _ref3;
102
71
  if (!substrateApi) {
103
72
  throw Error('Substrate API is not available');
104
73
  }
105
74
  return await (0, _availBridge.getAvailBridgeExtrinsicFromAvail)(recipient, sendingValue, substrateApi);
106
75
  };
107
76
  exports.createAvailBridgeExtrinsicFromAvail = createAvailBridgeExtrinsicFromAvail;
108
- const createPolygonBridgeExtrinsic = async _ref5 => {
77
+ const createPolygonBridgeExtrinsic = async _ref4 => {
109
78
  let {
110
79
  destinationChain,
111
80
  evmApi,
@@ -117,7 +86,7 @@ const createPolygonBridgeExtrinsic = async _ref5 => {
117
86
  recipient,
118
87
  sender,
119
88
  sendingValue
120
- } = _ref5;
89
+ } = _ref4;
121
90
  const isPolygonBridgeXcm = (0, _xcmParser._isPolygonBridgeXcm)(originChain, destinationChain);
122
91
  const isValidBridge = isPolygonBridgeXcm || (0, _xcmParser._isPosBridgeXcm)(originChain, destinationChain);
123
92
  if (!isValidBridge) {
@@ -143,9 +112,10 @@ const createXcmExtrinsicV2 = async request => {
143
112
  }
144
113
  };
145
114
  exports.createXcmExtrinsicV2 = createXcmExtrinsicV2;
146
- const dryRunXcmExtrinsicV2 = async request => {
115
+ const dryRunXcmExtrinsicV2 = async function (request) {
116
+ let isPreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
147
117
  try {
148
- const dryRunResult = await (0, _utils.dryRunXcm)(request);
118
+ const dryRunResult = isPreview ? await (0, _utils.dryRunPreviewXcm)(request) : await (0, _utils.dryRunXcm)(request);
149
119
  const originDryRunRs = dryRunResult.origin;
150
120
  if (originDryRunRs.success) {
151
121
  const {
@@ -176,7 +146,23 @@ const dryRunXcmExtrinsicV2 = async request => {
176
146
  }
177
147
  };
178
148
  exports.dryRunXcmExtrinsicV2 = dryRunXcmExtrinsicV2;
179
- const createAcrossBridgeExtrinsic = async _ref6 => {
149
+ const getXcmOriginFee = async request => {
150
+ try {
151
+ const xcmFeeInfo = await (0, _utils.estimateXcmFee)({
152
+ fromChainInfo: request.originChain,
153
+ fromTokenInfo: request.originTokenInfo,
154
+ toChainInfo: request.destinationChain,
155
+ recipient: request.recipient,
156
+ sender: request.sender,
157
+ value: request.sendingValue
158
+ });
159
+ return xcmFeeInfo === null || xcmFeeInfo === void 0 ? void 0 : xcmFeeInfo.origin.fee;
160
+ } catch (e) {
161
+ return undefined;
162
+ }
163
+ };
164
+ exports.getXcmOriginFee = getXcmOriginFee;
165
+ const createAcrossBridgeExtrinsic = async _ref5 => {
180
166
  let {
181
167
  destinationChain,
182
168
  destinationTokenInfo,
@@ -189,7 +175,7 @@ const createAcrossBridgeExtrinsic = async _ref6 => {
189
175
  recipient,
190
176
  sender,
191
177
  sendingValue
192
- } = _ref6;
178
+ } = _ref5;
193
179
  const isAcrossBridgeXcm = (0, _xcmParser._isAcrossBridgeXcm)(originChain, destinationChain);
194
180
  if (!isAcrossBridgeXcm) {
195
181
  throw new Error('This is not a valid AcrossBridge transfer');
@@ -209,7 +195,7 @@ const createAcrossBridgeExtrinsic = async _ref6 => {
209
195
  value: sendingValue
210
196
  });
211
197
  const _feeCustom = feeCustom;
212
- const feeCombine = (0, _utils3.combineEthFee)(feeInfo, feeOption, _feeCustom);
198
+ const feeCombine = (0, _utils2.combineEthFee)(feeInfo, feeOption, _feeCustom);
213
199
  if (!data) {
214
200
  throw new Error('Failed to fetch Across Bridge Data. Please try again later');
215
201
  }
@@ -1,18 +1,19 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
- exports.STABLE_XCM_VERSION = void 0;
7
7
  exports.buildXcm = buildXcm;
8
+ exports.dryRunPreviewXcm = dryRunPreviewXcm;
8
9
  exports.dryRunXcm = dryRunXcm;
9
10
  exports.estimateXcmFee = estimateXcmFee;
10
11
  exports.isChainNotSupportDryRun = isChainNotSupportDryRun;
11
12
  exports.isChainNotSupportPolkadotApi = isChainNotSupportPolkadotApi;
12
- exports.isUseTeleportProtocol = isUseTeleportProtocol;
13
13
  var _paraspellChainMap = require("@subwallet/extension-base/constants/paraspell-chain-map");
14
14
  var _environment = require("@subwallet/extension-base/types/environment");
15
15
  var _utils = require("@subwallet/extension-base/utils");
16
+ var _bignumber = _interopRequireDefault(require("bignumber.js"));
16
17
  var _util = require("@polkadot/util");
17
18
  // Copyright 2019-2022 @subwallet/extension-base
18
19
  // SPDX-License-Identifier: Apache-2.0
@@ -20,8 +21,9 @@ var _util = require("@polkadot/util");
20
21
  const version = '/v4';
21
22
  const paraSpellApi = {
22
23
  buildXcm: `${version}/x-transfer`,
24
+ feeXcm: `${version}/xcm-fee`,
23
25
  dryRunXcm: `${version}/dry-run`,
24
- feeXcm: `${version}/xcm-fee`
26
+ dryRunPreviewXcm: `${version}/dry-run-preview`
25
27
  };
26
28
  function txHexToSubmittableExtrinsic(api, hex) {
27
29
  try {
@@ -163,6 +165,51 @@ async function dryRunXcm(request) {
163
165
  }
164
166
  return await response.json();
165
167
  }
168
+ async function dryRunPreviewXcm(request) {
169
+ var _originTokenInfo$meta3;
170
+ const {
171
+ destinationChain,
172
+ originChain,
173
+ originTokenInfo,
174
+ recipient,
175
+ sender,
176
+ sendingValue
177
+ } = request;
178
+ const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
179
+ const paraSpellIdentifyV4 = (_originTokenInfo$meta3 = originTokenInfo.metadata) === null || _originTokenInfo$meta3 === void 0 ? void 0 : _originTokenInfo$meta3.paraSpellIdentifyV4;
180
+ if (!paraSpellIdentifyV4) {
181
+ throw new Error('Token is not support XCM at this time');
182
+ }
183
+ const bodyData = {
184
+ senderAddress: sender,
185
+ address: recipient,
186
+ from: paraSpellChainMap[originChain.slug],
187
+ to: paraSpellChainMap[destinationChain.slug],
188
+ currency: createParaSpellCurrency(paraSpellIdentifyV4, sendingValue),
189
+ options: {
190
+ abstractDecimals: false,
191
+ mintFeeAssets: true
192
+ }
193
+ };
194
+ const response = await (0, _utils.fetchFromProxyService)(_environment.ProxyServiceRoute.PARASPELL, paraSpellApi.dryRunPreviewXcm, {
195
+ method: 'POST',
196
+ body: JSON.stringify(bodyData),
197
+ headers: {
198
+ 'Content-Type': 'application/json',
199
+ Accept: 'application/json'
200
+ }
201
+ });
202
+ if (!response.ok) {
203
+ const error = await response.json();
204
+ return {
205
+ origin: {
206
+ success: false,
207
+ failureReason: error.message
208
+ }
209
+ };
210
+ }
211
+ return await response.json();
212
+ }
166
213
  async function estimateXcmFee(request) {
167
214
  var _fromTokenInfo$metada;
168
215
  const {
@@ -175,6 +222,8 @@ async function estimateXcmFee(request) {
175
222
  } = request;
176
223
  const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
177
224
  const paraSpellIdentifyV4 = (_fromTokenInfo$metada = fromTokenInfo.metadata) === null || _fromTokenInfo$metada === void 0 ? void 0 : _fromTokenInfo$metada.paraSpellIdentifyV4;
225
+ const requestValue = (0, _bignumber.default)(value).gt(0) ? value : '1'; // avoid bug in-case estimate fee sendingValue <= 0;
226
+
178
227
  if (!paraSpellIdentifyV4) {
179
228
  console.error('Lack of paraspell metadata');
180
229
  return undefined;
@@ -184,7 +233,7 @@ async function estimateXcmFee(request) {
184
233
  address: recipient,
185
234
  from: paraSpellChainMap[fromChainInfo.slug],
186
235
  to: paraSpellChainMap[toChainInfo.slug],
187
- currency: createParaSpellCurrency(paraSpellIdentifyV4, value),
236
+ currency: createParaSpellCurrency(paraSpellIdentifyV4, requestValue),
188
237
  options: {
189
238
  abstractDecimals: false
190
239
  }
@@ -204,8 +253,6 @@ async function estimateXcmFee(request) {
204
253
  return await response.json();
205
254
  }
206
255
  function createParaSpellCurrency(paraSpellIdentifyV4, amount) {
207
- // todo: handle complex conditions for asset has same symbol in a chain: Id, Multi-location, ...
208
- // todo: or update all asset to use multi-location
209
256
  return {
210
257
  ...paraSpellIdentifyV4,
211
258
  amount
@@ -220,16 +267,4 @@ function isChainNotSupportDryRun(str) {
220
267
  const regex = /(?=.*DryRunApi)(?=.*not available).*/i; // Example: DryRunApi is not available on node Acala
221
268
 
222
269
  return regex.test(str);
223
- }
224
-
225
- // todo: remove
226
- const STABLE_XCM_VERSION = 3;
227
-
228
- // todo: remove
229
- exports.STABLE_XCM_VERSION = STABLE_XCM_VERSION;
230
- function isUseTeleportProtocol(originChainInfo, destChainInfo, tokenSlug) {
231
- 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) || ['westend'].includes(originChainInfo.slug) && ['westend_assethub'].includes(destChainInfo.slug);
232
- 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) || ['westend'].includes(destChainInfo.slug) && ['westend_assethub'].includes(originChainInfo.slug);
233
- const isXcmMythos = originChainInfo.slug === 'mythos' && destChainInfo.slug === 'statemint' && tokenSlug === 'mythos-NATIVE-MYTH' || originChainInfo.slug === 'statemint' && destChainInfo.slug === 'mythos' && tokenSlug === 'statemint-LOCAL-MYTH';
234
- return relayChainToSystemChain || systemChainToRelayChain || isXcmMythos;
235
270
  }
@@ -3,9 +3,8 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._ZK_ASSET_PREFIX = exports._XCM_TYPE = exports._XCM_CHAIN_GROUP = exports._TRANSFER_NOT_SUPPORTED_CHAINS = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MULTI_CHAIN_ASSET_SRC = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._CHAIN_LOGO_MAP_SRC = exports._CHAIN_INFO_SRC = exports._CHAIN_ASSET_SRC = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_TOKEN_GROUP = exports._BALANCE_PARSING_CHAIN_GROUP = exports._BALANCE_CHAIN_GROUP = exports._ASSET_REF_SRC = exports._ASSET_LOGO_MAP_SRC = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_MAX_RETRY = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
6
+ exports._ZK_ASSET_PREFIX = exports._TRANSFER_CHAIN_GROUP = exports._SUBSTRATE_DEFAULT_INFLATION_PARAMS = exports._STAKING_ERA_LENGTH_MAP = exports._PURE_EVM_CHAINS = exports._PREDEFINED_SINGLE_MODES = exports._PARACHAIN_INFLATION_DISTRIBUTION = exports._NFT_CHAIN_GROUP = exports._MANTA_ZK_CHAIN_GROUP = exports._KNOWN_CHAIN_INFLATION_PARAMS = exports._EXPECTED_BLOCK_TIME = exports._DEFAULT_MANTA_ZK_CHAIN = exports._DEFAULT_ACTIVE_CHAINS = exports._BTC_SERVICE_TOKEN = exports._BITCOIN_TESTNET_NAME = exports._BITCOIN_TESTNET_CHAIN_SLUG = exports._BITCOIN_NAME = exports._BITCOIN_CHAIN_SLUG = exports._BALANCE_LOCKED_ID_GROUP = exports._BALANCE_CHAIN_GROUP = exports._API_OPTIONS_CHAIN_GROUP = exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = exports.EVM_REFORMAT_DECIMALS = exports.EVM_PASS_CONNECT_STATUS = exports.API_CONNECT_TIMEOUT = exports.API_AUTO_CONNECT_MS = void 0;
7
7
  var _chainList = require("@subwallet/chain-list");
8
- var _types = require("@subwallet/chain-list/types");
9
8
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
10
9
  // Copyright 2019-2022 @subwallet/extension-base
11
10
  // SPDX-License-Identifier: Apache-2.0
@@ -14,8 +13,6 @@ const API_AUTO_CONNECT_MS = 3000;
14
13
  exports.API_AUTO_CONNECT_MS = API_AUTO_CONNECT_MS;
15
14
  const API_CONNECT_TIMEOUT = 30000;
16
15
  exports.API_CONNECT_TIMEOUT = API_CONNECT_TIMEOUT;
17
- const API_MAX_RETRY = 2;
18
- exports.API_MAX_RETRY = API_MAX_RETRY;
19
16
  const _API_OPTIONS_CHAIN_GROUP = {
20
17
  acala: ['acala', 'karura', 'origintrail', 'kintsugi'],
21
18
  turing: ['turingStaging', 'turing'],
@@ -47,14 +44,16 @@ const _BALANCE_CHAIN_GROUP = {
47
44
  centrifuge: ['centrifuge'],
48
45
  supportBridged: ['rococo_assethub', 'statemint', 'statemine', 'polimec'],
49
46
  bittensor: ['bittensor', 'bittensor_testnet'],
50
- moonbeam: ['moonbeam', 'moonriver', 'moonbase']
47
+ moonbeam: ['moonbeam', 'moonriver', 'moonbase'],
48
+ notSupportGetBalanceByType: ['vara_network', 'vara_testnet', 'availTuringTest', 'avail_mainnet']
51
49
  };
52
50
  exports._BALANCE_CHAIN_GROUP = _BALANCE_CHAIN_GROUP;
53
- const _BALANCE_TOKEN_GROUP = {
54
- crab: ['CKTON', 'PKTON'],
55
- bitcountry: ['BIT']
51
+ const _BALANCE_LOCKED_ID_GROUP = {
52
+ staking: ['staking', 'delegatedStaking', 'pooledStaking', 'stkngdel', 'stk_stks', 'dappStaking', 'parachainStaking', 'appstakeappstake', 'collatorStaking'],
53
+ gov: ['pyconvot'],
54
+ democracy: ['democrac']
56
55
  };
57
- exports._BALANCE_TOKEN_GROUP = _BALANCE_TOKEN_GROUP;
56
+ exports._BALANCE_LOCKED_ID_GROUP = _BALANCE_LOCKED_ID_GROUP;
58
57
  const _NFT_CHAIN_GROUP = {
59
58
  acala: ['acala'],
60
59
  karura: ['karura'],
@@ -291,13 +290,10 @@ const _KNOWN_CHAIN_INFLATION_PARAMS = {
291
290
 
292
291
  // Send fund------------------------------------------------------------------------------------------------------------
293
292
  exports._KNOWN_CHAIN_INFLATION_PARAMS = _KNOWN_CHAIN_INFLATION_PARAMS;
294
- const _TRANSFER_NOT_SUPPORTED_CHAINS = ['subspace_gemini_3a', 'kulupu', 'joystream', 'equilibrium_parachain', 'genshiro_testnet', 'genshiro'];
295
- exports._TRANSFER_NOT_SUPPORTED_CHAINS = _TRANSFER_NOT_SUPPORTED_CHAINS;
296
293
  const _TRANSFER_CHAIN_GROUP = {
297
294
  acala: ['karura', 'acala', 'acala_testnet'],
298
295
  kintsugi: ['kintsugi', 'kintsugi_test', 'interlay', 'mangatax_para'],
299
296
  genshiro: ['genshiro_testnet', 'genshiro', 'equilibrium_parachain'],
300
- // crab: ['crab', 'pangolin'],
301
297
  bitcountry: ['pioneer', 'bitcountry'],
302
298
  statemine: ['statemint', 'statemine', 'darwinia2', 'astar', 'shiden', 'shibuya', 'parallel', 'liberland', 'liberlandTest', 'dentnet', 'dbcchain', 'westend_assethub', 'chainflip_assethub', 'origintrail', 'xode', 'paseo_assethub'],
303
299
  riochain: ['riochain'],
@@ -309,10 +305,6 @@ const _TRANSFER_CHAIN_GROUP = {
309
305
  truth: ['truth_network']
310
306
  };
311
307
  exports._TRANSFER_CHAIN_GROUP = _TRANSFER_CHAIN_GROUP;
312
- const _BALANCE_PARSING_CHAIN_GROUP = {
313
- bobabeam: ['bobabeam', 'bobabase']
314
- };
315
- exports._BALANCE_PARSING_CHAIN_GROUP = _BALANCE_PARSING_CHAIN_GROUP;
316
308
  const _MANTA_ZK_CHAIN_GROUP = ['calamari'];
317
309
  exports._MANTA_ZK_CHAIN_GROUP = _MANTA_ZK_CHAIN_GROUP;
318
310
  const _ZK_ASSET_PREFIX = 'zk';
@@ -321,21 +313,6 @@ const _DEFAULT_MANTA_ZK_CHAIN = 'calamari';
321
313
 
322
314
  // XCM------------------------------------------------------------------------------------------------------------------
323
315
  exports._DEFAULT_MANTA_ZK_CHAIN = _DEFAULT_MANTA_ZK_CHAIN;
324
- const _XCM_CHAIN_GROUP = {
325
- polkadotXcm: ['statemine', 'statemint', 'equilibrium_parachain', 'rococo_assethub', 'mythos', 'westend_assethub'],
326
- polkadotXcmSpecialCases: ['astar', 'shiden'],
327
- xcmPallet: ['polkadot', 'kusama', 'rococo', 'westend']
328
- // default is xTokens pallet
329
- };
330
- exports._XCM_CHAIN_GROUP = _XCM_CHAIN_GROUP;
331
- const _XCM_TYPE = {
332
- RP: `${_types._SubstrateChainType.RELAYCHAIN}-${_types._SubstrateChainType.PARACHAIN}`,
333
- // DMP
334
- PP: `${_types._SubstrateChainType.PARACHAIN}-${_types._SubstrateChainType.PARACHAIN}`,
335
- // HRMP
336
- PR: `${_types._SubstrateChainType.PARACHAIN}-${_types._SubstrateChainType.RELAYCHAIN}` // UMP
337
- };
338
- exports._XCM_TYPE = _XCM_TYPE;
339
316
  const _DEFAULT_ACTIVE_CHAINS = [..._chainList._DEFAULT_CHAINS, 'vara_network', 'ton'];
340
317
  exports._DEFAULT_ACTIVE_CHAINS = _DEFAULT_ACTIVE_CHAINS;
341
318
  const EVM_PASS_CONNECT_STATUS = {
@@ -351,10 +328,7 @@ const EVM_REFORMAT_DECIMALS = {
351
328
  };
352
329
  exports.EVM_REFORMAT_DECIMALS = EVM_REFORMAT_DECIMALS;
353
330
  const LATEST_CHAIN_DATA_FETCHING_INTERVAL = 120000;
354
-
355
- // TODO: review
356
331
  exports.LATEST_CHAIN_DATA_FETCHING_INTERVAL = LATEST_CHAIN_DATA_FETCHING_INTERVAL;
357
- const TARGET_BRANCH = process.env.NODE_ENV !== 'production' ? 'koni-dev' : 'master';
358
332
  const _BITCOIN_CHAIN_SLUG = 'bitcoin';
359
333
  exports._BITCOIN_CHAIN_SLUG = _BITCOIN_CHAIN_SLUG;
360
334
  const _BITCOIN_TESTNET_CHAIN_SLUG = 'bitcoinTestnet';
@@ -363,17 +337,5 @@ const _BITCOIN_NAME = 'Bitcoin';
363
337
  exports._BITCOIN_NAME = _BITCOIN_NAME;
364
338
  const _BITCOIN_TESTNET_NAME = 'Bitcoin Testnet';
365
339
  exports._BITCOIN_TESTNET_NAME = _BITCOIN_TESTNET_NAME;
366
- const _CHAIN_INFO_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainInfo.json`;
367
- exports._CHAIN_INFO_SRC = _CHAIN_INFO_SRC;
368
- const _CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainAsset.json`;
369
- exports._CHAIN_ASSET_SRC = _CHAIN_ASSET_SRC;
370
- const _ASSET_REF_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetRef.json`;
371
- exports._ASSET_REF_SRC = _ASSET_REF_SRC;
372
- const _MULTI_CHAIN_ASSET_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/MultiChainAsset.json`;
373
- exports._MULTI_CHAIN_ASSET_SRC = _MULTI_CHAIN_ASSET_SRC;
374
- const _CHAIN_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/ChainLogoMap.json`;
375
- exports._CHAIN_LOGO_MAP_SRC = _CHAIN_LOGO_MAP_SRC;
376
- const _ASSET_LOGO_MAP_SRC = `https://raw.githubusercontent.com/Koniverse/SubWallet-Chain/${TARGET_BRANCH}/packages/chain-list/src/data/AssetLogoMap.json`;
377
- exports._ASSET_LOGO_MAP_SRC = _ASSET_LOGO_MAP_SRC;
378
340
  const _BTC_SERVICE_TOKEN = process.env.BTC_SERVICE_TOKEN || '';
379
341
  exports._BTC_SERVICE_TOKEN = _BTC_SERVICE_TOKEN;
@@ -126,6 +126,9 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
126
126
  tokenContract.methods.symbol().call()]);
127
127
  name = _name;
128
128
  symbol = _symbol;
129
+ if (name === '') {
130
+ contractError = true;
131
+ }
129
132
  } else {
130
133
  tokenContract = new evmApi.api.eth.Contract(_utils._ERC20_ABI, contractAddress);
131
134
  const [_decimals, _symbol, _name] = await Promise.all([
@@ -138,9 +141,9 @@ class EvmChainHandler extends _AbstractChainHandler.AbstractChainHandler {
138
141
  name = _name;
139
142
  decimals = new _bignumber.default(_decimals).toNumber();
140
143
  symbol = _symbol;
141
- }
142
- if (name === '' || symbol === '') {
143
- contractError = true;
144
+ if (name === '' || symbol === '') {
145
+ contractError = true;
146
+ }
144
147
  }
145
148
  return {
146
149
  name,
@@ -8,6 +8,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
8
8
  var _constants = require("@subwallet/extension-base/constants");
9
9
  var _constants2 = require("@subwallet/extension-base/services/earning-service/constants");
10
10
  var _utils = require("@subwallet/extension-base/services/inapp-notification-service/utils");
11
+ var _types = require("@subwallet/extension-base/types");
11
12
  var _utils2 = require("@subwallet/extension-base/utils");
12
13
  var _util = require("@polkadot/util");
13
14
  // Copyright 2019-2022 @subwallet/extension-base
@@ -162,7 +163,12 @@ class BasePoolHandler {
162
163
  }
163
164
  const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(this.chain);
164
165
  // Use TRANSFER_BALANCE extrinsic in order to get transferable balanace without minus ED
165
- const nativeTokenBalance = await this.state.balanceService.getTransferableBalance(request.address, this.chain, undefined, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
166
+ let nativeTokenBalance;
167
+ if ([_types.YieldPoolType.NATIVE_STAKING, _types.YieldPoolType.NOMINATION_POOL].includes(poolInfo.type)) {
168
+ nativeTokenBalance = await this.state.balanceService.getBalanceByType(request.address, this.chain, undefined, _types.BalanceType.TOTAL_MINUS_RESERVED, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
169
+ } else {
170
+ nativeTokenBalance = await this.state.balanceService.getTransferableBalance(request.address, this.chain, undefined, _KoniTypes.ExtrinsicType.TRANSFER_BALANCE);
171
+ }
166
172
  const bnNativeTokenBalance = new _util.BN(nativeTokenBalance.value);
167
173
  const bnMinBalanceToJoin = new _util.BN(((_poolInfo$statistic2 = poolInfo.statistic) === null || _poolInfo$statistic2 === void 0 ? void 0 : (_poolInfo$statistic2$ = _poolInfo$statistic2.earningThreshold) === null || _poolInfo$statistic2$ === void 0 ? void 0 : _poolInfo$statistic2$.join) || '0').add(new _util.BN(poolInfo.metadata.maintainBalance));
168
174
  if (bnNativeTokenBalance.lte(bnMinBalanceToJoin)) {
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _types = require("@subwallet/chain-list/types");
9
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
10
+ var _utils2 = require("@subwallet/extension-base/utils");
11
+ var _keyring = require("@subwallet/keyring");
12
+ var _types2 = require("@subwallet/keyring/types");
13
+ var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
14
+ // Copyright 2019-2022 @subwallet/extension-base authors & contributors
15
+ // SPDX-License-Identifier: Apache-2.0
16
+
17
+ function mapSdkToNftItem(rawInstance, chain, collectionId, owner) {
18
+ var _rawInstance$token_ty, _rawInstance$token_ty2, _rawInstance$id;
19
+ const metadata = rawInstance.metadata || {};
20
+ const image = metadata.image || rawInstance.image_url || rawInstance.media_url || '';
21
+ const attributes = Array.isArray(metadata.attributes) ? metadata.attributes : [];
22
+ let rarity;
23
+ const properties = {};
24
+ for (const attr of attributes) {
25
+ try {
26
+ var _attr$trait_type;
27
+ const key = (_attr$trait_type = attr.trait_type) === null || _attr$trait_type === void 0 ? void 0 : _attr$trait_type.trim();
28
+ if (!key) {
29
+ continue;
30
+ }
31
+ let value = attr.value;
32
+ if (typeof value === 'string') {
33
+ const lower = value.toLowerCase();
34
+ if (lower === 'true') {
35
+ value = true;
36
+ } else if (lower === 'false') {
37
+ value = false;
38
+ }
39
+ }
40
+ properties[key] = value;
41
+ if (key.toLowerCase() === 'rarity') {
42
+ rarity = String(value);
43
+ }
44
+ } catch {}
45
+ }
46
+ const hasProperties = Object.keys(properties).length > 0;
47
+ const normalizedType = (_rawInstance$token_ty = rawInstance.token_type) === null || _rawInstance$token_ty === void 0 ? void 0 : (_rawInstance$token_ty2 = _rawInstance$token_ty.replace('-', '')) === null || _rawInstance$token_ty2 === void 0 ? void 0 : _rawInstance$token_ty2.toUpperCase();
48
+
49
+ // Only support ERC721
50
+ if (normalizedType !== 'ERC721') {
51
+ return null;
52
+ }
53
+ return {
54
+ id: (_rawInstance$id = rawInstance.id) === null || _rawInstance$id === void 0 ? void 0 : _rawInstance$id.toString(),
55
+ chain,
56
+ collectionId,
57
+ owner: rawInstance.owner || owner,
58
+ originAsset: undefined,
59
+ name: metadata.name || `#${rawInstance.id}`,
60
+ image: (0, _utils2.baseParseIPFSUrl)(image),
61
+ externalUrl: rawInstance.external_app_url || undefined,
62
+ rarity,
63
+ description: metadata.description || undefined,
64
+ properties: hasProperties ? properties : null,
65
+ type: normalizedType === 'ERC721' ? _types._AssetType.ERC721 : _types._AssetType.ERC721,
66
+ // currently only support ERC721
67
+ rmrk_ver: undefined,
68
+ onChainOption: undefined,
69
+ assetHubType: undefined
70
+ };
71
+ }
72
+ function mapSdkToCollection(raw, chain) {
73
+ var _raw$token_instances;
74
+ const token = raw.token || {};
75
+ return {
76
+ // must-have
77
+ collectionId: token.address_hash,
78
+ chain,
79
+ originAsset: undefined,
80
+ // optional
81
+ collectionName: token.name || token.symbol || 'Unknown Collection',
82
+ image: token.icon_url || undefined,
83
+ itemCount: Number(raw.amount) || ((_raw$token_instances = raw.token_instances) === null || _raw$token_instances === void 0 ? void 0 : _raw$token_instances.length) || 0,
84
+ externalUrl: undefined
85
+ };
86
+ }
87
+ class NftService {
88
+ inProgress = new Set();
89
+ constructor(state) {
90
+ this.state = state;
91
+ }
92
+ async fetchEvmCollectionsWithPreview(addresses) {
93
+ for (const address of addresses) {
94
+ const type = (0, _keyring.getKeypairTypeByAddress)(address);
95
+ const typeValid = [..._types2.EthereumKeypairTypes].includes(type);
96
+ if (typeValid) {
97
+ if (this.inProgress.has(address)) {
98
+ console.log(`[NftService] ${address} already running`);
99
+ continue;
100
+ }
101
+ this.inProgress.add(address);
102
+ try {
103
+ const nftDetectionApi = _subwalletServicesSdk.default.nftDetectionApi;
104
+ if (!(nftDetectionApi !== null && nftDetectionApi !== void 0 && nftDetectionApi.getEvmNftCollectionsByAddress)) {
105
+ console.warn('[NftService] NftDetectionApi not available');
106
+ continue;
107
+ }
108
+ const rawData = await nftDetectionApi.getEvmNftCollectionsByAddress(address);
109
+ const allItems = [];
110
+ const allCollections = [];
111
+ for (const [chain, collections] of Object.entries(rawData)) {
112
+ if (!Array.isArray(collections)) {
113
+ continue;
114
+ }
115
+ for (const col of collections) {
116
+ const mappedCollection = mapSdkToCollection(col, chain);
117
+ allCollections.push(mappedCollection);
118
+ if (Array.isArray(col.token_instances)) {
119
+ const items = col.token_instances.map(inst => mapSdkToNftItem(inst, chain, mappedCollection.collectionId, address)).filter(i => Boolean(i));
120
+ allItems.push(...items);
121
+ }
122
+ }
123
+ }
124
+ await this.state.handleDetectedNftCollections(allCollections);
125
+ await this.state.handleDetectedNfts(address, allItems);
126
+ } catch (err) {
127
+ console.warn(`[NftService] detect error for ${address}`, err);
128
+ } finally {
129
+ this.inProgress.delete(address);
130
+ }
131
+ }
132
+ }
133
+ }
134
+ async getFullNftInstancesByCollection(request) {
135
+ const {
136
+ chainInfo,
137
+ contractAddress,
138
+ owners
139
+ } = request;
140
+ const chainId = (0, _utils._getEvmChainId)(chainInfo);
141
+ if (!contractAddress || !owners || !chainId) {
142
+ console.warn('[NftService] missing params for getFullNftInstancesByCollection');
143
+ return false;
144
+ }
145
+ try {
146
+ const nftDetectionApi = _subwalletServicesSdk.default.nftDetectionApi;
147
+ if (!(nftDetectionApi !== null && nftDetectionApi !== void 0 && nftDetectionApi.getAllNftInstances)) {
148
+ console.warn('[NftService] getAllNftInstances not available');
149
+ return false;
150
+ }
151
+ const ownerList = Array.isArray(owners) ? owners : [owners];
152
+ for (const eachOwner of ownerList) {
153
+ try {
154
+ const instances = await nftDetectionApi.getAllNftInstances(contractAddress, eachOwner, chainId.toString());
155
+ if (!Array.isArray(instances)) {
156
+ continue;
157
+ }
158
+ console.log('FOR TESTER (before)', instances);
159
+ const nftList = instances.map(inst => mapSdkToNftItem(inst, chainInfo.slug, contractAddress, eachOwner)).filter(i => Boolean(i));
160
+ console.log('FOR TESTER (after)', nftList);
161
+ await this.state.handleDetectedNfts(eachOwner, nftList);
162
+ } catch (innerErr) {
163
+ console.warn(`[NftService] getAllNftInstances failed for ${eachOwner}`, innerErr);
164
+ }
165
+ }
166
+ return true;
167
+ } catch (err) {
168
+ console.error(`[NftDetectionService] getFullNftInstancesByCollection error for ${contractAddress}`, err);
169
+ return false;
170
+ }
171
+ }
172
+ }
173
+ exports.default = NftService;