diff --git a/advanced/wallets/react-wallet-v2/src/utils/MultibridgeUtil.ts b/advanced/wallets/react-wallet-v2/src/utils/MultibridgeUtil.ts index f7ad98fb..788eb0f2 100644 --- a/advanced/wallets/react-wallet-v2/src/utils/MultibridgeUtil.ts +++ b/advanced/wallets/react-wallet-v2/src/utils/MultibridgeUtil.ts @@ -1,5 +1,5 @@ import { createPublicClient, decodeFunctionData, erc20Abi, getContract, Hex, http } from 'viem' -import { arbitrum, base, optimism} from 'viem/chains' +import { arbitrum, base, optimism } from 'viem/chains' import { getChainById } from './ChainUtil' import EIP155Lib from '@/lib/EIP155Lib' import { SmartAccountLib } from '@/lib/smart-accounts/SmartAccountLib' @@ -19,7 +19,7 @@ export const supportedAssets: Record> = { } as const const assetDecimals: Record = { - 'USDC': 6 + USDC: 6 } export const supportedChains = [base, optimism, arbitrum] as const @@ -50,12 +50,12 @@ export function getAssetByContractAddress(address: Hex): string { } export function convertTokenBalance(asset: string, amount: number): number { - const decimals = assetDecimals[asset] - if (!decimals) { - throw new Error('Asset not supported') - } - const balance = amount / (10**decimals) - return balance + const decimals = assetDecimals[asset] + if (!decimals) { + throw new Error('Asset not supported') + } + const balance = amount / 10 ** decimals + return balance } export async function getErc20TokenBalance( @@ -83,9 +83,9 @@ export async function getErc20TokenBalance( } export type BridgingRequest = { - transfer: Erc20Transfer, - sourceChain: number, - targetChain: number, + transfer: Erc20Transfer + sourceChain: number + targetChain: number } type Erc20Transfer = { @@ -111,7 +111,7 @@ export function decodeErc20Transaction({ if (functionName !== 'transfer') { return null } - + return { to: args[0], contract: to as Hex, @@ -120,33 +120,36 @@ export function decodeErc20Transaction({ } } -async function sendSocketRequest(method: "GET" | "POST", endpoint: string, body?: any): Promise { - const url = new URL(`${BASE_URL}/${endpoint}`); +async function sendSocketRequest( + method: 'GET' | 'POST', + endpoint: string, + body?: any +): Promise { + const url = new URL(`${BASE_URL}/${endpoint}`) - const API_KEY = process.env['NEXT_PUBLIC_SOCKET_KEY'] - if (!API_KEY) { - throw new Error('Socket API key is not set up') - } - const headers: any = { - 'API-KEY': API_KEY, - Accept: 'application/json' - } - if (method === 'POST') { - headers['Content-Type'] = 'application/json' - } - const response = await fetch(url, { - method, - headers, - body: method === "POST" ? JSON.stringify(body) : undefined, - }); - if (response.status >= 300) { - throw new Error('Unable to send request to Socket') - } - - const json = await response.json(); - return json; + const API_KEY = process.env['NEXT_PUBLIC_SOCKET_KEY'] + if (!API_KEY) { + throw new Error('Socket API key is not set up') + } + const headers: any = { + 'API-KEY': API_KEY, + Accept: 'application/json' + } + if (method === 'POST') { + headers['Content-Type'] = 'application/json' + } + const response = await fetch(url, { + method, + headers, + body: method === 'POST' ? JSON.stringify(body) : undefined + }) + if (response.status >= 300) { + throw new Error('Unable to send request to Socket') } - + + const json = await response.json() + return json +} interface BridgingParams { fromChainId: number @@ -168,7 +171,7 @@ async function getQuote(params: BridgingParams): Promise { urlParams.set('toTokenAddress', params.toAssetAddress) urlParams.set('fromAmount', params.amount.toString()) urlParams.set('userAddress', params.userAddress) - urlParams.set('includeBridges',WHITELIST_BRIDGES) + urlParams.set('includeBridges', WHITELIST_BRIDGES) if (params.uniqueRoutesPerBridge !== undefined) { urlParams.set('uniqueRoutesPerBridge', params.uniqueRoutesPerBridge.toString()) } @@ -184,14 +187,14 @@ async function getQuote(params: BridgingParams): Promise { } async function getRouteTransactionData(route: any): Promise { - const json = await sendSocketRequest('POST', 'build-tx', {route}) + const json = await sendSocketRequest('POST', 'build-tx', { route }) return json } interface AllowanceCheckParams { chainId: number owner: string - allowanceTarget: number + allowanceTarget: number tokenAddress: string } @@ -199,7 +202,7 @@ async function checkAllowance(params: AllowanceCheckParams): Promise { const urlParams = new URLSearchParams() urlParams.set('chainID', params.chainId.toString()) urlParams.set('owner', params.owner) - urlParams.set('allowanceTarget', params.allowanceTarget.toString()) + urlParams.set('allowanceTarget', params.allowanceTarget.toString()) urlParams.set('tokenAddress', params.tokenAddress) const json = await sendSocketRequest('GET', `approval/check-allowance?${urlParams.toString()}`) @@ -209,9 +212,9 @@ async function checkAllowance(params: AllowanceCheckParams): Promise { interface ApprovalTransactionParams { chainId: number owner: string - allowanceTarget: number + allowanceTarget: number tokenAddress: string - amount: number + amount: number } async function getApprovalTransactionData(params: ApprovalTransactionParams): Promise { @@ -242,144 +245,224 @@ async function getBridgeStatus(params: BridgeStatusParams): Promise { return json } - -export async function bridgeFunds(bridgingParams: BridgingParams, wallet: EIP155Lib | SmartAccountLib): Promise { - performance.mark('startGetQuote') - console.log('Bridging funds', bridgingParams); - const originalAmount = bridgingParams.amount - bridgingParams.amount = Math.round(originalAmount*AMOUNT_MULTIPLIER) - const quote = await getQuote(bridgingParams) - performance.mark('endGetQuote') - console.log('Fetched quote', quote); - - const route = quote.result.routes[0]; - if (!route) { - throw new Error("No routes found"); - } - performance.mark('startGetRouteTransactionData') - const apiReturnData = await getRouteTransactionData(route); - performance.mark('endGetRouteTransactionData') - const approvalData = apiReturnData.result.approvalData; - const { allowanceTarget, minimumApprovalAmount } = approvalData; - performance.mark('startGetWalletAddress') - const sourceChainProvider = new providers.JsonRpcProvider(EIP155_CHAINS[`eip155:${bridgingParams.fromChainId}` as TEIP155Chain].rpc) - const sourceChainConnectedWallet = await wallet.connect(sourceChainProvider) - const walletAddress = wallet.getAddress() - performance.mark('endGetWalletAddress') - console.log({approvalData}); - let currentNonce = await sourceChainProvider.getTransactionCount(walletAddress) - // approvalData from apiReturnData is null for native tokens - // Values are returned for ERC20 tokens but token allowance needs to be checked - if (approvalData !== null) { - // Fetches token allowance given to Bungee contracts - performance.mark('startCheckAllowance') - const allowanceCheckStatus = await checkAllowance({ - chainId: bridgingParams.fromChainId, - owner: bridgingParams.userAddress, - allowanceTarget, - tokenAddress: bridgingParams.fromAssetAddress - }); - performance.mark('endCheckAllowance') - const allowanceValue = allowanceCheckStatus.result?.value; - console.log('Allowance value', allowanceValue); - if (minimumApprovalAmount > allowanceValue) { - console.log('Bungee contracts don\'t have sufficient allowance'); - performance.mark('startGetApprovalTransactionData') - const approvalTransactionData = await getApprovalTransactionData({ - chainId: bridgingParams.fromChainId, - owner: bridgingParams.userAddress, - allowanceTarget, - tokenAddress: bridgingParams.fromAssetAddress, - amount: bridgingParams.amount - }); - performance.mark('endGetApprovalTransactionData') - performance.mark('startApprovalTransactionGasEstimate') - const gasPrice = sourceChainProvider.getGasPrice() - const gasEstimate = await sourceChainProvider.estimateGas({ - from: walletAddress, - to: approvalTransactionData.result?.to, - value: "0x00", - data: approvalTransactionData.result?.data, - gasPrice: gasPrice, - }); - performance.mark('endApprovalTransactionGasEstimate') - - performance.mark('startApprovalTransactionSend') - const hash = await sourceChainConnectedWallet.sendTransaction({ - from: approvalTransactionData.result?.from, - to: approvalTransactionData.result?.to, - value: "0x00", - data: approvalTransactionData.result?.data, - gasPrice: gasPrice, - gasLimit: gasEstimate, - nonce: currentNonce, - }) - const receipt = typeof hash === 'string' ? hash : hash?.hash - performance.mark('endApprovalTransactionSend') - console.log("Approval Transaction", {receipt}); - currentNonce++ - } - } - - performance.mark('startBridgingTransactionGasEstimate') - const gasPrice = await sourceChainProvider.getGasPrice(); - let gasEstimate = BigInt('0x029a6b')*BigInt(4) - try { - const res = await sourceChainProvider.estimateGas({ - from: walletAddress, - to: apiReturnData.result.txTarget, - value: apiReturnData.result.value, - data: apiReturnData.result.txData, - gasPrice: gasPrice, - }); - gasEstimate = BigInt(res.toNumber()) - console.log('Gas Estimate', gasEstimate); - } catch{ - console.log('Failed gas estimate. Using default with 4x increase'); - } - performance.mark('endBridgingTransactionGasEstimate') - - performance.mark('startBridgingTransactionSend') - const hash = await sourceChainConnectedWallet.sendTransaction({ +export async function bridgeFunds( + bridgingParams: BridgingParams, + wallet: EIP155Lib | SmartAccountLib +): Promise { + performance.mark('startGetQuote') + console.log('Bridging funds', bridgingParams) + const originalAmount = bridgingParams.amount + bridgingParams.amount = Math.round(originalAmount * AMOUNT_MULTIPLIER) + const quote = await getQuote(bridgingParams) + performance.mark('endGetQuote') + console.log('Fetched quote', quote) + + const route = quote.result.routes[0] + if (!route) { + throw new Error('No routes found') + } + performance.mark('startGetRouteTransactionData') + const apiReturnData = await getRouteTransactionData(route) + performance.mark('endGetRouteTransactionData') + const approvalData = apiReturnData.result.approvalData + const { allowanceTarget, minimumApprovalAmount } = approvalData + performance.mark('startGetWalletAddress') + const sourceChainProvider = new providers.JsonRpcProvider( + EIP155_CHAINS[`eip155:${bridgingParams.fromChainId}` as TEIP155Chain].rpc + ) + const sourceChainConnectedWallet = await wallet.connect(sourceChainProvider) + const walletAddress = wallet.getAddress() + performance.mark('endGetWalletAddress') + console.log({ approvalData }) + let currentNonce = await sourceChainProvider.getTransactionCount(walletAddress) + // approvalData from apiReturnData is null for native tokens + // Values are returned for ERC20 tokens but token allowance needs to be checked + if (approvalData !== null) { + // Fetches token allowance given to Bungee contracts + performance.mark('startCheckAllowance') + const allowanceCheckStatus = await checkAllowance({ + chainId: bridgingParams.fromChainId, + owner: bridgingParams.userAddress, + allowanceTarget, + tokenAddress: bridgingParams.fromAssetAddress + }) + performance.mark('endCheckAllowance') + const allowanceValue = allowanceCheckStatus.result?.value + console.log('Allowance value', allowanceValue) + if (minimumApprovalAmount > allowanceValue) { + console.log("Bungee contracts don't have sufficient allowance") + performance.mark('startGetApprovalTransactionData') + const approvalTransactionData = await getApprovalTransactionData({ + chainId: bridgingParams.fromChainId, + owner: bridgingParams.userAddress, + allowanceTarget, + tokenAddress: bridgingParams.fromAssetAddress, + amount: bridgingParams.amount + }) + performance.mark('endGetApprovalTransactionData') + performance.mark('startApprovalTransactionGasEstimate') + const gasPrice = sourceChainProvider.getGasPrice() + const gasEstimate = await sourceChainProvider.estimateGas({ from: walletAddress, - to: apiReturnData.result.txTarget, - data: apiReturnData.result.txData, - value: apiReturnData.result.value, + to: approvalTransactionData.result?.to, + value: '0x00', + data: approvalTransactionData.result?.data, + gasPrice: gasPrice + }) + performance.mark('endApprovalTransactionGasEstimate') + + performance.mark('startApprovalTransactionSend') + const hash = await sourceChainConnectedWallet.sendTransaction({ + from: approvalTransactionData.result?.from, + to: approvalTransactionData.result?.to, + value: '0x00', + data: approvalTransactionData.result?.data, gasPrice: gasPrice, gasLimit: gasEstimate, nonce: currentNonce - }); - const receipt = typeof hash === 'string' ? hash : hash?.hash - console.log("Bridging Transaction : ", {receipt}); - performance.mark('endBridgingTransactionSend') - - performance.mark('startBridgingTransactionCheck') - let interations = 0 - while (interations < 20) { - const balance = await getErc20TokenBalance(bridgingParams.toAssetAddress as Hex,bridgingParams.toChainId, walletAddress as Hex, false) - console.log('Checking destination address',{balance, originalAmount}); - - if (balance >= originalAmount) { - console.log('Bridging completed'); - performance.mark('endBridgingTransactionCheck') - printMeasurements() - return - } - await new Promise(resolve => setTimeout(resolve, 1500)); - interations++ + }) + const receipt = typeof hash === 'string' ? hash : hash?.hash + performance.mark('endApprovalTransactionSend') + console.log('Approval Transaction', { receipt }) + currentNonce++ } + } + + performance.mark('startBridgingTransactionGasEstimate') + const gasPrice = await sourceChainProvider.getGasPrice() + let gasEstimate = BigInt('0x029a6b') * BigInt(4) + try { + const res = await sourceChainProvider.estimateGas({ + from: walletAddress, + to: apiReturnData.result.txTarget, + value: apiReturnData.result.value, + data: apiReturnData.result.txData, + gasPrice: gasPrice + }) + gasEstimate = BigInt(res.toNumber()) + console.log('Gas Estimate', gasEstimate) + } catch { + console.log('Failed gas estimate. Using default with 4x increase') + } + performance.mark('endBridgingTransactionGasEstimate') + + performance.mark('startBridgingTransactionSend') + const hash = await sourceChainConnectedWallet.sendTransaction({ + from: walletAddress, + to: apiReturnData.result.txTarget, + data: apiReturnData.result.txData, + value: apiReturnData.result.value, + gasPrice: gasPrice, + gasLimit: gasEstimate, + nonce: currentNonce + }) + const receipt = typeof hash === 'string' ? hash : hash?.hash + console.log('Bridging Transaction : ', { receipt }) + performance.mark('endBridgingTransactionSend') + + performance.mark('startBridgingTransactionCheck') + let interations = 0 + while (interations < 20) { + const balance = await getErc20TokenBalance( + bridgingParams.toAssetAddress as Hex, + bridgingParams.toChainId, + walletAddress as Hex, + false + ) + console.log('Checking destination address', { balance, originalAmount }) + + if (balance >= originalAmount) { + console.log('Bridging completed') + performance.mark('endBridgingTransactionCheck') + printMeasurements() + return + } + await new Promise(resolve => setTimeout(resolve, 1500)) + interations++ + } } -function printMeasurements(){ - console.log(`Total duration: ${performance.measure('total-duration','startGetQuote','endBridgingTransactionCheck').duration} ms`); - console.log(`Get quote: ${performance.measure('get-quote','startGetQuote','endGetQuote').duration} ms`); - console.log(`Get Route Transaction Data: ${performance.measure('get-route-transaction','startGetRouteTransactionData','endGetRouteTransactionData').duration} ms`); - console.log(`Get Wallet Address: ${performance.measure('get-wallet-address','startGetWalletAddress','endGetWalletAddress').duration} ms`); - console.log(`Check Allowance: ${performance.measure('check-allowance','startCheckAllowance','endCheckAllowance').duration} ms`); - console.log(`Get Approval Transaction Data: ${performance.measure('get-approval-tx-data','startGetApprovalTransactionData','endGetApprovalTransactionData').duration} ms`); - console.log(`Get Approval Transaction Gas Estimate: ${performance.measure('get-approval-tx-gas-estimate','startApprovalTransactionGasEstimate','endApprovalTransactionGasEstimate').duration} ms`); - console.log(`Approval transaction send: ${performance.measure('approval-transaction-send','startApprovalTransactionSend','endApprovalTransactionSend').duration} ms`); - console.log(`Bridging transaction gas estimate: ${performance.measure('bridging-tx-gas-estimate','startBridgingTransactionGasEstimate','endBridgingTransactionGasEstimate').duration} ms`); - console.log(`Bridging transaction send: ${performance.measure('bridging-tx-send','startBridgingTransactionSend','endBridgingTransactionSend').duration} ms`); - console.log(`Bridging transaction check: ${performance.measure('bridging-tx-check','startBridgingTransactionCheck','endBridgingTransactionCheck').duration} ms`); -} \ No newline at end of file +function printMeasurements() { + console.log( + `Total duration: ${ + performance.measure('total-duration', 'startGetQuote', 'endBridgingTransactionCheck').duration + } ms` + ) + console.log( + `Get quote: ${performance.measure('get-quote', 'startGetQuote', 'endGetQuote').duration} ms` + ) + console.log( + `Get Route Transaction Data: ${ + performance.measure( + 'get-route-transaction', + 'startGetRouteTransactionData', + 'endGetRouteTransactionData' + ).duration + } ms` + ) + console.log( + `Get Wallet Address: ${ + performance.measure('get-wallet-address', 'startGetWalletAddress', 'endGetWalletAddress') + .duration + } ms` + ) + console.log( + `Check Allowance: ${ + performance.measure('check-allowance', 'startCheckAllowance', 'endCheckAllowance').duration + } ms` + ) + console.log( + `Get Approval Transaction Data: ${ + performance.measure( + 'get-approval-tx-data', + 'startGetApprovalTransactionData', + 'endGetApprovalTransactionData' + ).duration + } ms` + ) + console.log( + `Get Approval Transaction Gas Estimate: ${ + performance.measure( + 'get-approval-tx-gas-estimate', + 'startApprovalTransactionGasEstimate', + 'endApprovalTransactionGasEstimate' + ).duration + } ms` + ) + console.log( + `Approval transaction send: ${ + performance.measure( + 'approval-transaction-send', + 'startApprovalTransactionSend', + 'endApprovalTransactionSend' + ).duration + } ms` + ) + console.log( + `Bridging transaction gas estimate: ${ + performance.measure( + 'bridging-tx-gas-estimate', + 'startBridgingTransactionGasEstimate', + 'endBridgingTransactionGasEstimate' + ).duration + } ms` + ) + console.log( + `Bridging transaction send: ${ + performance.measure( + 'bridging-tx-send', + 'startBridgingTransactionSend', + 'endBridgingTransactionSend' + ).duration + } ms` + ) + console.log( + `Bridging transaction check: ${ + performance.measure( + 'bridging-tx-check', + 'startBridgingTransactionCheck', + 'endBridgingTransactionCheck' + ).duration + } ms` + ) +} diff --git a/advanced/wallets/react-wallet-v2/src/views/AuthRequestModal.tsx b/advanced/wallets/react-wallet-v2/src/views/AuthRequestModal.tsx index 0178e26f..6ac47d71 100644 --- a/advanced/wallets/react-wallet-v2/src/views/AuthRequestModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/AuthRequestModal.tsx @@ -9,6 +9,7 @@ import SettingsStore from '@/store/SettingsStore' import { eip155Addresses, eip155Wallets } from '@/utils/EIP155WalletUtil' import { web3wallet } from '@/utils/WalletConnectUtil' import RequestModal from '../components/RequestModal' +import { styledToast } from '@/utils/HelperUtil' export default function AuthRequestModal() { const { account } = useSnapshot(SettingsStore.state) @@ -32,19 +33,24 @@ export default function AuthRequestModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (request) { - setIsLoadingApprove(true) - const signature = await eip155Wallets[address].signMessage(message) - await web3wallet.respondAuthRequest( - { - id: request.id, - signature: { - s: signature, - t: 'eip191' - } - }, - iss - ) + try { + if (request) { + setIsLoadingApprove(true) + const signature = await eip155Wallets[address].signMessage(message) + await web3wallet.respondAuthRequest( + { + id: request.id, + signature: { + s: signature, + t: 'eip191' + } + }, + iss + ) + } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionAuthenticateModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionAuthenticateModal.tsx index 97798bf3..134e2d58 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionAuthenticateModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionAuthenticateModal.tsx @@ -92,26 +92,31 @@ export default function SessionAuthenticateModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (messages.length) { - const signedAuths = [] - for (const message of messages) { - const signature = await eip155Wallets[address].signMessage(message.message) - const signedCacao = buildAuthObject( - message.authPayload, - { - t: 'eip191', - s: signature - }, - message.iss - ) - signedAuths.push(signedCacao) - } + try { + if (messages.length) { + const signedAuths = [] + for (const message of messages) { + const signature = await eip155Wallets[address].signMessage(message.message) + const signedCacao = buildAuthObject( + message.authPayload, + { + t: 'eip191', + s: signature + }, + message.iss + ) + signedAuths.push(signedCacao) + } - await web3wallet.engine.signClient.approveSessionAuthenticate({ - id: messages[0].id, - auths: signedAuths - }) - SettingsStore.setSessions(Object.values(web3wallet.getActiveSessions())) + await web3wallet.engine.signClient.approveSessionAuthenticate({ + id: messages[0].id, + auths: signedAuths + }) + SettingsStore.setSessions(Object.values(web3wallet.getActiveSessions())) + } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { ModalStore.close() } }, [address, messages]) diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionGrantPermissionsModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionGrantPermissionsModal.tsx index aef00c40..a57e4c4c 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionGrantPermissionsModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionGrantPermissionsModal.tsx @@ -35,19 +35,18 @@ export default function SessionGrantPermissionsModal() { console.log({ grantPermissionsRequestParams }) // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveEIP7715Request(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveEIP7715Request(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx index 057b22d3..78a1d514 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionProposalModal.tsx @@ -267,9 +267,9 @@ export default function SessionProposalModal() { // Hanlde approve action, construct session namespace const onApprove = useCallback(async () => { - if (proposal && namespaces) { - setIsLoadingApprove(true) - try { + try { + if (proposal && namespaces) { + setIsLoadingApprove(true) if (reorderedEip155Accounts.length > 0) { // we should append the smart accounts to the available eip155 accounts namespaces.eip155.accounts = reorderedEip155Accounts.concat(namespaces.eip155.accounts) @@ -284,14 +284,13 @@ export default function SessionProposalModal() { sessionProperties }) SettingsStore.setSessions(Object.values(web3wallet.getActiveSessions())) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { + setIsLoadingApprove(false) + ModalStore.close() } - setIsLoadingApprove(false) - ModalStore.close() }, [namespaces, proposal, reorderedEip155Accounts]) // Hanlde reject action diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSendCallsModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSendCallsModal.tsx index aacb3c7c..2c4b4b66 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSendCallsModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSendCallsModal.tsx @@ -25,20 +25,19 @@ export default function SessionSendCallsModal() { // Handle approve action const onApprove = useCallback(async () => { - if (requestEvent && topic) { - setIsLoadingApprove(true) - try { + try { + if (requestEvent && topic) { + setIsLoadingApprove(true) console.log('Calls approved.') const response = await approveEIP5792Request(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSendTransactionModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSendTransactionModal.tsx index 02ce827b..fe65bde3 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSendTransactionModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSendTransactionModal.tsx @@ -106,19 +106,18 @@ export default function SessionSendTransactionModal() { // Handle approve action const onApprove = useCallback(async () => { - if (requestEvent && topic) { - setIsLoadingApprove(true) - try { + try { + if (requestEvent && topic) { + setIsLoadingApprove(true) const response = await approveEIP155Request(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignCosmosModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignCosmosModal.tsx index 30bfda9d..d27d3dc8 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignCosmosModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignCosmosModal.tsx @@ -29,19 +29,18 @@ export default function SessionSignCosmosModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveCosmosRequest(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveCosmosRequest(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignKadenaModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignKadenaModal.tsx index 369afe99..036dd0f3 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignKadenaModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignKadenaModal.tsx @@ -31,19 +31,20 @@ export default function SessionSignKadenaModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveKadenaRequest(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveKadenaRequest(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return + ModalStore.close() } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignModal.tsx index da61289d..a98c3cbe 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignModal.tsx @@ -29,19 +29,18 @@ export default function SessionSignModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveEIP155Request(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveEIP155Request(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignMultiversxModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignMultiversxModal.tsx index dd483b74..93195e30 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignMultiversxModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignMultiversxModal.tsx @@ -32,19 +32,18 @@ export default function SessionSignMultiversxModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveMultiversxRequest(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveMultiversxRequest(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignNearModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignNearModal.tsx index ebe03f14..1d16f686 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignNearModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignNearModal.tsx @@ -142,19 +142,18 @@ export default function SessionSignNearModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveNearRequest(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveNearRequest(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignPolkadotModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignPolkadotModal.tsx index 82439b95..63dbdc13 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignPolkadotModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignPolkadotModal.tsx @@ -29,19 +29,18 @@ export default function SessionSignPolkadotModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approvePolkadotRequest(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approvePolkadotRequest(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignSolanaModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignSolanaModal.tsx index ef511c56..b5504737 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignSolanaModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignSolanaModal.tsx @@ -29,19 +29,18 @@ export default function SessionSignSolanaModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveSolanaRequest(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveSolanaRequest(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignTezosModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignTezosModal.tsx index 7f624940..f645f1ba 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignTezosModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignTezosModal.tsx @@ -29,19 +29,18 @@ export default function SessionSignTezosModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveTezosRequest(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveTezosRequest(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignTronModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignTronModal.tsx index 378a145e..392e053c 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignTronModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignTronModal.tsx @@ -29,19 +29,18 @@ export default function SessionSignTronModal() { // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveTronRequest(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveTronRequest(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() } diff --git a/advanced/wallets/react-wallet-v2/src/views/SessionSignTypedDataModal.tsx b/advanced/wallets/react-wallet-v2/src/views/SessionSignTypedDataModal.tsx index 9c6f1179..d42e80d2 100644 --- a/advanced/wallets/react-wallet-v2/src/views/SessionSignTypedDataModal.tsx +++ b/advanced/wallets/react-wallet-v2/src/views/SessionSignTypedDataModal.tsx @@ -40,19 +40,18 @@ export default function SessionSignTypedDataModal() { } // Handle approve action (logic varies based on request method) const onApprove = useCallback(async () => { - if (requestEvent) { - setIsLoadingApprove(true) - const response = await approveEIP155Request(requestEvent) - try { + try { + if (requestEvent) { + setIsLoadingApprove(true) + const response = await approveEIP155Request(requestEvent) await web3wallet.respondSessionRequest({ topic, response }) - } catch (e) { - setIsLoadingApprove(false) - styledToast((e as Error).message, 'error') - return } + } catch (e) { + styledToast((e as Error).message, 'error') + } finally { setIsLoadingApprove(false) ModalStore.close() }