@lifi/widget 3.20.4 → 3.21.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 (79) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/esm/App.d.ts +1 -1
  3. package/dist/esm/components/Card/Card.js +1 -0
  4. package/dist/esm/components/Card/Card.js.map +1 -1
  5. package/dist/esm/components/Card/CardIconButton.d.ts +1 -1
  6. package/dist/esm/components/Messages/useMessageQueue.js +4 -6
  7. package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
  8. package/dist/esm/components/Tabs/Tabs.style.d.ts +1 -1
  9. package/dist/esm/components/TokenList/TokenList.style.d.ts +2 -2
  10. package/dist/esm/components/TokenList/TokenListItem.d.ts +2 -1
  11. package/dist/esm/components/TokenList/TokenListItem.js +7 -3
  12. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  13. package/dist/esm/components/TokenList/types.d.ts +3 -0
  14. package/dist/esm/config/version.d.ts +1 -1
  15. package/dist/esm/config/version.js +1 -1
  16. package/dist/esm/hooks/useAvailableChains.js +6 -1
  17. package/dist/esm/hooks/useAvailableChains.js.map +1 -1
  18. package/dist/esm/hooks/useDebouncedWatch.d.ts +1 -1
  19. package/dist/esm/hooks/useExplorer.d.ts +1 -0
  20. package/dist/esm/hooks/useExplorer.js +11 -1
  21. package/dist/esm/hooks/useExplorer.js.map +1 -1
  22. package/dist/esm/hooks/useIsContractAddress.d.ts +1 -1
  23. package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
  24. package/dist/esm/hooks/useToAddressRequirements.d.ts +5 -0
  25. package/dist/esm/hooks/useToAddressRequirements.js +24 -7
  26. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  27. package/dist/esm/hooks/useTokens.js +8 -1
  28. package/dist/esm/hooks/useTokens.js.map +1 -1
  29. package/dist/esm/hooks/useWidgetEvents.d.ts +3 -3
  30. package/dist/esm/providers/WalletProvider/SDKProviders.js +16 -2
  31. package/dist/esm/providers/WalletProvider/SDKProviders.js.map +1 -1
  32. package/dist/esm/providers/WalletProvider/SVMBaseProvider.js +2 -1
  33. package/dist/esm/providers/WalletProvider/SVMBaseProvider.js.map +1 -1
  34. package/dist/esm/providers/WalletProvider/SuiBaseProvider.d.ts +2 -0
  35. package/dist/esm/providers/WalletProvider/SuiBaseProvider.js +22 -0
  36. package/dist/esm/providers/WalletProvider/SuiBaseProvider.js.map +1 -0
  37. package/dist/esm/providers/WalletProvider/SuiExternalContext.d.ts +1 -0
  38. package/dist/esm/providers/WalletProvider/SuiExternalContext.js +3 -0
  39. package/dist/esm/providers/WalletProvider/SuiExternalContext.js.map +1 -0
  40. package/dist/esm/providers/WalletProvider/SuiProvider.d.ts +3 -0
  41. package/dist/esm/providers/WalletProvider/SuiProvider.js +18 -0
  42. package/dist/esm/providers/WalletProvider/SuiProvider.js.map +1 -0
  43. package/dist/esm/providers/WalletProvider/UTXOBaseProvider.js.map +1 -1
  44. package/dist/esm/providers/WalletProvider/WalletProvider.js +2 -1
  45. package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
  46. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js +16 -2
  47. package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
  48. package/dist/esm/providers/WidgetProvider/WidgetProvider.js +1 -1
  49. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  50. package/dist/esm/providers/WidgetProvider/utils.d.ts +1 -1
  51. package/dist/esm/utils/chainType.js +2 -1
  52. package/dist/esm/utils/chainType.js.map +1 -1
  53. package/package.json +13 -10
  54. package/package.json.tmp +12 -9
  55. package/src/components/Card/Card.tsx +1 -0
  56. package/src/components/Messages/useMessageQueue.ts +8 -8
  57. package/src/components/TokenList/TokenListItem.tsx +26 -6
  58. package/src/components/TokenList/types.ts +4 -0
  59. package/src/config/version.ts +1 -1
  60. package/src/hooks/useAvailableChains.ts +6 -1
  61. package/src/hooks/useExplorer.ts +13 -2
  62. package/src/hooks/useIsContractAddress.ts +6 -1
  63. package/src/hooks/useToAddressRequirements.ts +39 -11
  64. package/src/hooks/useTokens.ts +8 -1
  65. package/src/providers/WalletProvider/SDKProviders.tsx +20 -2
  66. package/src/providers/WalletProvider/SVMBaseProvider.tsx +2 -1
  67. package/src/providers/WalletProvider/SuiBaseProvider.tsx +37 -0
  68. package/src/providers/WalletProvider/SuiExternalContext.ts +3 -0
  69. package/src/providers/WalletProvider/SuiProvider.tsx +26 -0
  70. package/src/providers/WalletProvider/UTXOBaseProvider.tsx +8 -4
  71. package/src/providers/WalletProvider/WalletProvider.tsx +5 -2
  72. package/src/providers/WalletProvider/useExternalWalletProvider.ts +16 -3
  73. package/src/providers/WidgetProvider/WidgetProvider.tsx +1 -1
  74. package/src/utils/chainType.ts +2 -1
  75. package/tsconfig.json +2 -2
  76. package/dist/esm/hooks/useIsCompatibleDestinationAccount.d.ts +0 -8
  77. package/dist/esm/hooks/useIsCompatibleDestinationAccount.js +0 -37
  78. package/dist/esm/hooks/useIsCompatibleDestinationAccount.js.map +0 -1
  79. package/src/hooks/useIsCompatibleDestinationAccount.ts +0 -58
