From c09f07338868654a89ba570987a8bc9bec59141c Mon Sep 17 00:00:00 2001 From: Alexandr Kazachenko Date: Fri, 13 Dec 2024 18:13:44 +0500 Subject: [PATCH] fix(twap): cache fb handler verification for 10min (#5200) --- .../twap/services/verifyExtensibleFallback.ts | 4 +++- .../FallbackHandlerVerificationUpdater.tsx | 14 +++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/apps/cowswap-frontend/src/modules/twap/services/verifyExtensibleFallback.ts b/apps/cowswap-frontend/src/modules/twap/services/verifyExtensibleFallback.ts index 806353e7f6..706c224f38 100644 --- a/apps/cowswap-frontend/src/modules/twap/services/verifyExtensibleFallback.ts +++ b/apps/cowswap-frontend/src/modules/twap/services/verifyExtensibleFallback.ts @@ -25,12 +25,14 @@ export async function verifyExtensibleFallback( try { const domainVerifier = await signatureVerifierContract.callStatic.domainVerifiers(safeAddress, domainSeparator) + console.log('FALLBACK HANDLER CHECKED, domainVerifier: ', domainVerifier) if (domainVerifier.toLowerCase() === composableCowContractAddress.toLowerCase()) { return ExtensibleFallbackVerification.HAS_DOMAIN_VERIFIER } return ExtensibleFallbackVerification.HAS_EXTENSIBLE_FALLBACK - } catch { + } catch (e) { + console.log('FALLBACK HANDLER CHECKED, error: ', e) return ExtensibleFallbackVerification.HAS_NOTHING } } diff --git a/apps/cowswap-frontend/src/modules/twap/updaters/FallbackHandlerVerificationUpdater.tsx b/apps/cowswap-frontend/src/modules/twap/updaters/FallbackHandlerVerificationUpdater.tsx index 8ec9e6244d..5c43ed188e 100644 --- a/apps/cowswap-frontend/src/modules/twap/updaters/FallbackHandlerVerificationUpdater.tsx +++ b/apps/cowswap-frontend/src/modules/twap/updaters/FallbackHandlerVerificationUpdater.tsx @@ -3,6 +3,7 @@ import { useEffect } from 'react' import { useWalletInfo } from '@cowprotocol/wallet' +import ms from 'ms.macro' import { useAsyncMemo } from 'use-async-memo' import { useExtensibleFallbackContext } from '../hooks/useExtensibleFallbackContext' @@ -10,26 +11,33 @@ import { useFallbackHandlerVerification } from '../hooks/useFallbackHandlerVerif import { ExtensibleFallbackVerification, verifyExtensibleFallback } from '../services/verifyExtensibleFallback' import { updateFallbackHandlerVerificationAtom } from '../state/fallbackHandlerVerificationAtom' +const FB_CACHE_TIME = ms`10m` +const FB_UPDATE_TIME_KEY = 'fallbackHandlerUpdateTime' + export function FallbackHandlerVerificationUpdater() { const { account } = useWalletInfo() const update = useSetAtom(updateFallbackHandlerVerificationAtom) const verification = useFallbackHandlerVerification() const isFallbackHandlerRequired = verification !== ExtensibleFallbackVerification.HAS_DOMAIN_VERIFIER + const fallbackHandlerUpdateTime = localStorage.getItem(FB_UPDATE_TIME_KEY) + const isCacheOutdated = !fallbackHandlerUpdateTime || Date.now() - +fallbackHandlerUpdateTime > FB_CACHE_TIME + const extensibleFallbackContext = useExtensibleFallbackContext() const fallbackHandlerVerification = useAsyncMemo( () => - extensibleFallbackContext && isFallbackHandlerRequired + extensibleFallbackContext && (isFallbackHandlerRequired || isCacheOutdated) ? verifyExtensibleFallback(extensibleFallbackContext) : null, - [isFallbackHandlerRequired, extensibleFallbackContext], - null + [isFallbackHandlerRequired, isCacheOutdated, extensibleFallbackContext], + null, ) useEffect(() => { if (!account || fallbackHandlerVerification === null) return update({ [account]: fallbackHandlerVerification }) + localStorage.setItem(FB_UPDATE_TIME_KEY, Date.now().toString()) }, [fallbackHandlerVerification, update, account]) return null