@subwallet/extension-base 1.2.8-1 → 1.2.10-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 (132) hide show
  1. package/background/KoniTypes.d.ts +7 -3
  2. package/background/KoniTypes.js +1 -1
  3. package/cjs/background/KoniTypes.js +1 -1
  4. package/cjs/core/logic-validation/transfer.js +22 -2
  5. package/cjs/core/substrate/foreign-asset-pallet.js +16 -0
  6. package/cjs/core/substrate/xcm-parser.js +26 -4
  7. package/cjs/koni/api/contract-handler/evm/web3.js +58 -0
  8. package/cjs/{services/chain-service/helper → koni/api/contract-handler/utils}/index.js +19 -2
  9. package/cjs/koni/api/contract-handler/wasm/index.js +49 -0
  10. package/cjs/koni/api/nft/evm_nft/index.js +6 -6
  11. package/cjs/koni/api/nft/wasm_nft/index.js +16 -16
  12. package/cjs/koni/api/yield/helper/utils.js +1 -22
  13. package/cjs/koni/background/handlers/Extension.js +128 -64
  14. package/cjs/packageInfo.js +1 -1
  15. package/cjs/services/balance-service/helpers/index.js +11 -0
  16. package/cjs/services/balance-service/helpers/process.js +50 -0
  17. package/cjs/services/balance-service/helpers/subscribe/evm.js +11 -3
  18. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +10 -24
  19. package/cjs/services/balance-service/index.js +20 -0
  20. package/cjs/{koni/api/tokens/evm/transfer.js → services/balance-service/transfer/smart-contract.js} +33 -38
  21. package/cjs/{koni/api/dotsama/transfer.js → services/balance-service/transfer/token.js} +3 -3
  22. package/cjs/{koni/api → services/balance-service/transfer}/xcm/index.js +26 -6
  23. package/cjs/{koni/api → services/balance-service/transfer}/xcm/polkadotXcm.js +2 -2
  24. package/cjs/services/balance-service/transfer/xcm/snowBridge.js +60 -0
  25. package/cjs/{koni/api → services/balance-service/transfer}/xcm/xTokens.js +1 -1
  26. package/cjs/{koni/api → services/balance-service/transfer}/xcm/xcmPallet.js +1 -1
  27. package/cjs/services/chain-service/handler/EvmChainHandler.js +3 -3
  28. package/cjs/services/chain-service/handler/SubstrateChainHandler.js +4 -4
  29. package/cjs/services/chain-service/health-check/utils/asset-info.js +18 -18
  30. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +16 -35
  31. package/cjs/services/earning-service/handlers/special.js +1 -1
  32. package/cjs/services/history-service/subscan-history.js +1 -1
  33. package/cjs/services/swap-service/handler/base-handler.js +3 -2
  34. package/cjs/services/swap-service/handler/chainflip-handler.js +10 -9
  35. package/cjs/services/swap-service/handler/hydradx-handler.js +12 -11
  36. package/cjs/services/swap-service/index.js +3 -2
  37. package/cjs/services/swap-service/utils.js +1 -13
  38. package/cjs/services/transaction-service/index.js +2 -2
  39. package/cjs/types/service-base.js +30 -1
  40. package/cjs/types/swap/index.js +0 -4
  41. package/cjs/utils/eth/parseTransaction/index.js +10 -10
  42. package/core/logic-validation/transfer.d.ts +1 -1
  43. package/core/logic-validation/transfer.js +22 -3
  44. package/core/substrate/foreign-asset-pallet.d.ts +8 -0
  45. package/core/substrate/foreign-asset-pallet.js +9 -0
  46. package/core/substrate/xcm-parser.d.ts +3 -1
  47. package/core/substrate/xcm-parser.js +25 -5
  48. package/koni/api/contract-handler/evm/web3.d.ts +8 -0
  49. package/koni/api/contract-handler/evm/web3.js +45 -0
  50. package/{services/chain-service/helper → koni/api/contract-handler/utils}/index.d.ts +4 -0
  51. package/{services/chain-service/helper → koni/api/contract-handler/utils}/index.js +15 -1
  52. package/koni/api/contract-handler/utils/snowbridge_gateway_abi.json +1122 -0
  53. package/koni/api/{tokens → contract-handler}/wasm/index.d.ts +0 -2
  54. package/koni/api/{tokens → contract-handler}/wasm/index.js +1 -25
  55. package/koni/api/nft/evm_nft/index.js +1 -1
  56. package/koni/api/nft/wasm_nft/index.js +2 -2
  57. package/koni/api/yield/helper/utils.d.ts +1 -5
  58. package/koni/api/yield/helper/utils.js +0 -16
  59. package/koni/background/handlers/Extension.d.ts +2 -0
  60. package/koni/background/handlers/Extension.js +82 -18
  61. package/package.json +85 -79
  62. package/packageInfo.js +1 -1
  63. package/services/balance-service/helpers/index.d.ts +1 -0
  64. package/services/balance-service/helpers/index.js +2 -1
  65. package/services/balance-service/helpers/process.d.ts +13 -0
  66. package/services/balance-service/helpers/process.js +43 -0
  67. package/services/balance-service/helpers/subscribe/evm.js +11 -3
  68. package/services/balance-service/helpers/subscribe/substrate/index.js +11 -25
  69. package/services/balance-service/index.d.ts +3 -0
  70. package/services/balance-service/index.js +21 -1
  71. package/services/balance-service/transfer/smart-contract.d.ts +7 -0
  72. package/{koni/api/tokens/evm/transfer.js → services/balance-service/transfer/smart-contract.js} +28 -31
  73. package/{koni/api/dotsama/transfer.js → services/balance-service/transfer/token.js} +4 -4
  74. package/{koni/api → services/balance-service/transfer}/xcm/index.d.ts +9 -3
  75. package/{koni/api → services/balance-service/transfer}/xcm/index.js +21 -3
  76. package/{koni/api → services/balance-service/transfer}/xcm/polkadotXcm.js +3 -3
  77. package/services/balance-service/transfer/xcm/snowBridge.d.ts +4 -0
  78. package/services/balance-service/transfer/xcm/snowBridge.js +54 -0
  79. package/{koni/api → services/balance-service/transfer}/xcm/xTokens.js +1 -1
  80. package/{koni/api → services/balance-service/transfer}/xcm/xcmPallet.js +1 -1
  81. package/services/chain-service/handler/EvmChainHandler.js +1 -1
  82. package/services/chain-service/handler/SubstrateChainHandler.js +2 -2
  83. package/services/chain-service/health-check/utils/asset-info.js +3 -3
  84. package/services/earning-service/handlers/liquid-staking/stella-swap.js +16 -35
  85. package/services/earning-service/handlers/special.js +1 -1
  86. package/services/history-service/subscan-history.js +1 -1
  87. package/services/swap-service/handler/base-handler.d.ts +5 -5
  88. package/services/swap-service/handler/base-handler.js +4 -3
  89. package/services/swap-service/handler/chainflip-handler.d.ts +4 -4
  90. package/services/swap-service/handler/chainflip-handler.js +7 -6
  91. package/services/swap-service/handler/hydradx-handler.d.ts +6 -6
  92. package/services/swap-service/handler/hydradx-handler.js +12 -11
  93. package/services/swap-service/index.d.ts +3 -2
  94. package/services/swap-service/index.js +4 -3
  95. package/services/swap-service/utils.d.ts +1 -3
  96. package/services/swap-service/utils.js +1 -11
  97. package/services/transaction-service/index.js +2 -2
  98. package/types/service-base.d.ts +31 -3
  99. package/types/service-base.js +23 -1
  100. package/types/swap/index.d.ts +8 -30
  101. package/types/swap/index.js +0 -4
  102. package/types/yield/actions/join/submit.d.ts +7 -4
  103. package/utils/eth/parseTransaction/index.js +1 -1
  104. package/cjs/koni/api/tokens/evm/balance.js +0 -18
  105. package/cjs/koni/api/tokens/evm/web3.js +0 -17
  106. package/cjs/koni/api/tokens/index.js +0 -17
  107. package/cjs/koni/api/tokens/wasm/index.js +0 -74
  108. package/koni/api/tokens/evm/balance.d.ts +0 -2
  109. package/koni/api/tokens/evm/balance.js +0 -12
  110. package/koni/api/tokens/evm/transfer.d.ts +0 -17
  111. package/koni/api/tokens/evm/web3.d.ts +0 -3
  112. package/koni/api/tokens/evm/web3.js +0 -9
  113. package/koni/api/tokens/index.d.ts +0 -1
  114. package/koni/api/tokens/index.js +0 -11
  115. /package/cjs/koni/api/{tokens → contract-handler}/wasm/utils.js +0 -0
  116. /package/cjs/{koni/api → services/balance-service/transfer}/xcm/utils.js +0 -0
  117. /package/{services/chain-service/helper → koni/api/contract-handler/utils}/azero_domain_registry_abi.json +0 -0
  118. /package/{services/chain-service/helper → koni/api/contract-handler/utils}/erc20_abi.json +0 -0
  119. /package/{services/chain-service/helper → koni/api/contract-handler/utils}/erc721_abi.json +0 -0
  120. /package/{services/chain-service/helper → koni/api/contract-handler/utils}/neuroguns_psp34_abi.json +0 -0
  121. /package/{services/chain-service/helper → koni/api/contract-handler/utils}/pink_psp34_abi.json +0 -0
  122. /package/{services/chain-service/helper → koni/api/contract-handler/utils}/psp22_abi.json +0 -0
  123. /package/{services/chain-service/helper → koni/api/contract-handler/utils}/psp34_abi.json +0 -0
  124. /package/{services/chain-service/helper → koni/api/contract-handler/utils}/test_erc721_abi.json +0 -0
  125. /package/koni/api/{tokens → contract-handler}/wasm/utils.d.ts +0 -0
  126. /package/koni/api/{tokens → contract-handler}/wasm/utils.js +0 -0
  127. /package/{koni/api/dotsama/transfer.d.ts → services/balance-service/transfer/token.d.ts} +0 -0
  128. /package/{koni/api → services/balance-service/transfer}/xcm/polkadotXcm.d.ts +0 -0
  129. /package/{koni/api → services/balance-service/transfer}/xcm/utils.d.ts +0 -0
  130. /package/{koni/api → services/balance-service/transfer}/xcm/utils.js +0 -0
  131. /package/{koni/api → services/balance-service/transfer}/xcm/xTokens.d.ts +0 -0
  132. /package/{koni/api → services/balance-service/transfer}/xcm/xcmPallet.d.ts +0 -0
