@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.
- package/CHANGELOG.md +17 -0
- package/dist/esm/App.d.ts +1 -1
- package/dist/esm/components/Card/Card.js +1 -0
- package/dist/esm/components/Card/Card.js.map +1 -1
- package/dist/esm/components/Card/CardIconButton.d.ts +1 -1
- package/dist/esm/components/Messages/useMessageQueue.js +4 -6
- package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.style.d.ts +1 -1
- package/dist/esm/components/TokenList/TokenList.style.d.ts +2 -2
- package/dist/esm/components/TokenList/TokenListItem.d.ts +2 -1
- package/dist/esm/components/TokenList/TokenListItem.js +7 -3
- package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/types.d.ts +3 -0
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/hooks/useAvailableChains.js +6 -1
- package/dist/esm/hooks/useAvailableChains.js.map +1 -1
- package/dist/esm/hooks/useDebouncedWatch.d.ts +1 -1
- package/dist/esm/hooks/useExplorer.d.ts +1 -0
- package/dist/esm/hooks/useExplorer.js +11 -1
- package/dist/esm/hooks/useExplorer.js.map +1 -1
- package/dist/esm/hooks/useIsContractAddress.d.ts +1 -1
- package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.d.ts +5 -0
- package/dist/esm/hooks/useToAddressRequirements.js +24 -7
- package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
- package/dist/esm/hooks/useTokens.js +8 -1
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/hooks/useWidgetEvents.d.ts +3 -3
- package/dist/esm/providers/WalletProvider/SDKProviders.js +16 -2
- package/dist/esm/providers/WalletProvider/SDKProviders.js.map +1 -1
- package/dist/esm/providers/WalletProvider/SVMBaseProvider.js +2 -1
- package/dist/esm/providers/WalletProvider/SVMBaseProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/SuiBaseProvider.d.ts +2 -0
- package/dist/esm/providers/WalletProvider/SuiBaseProvider.js +22 -0
- package/dist/esm/providers/WalletProvider/SuiBaseProvider.js.map +1 -0
- package/dist/esm/providers/WalletProvider/SuiExternalContext.d.ts +1 -0
- package/dist/esm/providers/WalletProvider/SuiExternalContext.js +3 -0
- package/dist/esm/providers/WalletProvider/SuiExternalContext.js.map +1 -0
- package/dist/esm/providers/WalletProvider/SuiProvider.d.ts +3 -0
- package/dist/esm/providers/WalletProvider/SuiProvider.js +18 -0
- package/dist/esm/providers/WalletProvider/SuiProvider.js.map +1 -0
- package/dist/esm/providers/WalletProvider/UTXOBaseProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js +2 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js +16 -2
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/utils.d.ts +1 -1
- package/dist/esm/utils/chainType.js +2 -1
- package/dist/esm/utils/chainType.js.map +1 -1
- package/package.json +13 -10
- package/package.json.tmp +12 -9
- package/src/components/Card/Card.tsx +1 -0
- package/src/components/Messages/useMessageQueue.ts +8 -8
- package/src/components/TokenList/TokenListItem.tsx +26 -6
- package/src/components/TokenList/types.ts +4 -0
- package/src/config/version.ts +1 -1
- package/src/hooks/useAvailableChains.ts +6 -1
- package/src/hooks/useExplorer.ts +13 -2
- package/src/hooks/useIsContractAddress.ts +6 -1
- package/src/hooks/useToAddressRequirements.ts +39 -11
- package/src/hooks/useTokens.ts +8 -1
- package/src/providers/WalletProvider/SDKProviders.tsx +20 -2
- package/src/providers/WalletProvider/SVMBaseProvider.tsx +2 -1
- package/src/providers/WalletProvider/SuiBaseProvider.tsx +37 -0
- package/src/providers/WalletProvider/SuiExternalContext.ts +3 -0
- package/src/providers/WalletProvider/SuiProvider.tsx +26 -0
- package/src/providers/WalletProvider/UTXOBaseProvider.tsx +8 -4
- package/src/providers/WalletProvider/WalletProvider.tsx +5 -2
- package/src/providers/WalletProvider/useExternalWalletProvider.ts +16 -3
- package/src/providers/WidgetProvider/WidgetProvider.tsx +1 -1
- package/src/utils/chainType.ts +2 -1
- package/tsconfig.json +2 -2
- package/dist/esm/hooks/useIsCompatibleDestinationAccount.d.ts +0 -8
- package/dist/esm/hooks/useIsCompatibleDestinationAccount.js +0 -37
- package/dist/esm/hooks/useIsCompatibleDestinationAccount.js.map +0 -1
- 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,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 {
|
|
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<
|
|
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
|
|
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
|
-
<
|
|
18
|
-
|
|
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 = [
|
|
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 ||
|
|
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
|
|
package/src/utils/chainType.ts
CHANGED
|
@@ -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
|
@@ -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
|
-
}
|