@subwallet/extension-base 1.3.76-0 → 1.3.78-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 (96) hide show
  1. package/background/KoniTypes.d.ts +4 -1
  2. package/cjs/core/logic-validation/index.js +1 -1
  3. package/cjs/core/substrate/xcm-parser.js +17 -11
  4. package/cjs/koni/background/handlers/Extension.js +293 -71
  5. package/cjs/koni/background/handlers/State.js +20 -0
  6. package/cjs/koni/background/handlers/Tabs.js +2 -3
  7. package/cjs/packageInfo.js +1 -1
  8. package/cjs/services/balance-service/helpers/subscribe/evm.js +85 -6
  9. package/cjs/services/balance-service/helpers/subscribe/index.js +2 -1
  10. package/cjs/services/balance-service/index.js +6 -2
  11. package/cjs/services/balance-service/transfer/token.js +15 -0
  12. package/cjs/services/balance-service/transfer/xcm/bittensorBridge/index.js +27 -0
  13. package/cjs/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.js +58 -0
  14. package/cjs/services/balance-service/transfer/xcm/bittensorBridge/utils.js +36 -0
  15. package/cjs/services/balance-service/transfer/xcm/index.js +61 -2
  16. package/cjs/services/balance-service/transfer/xcm/utils.js +94 -6
  17. package/cjs/services/chain-service/constants.js +4 -2
  18. package/cjs/services/chain-service/utils/patch.js +1 -1
  19. package/cjs/services/earning-service/constants/chains.js +7 -2
  20. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +8 -5
  21. package/cjs/services/earning-service/handlers/special.js +82 -65
  22. package/cjs/services/earning-service/service.js +19 -2
  23. package/cjs/services/multisig-service/index.js +1 -1
  24. package/cjs/services/request-service/handler/SubstrateRequestHandler.js +12 -0
  25. package/cjs/services/request-service/index.js +3 -0
  26. package/cjs/services/setting-service/constants.js +2 -1
  27. package/cjs/services/storage-service/db-stores/InappNotification.js +1 -1
  28. package/cjs/services/swap-service/handler/bittensor-handler.js +197 -0
  29. package/cjs/services/swap-service/index.js +7 -0
  30. package/cjs/services/transaction-service/index.js +10 -0
  31. package/cjs/types/balance/index.js +1 -0
  32. package/cjs/types/swap/index.js +3 -1
  33. package/cjs/utils/fee/transfer.js +20 -5
  34. package/core/logic-validation/index.js +1 -1
  35. package/core/substrate/xcm-parser.d.ts +3 -0
  36. package/core/substrate/xcm-parser.js +14 -11
  37. package/koni/background/handlers/Extension.d.ts +19 -0
  38. package/koni/background/handlers/Extension.js +233 -14
  39. package/koni/background/handlers/State.d.ts +1 -0
  40. package/koni/background/handlers/State.js +20 -0
  41. package/koni/background/handlers/Tabs.js +2 -3
  42. package/package.json +26 -6
  43. package/packageInfo.js +1 -1
  44. package/services/balance-service/helpers/subscribe/evm.d.ts +1 -0
  45. package/services/balance-service/helpers/subscribe/evm.js +76 -1
  46. package/services/balance-service/helpers/subscribe/index.js +2 -1
  47. package/services/balance-service/index.js +6 -2
  48. package/services/balance-service/transfer/token.d.ts +2 -1
  49. package/services/balance-service/transfer/token.js +15 -0
  50. package/services/balance-service/transfer/xcm/bittensorBridge/index.d.ts +2 -0
  51. package/services/balance-service/transfer/xcm/bittensorBridge/index.js +5 -0
  52. package/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.d.ts +6 -0
  53. package/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge.js +50 -0
  54. package/services/balance-service/transfer/xcm/bittensorBridge/utils.d.ts +8 -0
  55. package/services/balance-service/transfer/xcm/bittensorBridge/utils.js +29 -0
  56. package/services/balance-service/transfer/xcm/index.d.ts +5 -0
  57. package/services/balance-service/transfer/xcm/index.js +57 -2
  58. package/services/balance-service/transfer/xcm/utils.d.ts +3 -2
  59. package/services/balance-service/transfer/xcm/utils.js +87 -1
  60. package/services/chain-service/constants.d.ts +2 -0
  61. package/services/chain-service/constants.js +4 -2
  62. package/services/chain-service/utils/patch.d.ts +1 -1
  63. package/services/chain-service/utils/patch.js +1 -1
  64. package/services/earning-service/constants/chains.d.ts +2 -0
  65. package/services/earning-service/constants/chains.js +4 -1
  66. package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +1 -0
  67. package/services/earning-service/handlers/liquid-staking/stella-swap.js +6 -4
  68. package/services/earning-service/handlers/special.d.ts +1 -1
  69. package/services/earning-service/handlers/special.js +85 -68
  70. package/services/earning-service/service.js +21 -4
  71. package/services/inapp-notification-service/interfaces.d.ts +1 -0
  72. package/services/multisig-service/index.js +1 -1
  73. package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -0
  74. package/services/request-service/handler/SubstrateRequestHandler.js +12 -0
  75. package/services/request-service/index.d.ts +1 -0
  76. package/services/request-service/index.js +3 -0
  77. package/services/request-service/types.d.ts +1 -0
  78. package/services/setting-service/constants.js +2 -1
  79. package/services/storage-service/db-stores/InappNotification.js +1 -1
  80. package/services/swap-service/handler/bittensor-handler.d.ts +21 -0
  81. package/services/swap-service/handler/bittensor-handler.js +189 -0
  82. package/services/swap-service/index.js +7 -0
  83. package/services/transaction-service/index.d.ts +1 -1
  84. package/services/transaction-service/index.js +10 -0
  85. package/services/transaction-service/types.d.ts +4 -3
  86. package/types/balance/index.d.ts +3 -1
  87. package/types/balance/index.js +1 -0
  88. package/types/balance/transfer.d.ts +9 -0
  89. package/types/fee/base.d.ts +1 -0
  90. package/types/multisig/index.d.ts +12 -0
  91. package/types/swap/index.d.ts +3 -1
  92. package/types/swap/index.js +3 -1
  93. package/types/yield/actions/join/step.d.ts +6 -0
  94. package/types/yield/actions/join/submit.d.ts +1 -0
  95. package/utils/fee/transfer.d.ts +1 -0
  96. package/utils/fee/transfer.js +21 -6
