@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
@@ -107,6 +107,7 @@ const calculateTransferMaxTransferable = async (id, request, freeBalance, fee) =
107
107
  let feeOptions;
108
108
  let maxTransferable;
109
109
  let error;
110
+ let isEvmRpcError = false;
110
111
  const fakeAddress = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap'; // todo: move this
111
112
  const substrateAddress = fakeAddress; // todo: move this
112
113
  const evmAddress = (0, _util.u8aToHex)((0, _utilCrypto.addressToEvm)(fakeAddress)); // todo: move this
@@ -131,6 +132,9 @@ const calculateTransferMaxTransferable = async (id, request, freeBalance, fee) =
131
132
  value,
132
133
  fallbackFee: true
133
134
  });
135
+ if (error) {
136
+ isEvmRpcError = true;
137
+ }
134
138
  } else {
135
139
  [transaction,, error] = await (0, _smartContract.getEVMTransactionObject)({
136
140
  chain: srcChain.slug,
@@ -144,6 +148,9 @@ const calculateTransferMaxTransferable = async (id, request, freeBalance, fee) =
144
148
  value,
145
149
  fallbackFee: true
146
150
  });
151
+ if (error) {
152
+ isEvmRpcError = true;
153
+ }
147
154
  }
148
155
  } else if ((0, _keyring.isTonAddress)(address) && (0, _utils2._isTokenTransferredByTon)(srcToken)) {
149
156
  [transaction] = await (0, _tonTransfer.createTonTransaction)({
@@ -318,7 +325,8 @@ const calculateTransferMaxTransferable = async (id, request, freeBalance, fee) =
318
325
  feeOptions: feeOptions,
319
326
  feeType: feeChainType,
320
327
  id: id,
321
- error
328
+ error,
329
+ isEvmRpcError: isEvmRpcError
322
330
  };
323
331
  };
324
332
  exports.calculateTransferMaxTransferable = calculateTransferMaxTransferable;
@@ -5,7 +5,7 @@ import { StakingType } from '@subwallet/extension-base/background/KoniTypes';
5
5
  import { getAstarWithdrawable } from '@subwallet/extension-base/koni/api/staking/bonding/astar';
6
6
  import { _KNOWN_CHAIN_INFLATION_PARAMS, _SUBSTRATE_DEFAULT_INFLATION_PARAMS } from '@subwallet/extension-base/services/chain-service/constants';
7
7
  import { _getChainNativeTokenBasicInfo } from '@subwallet/extension-base/services/chain-service/utils';
8
- import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants';
8
+ import { _STAKING_CHAIN_GROUP, RELAY_HANDLER_DIRECT_STAKING_CHAINS } from '@subwallet/extension-base/services/earning-service/constants';
9
9
  import { EarningStatus, UnstakingStatus, YieldPoolType } from '@subwallet/extension-base/types';
10
10
  import { detectTranslate, parseRawNumber, reformatAddress } from '@subwallet/extension-base/utils';
11
11
  import { balanceFormatter, formatNumber } from '@subwallet/extension-base/utils/number';
@@ -352,7 +352,7 @@ export function getEarningStatusByNominations(bnTotalActiveStake, nominationList
352
352
  export function getValidatorLabel(chain) {
353
353
  if (_STAKING_CHAIN_GROUP.astar.includes(chain)) {
354
354
  return 'dApp';
355
- } else if (_STAKING_CHAIN_GROUP.relay.includes(chain) || _STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
355
+ } else if (RELAY_HANDLER_DIRECT_STAKING_CHAINS.includes(chain) || _STAKING_CHAIN_GROUP.bittensor.includes(chain)) {
356
356
  return 'Validator';
357
357
  }
358
358
  return 'Collator';
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.3.61-0",
20
+ "version": "1.3.63-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -1191,6 +1191,11 @@
1191
1191
  "require": "./cjs/services/earning-service/handlers/native-staking/relay-chain.js",
1192
1192
  "default": "./services/earning-service/handlers/native-staking/relay-chain.js"
1193
1193
  },
1194
+ "./services/earning-service/handlers/native-staking/tanssi": {
1195
+ "types": "./services/earning-service/handlers/native-staking/tanssi.d.ts",
1196
+ "require": "./cjs/services/earning-service/handlers/native-staking/tanssi.js",
1197
+ "default": "./services/earning-service/handlers/native-staking/tanssi.js"
1198
+ },
1194
1199
  "./services/earning-service/handlers/native-staking/tao": {
1195
1200
  "types": "./services/earning-service/handlers/native-staking/tao.d.ts",
1196
1201
  "require": "./cjs/services/earning-service/handlers/native-staking/tao.js",
@@ -1511,6 +1516,11 @@
1511
1516
  "require": "./cjs/services/migration-service/scripts/DeleteEarningData.js",
1512
1517
  "default": "./services/migration-service/scripts/DeleteEarningData.js"
1513
1518
  },
1519
+ "./services/migration-service/scripts/DeleteEarningData20251010": {
1520
+ "types": "./services/migration-service/scripts/DeleteEarningData20251010.d.ts",
1521
+ "require": "./cjs/services/migration-service/scripts/DeleteEarningData20251010.js",
1522
+ "default": "./services/migration-service/scripts/DeleteEarningData20251010.js"
1523
+ },
1514
1524
  "./services/migration-service/scripts/DisableZeroBalanceTokens": {
1515
1525
  "types": "./services/migration-service/scripts/DisableZeroBalanceTokens.d.ts",
1516
1526
  "require": "./cjs/services/migration-service/scripts/DisableZeroBalanceTokens.js",
@@ -2011,6 +2021,11 @@
2011
2021
  "require": "./cjs/services/swap-service/handler/kyber-handler.js",
2012
2022
  "default": "./services/swap-service/handler/kyber-handler.js"
2013
2023
  },
2024
+ "./services/swap-service/handler/optimex-handler": {
2025
+ "types": "./services/swap-service/handler/optimex-handler.d.ts",
2026
+ "require": "./cjs/services/swap-service/handler/optimex-handler.js",
2027
+ "default": "./services/swap-service/handler/optimex-handler.js"
2028
+ },
2014
2029
  "./services/swap-service/handler/simpleswap-handler": {
2015
2030
  "types": "./services/swap-service/handler/simpleswap-handler.d.ts",
2016
2031
  "require": "./cjs/services/swap-service/handler/simpleswap-handler.js",
@@ -2878,11 +2893,11 @@
2878
2893
  "@sora-substrate/type-definitions": "^1.17.7",
2879
2894
  "@substrate/connect": "^0.8.9",
2880
2895
  "@subwallet-monorepos/subwallet-services-sdk": "^0.1.8",
2881
- "@subwallet/chain-list": "0.2.117",
2882
- "@subwallet/extension-base": "^1.3.61-0",
2883
- "@subwallet/extension-chains": "^1.3.61-0",
2884
- "@subwallet/extension-dapp": "^1.3.61-0",
2885
- "@subwallet/extension-inject": "^1.3.61-0",
2896
+ "@subwallet/chain-list": "0.2.119",
2897
+ "@subwallet/extension-base": "^1.3.63-0",
2898
+ "@subwallet/extension-chains": "^1.3.63-0",
2899
+ "@subwallet/extension-dapp": "^1.3.63-0",
2900
+ "@subwallet/extension-inject": "^1.3.63-0",
2886
2901
  "@subwallet/keyring": "^0.1.13",
2887
2902
  "@subwallet/ui-keyring": "^0.1.13",
2888
2903
  "@ton/core": "^0.56.3",
package/packageInfo.js CHANGED
@@ -7,5 +7,5 @@ export const packageInfo = {
7
7
  name: '@subwallet/extension-base',
8
8
  path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
9
9
  type: 'esm',
10
- version: '1.3.61-0'
10
+ version: '1.3.63-0'
11
11
  };
@@ -10,9 +10,10 @@ interface TransferEvmProps extends TransactionFee {
10
10
  value: string;
11
11
  evmApi: _EvmApi;
12
12
  fallbackFee?: boolean;
13
+ data?: string;
13
14
  }
14
- export declare function getEVMTransactionObject({ chain, evmApi, fallbackFee, feeCustom: _feeCustom, feeInfo: _feeInfo, feeOption, from, to, transferAll, value }: TransferEvmProps): Promise<[TransactionConfig, string, string]>;
15
- export declare function getERC20TransactionObject({ assetAddress, chain, evmApi, fallbackFee, feeCustom: _feeCustom, feeInfo: _feeInfo, feeOption, from, to, transferAll, value }: TransferERC20Props): Promise<[TransactionConfig, string, string]>;
15
+ export declare function getEVMTransactionObject(props: TransferEvmProps): Promise<[TransactionConfig, string, string]>;
16
+ export declare function getERC20TransactionObject(props: TransferERC20Props): Promise<[TransactionConfig, string, string]>;
16
17
  interface TransferERC20Props extends TransactionFee {
17
18
  assetAddress: string;
18
19
  chain: string;
@@ -9,29 +9,32 @@ import { EVM_REFORMAT_DECIMALS } from '@subwallet/extension-base/services/chain-
9
9
  import { combineEthFee } from '@subwallet/extension-base/utils';
10
10
  import BigN from 'bignumber.js';
11
11
  import { t } from 'i18next';
12
- export async function getEVMTransactionObject({
13
- chain,
14
- evmApi,
15
- fallbackFee,
16
- feeCustom: _feeCustom,
17
- feeInfo: _feeInfo,
18
- feeOption,
19
- from,
20
- to,
21
- transferAll,
22
- value
23
- }) {
12
+ export async function getEVMTransactionObject(props) {
13
+ const {
14
+ chain,
15
+ data,
16
+ evmApi,
17
+ fallbackFee,
18
+ feeCustom: _feeCustom,
19
+ feeInfo: _feeInfo,
20
+ feeOption,
21
+ from,
22
+ to,
23
+ transferAll,
24
+ value
25
+ } = props;
24
26
  const feeCustom = _feeCustom;
25
27
  const feeInfo = _feeInfo;
26
28
  const feeCombine = combineEthFee(feeInfo, feeOption, feeCustom);
27
29
  let errorOnEstimateFee = '';
28
30
  const transactionObject = {
29
- to: to,
30
- value: value,
31
- from: from,
31
+ to,
32
+ value,
33
+ from,
34
+ data,
32
35
  ...feeCombine
33
36
  };
34
- const gasLimit = await evmApi.api.eth.estimateGas(transactionObject).catch(e => {
37
+ const gasEstimate = await evmApi.api.eth.estimateGas(transactionObject).catch(e => {
35
38
  console.log('Cannot estimate fee with native transfer on', chain, e);
36
39
  if (fallbackFee) {
37
40
  errorOnEstimateFee = e.message;
@@ -40,6 +43,8 @@ export async function getEVMTransactionObject({
40
43
  throw Error('Unable to estimate fee for this transaction. Edit fee and try again.');
41
44
  }
42
45
  });
46
+ const gasLimit = Math.floor(gasEstimate * 1.1); // 10% buffer for fluctuations
47
+
43
48
  transactionObject.gas = gasLimit;
44
49
  let estimateFee;
45
50
  if (feeCombine.maxFeePerGas) {
@@ -55,19 +60,20 @@ export async function getEVMTransactionObject({
55
60
  }
56
61
  return [transactionObject, transactionObject.value.toString(), errorOnEstimateFee];
57
62
  }
58
- export async function getERC20TransactionObject({
59
- assetAddress,
60
- chain,
61
- evmApi,
62
- fallbackFee,
63
- feeCustom: _feeCustom,
64
- feeInfo: _feeInfo,
65
- feeOption,
66
- from,
67
- to,
68
- transferAll,
69
- value
70
- }) {
63
+ export async function getERC20TransactionObject(props) {
64
+ const {
65
+ assetAddress,
66
+ chain,
67
+ evmApi,
68
+ fallbackFee,
69
+ feeCustom: _feeCustom,
70
+ feeInfo: _feeInfo,
71
+ feeOption,
72
+ from,
73
+ to,
74
+ transferAll,
75
+ value
76
+ } = props;
71
77
  const erc20Contract = getERC20Contract(assetAddress, evmApi);
72
78
  const feeCustom = _feeCustom;
73
79
  let freeAmount = new BigN(0);
@@ -1,10 +1,6 @@
1
1
  import { CreateXcmExtrinsicProps } from '..';
2
2
  export declare function _isAcrossChainBridge(srcChain: string, destChain: string): boolean;
3
3
  export declare function _isAcrossTestnetBridge(srcChain: string): boolean;
4
- export declare const AcrossErrorMsg: {
5
- AMOUNT_TOO_LOW: string;
6
- AMOUNT_TOO_HIGH: string;
7
- };
8
4
  export interface AcrossQuote {
9
5
  outputAmount: string;
10
6
  rate: string;
@@ -15,10 +15,6 @@ export function _isAcrossChainBridge(srcChain, destChain) {
15
15
  export function _isAcrossTestnetBridge(srcChain) {
16
16
  return srcChain === 'base_sepolia' || srcChain === 'arbitrum_sepolia' || srcChain === COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA;
17
17
  }
18
- export const AcrossErrorMsg = {
19
- AMOUNT_TOO_LOW: 'amount too low',
20
- AMOUNT_TOO_HIGH: 'amount too high'
21
- };
22
18
  // Calculate fee for across bridge transfer
23
19
  export const getAcrossQuote = async ({
24
20
  destinationChain,
@@ -69,6 +69,7 @@ export async function buildXcm(request) {
69
69
  originChain,
70
70
  originTokenInfo,
71
71
  recipient,
72
+ sender,
72
73
  sendingValue,
73
74
  substrateApi
74
75
  } = request;
@@ -81,6 +82,7 @@ export async function buildXcm(request) {
81
82
  }
82
83
  const paraSpellChainMap = await fetchParaSpellChainMap();
83
84
  const bodyData = {
85
+ senderAddress: sender,
84
86
  address: recipient,
85
87
  from: paraSpellChainMap[originChain.slug],
86
88
  to: paraSpellChainMap[destinationChain.slug],
@@ -67,6 +67,8 @@ export const _STAKING_ERA_LENGTH_MAP = {
67
67
  aleph: 24,
68
68
  polkadot: 24,
69
69
  kusama: 6,
70
+ statemint: 24,
71
+ statemine: 6,
70
72
  westend: 6,
71
73
  hydradx: 24,
72
74
  default: 24,
@@ -121,6 +123,8 @@ export const _EXPECTED_BLOCK_TIME = {
121
123
  aleph: 1,
122
124
  polkadot: 6,
123
125
  kusama: 6,
126
+ statemint: 6,
127
+ statemine: 6,
124
128
  polkadex: 12,
125
129
  ternoa: 6,
126
130
  ternoa_alphanet: 6,
@@ -224,6 +228,13 @@ export const _KNOWN_CHAIN_INFLATION_PARAMS = {
224
228
  auctionMax: 60,
225
229
  stakeTarget: 0.75
226
230
  },
231
+ statemine: {
232
+ ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
233
+ auctionAdjust: 0.3 / 60,
234
+ auctionMax: 60,
235
+ stakeTarget: 0.75
236
+ },
237
+ // todo: recheck
227
238
  neatcoin: {
228
239
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
229
240
  stakeTarget: 0.75
@@ -237,6 +248,11 @@ export const _KNOWN_CHAIN_INFLATION_PARAMS = {
237
248
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
238
249
  stakeTarget: 0.75
239
250
  },
251
+ statemint: {
252
+ ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
253
+ stakeTarget: 0.75
254
+ },
255
+ // todo: recheck
240
256
  vara_network: {
241
257
  ..._SUBSTRATE_DEFAULT_INFLATION_PARAMS,
242
258
  stakeTarget: 0.8
@@ -1,5 +1,5 @@
1
1
  import { _AssetRef, _AssetType, _ChainAsset, _ChainInfo, _MultiChainAsset } from '@subwallet/chain-list/types';
2
- import { BasicTokenInfo } from '@subwallet/extension-base/background/KoniTypes';
2
+ import { BasicTokenInfo, ChainType } from '@subwallet/extension-base/background/KoniTypes';
3
3
  import { _ChainState, _DataMap } from '@subwallet/extension-base/services/chain-service/types';
4
4
  import { IChain } from '@subwallet/extension-base/services/storage-service/databases';
5
5
  import { AccountChainType, AccountSignMode } from '@subwallet/extension-base/types';
@@ -122,7 +122,8 @@ export declare function updateLatestChainInfo(currentDataMap: _DataMap, latestCh
122
122
  storedChainInfoList: IChain[];
123
123
  needUpdateChainApiList: _ChainInfo[];
124
124
  };
125
- export declare const _chainInfoToChainType: (chainInfo: _ChainInfo) => AccountChainType;
125
+ export declare const _chainInfoToAccountChainType: (chainInfo: _ChainInfo) => AccountChainType;
126
+ export declare const _chainInfoToChainType: (chainInfo: _ChainInfo) => ChainType | undefined;
126
127
  interface AccountInfo {
127
128
  chainType: AccountChainType;
128
129
  type: KeypairType;
@@ -2,6 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { _AssetRefPath, _AssetType, _ChainStatus, _SubstrateChainType } from '@subwallet/chain-list/types';
5
+ import { ChainType } from '@subwallet/extension-base/background/KoniTypes';
5
6
  import { _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
6
7
  import { _CUSTOM_PREFIX, _SMART_CONTRACT_STANDARDS } from '@subwallet/extension-base/services/chain-service/types';
7
8
  import { AccountChainType, AccountSignMode } from '@subwallet/extension-base/types';
@@ -596,7 +597,7 @@ export function updateLatestChainInfo(currentDataMap, latestChainInfoList) {
596
597
  needUpdateChainApiList
597
598
  };
598
599
  }
599
- export const _chainInfoToChainType = chainInfo => {
600
+ export const _chainInfoToAccountChainType = chainInfo => {
600
601
  if (_isPureSubstrateChain(chainInfo)) {
601
602
  return AccountChainType.SUBSTRATE;
602
603
  }
@@ -614,6 +615,24 @@ export const _chainInfoToChainType = chainInfo => {
614
615
  }
615
616
  return AccountChainType.SUBSTRATE;
616
617
  };
618
+ export const _chainInfoToChainType = chainInfo => {
619
+ if (_isChainSubstrateCompatible(chainInfo)) {
620
+ return ChainType.SUBSTRATE;
621
+ }
622
+ if (_isPureEvmChain(chainInfo)) {
623
+ return ChainType.EVM;
624
+ }
625
+ if (_isPureTonChain(chainInfo)) {
626
+ return ChainType.TON;
627
+ }
628
+ if (_isPureCardanoChain(chainInfo)) {
629
+ return ChainType.CARDANO;
630
+ }
631
+ if (_isPureBitcoinChain(chainInfo)) {
632
+ return ChainType.BITCOIN;
633
+ }
634
+ return undefined;
635
+ };
617
636
  export const _isChainInfoCompatibleWithAccountInfo = (chainInfo, accountInfo) => {
618
637
  const {
619
638
  chainType: accountChainType,
@@ -1,5 +1,5 @@
1
1
  import { _ChainAsset, _ChainInfo, _MultiChainAsset } from '@subwallet/chain-list/types';
2
- export declare const ChainListVersion = "0.2.117";
2
+ export declare const ChainListVersion = "0.2.119";
3
3
  export interface PatchInfo {
4
4
  patchVersion: string;
5
5
  appliedVersion: string;
@@ -5,7 +5,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
5
5
  const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
6
6
  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');
7
7
  const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
8
- export const ChainListVersion = '0.2.117'; // update this when build chain-list
8
+ export const ChainListVersion = '0.2.119'; // update this when build chain-list
9
9
 
10
10
  // todo: move this interface to chainlist
11
11
 
@@ -16,7 +16,7 @@ export async function fetchPatchData() {
16
16
  const id = setTimeout(() => {
17
17
  clearTimeout(id);
18
18
  resolve(null);
19
- }, 1000);
19
+ }, 2000);
20
20
  });
21
21
  const rs = await Promise.race([timeout, fetchPromise]);
22
22
  if (!rs) {
@@ -15,7 +15,9 @@ export declare const _STAKING_CHAIN_GROUP: {
15
15
  bittensor: string[];
16
16
  energy: string[];
17
17
  mythos: string[];
18
+ tanssi: string[];
18
19
  };
20
+ export declare const RELAY_HANDLER_DIRECT_STAKING_CHAINS: string[];
19
21
  export declare const TON_CHAINS: string[];
20
22
  export declare const MaxEraRewardPointsEras = 14;
21
23
  export declare const ST_LIQUID_TOKEN_ABI: Record<string, any>;
@@ -19,8 +19,10 @@ export const _STAKING_CHAIN_GROUP = {
19
19
  manta: ['manta_network'],
20
20
  bittensor: ['bittensor', 'bittensor_testnet'],
21
21
  energy: ['energy_web_x_testnet', 'energy_web_x'],
22
- mythos: ['mythos', 'muse_testnet']
22
+ mythos: ['mythos', 'muse_testnet'],
23
+ tanssi: ['tanssi', 'dancelight']
23
24
  };
25
+ export const RELAY_HANDLER_DIRECT_STAKING_CHAINS = [..._STAKING_CHAIN_GROUP.relay, ..._STAKING_CHAIN_GROUP.assetHub];
24
26
  export const TON_CHAINS = ['ton', 'ton_testnet'];
25
27
  export const MaxEraRewardPointsEras = 14;
26
28
 
@@ -30,6 +32,8 @@ export const MANTA_VALIDATOR_POINTS_PER_BLOCK = 20;
30
32
  export const MANTA_MIN_DELEGATION = 500;
31
33
  export const CHANNEL_ID = 7;
32
34
  export const STAKING_IDENTITY_API_SLUG = {
35
+ // @TODO: Remove polkadot then migrate
33
36
  polkadot: 'polkadot_people',
34
- kusama: 'peopleKusama'
37
+ statemine: 'peopleKusama',
38
+ statemint: 'polkadot_people'
35
39
  };
@@ -9,6 +9,7 @@ import { BasicTxErrorType, EarningStatus, StakingTxErrorType, YieldStepType } fr
9
9
  import { isSameAddress, reformatAddress } from '@subwallet/extension-base/utils';
10
10
  import { t } from 'i18next';
11
11
  import { BN, BN_ZERO } from '@polkadot/util';
12
+ import { _STAKING_CHAIN_GROUP } from "../../constants/index.js";
12
13
  export default class BaseParaNativeStakingPoolHandler extends BaseNativeStakingPoolHandler {
13
14
  /* Join pool action */
14
15
 
@@ -125,9 +126,11 @@ export default class BaseParaNativeStakingPoolHandler extends BaseNativeStakingP
125
126
  const bnChainMinStake = new BN(poolInfo.statistic.earningThreshold.join || '0');
126
127
  const bnCollatorMinStake = new BN(targetNomination.validatorMinStake || '0');
127
128
  const bnMinStake = BN.max(bnCollatorMinStake, bnChainMinStake);
128
- const existUnstakeErrorMessage = getExistUnstakeErrorMessage(this.chain, StakingType.NOMINATED);
129
- if (targetNomination.hasUnstaking) {
130
- errors.push(new TransactionError(StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
129
+ if (!_STAKING_CHAIN_GROUP.tanssi.includes(this.chain)) {
130
+ const existUnstakeErrorMessage = getExistUnstakeErrorMessage(this.chain, StakingType.NOMINATED);
131
+ if (targetNomination.hasUnstaking) {
132
+ errors.push(new TransactionError(StakingTxErrorType.EXIST_UNSTAKING_REQUEST, existUnstakeErrorMessage));
133
+ }
131
134
  }
132
135
  if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(bnMinStake))) {
133
136
  errors.push(new TransactionError(StakingTxErrorType.INVALID_ACTIVE_STAKE));
@@ -60,7 +60,10 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
60
60
  }
61
61
  const unlimitedNominatorRewarded = substrateApi.api.consts.staking.maxExposurePageSize !== undefined;
62
62
  const maxNominatorRewarded = (_substrateApi$api$con = substrateApi.api.consts.staking.maxNominatorRewardedPerValidator) === null || _substrateApi$api$con === void 0 ? void 0 : _substrateApi$api$con.toString();
63
- const maxNominations = await getRelayMaxNominations(substrateApi, this.chain);
63
+
64
+ // hotfix for kusama asset hub migration
65
+ const kahMaxNominations = '24';
66
+ const maxNominations = chainInfo.slug === 'statemine' ? kahMaxNominations : await getRelayMaxNominations(substrateApi, this.chain);
64
67
  const currentEra = _currentEra.toString();
65
68
  const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
66
69
  const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
@@ -0,0 +1,16 @@
1
+ import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
2
+ import { EarningRewardItem, StakeCancelWithdrawalParams, SubmitJoinNativeStaking, TransactionData, UnstakingInfo, YieldPoolInfo, YieldPoolMethodInfo, YieldPoolTarget, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
3
+ import BaseParaNativeStakingPoolHandler from './base-para';
4
+ export default class TanssiNativeStakingPoolHandler extends BaseParaNativeStakingPoolHandler {
5
+ readonly availableMethod: YieldPoolMethodInfo;
6
+ subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
7
+ subscribePoolPosition(useAddresses: string[], onUpdate: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
8
+ checkAccountHaveStake(addresses: string[]): Promise<string[]>;
9
+ getPoolTargets(): Promise<YieldPoolTarget[]>;
10
+ createJoinExtrinsic(data: SubmitJoinNativeStaking, positionInfo?: YieldPositionInfo, bondDest?: string, netuid?: number): Promise<[TransactionData, YieldTokenBaseInfo]>;
11
+ protected handleYieldUnstake(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
12
+ getPoolReward(useAddresses: string[], callback: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
13
+ handleYieldClaimReward(address: string, bondReward?: boolean): Promise<TransactionData>;
14
+ handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
15
+ handleYieldCancelUnstake(params: StakeCancelWithdrawalParams): Promise<TransactionData>;
16
+ }