From 15a6309f15dee7a74060045b3c798396c3c3d87d Mon Sep 17 00:00:00 2001 From: Memo Khoury Date: Fri, 20 Dec 2024 15:14:55 +0000 Subject: [PATCH 1/3] getProvider() from bcContext --- .../src/hooks/useBridgeTransfer.ts | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts b/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts index 7bf252b0..c021f024 100644 --- a/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts +++ b/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts @@ -13,7 +13,7 @@ interface UseTransferDataProps { } export const useBridgeTransfer = () => { - const { connectedAccount, selectedNetworkType, switchChain } = useBlockchainContext() + const { connectedAccount, selectedNetworkType, getProvider } = useBlockchainContext() // Retry function with exponential backoff for handling 429 errors const retryWithExponentialBackoff = async (fn: () => Promise, retries = 20, delay = 1000, jitterFactor = 0.5) => { let attempt = 0 @@ -155,19 +155,11 @@ export const useBridgeTransfer = () => { } - let targetChain = getNetworks(selectedNetworkType)?.find(network => { network.chainId === destinationChainId }) - - let provider - if (window.ethereum) { - provider = new ethers.providers.Web3Provider(window.ethereum) - const currentChain = await provider.getNetwork() - if (targetChain && currentChain.chainId !== targetChain.chainId) { - await switchChain(targetChain) - provider = new ethers.providers.Web3Provider(window.ethereum) - } - } else { - throw new Error('Wallet is not installed!') + const targetChain = getNetworks(selectedNetworkType)?.find(network => network.chainId === destinationChainId); + if (!targetChain) { + throw new Error('Target chain is undefined'); } + const provider = await getProvider(targetChain); const signer = provider.getSigner() // Bridge Transfer execute From ad09c5e6dbba298f0b7331e3711e1ada17e00fae Mon Sep 17 00:00:00 2001 From: Memo Khoury Date: Fri, 20 Dec 2024 15:20:40 +0000 Subject: [PATCH 2/3] bridger not null --- .../src/components/bridge/bridge/ActionButton.tsx | 2 +- .../src/components/bridge/bridge/BridgeView.tsx | 10 ++++++---- .../components/bridge/bridge/MultiTokenApproval.tsx | 2 +- .../src/hooks/useBridgeTransfer.ts | 3 +-- .../world-builder-dashboard/src/hooks/useBridger.ts | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/webapps/world-builder-dashboard/src/components/bridge/bridge/ActionButton.tsx b/webapps/world-builder-dashboard/src/components/bridge/bridge/ActionButton.tsx index 6efafef4..475d1119 100644 --- a/webapps/world-builder-dashboard/src/components/bridge/bridge/ActionButton.tsx +++ b/webapps/world-builder-dashboard/src/components/bridge/bridge/ActionButton.tsx @@ -21,7 +21,7 @@ interface ActionButtonProps { isDisabled: boolean L2L3message?: { destination: string; data: string } setErrorMessage: (arg0: string) => void - bridger?: Bridger | null + bridger: Bridger symbol?: string decimals?: number balance?: string diff --git a/webapps/world-builder-dashboard/src/components/bridge/bridge/BridgeView.tsx b/webapps/world-builder-dashboard/src/components/bridge/bridge/BridgeView.tsx index 2b0abfe9..6208172c 100644 --- a/webapps/world-builder-dashboard/src/components/bridge/bridge/BridgeView.tsx +++ b/webapps/world-builder-dashboard/src/components/bridge/bridge/BridgeView.tsx @@ -40,8 +40,6 @@ const BridgeView = ({ direction: DepositDirection setDirection: (arg0: DepositDirection) => void }) => { - const [bridger, setBridger] = useState(null) - const [value, setValue] = useState('0') const [message, setMessage] = useState<{ destination: string; data: string }>({ destination: '', data: '' }) const [isMessageExpanded, setIsMessageExpanded] = useState(false) @@ -81,9 +79,13 @@ const BridgeView = ({ const handleTokenChange = async (token: Token) => { setSelectedBridgeToken(token) } - const { getEstimatedFee, useAllowances } = useBridger() + const originChainId = direction === 'DEPOSIT' ? selectedLowNetwork.chainId : selectedHighNetwork.chainId + const destinationChainId = direction === 'DEPOSIT' ? selectedHighNetwork.chainId : selectedLowNetwork.chainId + const [bridger, setBridger] = useState(getBridger(originChainId, destinationChainId, selectedBridgeToken.tokenAddressMap)) + + const estimatedFee = getEstimatedFee({ bridger, value, @@ -302,7 +304,7 @@ const BridgeView = ({ isDisabled={!!inputErrorMessages.value || !!inputErrorMessages.destination || !!inputErrorMessages.data} setErrorMessage={setNetworkErrorMessage} L2L3message={isMessageExpanded ? message : { data: '', destination: '' }} - bridger={bridger ?? null} + bridger={bridger} symbol={tokenInformation?.symbol ?? ''} decimals={tokenInformation?.decimalPlaces ?? 18} balance={tokenInformation?.tokenBalance} diff --git a/webapps/world-builder-dashboard/src/components/bridge/bridge/MultiTokenApproval.tsx b/webapps/world-builder-dashboard/src/components/bridge/bridge/MultiTokenApproval.tsx index a4aee714..2a2bbb10 100644 --- a/webapps/world-builder-dashboard/src/components/bridge/bridge/MultiTokenApproval.tsx +++ b/webapps/world-builder-dashboard/src/components/bridge/bridge/MultiTokenApproval.tsx @@ -17,7 +17,7 @@ interface MultiTokenApprovalProps { setShowApproval: (showApproval: boolean) => void balance: string | undefined nativeBalance: string | undefined - bridger: Bridger | null + bridger: Bridger decimals: number | undefined tokens: Token[] startingTokenIndex: number diff --git a/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts b/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts index c021f024..9ec99721 100644 --- a/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts +++ b/webapps/world-builder-dashboard/src/hooks/useBridgeTransfer.ts @@ -2,7 +2,6 @@ import { useMutation, useQueryClient } from 'react-query' import { useQuery } from 'react-query' import { useNavigate } from 'react-router-dom' import { getNetworks } from '../../constants' -import { ethers } from 'ethers' import { BridgeTransfer, BridgeTransferStatus, getBridgeTransfer } from 'game7-bridge-sdk' import { useBlockchainContext } from '@/contexts/BlockchainContext' import { useBridgeNotificationsContext } from '@/contexts/BridgeNotificationsContext' @@ -155,7 +154,7 @@ export const useBridgeTransfer = () => { } - const targetChain = getNetworks(selectedNetworkType)?.find(network => network.chainId === destinationChainId); + const targetChain = getNetworks(selectedNetworkType)?.find((network) => network.chainId === destinationChainId); if (!targetChain) { throw new Error('Target chain is undefined'); } diff --git a/webapps/world-builder-dashboard/src/hooks/useBridger.ts b/webapps/world-builder-dashboard/src/hooks/useBridger.ts index 51b3dc08..c5cf5bd6 100644 --- a/webapps/world-builder-dashboard/src/hooks/useBridger.ts +++ b/webapps/world-builder-dashboard/src/hooks/useBridger.ts @@ -42,7 +42,7 @@ export const useBridger = () => { selectedHighNetwork, tokenInformation }: { - bridger: Bridger | null + bridger: Bridger value: string direction: 'DEPOSIT' | 'WITHDRAW' selectedLowNetwork: NetworkInterface @@ -111,7 +111,7 @@ export const useBridger = () => { selectedHighNetwork, connectedAccount }: { - bridger: Bridger | null + bridger: Bridger direction: DepositDirection selectedLowNetwork: NetworkInterface selectedHighNetwork: NetworkInterface From e3e64e8685e68b42ccdc1f15e6b27a86ececc5cd Mon Sep 17 00:00:00 2001 From: Memo Khoury Date: Fri, 20 Dec 2024 15:25:56 +0000 Subject: [PATCH 3/3] filter out falsy --- .../src/components/bridge/bridge/ActionButton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapps/world-builder-dashboard/src/components/bridge/bridge/ActionButton.tsx b/webapps/world-builder-dashboard/src/components/bridge/bridge/ActionButton.tsx index 475d1119..618ba7ee 100644 --- a/webapps/world-builder-dashboard/src/components/bridge/bridge/ActionButton.tsx +++ b/webapps/world-builder-dashboard/src/components/bridge/bridge/ActionButton.tsx @@ -253,7 +253,7 @@ const ActionButton: React.FC = ({ return [] } - return [selectedBridgeToken, nativeToken].filter((token): token is Token => token !== undefined) + return [selectedBridgeToken, nativeToken].filter(Boolean) as Token[] })() return (