@@ -1,4 +1,3 @@
1
- import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
2
1
  import { ApiPromise } from '@polkadot/api';
3
2
  import { ContractPromise } from '@polkadot/api-contract';
4
3
  export declare function getPSP22ContractPromise(apiPromise: ApiPromise, contractAddress: string): ContractPromise;
@@ -7,4 +6,3 @@ export declare function isNeurogunNft(contractAddress: string): boolean;
7
6
  export declare function isAzeroDomainNft(contractAddress: string): boolean;
8
7
  export declare function getPSP34ContractPromise(apiPromise: ApiPromise, contractAddress: string): ContractPromise;
9
8
  export declare function getTokenUriMethod(contractAddress: string): string;
10
- export declare function getPSP34TransferExtrinsic(networkKey: string, substrateApi: _SubstrateApi, senderAddress: string, recipientAddress: string, params: Record<string, any>): Promise<import("@polkadot/api-base/types").SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult> | null>;
@@ -1,8 +1,7 @@
1
1
  // Copyright 2019-2022 @subwallet/extension-base
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
- import { getWasmContractGasLimit } from '@subwallet/extension-base/koni/api/tokens/wasm/utils';
5
- import { _AZERO_DOMAIN_REGISTRY_ABI, _NEUROGUNS_PSP34_ABI, _PINK_PSP34_ABI, _PSP22_ABI, _PSP34_ABI } from '@subwallet/extension-base/services/chain-service/helper';
4
+ import { _AZERO_DOMAIN_REGISTRY_ABI, _NEUROGUNS_PSP34_ABI, _PINK_PSP34_ABI, _PSP22_ABI, _PSP34_ABI } from '@subwallet/extension-base/koni/api/contract-handler/utils';
6
5
  import { ContractPromise } from '@polkadot/api-contract';
