@subwallet/extension-base 1.3.61-0 → 1.3.63-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 (73) hide show
  1. package/cjs/koni/api/staking/bonding/utils.js +1 -1
  2. package/cjs/packageInfo.js +1 -1
  3. package/cjs/services/balance-service/transfer/smart-contract.js +14 -10
  4. package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +0 -6
  5. package/cjs/services/balance-service/transfer/xcm/utils.js +2 -0
  6. package/cjs/services/chain-service/constants.js +16 -0
  7. package/cjs/services/chain-service/utils/index.js +24 -4
  8. package/cjs/services/chain-service/utils/patch.js +2 -2
  9. package/cjs/services/earning-service/constants/chains.js +8 -3
  10. package/cjs/services/earning-service/handlers/native-staking/base-para.js +6 -3
  11. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +4 -1
  12. package/cjs/services/earning-service/handlers/native-staking/tanssi.js +496 -0
  13. package/cjs/services/earning-service/service.js +4 -0
  14. package/cjs/services/earning-service/utils/index.js +2 -0
  15. package/cjs/services/fee-service/utils/tokenPayFee.js +25 -2
  16. package/cjs/services/migration-service/scripts/DeleteEarningData20251010.js +21 -0
  17. package/cjs/services/migration-service/scripts/index.js +3 -1
  18. package/cjs/services/swap-service/handler/base-handler.js +4 -1
  19. package/cjs/services/swap-service/handler/chainflip-handler.js +1 -17
  20. package/cjs/services/swap-service/handler/optimex-handler.js +421 -0
  21. package/cjs/services/swap-service/handler/simpleswap-handler.js +4 -2
  22. package/cjs/services/swap-service/index.js +38 -140
  23. package/cjs/services/swap-service/utils.js +16 -157
  24. package/cjs/services/transaction-service/helpers/index.js +2 -1
  25. package/cjs/types/service-base.js +0 -1
  26. package/cjs/types/swap/index.js +5 -8
  27. package/cjs/utils/account/common.js +1 -2
  28. package/cjs/utils/fee/transfer.js +9 -1
  29. package/koni/api/staking/bonding/utils.js +2 -2
  30. package/package.json +21 -6
  31. package/packageInfo.js +1 -1
  32. package/services/balance-service/transfer/smart-contract.d.ts +3 -2
  33. package/services/balance-service/transfer/smart-contract.js +35 -29
  34. package/services/balance-service/transfer/xcm/acrossBridge/index.d.ts +0 -4
  35. package/services/balance-service/transfer/xcm/acrossBridge/index.js +0 -4
  36. package/services/balance-service/transfer/xcm/utils.js +2 -0
  37. package/services/chain-service/constants.js +16 -0
  38. package/services/chain-service/utils/index.d.ts +3 -2
  39. package/services/chain-service/utils/index.js +20 -1
  40. package/services/chain-service/utils/patch.d.ts +1 -1
  41. package/services/chain-service/utils/patch.js +2 -2
  42. package/services/earning-service/constants/chains.d.ts +2 -0
  43. package/services/earning-service/constants/chains.js +6 -2
  44. package/services/earning-service/handlers/native-staking/base-para.js +6 -3
  45. package/services/earning-service/handlers/native-staking/relay-chain.js +4 -1
  46. package/services/earning-service/handlers/native-staking/tanssi.d.ts +16 -0
  47. package/services/earning-service/handlers/native-staking/tanssi.js +478 -0
  48. package/services/earning-service/service.js +4 -0
  49. package/services/earning-service/utils/index.js +2 -0
  50. package/services/fee-service/utils/tokenPayFee.js +25 -2
  51. package/services/migration-service/scripts/DeleteEarningData20251010.d.ts +4 -0
  52. package/services/migration-service/scripts/DeleteEarningData20251010.js +13 -0
  53. package/services/migration-service/scripts/index.js +3 -1
  54. package/services/swap-service/handler/base-handler.js +6 -3
  55. package/services/swap-service/handler/chainflip-handler.d.ts +0 -2
  56. package/services/swap-service/handler/chainflip-handler.js +2 -18
  57. package/services/swap-service/handler/optimex-handler.d.ts +43 -0
  58. package/services/swap-service/handler/optimex-handler.js +410 -0
  59. package/services/swap-service/handler/simpleswap-handler.js +5 -3
  60. package/services/swap-service/index.d.ts +0 -1
  61. package/services/swap-service/index.js +21 -123
  62. package/services/swap-service/utils.d.ts +6 -12
  63. package/services/swap-service/utils.js +8 -138
  64. package/services/transaction-service/helpers/index.js +2 -1
  65. package/types/balance/transfer.d.ts +1 -0
  66. package/types/service-base.d.ts +3 -4
  67. package/types/service-base.js +0 -2
  68. package/types/swap/index.d.ts +3 -1
  69. package/types/swap/index.js +7 -6
  70. package/types/yield/info/account/info.d.ts +5 -0
  71. package/utils/account/common.js +2 -3
  72. package/utils/fee/transfer.js +9 -1
  73. package/utils/staticData/assetHubStaking.json +6 -1