@@ -20,6 +20,7 @@ import subwalletApiSdk from '@subwallet-monorepos/subwallet-services-sdk';
20
20
  import BigN from 'bignumber.js';
21
21
  import { t } from 'i18next';
22
22
  import { BehaviorSubject } from 'rxjs';
23
+ import { BittensorSwapHandler } from "./handler/bittensor-handler.js";
23
24
  import { KyberHandler } from "./handler/kyber-handler.js";
24
25
  import { SimpleSwapHandler } from "./handler/simpleswap-handler.js";
25
26
  import { UniswapHandler } from "./handler/uniswap-handler.js";
@@ -289,6 +290,12 @@ export class SwapService {
289
290
  case SwapProviderId.OPTIMEX_TESTNET:
290
291
  this.handlers[providerId] = new OptimexHandler(this.chainService, this.state.balanceService, this.state.feeService, true);
291
292
  break;
293
+ case SwapProviderId.BITTENSOR:
294
+ this.handlers[providerId] = new BittensorSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, false);
295
+ break;
296
+ case SwapProviderId.BITTENSOR_TESTNET:
297
+ this.handlers[providerId] = new BittensorSwapHandler(this.chainService, this.state.balanceService, this.state.feeService, true);
298
+ break;
292
299
  default:
293
300
  throw new Error('Unsupported provider');
294
301
  }