7
6
  export function getPSP22ContractPromise(apiPromise, contractAddress) {
8
7
  return new ContractPromise(apiPromise, _PSP22_ABI, contractAddress);
@@ -36,27 +35,4 @@ export function getTokenUriMethod(contractAddress) {
36
35
  return 'tokenUri';
37
36
  }
38
37
  return 'psp34Traits::tokenUri';
39
- }
40
- const mustFormatNumberReg = /^-?[0-9][0-9,.]+$/;
41
- export async function getPSP34TransferExtrinsic(networkKey, substrateApi, senderAddress, recipientAddress, params) {
42
- const contractAddress = params.contractAddress;
43
- const onChainOption = params.onChainOption;
44
- for (const [key, value] of Object.entries(onChainOption)) {
45
- if (mustFormatNumberReg.test(value)) {
46
- onChainOption[key] = value.replaceAll(',', '');
47
- }
48
- }
49
- try {
50
- const contractPromise = getPSP34ContractPromise(substrateApi.api, contractAddress);
51
- // @ts-ignore
52
- const gasLimit = await getWasmContractGasLimit(substrateApi.api, senderAddress, 'psp34::transfer', contractPromise, {}, [recipientAddress, onChainOption, {}]);
53
-
54
- // @ts-ignore
55
- return contractPromise.tx['psp34::transfer']({
56
- gasLimit
57
- }, recipientAddress, onChainOption, {});
58
- } catch (e) {
59
- console.debug(e);
60
- return null;
61
- }
62
38
  }
@@ -2,9 +2,9 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { _AssetType } from '@subwallet/chain-list/types';
5
+ import { _ERC721_ABI } from '@subwallet/extension-base/koni/api/contract-handler/utils';
5
6
  import { getRandomIpfsGateway } from '@subwallet/extension-base/koni/api/nft/config';
6
7
  import { BaseNftApi } from '@subwallet/extension-base/koni/api/nft/nft';
7
- import { _ERC721_ABI } from '@subwallet/extension-base/services/chain-service/helper';
8
8
  import { _getContractAddressOfToken } from '@subwallet/extension-base/services/chain-service/utils';
9
9
  import { isUrl } from '@subwallet/extension-base/utils';
10
10
  import { isEthereumAddress } from '@polkadot/util-crypto';
@@ -2,11 +2,11 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { _AssetType } from '@subwallet/chain-list/types';
5
+ import { getPSP34ContractPromise, getTokenUriMethod, isAzeroDomainNft, isPinkRoboNft } from '@subwallet/extension-base/koni/api/contract-handler/wasm';
6
+ import { getDefaultWeightV2 } from '@subwallet/extension-base/koni/api/contract-handler/wasm/utils';
5
7
  import { AZERO_DOMAIN_CONTRACTS } from '@subwallet/extension-base/koni/api/dotsama/domain';
6
8
  import { BaseNftApi } from '@subwallet/extension-base/koni/api/nft/nft';
7
9
  import { collectionApiFromArtZero, collectionDetailApiFromArtZero, externalUrlOnArtZero, ipfsApiFromArtZero, itemImageApiFromArtZero } from '@subwallet/extension-base/koni/api/nft/wasm_nft/utils';
8
- import { getPSP34ContractPromise, getTokenUriMethod, isAzeroDomainNft, isPinkRoboNft } from '@subwallet/extension-base/koni/api/tokens/wasm';
9
- import { getDefaultWeightV2 } from '@subwallet/extension-base/koni/api/tokens/wasm/utils';
10
10
  import { _getContractAddressOfToken } from '@subwallet/extension-base/services/chain-service/utils';
11
11
  import { isUrl } from '@subwallet/extension-base/utils';
12
12
  import { isEthereumAddress } from '@polkadot/util-crypto';
@@ -1,10 +1,6 @@
1
1
  import { _ChainAsset } from '@subwallet/chain-list/types';
2
2
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
3
- import { RuntimeDispatchInfo, SpecialYieldPoolInfo, YieldStepDetail } from '@subwallet/extension-base/types';
4
- export declare const syntheticSelectedValidators: string[];
5
- export declare function calculateAlternativeFee(feeInfo: RuntimeDispatchInfo): number;
6
- export declare const DEFAULT_YIELD_FIRST_STEP: YieldStepDetail;
3
+ import { SpecialYieldPoolInfo } from '@subwallet/extension-base/types';
7
4
  export declare const YIELD_EXTRINSIC_TYPES: ExtrinsicType[];
8
5
  export declare const YIELD_POOL_STAT_REFRESH_INTERVAL = 90000;
9
- export declare const YIELD_POOL_MIN_AMOUNT_PERCENT: Record<string, number>;
10
6
  export declare function convertDerivativeToOriginToken(amount: string, poolInfo: SpecialYieldPoolInfo, derivativeTokenInfo: _ChainAsset, originTokenInfo: _ChainAsset): string;
@@ -3,26 +3,10 @@
3
3
 
4
4
  import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
5
5
  import { _getAssetDecimals } from '@subwallet/extension-base/services/chain-service/utils';
6
- import { YieldStepType } from '@subwallet/extension-base/types';
7
6
  import { BN_TEN } from '@subwallet/extension-base/utils';
8
7
  import BigN from 'bignumber.js';
9
- export const syntheticSelectedValidators = ['15MLn9YQaHZ4GMkhK3qXqR5iGGSdULyJ995ctjeBgFRseyi6', '1REAJ1k691g5Eqqg9gL7vvZCBG7FCCZ8zgQkZWd4va5ESih', '1yGJ3h7TQuJWLYSsUVPZbM8aR8UsQXCqMvrFx5Fn1ktiAmq', '16GDRhRYxk42paoK6TfHAqWej8PdDDUwdDazjv4bAn4KGNeb', '13Ybj8CPEArUee78DxUAP9yX3ABmFNVQME1ZH4w8HVncHGzc', '14yx4vPAACZRhoDQm1dyvXD3QdRQyCRRCe5tj1zPomhhS29a', '14Vh8S1DzzycngbAB9vqEgPFR9JpSvmF1ezihTUES1EaHAV', '153YD8ZHD9dRh82U419bSCB5SzWhbdAFzjj4NtA5pMazR2yC', '1LUckyocmz9YzeQZHVpBvYYRGXb3rnSm2tvfz79h3G3JDgP', '14oRE62MB1SWR6h5RTx3GY5HK2oZipi1Gp3zdiLwVYLfEyRZ', '1cFsLn7o74nmjbRyDtMAnMpQMc5ZLsjgCSz9Np2mcejUK83', '15ZvLonEseaWZNy8LDkXXj3Y8bmAjxCjwvpy4pXWSL4nGSBs', '1NebF2xZHb4TJJpiqZZ3reeTo8dZov6LZ49qZqcHHbsmHfo', '1HmAqbBRrWvsqbLkvpiVDkdA2PcctUE5JUe3qokEh1FN455', '15tfUt4iQNjMyhZiJGBf4EpETE2KqtW1nfJwbBT1MvWjvcK9', '12RXTLiaYh59PokjZVhQvKzcfBEB5CvDnjKKUmDUotzcTH3S'];
10
- export function calculateAlternativeFee(feeInfo) {
11
- return feeInfo.partialFee;
12
- }
13
- export const DEFAULT_YIELD_FIRST_STEP = {
14
- id: 0,
15
- name: 'Fill information',
16
- type: YieldStepType.DEFAULT
17
- };
18
8
  export const YIELD_EXTRINSIC_TYPES = [ExtrinsicType.MINT_VDOT, ExtrinsicType.MINT_LDOT, ExtrinsicType.MINT_SDOT, ExtrinsicType.MINT_QDOT, ExtrinsicType.MINT_STDOT, ExtrinsicType.REDEEM_QDOT, ExtrinsicType.REDEEM_SDOT, ExtrinsicType.REDEEM_VDOT, ExtrinsicType.REDEEM_LDOT, ExtrinsicType.REDEEM_STDOT, ExtrinsicType.STAKING_JOIN_POOL, ExtrinsicType.STAKING_CLAIM_REWARD, ExtrinsicType.STAKING_LEAVE_POOL, ExtrinsicType.STAKING_POOL_WITHDRAW];
