From 327b4cd0593ebdea03b0fab2755b7c397fdcd6d5 Mon Sep 17 00:00:00 2001 From: Aaron Cook Date: Thu, 20 Jul 2023 11:58:45 +0200 Subject: [PATCH] fix: use the deployment by `chainId` (#2246) * fix: use the deployment by `chainId` * fix: add test --- .../FallbackHandler/__tests__/index.test.tsx | 37 +++++++++++++++++++ .../settings/FallbackHandler/index.tsx | 3 +- src/hooks/coreSDK/safeCoreSDK.ts | 4 +- .../modules/DelegateCallModule/index.ts | 2 +- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/components/settings/FallbackHandler/__tests__/index.test.tsx b/src/components/settings/FallbackHandler/__tests__/index.test.tsx index 2c65d13404..4546a74e75 100644 --- a/src/components/settings/FallbackHandler/__tests__/index.test.tsx +++ b/src/components/settings/FallbackHandler/__tests__/index.test.tsx @@ -45,6 +45,43 @@ describe('FallbackHandler', () => { }) }) + it('should render the Fallback Handler without warning when one that is not a default address is set', async () => { + const OPTIMISM_FALLBACK_HANDLER = '0x69f4D1788e39c87893C980c06EdF4b7f686e2938' + + // Optimism is not a "default" address + expect(OPTIMISM_FALLBACK_HANDLER).not.toBe(GOERLI_FALLBACK_HANDLER) + + jest.spyOn(useSafeInfoHook, 'default').mockImplementation( + () => + ({ + safe: { + version: '1.3.0', + chainId: '10', + fallbackHandler: { + value: OPTIMISM_FALLBACK_HANDLER, + name: 'FallbackHandlerName', + }, + }, + } as unknown as ReturnType), + ) + + const fbHandler = render() + + await waitFor(() => { + expect( + fbHandler.queryByText( + 'The fallback handler adds fallback logic for funtionality that may not be present in the Safe contract. Learn more about the fallback handler', + ), + ).toBeDefined() + + expect(fbHandler.getByText(OPTIMISM_FALLBACK_HANDLER)).toBeDefined() + + expect(fbHandler.getByText('FallbackHandlerName')).toBeDefined() + + expect(fbHandler.queryByText('An unofficial fallback handler is currently set.')).not.toBeInTheDocument() + }) + }) + it('should use the official deployment name if the address is official but no known name is present', async () => { jest.spyOn(useSafeInfoHook, 'default').mockImplementation( () => diff --git a/src/components/settings/FallbackHandler/index.tsx b/src/components/settings/FallbackHandler/index.tsx index 19ab5348e1..3d921be961 100644 --- a/src/components/settings/FallbackHandler/index.tsx +++ b/src/components/settings/FallbackHandler/index.tsx @@ -33,7 +33,8 @@ export const FallbackHandler = (): ReactElement | null => { return null } - const isOfficial = !!safe.fallbackHandler && safe.fallbackHandler.value === fallbackHandlerDeployment?.defaultAddress + const isOfficial = + !!safe.fallbackHandler && safe.fallbackHandler.value === fallbackHandlerDeployment?.networkAddresses[safe.chainId] const tooltip = !safe.fallbackHandler ? ( <> diff --git a/src/hooks/coreSDK/safeCoreSDK.ts b/src/hooks/coreSDK/safeCoreSDK.ts index 155166b3eb..f942e96469 100644 --- a/src/hooks/coreSDK/safeCoreSDK.ts +++ b/src/hooks/coreSDK/safeCoreSDK.ts @@ -76,8 +76,8 @@ export const initSafeSDK = async ({ const safeL1Deployment = getSafeSingletonDeployment({ network: chainId, version: safeVersion }) const safeL2Deployment = getSafeL2SingletonDeployment({ network: chainId, version: safeVersion }) - isL1SafeMasterCopy = masterCopy === safeL1Deployment?.defaultAddress - const isL2SafeMasterCopy = masterCopy === safeL2Deployment?.defaultAddress + isL1SafeMasterCopy = masterCopy === safeL1Deployment?.networkAddresses[chainId] + const isL2SafeMasterCopy = masterCopy === safeL2Deployment?.networkAddresses[chainId] // Unknown deployment, which we do not want to support if (!isL1SafeMasterCopy && !isL2SafeMasterCopy) { diff --git a/src/services/security/modules/DelegateCallModule/index.ts b/src/services/security/modules/DelegateCallModule/index.ts index 489f5a5ab9..e9704a3a17 100644 --- a/src/services/security/modules/DelegateCallModule/index.ts +++ b/src/services/security/modules/DelegateCallModule/index.ts @@ -30,7 +30,7 @@ export class DelegateCallModule implements SecurityModule> {