@@ -74,7 +74,7 @@ export default class TransactionService {
74
74
  private sendPermitTransaction;
75
75
  private sendDutchTransaction;
76
76
  private removeTransaction;
77
- private updateTransaction;
77
+ updateTransaction(id: string, data: Partial<Omit<SWTransactionBase, 'id'>>): void;
78
78
  private getTransactionLink;
79
79
  private transactionToHistories;
80
80
  private onSigned;
@@ -930,6 +930,7 @@ export default class TransactionService {
930
930
  nonce: nonce !== null && nonce !== void 0 ? nonce : 0,
931
931
  startBlock: startBlock || 0,
932
932
  processId: (_transaction$step3 = transaction.step) === null || _transaction$step3 === void 0 ? void 0 : _transaction$step3.processId,
933
+ crossChainFeeInfo: transaction === null || transaction === void 0 ? void 0 : transaction.xcmDestinationFee,
933
934
  substrateProxyAddresses: []
934
935
  };
935
936
  const substrateProxyHistories = [];
@@ -1371,6 +1372,15 @@ export default class TransactionService {
1371
1372
  case ExtrinsicType.UNKNOWN:
1372
1373
  break;
1373
1374
  }
1375
+ const txData = transaction.data;
1376
+ const signer = txData === null || txData === void 0 ? void 0 : txData.signer;
1377
+ if (signer) {
1378
+ const currentAdditionalInfo = historyItem.additionalInfo ? historyItem.additionalInfo : {};
1379
+ historyItem.additionalInfo = {
1380
+ ...currentAdditionalInfo,
1381
+ signer
1382
+ };
1383
+ }
1374
1384
  try {
1375
1385
  // Return one more history record if transaction send to account in the wallets
1376
1386
  const toAccount = (historyItem === null || historyItem === void 0 ? void 0 : historyItem.to) && keyring.getPair(historyItem.to);
@@ -1,4 +1,4 @@
1
- import { ChainType, ExtrinsicDataTypeMap, ExtrinsicStatus, ExtrinsicType, FeeData, ValidateTransactionResponse } from '@subwallet/extension-base/background/KoniTypes';
1
+ import { AmountData, ChainType, ExtrinsicDataTypeMap, ExtrinsicStatus, ExtrinsicType, FeeData, ValidateTransactionResponse } from '@subwallet/extension-base/background/KoniTypes';
2
2
  import { SignTypedDataMessageV3V4 } from '@subwallet/extension-base/core/logic-validation';
3
3
  import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
4
4
  import { UniswapOrderInfo } from '@subwallet/extension-base/services/swap-service/handler/uniswap-handler';
@@ -23,6 +23,7 @@ export interface SWTransactionBase extends ValidateTransactionResponse, Partial<
23
23
  updatedAt: number;
24
24
  estimateFee?: FeeData;
25
25
  xcmFeeDryRun?: string;
26
+ xcmDestinationFee?: AmountData;
26
27
  transaction: any;
27
28
  additionalValidator?: (inputTransaction: SWTransactionResponse) => Promise<void>;
28
29
  eventsHandler?: (eventEmitter: TransactionEmitter) => void;
@@ -75,7 +76,7 @@ export interface SWTransactionEmitter {
75
76
  emitterTransaction?: TransactionEmitter;
76
77
  }
77
78
  declare type SwInputBase = Pick<SWTransactionBase, 'address' | 'url' | 'data' | 'extrinsicType' | 'chain' | 'chainType' | 'ignoreWarnings' | 'transferNativeAmount'> & Partial<Pick<SWTransactionBase, 'additionalValidator' | 'eventsHandler'>>;
78
- export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransactionBase, 'estimateFee' | 'signAfterCreate' | 'isPassConfirmation' | 'step' | 'errorOnTimeOut' | 'xcmFeeDryRun' | 'wrappingStatus'>>, TransactionFee {
79
+ export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransactionBase, 'estimateFee' | 'signAfterCreate' | 'isPassConfirmation' | 'step' | 'errorOnTimeOut' | 'xcmFeeDryRun' | 'xcmDestinationFee' | 'wrappingStatus'>>, TransactionFee {
79
80
  id?: string;
80
81
  transaction?: SWTransactionBase['transaction'] | null;
81
82
  warnings?: SWTransactionBase['warnings'];
@@ -94,7 +95,7 @@ export interface SWPermitTransactionInput extends Omit<SWTransactionInput, 'tran
94
95
  export interface SWDutchTransactionInput extends Omit<SWTransactionInput, 'transaction'> {
95
96
  transaction?: SWDutchTransaction['transaction'] | null;
96
97
  }
97
- export declare type SWTransactionResponse = SwInputBase & Pick<SWTransactionBase, 'warnings' | 'errors'> & Partial<Pick<SWTransactionBase, 'id' | 'extrinsicHash' | 'status' | 'estimateFee' | 'xcmFeeDryRun' | 'wrappingStatus'>> & TransactionFee & {
98
+ export declare type SWTransactionResponse = SwInputBase & Pick<SWTransactionBase, 'warnings' | 'errors'> & Partial<Pick<SWTransactionBase, 'id' | 'extrinsicHash' | 'status' | 'estimateFee' | 'xcmFeeDryRun' | 'xcmDestinationFee' | 'wrappingStatus'>> & TransactionFee & {
98
99
  processId?: string;
99
100
  };
100
101
  export declare type BitcoinTransactionData = {
@@ -12,7 +12,8 @@ export declare enum BalanceType {
12
12
  TRANSFERABLE = "transferable",
13
13
  TOTAL = "total",
14
14
  TOTAL_MINUS_RESERVED = "totalMinusReserved",
15
- KEEP_ALIVE = "keepAlive"
15
+ KEEP_ALIVE = "keepAlive",
16
+ STAKING = "staking"
16
17
  }
17
18
  /**
18
19
  * Balance info of a token on an address
@@ -62,6 +63,7 @@ export interface SubscribeSubstratePalletBalance extends SubscribeBasePalletBala
62
63
  }
63
64
  export interface SubscribeEvmPalletBalance extends SubscribeBasePalletBalance {
64
65
  evmApi: _EvmApi;
66
+ substrateApiMap?: Record<string, _SubstrateApi>;
65
67
  }
66
68
  export interface SubscribeTonPalletBalance extends SubscribeBasePalletBalance {
67
69
  tonApi: _TonApi;
@@ -18,6 +18,7 @@ export let BalanceType;
18
18
  BalanceType["TOTAL"] = "total";
19
19
  BalanceType["TOTAL_MINUS_RESERVED"] = "totalMinusReserved";
20
20
  BalanceType["KEEP_ALIVE"] = "keepAlive";
21
+ BalanceType["STAKING"] = "staking";
21
22
  })(BalanceType || (BalanceType = {}));
22
23
  /** Balance info of all tokens on an address */
23
24
  // Key is tokenSlug
@@ -9,6 +9,7 @@ export interface RequestSubscribeTransfer extends TransactionFee {
9
9
  token: string;
10
10
  destChain: string;
11
11
  transferAll?: boolean;
12
+ metadata?: Record<string, any>;
12
13
  }
13
14
  export interface ResponseSubscribeTransfer {
14
15
  id: string;
@@ -26,6 +27,11 @@ export interface RequestSubmitTransferWithId extends RequestSubmitTransfer {
26
27
  export interface ResponseSubscribeTransferConfirmation extends Omit<ResponseSubscribeTransfer, 'maxTransferable'> {
27
28
  error?: string;
28
29
  }
30
+ export interface AlphaTokenTransferMetadata {
31
+ netuid: number;
32
+ fromValidator: string;
33
+ toValidator: string;
34
+ }
29
35
  export interface RequestSubmitTransfer extends BaseRequestSign, TransactionFee {
30
36
  chain: string;
31
37
  from: string;
@@ -35,6 +41,9 @@ export interface RequestSubmitTransfer extends BaseRequestSign, TransactionFee {
35
41
  value: string;
36
42
  transferBounceable?: boolean;
37
43
  isSubstrateECDSATransaction?: boolean;
44
+ maxTransferableWithoutFee?: string;
45
+ maxTransferable?: string;
46
+ metadata?: Record<string, any>;
38
47
  }
39
48
  export interface RequestSubmitSignPsbtTransfer extends BaseRequestSign {
40
49
  id: string;
@@ -5,6 +5,7 @@ export interface BaseFeeInfo {
5
5
  }
6
6
  export interface BaseFeeDetail {
7
7
  estimatedFee: string;
8
+ crossChainFee?: string;
8
9
  }
9
10
  export interface BaseFeeTime {
10
11
  time: number;
@@ -1,3 +1,4 @@
1
+ import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
1
2
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
2
3
  import { MultisigTxType } from '@subwallet/extension-base/services/multisig-service';
3
4
  import { DecodeCallDataResponse } from '@subwallet/extension-base/services/multisig-service/utils';
@@ -44,6 +45,17 @@ export interface InitMultisigTxResponse {
44
45
  networkFee: string;
45
46
  error?: SelectSignatoryError;
46
47
  }
48
+ export interface PrepareMultisigSignRequest {
49
+ id: string;
50
+ signer: string;
51
+ }
52
+ export interface PrepareMultisigSignResponse {
53
+ submittedCallData: HexString;
54
+ callData: HexString;
55
+ depositAmount: string;
56
+ networkFee: string;
57
+ errors: TransactionError[];
58
+ }
47
59
  export interface RequestGetSignableAccountInfos {
48
60
  multisigProxyId: string;
49
61
  chain: string;
@@ -65,7 +65,9 @@ export declare enum SwapProviderId {
65
65
  UNISWAP = "UNISWAP",
66
66
  KYBER = "KYBER",
67
67
  OPTIMEX = "OPTIMEX",
68
- OPTIMEX_TESTNET = "OPTIMEX_TESTNET"
68
+ OPTIMEX_TESTNET = "OPTIMEX_TESTNET",
69
+ BITTENSOR = "BITTENSOR",
70
+ BITTENSOR_TESTNET = "BITTENSOR_TESTNET"
69
71
  }
70
72
  export declare const _SUPPORTED_SWAP_PROVIDERS: SwapProviderId[];
71
73
  export interface SwapProvider {
@@ -42,8 +42,10 @@ export let SwapProviderId;
42
42
  SwapProviderId["KYBER"] = "KYBER";
43
43
  SwapProviderId["OPTIMEX"] = "OPTIMEX";
44
44
  SwapProviderId["OPTIMEX_TESTNET"] = "OPTIMEX_TESTNET";
45
+ SwapProviderId["BITTENSOR"] = "BITTENSOR";
46
+ SwapProviderId["BITTENSOR_TESTNET"] = "BITTENSOR_TESTNET";
45
47
  })(SwapProviderId || (SwapProviderId = {}));
46
- export const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET, SwapProviderId.POLKADOT_ASSET_HUB, SwapProviderId.KUSAMA_ASSET_HUB, SwapProviderId.SIMPLE_SWAP, SwapProviderId.UNISWAP, SwapProviderId.KYBER, SwapProviderId.OPTIMEX, SwapProviderId.OPTIMEX_TESTNET];
48
+ export const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET, SwapProviderId.POLKADOT_ASSET_HUB, SwapProviderId.KUSAMA_ASSET_HUB, SwapProviderId.SIMPLE_SWAP, SwapProviderId.UNISWAP, SwapProviderId.KYBER, SwapProviderId.OPTIMEX, SwapProviderId.OPTIMEX_TESTNET, SwapProviderId.BITTENSOR, SwapProviderId.BITTENSOR_TESTNET];
47
49
  // process handling
48
50
  export let SwapFeeType;
49
51
  (function (SwapFeeType) {
@@ -1,3 +1,4 @@
1
+ import { _ChainAsset } from '@subwallet/chain-list/types';
1
2
  import { YieldPoolTarget } from '@subwallet/extension-base/types';
2
3
  /**
3
4
  * @interface RequestEarlyValidateYield
@@ -95,3 +96,8 @@ export interface OptimalYieldPath {
95
96
  connectionError?: string;
96
97
  }
97
98
  export declare type GenStepFunction = (params: OptimalYieldPathParams) => Promise<YieldStepBaseInfo | undefined>;
99
+ export interface XcmStepMetadataForLiqStaking {
100
+ sendingValue: string;
101
+ originTokenInfo: _ChainAsset;
102
+ destinationTokenInfo: _ChainAsset;
103
+ }
@@ -9,6 +9,7 @@ export interface HandleYieldStepData {
9
9
  chainType: ChainType;
10
10
  txData: any;
11
11
  transferNativeAmount: string;
12
+ xcmStepFee?: string;
12
13
  }
13
14
  export interface AbstractSubmitYieldJoinData {
14
15
  slug: string;
@@ -20,6 +20,7 @@ export interface CalculateMaxTransferable extends TransactionFee {
20
20
  isTransferNativeTokenAndPayLocalTokenAsFee: boolean;
21
21
  nativeToken: _ChainAsset;
22
22
  transferAll?: boolean;
23
+ metadata?: Record<string, any>;
23
24
  }
24
25
  export declare const detectTransferTxType: (srcToken: _ChainAsset, srcChain: _ChainInfo, destChain: _ChainInfo) => FeeChainType;
25
26
  export declare const calculateMaxTransferable: (id: string, request: CalculateMaxTransferable, freeBalance: AmountData, fee: FeeInfo) => Promise<ResponseSubscribeTransfer>;
@@ -9,9 +9,10 @@ import { createCardanoTransaction } from '@subwallet/extension-base/services/bal
9
9
  import { gasSettingsForEWC, getERC20TransactionObject, getEVMTransactionObject } from '@subwallet/extension-base/services/balance-service/transfer/smart-contract';
10
10
  import { createSubstrateExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/token';
11
11
  import { createTonTransaction } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
12
- import { createAcrossBridgeExtrinsic, createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createPolygonBridgeExtrinsic, createSnowBridgeExtrinsic, createXcmExtrinsicV2 } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
12
+ import { createAcrossBridgeExtrinsic, createAvailBridgeExtrinsicFromAvail, createAvailBridgeTxFromEth, createBittensorToSubtensorEvmExtrinsic, createPolygonBridgeExtrinsic, createSnowBridgeExtrinsic, createSubtensorEvmToBittensorExtrinsic, createXcmExtrinsicV2 } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
13
13
  import { _isAcrossChainBridge, _isAcrossTestnetBridge, getAcrossSendingValue } from '@subwallet/extension-base/services/balance-service/transfer/xcm/acrossBridge';
14
14
  import { isAvailChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/availBridge';
15
+ import { _isBittensorToSubtensorBridge, _isSubtensorToBittensorBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/bittensorBridge/nativeTokenBridge';
15
16
  import { _isPolygonChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/polygonBridge';
16
17
  import { _isPosChainBridge } from '@subwallet/extension-base/services/balance-service/transfer/xcm/posBridge';
17
18
  import { estimateXcmFee } from '@subwallet/extension-base/services/balance-service/transfer/xcm/utils';
@@ -82,6 +83,7 @@ export const calculateTransferMaxTransferable = async (id, request, freeBalance,
82
83
  feeOption,
83
84
  isTransferLocalTokenAndPayThatTokenAsFee,
84
85
  isTransferNativeTokenAndPayLocalTokenAsFee,
86
+ metadata,
85
87
  nativeToken,
86
88
  srcChain,
87
89
  srcToken,
@@ -184,7 +186,8 @@ export const calculateTransferMaxTransferable = async (id, request, freeBalance,
184
186
  networkKey: srcChain.slug,
185
187
  tokenInfo: srcToken,
186
188
  to: recipient,
187
- substrateApi
189
+ substrateApi,
190
+ metadata
188
191
  });
189
192
  }
190
193
  if (feeChainType === 'evm') {
@@ -337,10 +340,12 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
337
340
  srcChain,
338
341
  srcToken,
339
342
  substrateApi,
343
+ transferAll,
340
344
  value
341
345
  } = request;
342
346
  const feeChainType = fee.type;
343
347
  let estimatedFee = '0';
348
+ let crossChainFee = '0';
344
349
  let feeOptions;
345
350
  let maxTransferable;
346
351
  let error;
@@ -350,7 +355,9 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
350
355
  const isPolygonBridgeTransfer = _isPolygonChainBridge(srcChain.slug, destChain.slug);
351
356
  const isPosBridgeTransfer = _isPosChainBridge(srcChain.slug, destChain.slug);
352
357
  const isAcrossBridgeTransfer = _isAcrossChainBridge(srcChain.slug, destChain.slug);
353
- const isSubstrateXcm = !(isAvailBridgeFromEvm || isAvailBridgeFromAvail || isSnowBridgeEvmTransfer || isPolygonBridgeTransfer || isPosBridgeTransfer || isAcrossBridgeTransfer);
358
+ const isBittensorBridgeTransfer = _isBittensorToSubtensorBridge(srcChain.slug, destChain.slug);
359
+ const isSubtensorEvmBridgeTransfer = _isSubtensorToBittensorBridge(srcChain.slug, destChain.slug);
360
+ const isSubstrateParaspellXcm = !(isAvailBridgeFromEvm || isAvailBridgeFromAvail || isSnowBridgeEvmTransfer || isPolygonBridgeTransfer || isPosBridgeTransfer || isAcrossBridgeTransfer || isBittensorBridgeTransfer || isSubtensorEvmBridgeTransfer);
354
361
  const fakeAddress = '5DRewsYzhJqZXU3SRaWy1FSt5iDr875ao91aw5fjrJmDG4Ap'; // todo: move this
355
362
  const substrateAddress = fakeAddress; // todo: move this
356
363
  const evmAddress = u8aToHex(addressToEvm(fakeAddress)); // todo: move this
@@ -373,7 +380,8 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
373
380
  evmApi,
374
381
  feeCustom,
375
382
  feeOption,
376
- feeInfo: fee
383
+ feeInfo: fee,
384
+ transferAll
377
385
  };
378
386
  let funcCreateExtrinsic;
379
387
  if (isPosBridgeTransfer || isPolygonBridgeTransfer) {
@@ -381,6 +389,10 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
381
389
  } else if (isAcrossBridgeTransfer) {
382
390
  funcCreateExtrinsic = createAcrossBridgeExtrinsic;
383
391
  params.sendingValue = await getAcrossSendingValue(srcChain, srcToken, destChain, _isAcrossTestnetBridge(srcChain.slug));
392
+ } else if (isBittensorBridgeTransfer) {
393
+ funcCreateExtrinsic = createBittensorToSubtensorEvmExtrinsic;
394
+ } else if (isSubtensorEvmBridgeTransfer) {
395
+ funcCreateExtrinsic = createSubtensorEvmToBittensorExtrinsic;
384
396
  } else if (isSnowBridgeEvmTransfer) {
385
397
  funcCreateExtrinsic = createSnowBridgeExtrinsic;
386
398
  } else if (isAvailBridgeFromEvm) {
@@ -412,7 +424,8 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
412
424
  };
413
425
  } else if (feeChainType === 'substrate') {
414
426
  // Calculate fee for substrate transaction
415
- if (isSubstrateXcm) {
427
+ if (isSubstrateParaspellXcm) {
428
+ var _xcmFeeInfo$destinati;
416
429
  const xcmFeeInfo = await estimateXcmFee({
417
430
  fromChainInfo: params.originChain,
418
431
  fromTokenInfo: params.originTokenInfo,
@@ -422,6 +435,7 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
422
435
  value: params.sendingValue
423
436
  });
424
437
  estimatedFee = (xcmFeeInfo === null || xcmFeeInfo === void 0 ? void 0 : xcmFeeInfo.origin.fee) || '0';
438
+ crossChainFee = (xcmFeeInfo === null || xcmFeeInfo === void 0 ? void 0 : (_xcmFeeInfo$destinati = xcmFeeInfo.destination) === null || _xcmFeeInfo$destinati === void 0 ? void 0 : _xcmFeeInfo$destinati.fee) || '0';
425
439
  } else {
426
440
  try {
427
441
  var _paymentInfo$partialF2;
@@ -436,7 +450,8 @@ export const calculateXcmMaxTransferable = async (id, request, freeBalance, fee)
436
450
  estimatedFee = new BigN(estimatedFee).plus(tip).toFixed(0);
437
451
  feeOptions = {
438
452
  ...fee,
439
- estimatedFee
453
+ estimatedFee,
454
+ crossChainFee
440
455
  };
441
456
  } else if (feeChainType === 'bitcoin') {
442
457
  feeOptions = {