19
9
  export const YIELD_POOL_STAT_REFRESH_INTERVAL = 90000;
20
- export const YIELD_POOL_MIN_AMOUNT_PERCENT = {
21
- DOT___acala_liquid_staking: 0.98,
22
- DOT___bifrost_liquid_staking: 0.99,
23
- DOT___parallel_liquid_staking: 0.97,
24
- default: 0.98
25
- };
26
10
  export function convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, originTokenInfo) {
27
11
  var _poolInfo$statistic, _poolInfo$statistic$a;
28
12
  const derivativeDecimals = _getAssetDecimals(derivativeTokenInfo);
@@ -124,6 +124,8 @@ export default class KoniExtension {
124
124
  private subscribeStaking;
125
125
  private subscribeHistory;
126
126
  private subscribeHistoryByChainAndAddress;
127
+ private getOptimalTransferProcess;
128
+ private approveSpending;
127
129
  private makeTransfer;
128
130
  private makeCrossChainTransfer;
129
131
  private evmNftSubmitTransaction;
@@ -9,21 +9,23 @@ import { createSubscription } from '@subwallet/extension-base/background/handler
9
9
  import { AccountExternalErrorCode, BasicTxErrorType, CampaignDataType, ChainType, ExternalRequestPromiseStatus, ExtrinsicType, MantaPayEnableMessage, StakingTxErrorType, StakingType } from '@subwallet/extension-base/background/KoniTypes';
10
10
  import { ALL_ACCOUNT_KEY, ALL_GENESIS_HASH, LATEST_SESSION, XCM_FEE_RATIO } from '@subwallet/extension-base/constants';
11
11
  import { additionalValidateTransfer, additionalValidateXcmTransfer, validateTransferRequest, validateXcmTransferRequest } from '@subwallet/extension-base/core/logic-validation/transfer';
12
+ import { _isSnowBridgeXcm } from '@subwallet/extension-base/core/substrate/xcm-parser';
12
13
  import { ALLOWED_PATH } from '@subwallet/extension-base/defaults';
14
+ import { getERC20SpendingApprovalTx } from '@subwallet/extension-base/koni/api/contract-handler/evm/web3';
15
+ import { isSnowBridgeGatewayContract } from '@subwallet/extension-base/koni/api/contract-handler/utils';
13
16
  import { resolveAzeroAddressToDomain, resolveAzeroDomainToAddress } from '@subwallet/extension-base/koni/api/dotsama/domain';
14
17
  import { parseSubstrateTransaction } from '@subwallet/extension-base/koni/api/dotsama/parseTransaction';
15
- import { createTransferExtrinsic, getTransferMockTxFee } from '@subwallet/extension-base/koni/api/dotsama/transfer';
16
18
  import { getNftTransferExtrinsic, isRecipientSelf } from '@subwallet/extension-base/koni/api/nft/transfer';
17
19
  import { getBondingExtrinsic, getCancelWithdrawalExtrinsic, getClaimRewardExtrinsic, getNominationPoolsInfo, getUnbondingExtrinsic, getValidatorsInfo, validateBondingCondition, validateUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding';
18
20
  import { getTuringCancelCompoundingExtrinsic, getTuringCompoundExtrinsic } from '@subwallet/extension-base/koni/api/staking/bonding/paraChain';
19
21
  import { getPoolingBondingExtrinsic, getPoolingUnbondingExtrinsic, validatePoolBondingCondition, validateRelayUnbondingCondition } from '@subwallet/extension-base/koni/api/staking/bonding/relayChain';
20
- import { getERC20TransactionObject, getERC721Transaction, getEVMTransactionObject } from '@subwallet/extension-base/koni/api/tokens/evm/transfer';
21
- import { getPSP34TransferExtrinsic } from '@subwallet/extension-base/koni/api/tokens/wasm';
22
- import { createXcmExtrinsic, getXcmMockTxFee } from '@subwallet/extension-base/koni/api/xcm';
23
22
  import { YIELD_EXTRINSIC_TYPES } from '@subwallet/extension-base/koni/api/yield/helper/utils';
23
+ import { getERC20TransactionObject, getERC721Transaction, getEVMTransactionObject, getPSP34TransferExtrinsic } from '@subwallet/extension-base/services/balance-service/transfer/smart-contract';
24
+ import { createTransferExtrinsic, getTransferMockTxFee } from '@subwallet/extension-base/services/balance-service/transfer/token';
25
+ import { createSnowBridgeExtrinsic, createXcmExtrinsic, getXcmMockTxFee } from '@subwallet/extension-base/services/balance-service/transfer/xcm';
24
26
  import { _API_OPTIONS_CHAIN_GROUP, _DEFAULT_MANTA_ZK_CHAIN, _MANTA_ZK_CHAIN_GROUP, _ZK_ASSET_PREFIX } from '@subwallet/extension-base/services/chain-service/constants';
25
27
  import { _ChainConnectionStatus } from '@subwallet/extension-base/services/chain-service/types';
26
- import { _getAssetDecimals, _getAssetSymbol, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getEvmChainId, _getSubstrateGenesisHash, _isAssetSmartContractNft, _isChainEvmCompatible, _isCustomAsset, _isLocalToken, _isMantaZkAsset, _isNativeToken, _isTokenEvmSmartContract, _isTokenTransferredByEvm } from '@subwallet/extension-base/services/chain-service/utils';
28
+ import { _getAssetDecimals, _getAssetSymbol, _getChainNativeTokenBasicInfo, _getContractAddressOfToken, _getEvmChainId, _getSubstrateGenesisHash, _isAssetSmartContractNft, _isChainEvmCompatible, _isCustomAsset, _isLocalToken, _isMantaZkAsset, _isNativeToken, _isPureEvmChain, _isTokenEvmSmartContract, _isTokenTransferredByEvm } from '@subwallet/extension-base/services/chain-service/utils';
27
29
  import { EXTENSION_REQUEST_URL } from '@subwallet/extension-base/services/request-service/constants';
28
30
  import { DEFAULT_AUTO_LOCK_TIME } from '@subwallet/extension-base/services/setting-service/constants';
29
31
  import { WALLET_CONNECT_EIP155_NAMESPACE } from '@subwallet/extension-base/services/wallet-connect-service/constants';
@@ -1541,6 +1543,38 @@ export default class KoniExtension {
1541
1543
  items: subscribeHistoriesResponse.value
1542
1544
  };
1543
1545
  }
1546
+ async getOptimalTransferProcess(params) {
1547
+ return this.#koniState.balanceService.getOptimalTransferProcess(params);
1548
+ }
1549
+ async approveSpending(params) {
1550
+ const {
1551
+ amount,
1552
+ chain,
1553
+ contractAddress,
1554
+ owner,
1555
+ spenderAddress
1556
+ } = params;
1557
+ if (!isSnowBridgeGatewayContract(spenderAddress)) {
1558
+ throw new Error('Only SnowBridge is supported'); // todo: support all ERC20 spending approval
1559
+ }
1560
+
1561
+ const evmApi = this.#koniState.getEvmApi(chain);
1562
+ const transactionConfig = await getERC20SpendingApprovalTx(spenderAddress, owner, contractAddress, evmApi, amount);
1563
+ return this.#koniState.transactionService.handleTransaction({
1564
+ errors: [],
1565
+ warnings: [],
1566
+ address: owner,
1567
+ chain,
1568
+ chainType: ChainType.EVM,
1569
+ transferNativeAmount: '0',
1570
+ transaction: transactionConfig,
1571
+ data: params,
1572
+ resolveOnDone: true,
1573
+ // todo: double-check this for other transactions
1574
+ extrinsicType: ExtrinsicType.TOKEN_SPENDING_APPROVAL,
1575
+ isTransferAll: false
1576
+ });
1577
+ }
1544
1578
  async makeTransfer(inputData) {
1545
1579
  const {
1546
1580
  from,
@@ -1667,19 +1701,33 @@ export default class KoniExtension {
1667
1701
  if (errors.length > 0) {
1668
1702
  return this.#koniState.transactionService.generateBeforeHandleResponseErrors(errors);
1669
1703
  }
1704
+ const chainInfoMap = this.#koniState.getChainInfoMap();
1705
+ const isFromSnowBridgeXcm = _isPureEvmChain(chainInfoMap[originNetworkKey]) && _isSnowBridgeXcm(chainInfoMap[originNetworkKey], chainInfoMap[destinationNetworkKey]);
1670
1706
  let additionalValidator;
1671
1707
  let eventsHandler;
1672
1708
  if (fromKeyPair && destinationTokenInfo) {
1673
- const substrateApi = this.#koniState.getSubstrateApi(originNetworkKey);
1674
- const chainInfoMap = this.#koniState.getChainInfoMap();
1675
- extrinsic = await createXcmExtrinsic({
1676
- destinationTokenInfo,
1677
- originTokenInfo,
1678
- sendingValue: value,
1679
- recipient: to,
1680
- chainInfoMap,
1681
- substrateApi
1682
- });
1709
+ if (isFromSnowBridgeXcm) {
1710
+ const evmApi = this.#koniState.getEvmApi(originNetworkKey);
1711
+ extrinsic = await createSnowBridgeExtrinsic({
1712
+ destinationTokenInfo,
1713
+ originTokenInfo,
1714
+ sendingValue: value,
1715
+ sender: from,
1716
+ recipient: to,
1717
+ chainInfoMap,
1718
+ evmApi
1719
+ });
1720
+ } else {
1721
+ const substrateApi = this.#koniState.getSubstrateApi(originNetworkKey);
1722
+ extrinsic = await createXcmExtrinsic({
1723
+ destinationTokenInfo,
1724
+ originTokenInfo,
1725
+ sendingValue: value,
1726
+ recipient: to,
1727
+ chainInfoMap,
1728
+ substrateApi
1729
+ });
1730
+ }
1683
1731
  additionalValidator = async inputTransaction => {
1684
1732
  const {
1685
1733
  value: senderTransferable
@@ -1688,7 +1736,19 @@ export default class KoniExtension {
1688
1736
  networkKey: originNetworkKey,
1689
1737
  token: originTokenInfo.slug
1690
1738
  });
1691
- const [warning, error] = additionalValidateXcmTransfer(originTokenInfo, destinationTokenInfo, value, senderTransferable);
1739
+ const isSnowBridge = _isSnowBridgeXcm(chainInfoMap[originNetworkKey], chainInfoMap[destinationNetworkKey]);
1740
+ let recipientNativeBalance = '0';
1741
+ if (isSnowBridge) {
1742
+ const {
1743
+ value
1744
+ } = await this.getAddressTransferableBalance({
1745
+ address: to,
1746
+ networkKey: destinationNetworkKey,
1747
+ extrinsicType: ExtrinsicType.TRANSFER_BALANCE
1748
+ });
1749
+ recipientNativeBalance = value;
1750
+ }
1751
+ const [warning, error] = additionalValidateXcmTransfer(originTokenInfo, destinationTokenInfo, value, senderTransferable, recipientNativeBalance, chainInfoMap[destinationNetworkKey], isSnowBridge);
1692
1752
  error && inputTransaction.errors.push(error);
1693
1753
  warning && inputTransaction.warnings.push(warning);
1694
1754
  };
@@ -1716,7 +1776,7 @@ export default class KoniExtension {
1716
1776
  transaction: extrinsic,
1717
1777
  data: inputData,
1718
1778
  extrinsicType: ExtrinsicType.TRANSFER_XCM,
1719
- chainType: ChainType.SUBSTRATE,
1779
+ chainType: !isFromSnowBridgeXcm ? ChainType.SUBSTRATE : ChainType.EVM,
1720
1780
  transferNativeAmount: _isNativeToken(originTokenInfo) ? value : '0',
1721
1781
  ignoreWarnings: inputData.transferAll,
1722
1782
  isTransferAll: inputData.transferAll,
@@ -1926,7 +1986,7 @@ export default class KoniExtension {
1926
1986
  const isPSP34 = params === null || params === void 0 ? void 0 : params.isPsp34;
1927
1987
  const networkKey = params === null || params === void 0 ? void 0 : params.networkKey;
1928
1988
  const apiProps = this.#koniState.getSubstrateApi(networkKey);
1929
- const extrinsic = !isPSP34 ? await getNftTransferExtrinsic(networkKey, apiProps, senderAddress, recipientAddress, params || {}) : await getPSP34TransferExtrinsic(networkKey, apiProps, senderAddress, recipientAddress, params || {});
1989
+ const extrinsic = !isPSP34 ? await getNftTransferExtrinsic(networkKey, apiProps, senderAddress, recipientAddress, params || {}) : await getPSP34TransferExtrinsic(apiProps, senderAddress, recipientAddress, params || {});
1930
1990
 
1931
1991
  // this.addContact(recipientAddress);
1932
1992
 
@@ -4324,6 +4384,10 @@ export default class KoniExtension {
4324
4384
  return await this.makeTransfer(request);
4325
4385
  case 'pri(accounts.crossChainTransfer)':
4326
4386
  return await this.makeCrossChainTransfer(request);
4387
+ case 'pri(accounts.getOptimalTransferProcess)':
4388
+ return await this.getOptimalTransferProcess(request);
4389
+ case 'pri(accounts.approveSpending)':
4390
+ return await this.approveSpending(request);
4327
4391
 
4328
4392
  /// Sign QR
4329
4393
  case 'pri(qr.transaction.parse.substrate)':
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "./cjs/detectPackage.js"
18
18
  ],
19
19
  "type": "module",
20
- "version": "1.2.8-1",
20
+ "version": "1.2.10-0",
21
21
  "main": "./cjs/index.js",
22
22
  "module": "./index.js",
23
23
  "types": "./index.d.ts",
@@ -144,6 +144,11 @@
144
144
  "require": "./cjs/core/logic-validation/transfer.js",
145
145
  "default": "./core/logic-validation/transfer.js"
146
146
  },
147
+ "./core/substrate/foreign-asset-pallet": {
148
+ "types": "./core/substrate/foreign-asset-pallet.d.ts",
149
+ "require": "./cjs/core/substrate/foreign-asset-pallet.js",
150
+ "default": "./core/substrate/foreign-asset-pallet.js"
151
+ },
147
152
  "./core/substrate/nominationpools-pallet": {
148
153
  "types": "./core/substrate/nominationpools-pallet.d.ts",
149
154
  "require": "./cjs/core/substrate/nominationpools-pallet.js",
@@ -179,6 +184,35 @@
179
184
  "require": "./cjs/koni/api/coingecko.js",
180
185
  "default": "./koni/api/coingecko.js"
181
186
  },
187
+ "./koni/api/contract-handler/evm/web3": {
188
+ "types": "./koni/api/contract-handler/evm/web3.d.ts",
189
+ "require": "./cjs/koni/api/contract-handler/evm/web3.js",
190
+ "default": "./koni/api/contract-handler/evm/web3.js"
191
+ },
192
+ "./koni/api/contract-handler/utils": {
193
+ "types": "./koni/api/contract-handler/utils/index.d.ts",
194
+ "require": "./cjs/koni/api/contract-handler/utils/index.js",
195
+ "default": "./koni/api/contract-handler/utils/index.js"
196
+ },
197
+ "./koni/api/contract-handler/utils/azero_domain_registry_abi.json": "./koni/api/contract-handler/utils/azero_domain_registry_abi.json",
198
+ "./koni/api/contract-handler/utils/erc20_abi.json": "./koni/api/contract-handler/utils/erc20_abi.json",
199
+ "./koni/api/contract-handler/utils/erc721_abi.json": "./koni/api/contract-handler/utils/erc721_abi.json",
200
+ "./koni/api/contract-handler/utils/neuroguns_psp34_abi.json": "./koni/api/contract-handler/utils/neuroguns_psp34_abi.json",
201
+ "./koni/api/contract-handler/utils/pink_psp34_abi.json": "./koni/api/contract-handler/utils/pink_psp34_abi.json",
202
+ "./koni/api/contract-handler/utils/psp22_abi.json": "./koni/api/contract-handler/utils/psp22_abi.json",
203
+ "./koni/api/contract-handler/utils/psp34_abi.json": "./koni/api/contract-handler/utils/psp34_abi.json",
204
+ "./koni/api/contract-handler/utils/snowbridge_gateway_abi.json": "./koni/api/contract-handler/utils/snowbridge_gateway_abi.json",
205
+ "./koni/api/contract-handler/utils/test_erc721_abi.json": "./koni/api/contract-handler/utils/test_erc721_abi.json",
206
+ "./koni/api/contract-handler/wasm": {
207
+ "types": "./koni/api/contract-handler/wasm/index.d.ts",
208
+ "require": "./cjs/koni/api/contract-handler/wasm/index.js",
209
+ "default": "./koni/api/contract-handler/wasm/index.js"
210
+ },
211
+ "./koni/api/contract-handler/wasm/utils": {
212
+ "types": "./koni/api/contract-handler/wasm/utils.d.ts",
213
+ "require": "./cjs/koni/api/contract-handler/wasm/utils.js",
214
+ "default": "./koni/api/contract-handler/wasm/utils.js"
215
+ },
182
216
  "./koni/api/donate": {
183
217
  "types": "./koni/api/donate.d.ts",
184
218
  "require": "./cjs/koni/api/donate.js",
@@ -199,11 +233,6 @@
199
233
  "require": "./cjs/koni/api/dotsama/parseTransaction.js",
200
234
  "default": "./koni/api/dotsama/parseTransaction.js"
201
235
  },
202
- "./koni/api/dotsama/transfer": {
203
- "types": "./koni/api/dotsama/transfer.d.ts",
204
- "require": "./cjs/koni/api/dotsama/transfer.js",
205
- "default": "./koni/api/dotsama/transfer.js"
206
- },
207
236
  "./koni/api/dotsama/typeRegistry": {
208
237
  "types": "./koni/api/dotsama/typeRegistry.d.ts",
209
238
  "require": "./cjs/koni/api/dotsama/typeRegistry.js",
@@ -394,61 +423,6 @@
394
423
  "require": "./cjs/koni/api/subquery/subquery.js",
395
424
  "default": "./koni/api/subquery/subquery.js"
396
425
  },
397
- "./koni/api/tokens": {
398
- "types": "./koni/api/tokens/index.d.ts",
399
- "require": "./cjs/koni/api/tokens/index.js",
400
- "default": "./koni/api/tokens/index.js"
401
- },
402
- "./koni/api/tokens/evm/balance": {
403
- "types": "./koni/api/tokens/evm/balance.d.ts",
404
- "require": "./cjs/koni/api/tokens/evm/balance.js",
405
- "default": "./koni/api/tokens/evm/balance.js"
406
- },
407
- "./koni/api/tokens/evm/transfer": {
408
- "types": "./koni/api/tokens/evm/transfer.d.ts",
409
- "require": "./cjs/koni/api/tokens/evm/transfer.js",
410
- "default": "./koni/api/tokens/evm/transfer.js"
411
- },
412
- "./koni/api/tokens/evm/web3": {
413
- "types": "./koni/api/tokens/evm/web3.d.ts",
414
- "require": "./cjs/koni/api/tokens/evm/web3.js",
415
- "default": "./koni/api/tokens/evm/web3.js"
416
- },
417
- "./koni/api/tokens/wasm": {
418
- "types": "./koni/api/tokens/wasm/index.d.ts",
419
- "require": "./cjs/koni/api/tokens/wasm/index.js",
420
- "default": "./koni/api/tokens/wasm/index.js"
421
- },
422
- "./koni/api/tokens/wasm/utils": {
423
- "types": "./koni/api/tokens/wasm/utils.d.ts",
424
- "require": "./cjs/koni/api/tokens/wasm/utils.js",
425
- "default": "./koni/api/tokens/wasm/utils.js"
426
- },
427
- "./koni/api/xcm": {
428
- "types": "./koni/api/xcm/index.d.ts",
429
- "require": "./cjs/koni/api/xcm/index.js",
430
- "default": "./koni/api/xcm/index.js"
431
- },
432
- "./koni/api/xcm/polkadotXcm": {
433
- "types": "./koni/api/xcm/polkadotXcm.d.ts",
434
- "require": "./cjs/koni/api/xcm/polkadotXcm.js",
435
- "default": "./koni/api/xcm/polkadotXcm.js"
436
- },
437
- "./koni/api/xcm/utils": {
438
- "types": "./koni/api/xcm/utils.d.ts",
439
- "require": "./cjs/koni/api/xcm/utils.js",
440
- "default": "./koni/api/xcm/utils.js"
441
- },
442
- "./koni/api/xcm/xcmPallet": {
443
- "types": "./koni/api/xcm/xcmPallet.d.ts",
444
- "require": "./cjs/koni/api/xcm/xcmPallet.js",
445
- "default": "./koni/api/xcm/xcmPallet.js"
446
- },
447
- "./koni/api/xcm/xTokens": {
448
- "types": "./koni/api/xcm/xTokens.d.ts",
449
- "require": "./cjs/koni/api/xcm/xTokens.js",
450
- "default": "./koni/api/xcm/xTokens.js"
451
- },
452
426
  "./koni/api/yield/helper/utils": {
453
427
  "types": "./koni/api/yield/helper/utils.d.ts",
454
428
  "require": "./cjs/koni/api/yield/helper/utils.js",
@@ -560,6 +534,11 @@
560
534
  "require": "./cjs/services/balance-service/helpers/group.js",
561
535
  "default": "./services/balance-service/helpers/group.js"
562
536
  },
537
+ "./services/balance-service/helpers/process": {
538
+ "types": "./services/balance-service/helpers/process.d.ts",
539
+ "require": "./cjs/services/balance-service/helpers/process.js",
540
+ "default": "./services/balance-service/helpers/process.js"
541
+ },
563
542
  "./services/balance-service/helpers/subscribe": {
564
543
  "types": "./services/balance-service/helpers/subscribe/index.d.ts",
565
544
  "require": "./cjs/services/balance-service/helpers/subscribe/index.js",
@@ -580,6 +559,46 @@
580
559
  "require": "./cjs/services/balance-service/helpers/subscribe/substrate/equilibrium.js",
581
560
  "default": "./services/balance-service/helpers/subscribe/substrate/equilibrium.js"
582
561
  },
562
+ "./services/balance-service/transfer/smart-contract": {
563
+ "types": "./services/balance-service/transfer/smart-contract.d.ts",
564
+ "require": "./cjs/services/balance-service/transfer/smart-contract.js",
565
+ "default": "./services/balance-service/transfer/smart-contract.js"
566
+ },
567
+ "./services/balance-service/transfer/token": {
568
+ "types": "./services/balance-service/transfer/token.d.ts",
569
+ "require": "./cjs/services/balance-service/transfer/token.js",
570
+ "default": "./services/balance-service/transfer/token.js"
571
+ },
572
+ "./services/balance-service/transfer/xcm": {
573
+ "types": "./services/balance-service/transfer/xcm/index.d.ts",
574
+ "require": "./cjs/services/balance-service/transfer/xcm/index.js",
575
+ "default": "./services/balance-service/transfer/xcm/index.js"
576
+ },
577
+ "./services/balance-service/transfer/xcm/polkadotXcm": {
578
+ "types": "./services/balance-service/transfer/xcm/polkadotXcm.d.ts",
579
+ "require": "./cjs/services/balance-service/transfer/xcm/polkadotXcm.js",
580
+ "default": "./services/balance-service/transfer/xcm/polkadotXcm.js"
581
+ },
582
+ "./services/balance-service/transfer/xcm/snowBridge": {
583
+ "types": "./services/balance-service/transfer/xcm/snowBridge.d.ts",
584
+ "require": "./cjs/services/balance-service/transfer/xcm/snowBridge.js",
585
+ "default": "./services/balance-service/transfer/xcm/snowBridge.js"
586
+ },
587
+ "./services/balance-service/transfer/xcm/utils": {
588
+ "types": "./services/balance-service/transfer/xcm/utils.d.ts",
589
+ "require": "./cjs/services/balance-service/transfer/xcm/utils.js",
590
+ "default": "./services/balance-service/transfer/xcm/utils.js"
591
+ },
592
+ "./services/balance-service/transfer/xcm/xcmPallet": {
593
+ "types": "./services/balance-service/transfer/xcm/xcmPallet.d.ts",
594
+ "require": "./cjs/services/balance-service/transfer/xcm/xcmPallet.js",
595
+ "default": "./services/balance-service/transfer/xcm/xcmPallet.js"
596
+ },
597
+ "./services/balance-service/transfer/xcm/xTokens": {
598
+ "types": "./services/balance-service/transfer/xcm/xTokens.d.ts",
599
+ "require": "./cjs/services/balance-service/transfer/xcm/xTokens.js",
600
+ "default": "./services/balance-service/transfer/xcm/xTokens.js"
601
+ },
583
602
  "./services/base/types": {
584
603
  "types": "./services/base/types.d.ts",
585
604
  "require": "./cjs/services/base/types.js",
@@ -705,24 +724,11 @@
705
724
  "require": "./cjs/services/chain-service/health-check/utils/provider.js",
706
725
  "default": "./services/chain-service/health-check/utils/provider.js"
707
726
  },
708
- "./services/chain-service/helper": {
709
- "types": "./services/chain-service/helper/index.d.ts",
710
- "require": "./cjs/services/chain-service/helper/index.js",
711
- "default": "./services/chain-service/helper/index.js"
712
- },
713
727
  "./services/chain-service/helper/api-helper/spec/dataavail": {
714
728
  "types": "./services/chain-service/helper/api-helper/spec/dataavail.d.ts",
715
729
  "require": "./cjs/services/chain-service/helper/api-helper/spec/dataavail.js",
716
730
  "default": "./services/chain-service/helper/api-helper/spec/dataavail.js"
717
731
  },
718
- "./services/chain-service/helper/azero_domain_registry_abi.json": "./services/chain-service/helper/azero_domain_registry_abi.json",
719
- "./services/chain-service/helper/erc20_abi.json": "./services/chain-service/helper/erc20_abi.json",
720
- "./services/chain-service/helper/erc721_abi.json": "./services/chain-service/helper/erc721_abi.json",
721
- "./services/chain-service/helper/neuroguns_psp34_abi.json": "./services/chain-service/helper/neuroguns_psp34_abi.json",
722
- "./services/chain-service/helper/pink_psp34_abi.json": "./services/chain-service/helper/pink_psp34_abi.json",
723
- "./services/chain-service/helper/psp22_abi.json": "./services/chain-service/helper/psp22_abi.json",
724
- "./services/chain-service/helper/psp34_abi.json": "./services/chain-service/helper/psp34_abi.json",
725
- "./services/chain-service/helper/test_erc721_abi.json": "./services/chain-service/helper/test_erc721_abi.json",
726
732
  "./services/chain-service/types": {
727
733
  "types": "./services/chain-service/types.d.ts",
728
734
  "require": "./cjs/services/chain-service/types.js",
@@ -1921,11 +1927,11 @@
1921
1927
  "@reduxjs/toolkit": "^1.9.1",
1922
1928
  "@sora-substrate/type-definitions": "^1.17.7",
1923
1929
  "@substrate/connect": "^0.8.9",
1924
- "@subwallet/chain-list": "0.2.69",
1925
- "@subwallet/extension-base": "^1.2.8-1",
1926
- "@subwallet/extension-chains": "^1.2.8-1",
1927
- "@subwallet/extension-dapp": "^1.2.8-1",
1928
- "@subwallet/extension-inject": "^1.2.8-1",
1930
+ "@subwallet/chain-list": "0.2.70",
1931
+ "@subwallet/extension-base": "^1.2.10-0",
1932
+ "@subwallet/extension-chains": "^1.2.10-0",
1933
+ "@subwallet/extension-dapp": "^1.2.10-0",
1934
+ "@subwallet/extension-inject": "^1.2.10-0",
1929
1935
  "@subwallet/keyring": "^0.1.5",
1930
1936
  "@subwallet/ui-keyring": "^0.1.5",
1931
1937
  "@walletconnect/keyvaluestorage": "^1.1.1",
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.2.8-1'
10
+ version: '1.2.10-0'
11
11
  };
@@ -1,2 +1,3 @@
1
1
  export * from './group';
2
2
  export * from './subscribe';
3
+ export * from './process';
@@ -2,4 +2,5 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  export * from "./group.js";
5
- export * from "./subscribe/index.js";
5
+ export * from "./subscribe/index.js";
6
+ export * from "./process.js";
@@ -0,0 +1,13 @@
1
+ import { _ChainAsset } from '@subwallet/chain-list/types';
2
+ import { _Address } from '@subwallet/extension-base/background/KoniTypes';
3
+ import { _EvmApi } from '@subwallet/extension-base/services/chain-service/types';
4
+ import { CommonOptimalPath } from '@subwallet/extension-base/types/service-base';
5
+ export interface RequestOptimalTransferProcess {
6
+ originChain: string;
7
+ destChain?: string;
8
+ tokenSlug: string;
9
+ address: _Address;
10
+ amount: string;
11
+ }
12
+ export declare function getDefaultTransferProcess(): CommonOptimalPath;
13
+ export declare function getSnowbridgeTransferProcessFromEvm(address: string, evmApi: _EvmApi, tokenInfo: _ChainAsset, amount: string): Promise<CommonOptimalPath>;
@@ -0,0 +1,43 @@
1
+ // Copyright 2019-2022 @subwallet/extension-base
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { COMMON_CHAIN_SLUGS } from '@subwallet/chain-list';
5
+ import { CommonStepType, DEFAULT_FIRST_STEP, MOCK_STEP_FEE } from '@subwallet/extension-base/types/service-base';
6
+ export function getDefaultTransferProcess() {
7
+ return {
8
+ totalFee: [MOCK_STEP_FEE, MOCK_STEP_FEE],
9
+ steps: [DEFAULT_FIRST_STEP, {
10
+ id: 1,
11
+ type: CommonStepType.TRANSFER,
12
+ name: 'Transfer'
13
+ }]
14
+ };
15
+ }
16
+ export async function getSnowbridgeTransferProcessFromEvm(address, evmApi, tokenInfo, amount) {
17
+ if (![COMMON_CHAIN_SLUGS.ETHEREUM, COMMON_CHAIN_SLUGS.ETHEREUM_SEPOLIA].includes(tokenInfo.originChain)) {
18
+ throw new Error('Snowbridge only has support for Ethereum');
19
+ }
20
+ const result = {
21
+ totalFee: [MOCK_STEP_FEE],
22
+ steps: [DEFAULT_FIRST_STEP]
23
+ };
24
+ // const allowance = await getERC20Allowance(getSnowBridgeGatewayContract(evmApi.chainSlug), address, _getContractAddressOfToken(tokenInfo), evmApi);
25
+
26
+ result.steps.push({
27
+ // always approve spending because sometimes allowance check fails
28
+ id: result.steps.length,
29
+ type: CommonStepType.TOKEN_APPROVAL,
30
+ name: 'Approve spending'
31
+ });
32
+ result.totalFee.push(MOCK_STEP_FEE);
33
+ // if (!allowance || BigInt(allowance) < BigInt(amount)) {
34
+ // }
35
+
36
+ result.steps.push({
37
+ id: result.steps.length,
38
+ type: CommonStepType.TRANSFER,
39
+ name: 'Transfer'
40
+ });
41
+ result.totalFee.push(MOCK_STEP_FEE);
42
+ return Promise.resolve(result);
43
+ }