@@ -396,7 +396,7 @@ function getEarningStatusByNominations(bnTotalActiveStake, nominationList) {
396
396
  function getValidatorLabel(chain) {
397
397
  if (_constants2._STAKING_CHAIN_GROUP.astar.includes(chain)) {
398
398
  return 'dApp';
399
- } else if (_constants2._STAKING_CHAIN_GROUP.relay.includes(chain) || _constants2._STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
399
+ } else if (_constants2.RELAY_HANDLER_DIRECT_STAKING_CHAINS.includes(chain) || _constants2._STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
400
400
  return 'Validator';
401
401
  }
402
402
  return 'Collator';
@@ -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.3.61-0'
16
+ version: '1.3.63-0'
17
17
  };
18
18
  exports.packageInfo = packageInfo;
@@ -19,9 +19,10 @@ var _i18next = require("i18next");
19
19
  // Copyright 2019-2022 @subwallet/extension-base
20
20
  // SPDX-License-Identifier: Apache-2.0
21
21
 
22
- async function getEVMTransactionObject(_ref) {
23
- let {
22
+ async function getEVMTransactionObject(props) {
23
+ const {
24
24
  chain,
25
+ data,
25
26
  evmApi,
26
27
  fallbackFee,
27
28
  feeCustom: _feeCustom,
@@ -31,18 +32,19 @@ async function getEVMTransactionObject(_ref) {
31
32
  to,
32
33
  transferAll,
33
34
  value
34
- } = _ref;
35
+ } = props;
35
36
  const feeCustom = _feeCustom;
36
37
  const feeInfo = _feeInfo;
37
38
  const feeCombine = (0, _utils3.combineEthFee)(feeInfo, feeOption, feeCustom);
38
39
  let errorOnEstimateFee = '';
39
40
  const transactionObject = {
40
- to: to,
41
- value: value,
42
- from: from,
41
+ to,
42
+ value,
43
+ from,
44
+ data,
43
45
  ...feeCombine
44
46
  };
45
- const gasLimit = await evmApi.api.eth.estimateGas(transactionObject).catch(e => {
47
+ const gasEstimate = await evmApi.api.eth.estimateGas(transactionObject).catch(e => {
46
48
  console.log('Cannot estimate fee with native transfer on', chain, e);
47
49
  if (fallbackFee) {
48
50
  errorOnEstimateFee = e.message;
@@ -51,6 +53,8 @@ async function getEVMTransactionObject(_ref) {
51
53
  throw Error('Unable to estimate fee for this transaction. Edit fee and try again.');
52
54
  }
53
55
  });
56
+ const gasLimit = Math.floor(gasEstimate * 1.1); // 10% buffer for fluctuations
57
+
54
58
  transactionObject.gas = gasLimit;
55
59
  let estimateFee;
56
60
  if (feeCombine.maxFeePerGas) {
@@ -66,8 +70,8 @@ async function getEVMTransactionObject(_ref) {
66
70
  }
67
71
  return [transactionObject, transactionObject.value.toString(), errorOnEstimateFee];
68
72
  }
69
- async function getERC20TransactionObject(_ref2) {
70
- let {
73
+ async function getERC20TransactionObject(props) {
74
+ const {
71
75
  assetAddress,
72
76
  chain,
73
77
  evmApi,
@@ -79,7 +83,7 @@ async function getERC20TransactionObject(_ref2) {
79
83
  to,
80
84
  transferAll,
81
85
  value
82
- } = _ref2;
86
+ } = props;
83
87
  const erc20Contract = (0, _web.getERC20Contract)(assetAddress, evmApi);
84
88
  const feeCustom = _feeCustom;
85
89
  let freeAmount = new _bignumber.default(0);
@@ -4,7 +4,6 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.AcrossErrorMsg = void 0;
8
7
  exports._isAcrossChainBridge = _isAcrossChainBridge;
9
8
  exports._isAcrossTestnetBridge = _isAcrossTestnetBridge;
10
9
  exports.getAcrossQuote = void 0;
@@ -25,11 +24,6 @@ function _isAcrossChainBridge(srcChain, destChain) {
25
24
  function _isAcrossTestnetBridge(srcChain) {
26
25
  return srcChain === 'base_sepolia' || srcChain === 'arbitrum_sepolia' || srcChain === _chainList.COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA;
27
26
  }
28
- const AcrossErrorMsg = {
29
- AMOUNT_TOO_LOW: 'amount too low',
30
- AMOUNT_TOO_HIGH: 'amount too high'
31
- };
32
- exports.AcrossErrorMsg = AcrossErrorMsg;
33
27
  // Calculate fee for across bridge transfer
34
28
  const getAcrossQuote = async _ref => {
35
29
  let {
@@ -81,6 +81,7 @@ async function buildXcm(request) {
81
81
  originChain,
82
82
  originTokenInfo,
83
83
  recipient,
84
+ sender,
84
85
  sendingValue,
85
86
  substrateApi
86
87
  } = request;
@@ -93,6 +94,7 @@ async function buildXcm(request) {
93
94
  }
94
95
  const paraSpellChainMap = await (0, _paraspellChainMap.fetchParaSpellChainMap)();
95
96
  const bodyData = {
97
+ senderAddress: sender,
96
98
  address: recipient,
97
99
  from: paraSpellChainMap[originChain.slug],
98
100
  to: paraSpellChainMap[destinationChain.slug],
@@ -80,6 +80,8 @@ const _STAKING_ERA_LENGTH_MAP = {
80
80
  aleph: 24,
81
81
  polkadot: 24,
82
82
  kusama: 6,
83
+ statemint: 24,
84
+ statemine: 6,
83
85
  westend: 6,
84
86
  hydradx: 24,
85
87
  default: 24,
@@ -135,6 +137,8 @@ const _EXPECTED_BLOCK_TIME = {
135
137
  aleph: 1,
136
138
  polkadot: 6,
137
139
  kusama: 6,
140
+ statemint: 6,
141
+ statemine: 6,
138
142
  polkadex: 12,
139
143
  ternoa: 6,
140
144
  ternoa_alphanet: 6,
@@ -241,6 +245,13 @@ const _KNOWN_CHAIN_INFLATION_PARAMS = {
241
245
  auctionMax: 60,
242
246
  stakeTarget: 0.75
243
247
  },
248
+ statemine: {
249
+ ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
250
+ auctionAdjust: 0.3 / 60,
251
+ auctionMax: 60,
252
+ stakeTarget: 0.75
253
+ },
254
+ // todo: recheck
244
255
  neatcoin: {
245
256
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
246
257
  stakeTarget: 0.75
@@ -254,6 +265,11 @@ const _KNOWN_CHAIN_INFLATION_PARAMS = {
254
265
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
255
266
  stakeTarget: 0.75
256
267
  },
268
+ statemint: {
269
+ ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
270
+ stakeTarget: 0.75
271
+ },
272
+ // todo: recheck
257
273
  vara_network: {
258
274
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
259
275
  stakeTarget: 0.8
@@ -104,11 +104,12 @@ var _exportNames = {
104
104
  randomizeProvider: true,
105
105
  _isAssetCanPayTxFee: true,
106
106
  updateLatestChainInfo: true,
107
+ _chainInfoToAccountChainType: true,
107
108
  _chainInfoToChainType: true,
108
109
  _isChainInfoCompatibleWithAccountInfo: true,
109
110
  _getAssetNetuid: true
110
111
  };
111
- exports._chainInfoToChainType = void 0;
112
+ exports._chainInfoToChainType = exports._chainInfoToAccountChainType = void 0;
112
113
  exports._checkSmartContractSupportByChain = _checkSmartContractSupportByChain;
113
114
  exports._generateCustomProviderKey = _generateCustomProviderKey;
114
115
  exports._getAssetDecimals = _getAssetDecimals;
@@ -207,11 +208,11 @@ exports._isXcmPathSupported = _isXcmPathSupported;
207
208
  exports._parseAssetRefKey = _parseAssetRefKey;
208
209
  exports._parseMetadataForAssetId = _parseMetadataForAssetId;
209
210
  exports._parseMetadataForSmartContractAsset = _parseMetadataForSmartContractAsset;
210
- exports.findChainInfoByChainId = void 0;
211
- exports.findChainInfoByHalfGenesisHash = void 0;
211
+ exports.findChainInfoByHalfGenesisHash = exports.findChainInfoByChainId = void 0;
212
212
  exports.randomizeProvider = randomizeProvider;
213
213
  exports.updateLatestChainInfo = updateLatestChainInfo;
214
214
  var _types = require("@subwallet/chain-list/types");
215
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
215
216
  var _constants = require("@subwallet/extension-base/services/chain-service/constants");
216
217
  var _types2 = require("@subwallet/extension-base/services/chain-service/types");
217
218
  var _types3 = require("@subwallet/extension-base/types");
@@ -826,7 +827,7 @@ function updateLatestChainInfo(currentDataMap, latestChainInfoList) {
826
827
  needUpdateChainApiList
827
828
  };
828
829
  }
829
- const _chainInfoToChainType = chainInfo => {
830
+ const _chainInfoToAccountChainType = chainInfo => {
830
831
  if (_isPureSubstrateChain(chainInfo)) {
831
832
  return _types3.AccountChainType.SUBSTRATE;
832
833
  }
@@ -844,6 +845,25 @@ const _chainInfoToChainType = chainInfo => {
844
845
  }
845
846
  return _types3.AccountChainType.SUBSTRATE;
846
847
  };
848
+ exports._chainInfoToAccountChainType = _chainInfoToAccountChainType;
849
+ const _chainInfoToChainType = chainInfo => {
850
+ if (_isChainSubstrateCompatible(chainInfo)) {
851
+ return _KoniTypes.ChainType.SUBSTRATE;
852
+ }
853
+ if (_isPureEvmChain(chainInfo)) {
854
+ return _KoniTypes.ChainType.EVM;
855
+ }
856
+ if (_isPureTonChain(chainInfo)) {
857
+ return _KoniTypes.ChainType.TON;
858
+ }
859
+ if (_isPureCardanoChain(chainInfo)) {
860
+ return _KoniTypes.ChainType.CARDANO;
861
+ }
862
+ if (_isPureBitcoinChain(chainInfo)) {
863
+ return _KoniTypes.ChainType.BITCOIN;
864
+ }
865
+ return undefined;
866
+ };
847
867
  exports._chainInfoToChainType = _chainInfoToChainType;
848
868
  const _isChainInfoCompatibleWithAccountInfo = (chainInfo, accountInfo) => {
849
869
  const {
@@ -12,7 +12,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
12
12
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
13
13
  const fetchDomain = process.env.PATCH_CHAIN_LIST_URL || (PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev');
14
14
  const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
15
- const ChainListVersion = '0.2.117'; // update this when build chain-list
15
+ const ChainListVersion = '0.2.119'; // update this when build chain-list
16
16
 
17
17
  // todo: move this interface to chainlist
18
18
  exports.ChainListVersion = ChainListVersion;
@@ -23,7 +23,7 @@ async function fetchPatchData() {
23
23
  const id = setTimeout(() => {
24
24
  clearTimeout(id);
25
25
  resolve(null);
26
- }, 1000);
26
+ }, 2000);
27
27
  });
28
28
  const rs = await Promise.race([timeout, fetchPromise]);
29
29
  if (!rs) {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._STAKING_CHAIN_GROUP = exports.TON_CHAINS = exports.ST_LIQUID_TOKEN_ABI = exports.STAKING_IDENTITY_API_SLUG = exports.MaxEraRewardPointsEras = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = exports.CHANNEL_ID = void 0;
6
+ exports._STAKING_CHAIN_GROUP = exports.TON_CHAINS = exports.ST_LIQUID_TOKEN_ABI = exports.STAKING_IDENTITY_API_SLUG = exports.RELAY_HANDLER_DIRECT_STAKING_CHAINS = exports.MaxEraRewardPointsEras = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = exports.CHANNEL_ID = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
@@ -25,9 +25,12 @@ const _STAKING_CHAIN_GROUP = {
25
25
  manta: ['manta_network'],
26
26
  bittensor: ['bittensor', 'bittensor_testnet'],
27
27
  energy: ['energy_web_x_testnet', 'energy_web_x'],
28
- mythos: ['mythos', 'muse_testnet']
28
+ mythos: ['mythos', 'muse_testnet'],
29
+ tanssi: ['tanssi', 'dancelight']
29
30
  };
30
31
  exports._STAKING_CHAIN_GROUP = _STAKING_CHAIN_GROUP;
32
+ const RELAY_HANDLER_DIRECT_STAKING_CHAINS = [..._STAKING_CHAIN_GROUP.relay, ..._STAKING_CHAIN_GROUP.assetHub];
33
+ exports.RELAY_HANDLER_DIRECT_STAKING_CHAINS = RELAY_HANDLER_DIRECT_STAKING_CHAINS;
31
34
  const TON_CHAINS = ['ton', 'ton_testnet'];
32
35
  exports.TON_CHAINS = TON_CHAINS;
33
36
  const MaxEraRewardPointsEras = 14;
@@ -43,7 +46,9 @@ exports.MANTA_MIN_DELEGATION = MANTA_MIN_DELEGATION;
43
46
  const CHANNEL_ID = 7;
44
47
  exports.CHANNEL_ID = CHANNEL_ID;
45
48
  const STAKING_IDENTITY_API_SLUG = {
49
+ // @TODO: Remove polkadot then migrate
46
50
  polkadot: 'polkadot_people',
47
- kusama: 'peopleKusama'
51
+ statemine: 'peopleKusama',
52
+ statemint: 'polkadot_people'
48
53
  };
49
54
  exports.STAKING_IDENTITY_API_SLUG = STAKING_IDENTITY_API_SLUG;
@@ -13,6 +13,7 @@ var _types = require("@subwallet/extension-base/types");
13
13
  var _utils2 = require("@subwallet/extension-base/utils");
14
14
  var _i18next = require("i18next");
15
15
  var _util = require("@polkadot/util");
16
+ var _constants = require("../../constants");
16
17
  // Copyright 2019-2022 @subwallet/extension-base
17
18
  // SPDX-License-Identifier: Apache-2.0
18
19
 
@@ -132,9 +133,11 @@ class BaseParaNativeStakingPoolHandler extends _base.default {
132
133
  const bnChainMinStake = new _util.BN(poolInfo.statistic.earningThreshold.join || '0');
133
134
  const bnCollatorMinStake = new _util.BN(targetNomination.validatorMinStake || '0');
134
135
  const bnMinStake = _util.BN.max(bnCollatorMinStake, bnChainMinStake);
135
- const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(this.chain, _KoniTypes.StakingType.NOMINATED);
136
- if (targetNomination.hasUnstaking) {
137
- errors.push(new _TransactionError.TransactionError(_types.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
136
+ if (!_constants._STAKING_CHAIN_GROUP.tanssi.includes(this.chain)) {
137
+ const existUnstakeErrorMessage = (0, _utils.getExistUnstakeErrorMessage)(this.chain, _KoniTypes.StakingType.NOMINATED);
138
+ if (targetNomination.hasUnstaking) {
139
+ errors.push(new _TransactionError.TransactionError(_types.StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
140
+ }
138
141
  }
139
142
  if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(bnMinStake))) {
140
143
  errors.push(new _TransactionError.TransactionError(_types.StakingTxErrorType.INVALID_ACTIVE_STAKE));
@@ -67,7 +67,10 @@ class RelayNativeStakingPoolHandler extends _base.default {
67
67
  }
68
68
  const unlimitedNominatorRewarded = substrateApi.api.consts.staking.maxExposurePageSize !== undefined;
69
69
  const maxNominatorRewarded = (_substrateApi$api$con = substrateApi.api.consts.staking.maxNominatorRewardedPerValidator) === null || _substrateApi$api$con === void 0 ? void 0 : _substrateApi$api$con.toString();
70
- const maxNominations = await (0, _utils.getRelayMaxNominations)(substrateApi, this.chain);
70
+
71
+ // hotfix for kusama asset hub migration
72
+ const kahMaxNominations = '24';
73
+ const maxNominations = chainInfo.slug === 'statemine' ? kahMaxNominations : await (0, _utils.getRelayMaxNominations)(substrateApi, this.chain);
71
74
  const currentEra = _currentEra.toString();
72
75
  const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
73
76
  const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();