@@ -1,5 +1,6 @@
1
1
  import type { Adapter } from '@solana/wallet-adapter-base'
2
2
  import { WalletAdapterNetwork } from '@solana/wallet-adapter-base'
3
+ import { CoinbaseWalletAdapter } from '@solana/wallet-adapter-coinbase'
3
4
  import {
4
5
  ConnectionProvider,
5
6
  WalletProvider,
@@ -20,7 +21,7 @@ const endpoint = clusterApiUrl(WalletAdapterNetwork.Mainnet)
20
21
  * instantiate its legacy wallet adapter here. Common legacy adapters can be found
21
22
  * in the npm package `@solana/wallet-adapter-wallets`.
22
23
  */
23
- const wallets: Adapter[] = []
24
+ const wallets: Adapter[] = [new CoinbaseWalletAdapter()]
24
25
 
25
26
  export const SVMBaseProvider: FC<PropsWithChildren> = ({ children }) => {
26
27
  return (
@@ -0,0 +1,37 @@
1
+ import { ChainId } from '@lifi/sdk'
2
+ import {
3
+ SuiClientProvider,
4
+ WalletProvider,
5
+ createNetworkConfig,
6
+ } from '@mysten/dapp-kit'
7
+ import { getFullnodeUrl } from '@mysten/sui/client'
8
+ import { type FC, type PropsWithChildren, useMemo } from 'react'
9
+ import { useAvailableChains } from '../../hooks/useAvailableChains.js'
10
+
11
+ export const SuiBaseProvider: FC<PropsWithChildren> = ({ children }) => {
12
+ const { chains } = useAvailableChains()
13
+
14
+ const config = useMemo(() => {
15
+ const sui = chains?.find((chain) => chain.id === ChainId.SUI)
16
+ if (sui) {
17
+ return createNetworkConfig({
18
+ mainnet: { url: sui.metamask?.rpcUrls[0] ?? getFullnodeUrl('mainnet') },
19
+ })
20
+ }
21
+ }, [chains])
22
+
23
+ if (!config?.networkConfig) {
24
+ return null
25
+ }
26
+
27
+ return (
28
+ <SuiClientProvider networks={config.networkConfig} defaultNetwork="mainnet">
29
+ <WalletProvider
30
+ storageKey="li.fi-widget-sui-wallet-connection"
31
+ autoConnect
32
+ >
33
+ {children}
34
+ </WalletProvider>
35
+ </SuiClientProvider>
36
+ )
37
+ }
@@ -0,0 +1,3 @@
1
+ import { createContext } from 'react'
2
+
3
+ export const SuiExternalContext = createContext<boolean>(false)
@@ -0,0 +1,26 @@
1
+ import { ChainType } from '@lifi/sdk'
2
+ import { SuiClientContext } from '@mysten/dapp-kit'
3
+ import { type FC, type PropsWithChildren, useContext } from 'react'
4
+ import { isItemAllowed } from '../../utils/item.js'
5
+ import { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'
6
+ import { SuiBaseProvider } from './SuiBaseProvider.js'
7
+ import { SuiExternalContext } from './SuiExternalContext.js'
8
+
9
+ export function useInSuiContext(): boolean {
10
+ const { chains } = useWidgetConfig()
11
+ const context = useContext(SuiClientContext)
12
+
13
+ return Boolean(context) && isItemAllowed(ChainType.MVM, chains?.types)
14
+ }
15
+
16
+ export const SuiProvider: FC<PropsWithChildren> = ({ children }) => {
17
+ const inSuiContext = useInSuiContext()
18
+
19
+ return inSuiContext ? (
20
+ <SuiExternalContext.Provider value={inSuiContext}>
21
+ {children}
22
+ </SuiExternalContext.Provider>
23
+ ) : (
24
+ <SuiBaseProvider>{children}</SuiBaseProvider>
25
+ )
26
+ }
@@ -1,10 +1,11 @@
1
+ import type { Config } from '@bigmi/client'
1
2
  import { BigmiProvider, useReconnect } from '@bigmi/react'
2
- import type { DefaultWagmiConfigResult } from '@lifi/wallet-management'
3
+ import type { DefaultBigmiConfigResult } from '@lifi/wallet-management'
3
4
  import { createDefaultBigmiConfig } from '@lifi/wallet-management'
4
5
  import { type FC, type PropsWithChildren, useRef } from 'react'
5
6
 
6
7
  export const UTXOBaseProvider: FC<PropsWithChildren> = ({ children }) => {
7
- const bigmi = useRef<DefaultWagmiConfigResult>(null)
8
+ const bigmi = useRef<DefaultBigmiConfigResult>(null)
8
9
 
9
10
  if (!bigmi.current) {
10
11
  bigmi.current = createDefaultBigmiConfig({
@@ -15,10 +16,13 @@ export const UTXOBaseProvider: FC<PropsWithChildren> = ({ children }) => {
15
16
  })
16
17
  }
17
18
 
18
- useReconnect(bigmi.current.config)
19
+ useReconnect(bigmi.current.config as Config)
19
20
 
20
21
  return (
21
- <BigmiProvider config={bigmi.current.config} reconnectOnMount={false}>
22
+ <BigmiProvider
23
+ config={bigmi.current.config as Config}
24
+ reconnectOnMount={false}
25
+ >
22
26
  {children}
23
27
  </BigmiProvider>
24
28
  )
@@ -6,6 +6,7 @@ import { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'
6
6
  import { EVMProvider } from './EVMProvider.js'
7
7
  import { SDKProviders } from './SDKProviders.js'
8
8
  import { SVMProvider } from './SVMProvider.js'
9
+ import { SuiProvider } from './SuiProvider.js'
9
10
  import { UTXOProvider } from './UTXOProvider.js'
10
11
  import { useExternalWalletProvider } from './useExternalWalletProvider.js'
11
12
 
@@ -14,8 +15,10 @@ export const WalletProvider: FC<PropsWithChildren> = ({ children }) => {
14
15
  <EVMProvider>
15
16
  <SVMProvider>
16
17
  <UTXOProvider>
17
- <SDKProviders />
18
- <WalletMenuProvider>{children}</WalletMenuProvider>
18
+ <SuiProvider>
19
+ <SDKProviders />
20
+ <WalletMenuProvider>{children}</WalletMenuProvider>
21
+ </SuiProvider>
19
22
  </UTXOProvider>
20
23
  </SVMProvider>
21
24
  </EVMProvider>
@@ -3,6 +3,7 @@ import { useContext, useMemo } from 'react'
3
3
  import { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'
4
4
  import { EVMExternalContext } from './EVMExternalContext.js'
5
5
  import { SVMExternalContext } from './SVMExternalContext.js'
6
+ import { SuiExternalContext } from './SuiExternalContext.js'
6
7
  import { UTXOExternalContext } from './UTXOExternalContext.js'
7
8
 
8
9
  interface ExternalWalletProvider {
@@ -11,14 +12,19 @@ interface ExternalWalletProvider {
11
12
  internalChainTypes: ChainType[]
12
13
  }
13
14
 
14
- const internalChainTypes = [ChainType.EVM, ChainType.SVM, ChainType.UTXO]
15
+ const internalChainTypes = [
16
+ ChainType.EVM,
17
+ ChainType.SVM,
18
+ ChainType.UTXO,
19
+ ChainType.MVM,
20
+ ]
15
21
 
16
22
  export function useExternalWalletProvider(): ExternalWalletProvider {
17
23
  const { walletConfig } = useWidgetConfig()
18
24
  const hasExternalEVMContext = useContext(EVMExternalContext)
19
25
  const hasExternalSVMContext = useContext(SVMExternalContext)
20
26
  const hasExternalUTXOContext = useContext(UTXOExternalContext)
21
-
27
+ const hasExternalSuiContext = useContext(SuiExternalContext)
22
28
  const data = useMemo(() => {
23
29
  const providers: ChainType[] = []
24
30
  if (hasExternalEVMContext) {
@@ -30,8 +36,14 @@ export function useExternalWalletProvider(): ExternalWalletProvider {
30
36
  if (hasExternalUTXOContext) {
31
37
  providers.push(ChainType.UTXO)
32
38
  }
39
+ if (hasExternalSuiContext) {
40
+ providers.push(ChainType.MVM)
41
+ }
33
42
  const hasExternalProvider =
34
- hasExternalEVMContext || hasExternalSVMContext || hasExternalUTXOContext
43
+ hasExternalEVMContext ||
44
+ hasExternalSVMContext ||
45
+ hasExternalUTXOContext ||
46
+ hasExternalSuiContext
35
47
 
36
48
  const useExternalWalletProvidersOnly =
37
49
  hasExternalProvider && !walletConfig?.usePartialWalletManagement
@@ -46,6 +58,7 @@ export function useExternalWalletProvider(): ExternalWalletProvider {
46
58
  hasExternalEVMContext,
47
59
  hasExternalSVMContext,
48
60
  hasExternalUTXOContext,
61
+ hasExternalSuiContext,
49
62
  walletConfig?.usePartialWalletManagement,
50
63
  ])
51
64
 
@@ -52,7 +52,7 @@ export const WidgetProvider: React.FC<
52
52
  },
53
53
  disableVersionCheck: true,
54
54
  widgetVersion: version,
55
- // preloadChains: false,
55
+ preloadChains: false,
56
56
  // debug: true,
57
57
  }
58
58
  if (!sdkInitialized) {
@@ -1,12 +1,13 @@
1
1
  import { isUTXOAddress } from '@bigmi/core'
2
2
  import { ChainId, ChainType, isSVMAddress } from '@lifi/sdk'
3
+ import { isValidSuiAddress } from '@mysten/sui/utils'
3
4
  import { isAddress as isEVMAddress } from 'viem'
4
5
 
5
6
  const chainTypeAddressValidation = {
6
7
  [ChainType.EVM]: isEVMAddress,
7
8
  [ChainType.SVM]: isSVMAddress,
9
+ [ChainType.MVM]: isValidSuiAddress,
8
10
  [ChainType.UTXO]: isUTXOAddress,
9
- [ChainType.MVM]: () => false,
10
11
  }
11
12
 
12
13
  export const getChainTypeFromAddress = (
package/tsconfig.json CHANGED
@@ -6,8 +6,8 @@
6
6
  "sourceMap": true,
7
7
  "outDir": "dist/esm",
8
8
  "rootDir": "./src",
9
- "module": "NodeNext",
10
- "moduleResolution": "NodeNext",
9
+ "module": "ESNext",
10
+ "moduleResolution": "Bundler",
11
11
  "skipLibCheck": true
12
12
  },
13
13
  "include": ["./src/**/*", "./src/**/*.json"],
@@ -1,8 +0,0 @@
1
- import type { RouteExtended } from '@lifi/sdk';
2
- export declare const useIsCompatibleDestinationAccount: (route?: RouteExtended) => {
3
- isCompatibleDestinationAccount: boolean;
4
- isFromContractAddress: boolean;
5
- isToContractAddress: boolean;
6
- isLoading: boolean;
7
- isFetched: boolean;
8
- };
@@ -1,37 +0,0 @@
1
- import { useAccount } from '@lifi/wallet-management';
2
- import { useFieldValues } from '../stores/form/useFieldValues.js';
3
- import { isDelegationDesignatorCode } from '../utils/eip7702.js';
4
- import { useChain } from './useChain.js';
5
- import { useIsContractAddress } from './useIsContractAddress.js';
6
- export const useIsCompatibleDestinationAccount = (route) => {
7
- const [formFromChainId, formToChainId, formToAddress] = useFieldValues('fromChain', 'toChain', 'toAddress');
8
- const fromChainId = route?.fromChainId ?? formFromChainId;
9
- const toChainId = route?.toChainId ?? formToChainId;
10
- const { chain: fromChain } = useChain(fromChainId);
11
- const { chain: toChain } = useChain(toChainId);
12
- const { account } = useAccount({
13
- chainType: fromChain?.chainType,
14
- });
15
- const fromAddress = route?.fromAddress ?? account.address;
16
- const toAddress = route
17
- ? route.fromAddress !== route.toAddress
18
- ? route.toAddress
19
- : formToAddress
20
- : formToAddress;
21
- const { isContractAddress: isFromContractAddress, contractCode: fromContractCode, isLoading: isFromContractLoading, isFetched: isFromContractFetched, } = useIsContractAddress(fromAddress, fromChainId, fromChain?.chainType);
22
- const { isContractAddress: isToContractAddress, isLoading: isToContractLoading, isFetched: isToContractFetched, } = useIsContractAddress(toAddress, toChainId, toChain?.chainType);
23
- const accountNotDeployedAtDestination = isFromContractAddress &&
24
- // We don't want to block transfers for EIP-7702 accounts since they are designed
25
- // to maintain EOA-like properties while delegating execution.
26
- !isDelegationDesignatorCode(fromContractCode) &&
27
- !isToContractAddress &&
28
- fromAddress?.toLowerCase() === toAddress?.toLowerCase();
29
- return {
30
- isCompatibleDestinationAccount: !accountNotDeployedAtDestination,
31
- isFromContractAddress,
32
- isToContractAddress,
33
- isLoading: isFromContractLoading || isToContractLoading,
34
- isFetched: isFromContractFetched && isToContractFetched,
35
- };
36
- };
37
- //# sourceMappingURL=useIsCompatibleDestinationAccount.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useIsCompatibleDestinationAccount.js","sourceRoot":"","sources":["../../../src/hooks/useIsCompatibleDestinationAccount.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,KAAqB,EAAE,EAAE;IACzE,MAAM,CAAC,eAAe,EAAE,aAAa,EAAE,aAAa,CAAC,GAAG,cAAc,CACpE,WAAW,EACX,SAAS,EACT,WAAW,CACZ,CAAA;IAED,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,eAAe,CAAA;IACzD,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,aAAa,CAAA;IAEnD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IAClD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;QAC7B,SAAS,EAAE,SAAS,EAAE,SAAS;KAChC,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAA;IACzD,MAAM,SAAS,GAAG,KAAK;QACrB,CAAC,CAAC,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,SAAS;YACrC,CAAC,CAAC,KAAK,CAAC,SAAS;YACjB,CAAC,CAAC,aAAa;QACjB,CAAC,CAAC,aAAa,CAAA;IAEjB,MAAM,EACJ,iBAAiB,EAAE,qBAAqB,EACxC,YAAY,EAAE,gBAAgB,EAC9B,SAAS,EAAE,qBAAqB,EAChC,SAAS,EAAE,qBAAqB,GACjC,GAAG,oBAAoB,CAAC,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;IACxE,MAAM,EACJ,iBAAiB,EAAE,mBAAmB,EACtC,SAAS,EAAE,mBAAmB,EAC9B,SAAS,EAAE,mBAAmB,GAC/B,GAAG,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;IAElE,MAAM,+BAA+B,GACnC,qBAAqB;QACrB,iFAAiF;QACjF,8DAA8D;QAC9D,CAAC,0BAA0B,CAAC,gBAAgB,CAAC;QAC7C,CAAC,mBAAmB;QACpB,WAAW,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,WAAW,EAAE,CAAA;IAEzD,OAAO;QACL,8BAA8B,EAAE,CAAC,+BAA+B;QAChE,qBAAqB;QACrB,mBAAmB;QACnB,SAAS,EAAE,qBAAqB,IAAI,mBAAmB;QACvD,SAAS,EAAE,qBAAqB,IAAI,mBAAmB;KACxD,CAAA;AACH,CAAC,CAAA"}
@@ -1,58 +0,0 @@
1
- import type { RouteExtended } from '@lifi/sdk'
2
- import { useAccount } from '@lifi/wallet-management'
3
- import { useFieldValues } from '../stores/form/useFieldValues.js'
4
- import { isDelegationDesignatorCode } from '../utils/eip7702.js'
5
- import { useChain } from './useChain.js'
6
- import { useIsContractAddress } from './useIsContractAddress.js'
7
-
8
- export const useIsCompatibleDestinationAccount = (route?: RouteExtended) => {
9
- const [formFromChainId, formToChainId, formToAddress] = useFieldValues(
10
- 'fromChain',
11
- 'toChain',
12
- 'toAddress'
13
- )
14
-
15
- const fromChainId = route?.fromChainId ?? formFromChainId
16
- const toChainId = route?.toChainId ?? formToChainId
17
-
18
- const { chain: fromChain } = useChain(fromChainId)
19
- const { chain: toChain } = useChain(toChainId)
20
- const { account } = useAccount({
21
- chainType: fromChain?.chainType,
22
- })
23
-
24
- const fromAddress = route?.fromAddress ?? account.address
25
- const toAddress = route
26
- ? route.fromAddress !== route.toAddress
27
- ? route.toAddress
28
- : formToAddress
29
- : formToAddress
30
-
31
- const {
32
- isContractAddress: isFromContractAddress,
33
- contractCode: fromContractCode,
34
- isLoading: isFromContractLoading,
35
- isFetched: isFromContractFetched,
36
- } = useIsContractAddress(fromAddress, fromChainId, fromChain?.chainType)
37
- const {
38
- isContractAddress: isToContractAddress,
39
- isLoading: isToContractLoading,
40
- isFetched: isToContractFetched,
41
- } = useIsContractAddress(toAddress, toChainId, toChain?.chainType)
42
-
43
- const accountNotDeployedAtDestination =
44
- isFromContractAddress &&
45
- // We don't want to block transfers for EIP-7702 accounts since they are designed
46
- // to maintain EOA-like properties while delegating execution.
47
- !isDelegationDesignatorCode(fromContractCode) &&
48
- !isToContractAddress &&
49
- fromAddress?.toLowerCase() === toAddress?.toLowerCase()
50
-
51
- return {
52
- isCompatibleDestinationAccount: !accountNotDeployedAtDestination,
53
- isFromContractAddress,
54
- isToContractAddress,
55
- isLoading: isFromContractLoading || isToContractLoading,
56
- isFetched: isFromContractFetched && isToContractFetched,
57
- }
58
- }