From 30b62f50243c5e42182a7bfa0eb340735eb45f16 Mon Sep 17 00:00:00 2001 From: yanas Date: Thu, 19 Dec 2024 20:46:58 +0100 Subject: [PATCH] fix(suite-native): ensure that devices with BTC-only firmware have BTC enabled --- .../app/src/hooks/useCoinEnablingInitialCheck.tsx | 2 +- suite-native/discovery/src/discoveryConfigSlice.ts | 6 ++++++ suite-native/discovery/src/discoveryMiddleware.ts | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/suite-native/app/src/hooks/useCoinEnablingInitialCheck.tsx b/suite-native/app/src/hooks/useCoinEnablingInitialCheck.tsx index 18ff46e3db4..c949ccb06e0 100644 --- a/suite-native/app/src/hooks/useCoinEnablingInitialCheck.tsx +++ b/suite-native/app/src/hooks/useCoinEnablingInitialCheck.tsx @@ -42,7 +42,7 @@ export const useCoinEnablingInitialCheck = () => { let timeoutId: TimerId; //if btc only device, just run discovery for btc and do not show the UI if (hasBitcoinOnlyFirmware) { - dispatch(setEnabledDiscoveryNetworkSymbols(['btc'])); + // discoveryMiddleware ensures that BTC is enabled for devices with BTC-only firmware dispatch(setIsCoinEnablingInitFinished(true)); dispatch(applyDiscoveryChangesThunk()); } else { diff --git a/suite-native/discovery/src/discoveryConfigSlice.ts b/suite-native/discovery/src/discoveryConfigSlice.ts index 6ede4ab4b4e..6845ece39c5 100644 --- a/suite-native/discovery/src/discoveryConfigSlice.ts +++ b/suite-native/discovery/src/discoveryConfigSlice.ts @@ -73,6 +73,11 @@ export const discoveryConfigSlice = createSlice({ setDiscoveryInfo: (state, { payload }: PayloadAction) => { state.discoveryInfo = payload; }, + addEnabledDiscoveryNetworkSymbol: (state, { payload }: PayloadAction) => { + if (!state.enabledDiscoveryNetworkSymbols.includes(payload)) { + state.enabledDiscoveryNetworkSymbols.push(payload); + } + }, toggleEnabledDiscoveryNetworkSymbol: (state, { payload }: PayloadAction) => { const symbol = payload; const index = state.enabledDiscoveryNetworkSymbols.indexOf(symbol); @@ -208,6 +213,7 @@ export const selectTokenDefinitionsEnabledNetworks = createMemoizedSelector( export const { toggleAreTestnetsEnabled, setDiscoveryInfo, + addEnabledDiscoveryNetworkSymbol, toggleEnabledDiscoveryNetworkSymbol, setEnabledDiscoveryNetworkSymbols, setIsCoinEnablingInitFinished, diff --git a/suite-native/discovery/src/discoveryMiddleware.ts b/suite-native/discovery/src/discoveryMiddleware.ts index 144a2cd435f..3e78460d333 100644 --- a/suite-native/discovery/src/discoveryMiddleware.ts +++ b/suite-native/discovery/src/discoveryMiddleware.ts @@ -9,6 +9,7 @@ import { accountsActions, } from '@suite-common/wallet-core'; import { isFirmwareVersionSupported } from '@suite-native/device'; +import { hasBitcoinOnlyFirmware } from '@trezor/device-utils'; import { startDescriptorPreloadedDiscoveryThunk, discoveryCheckThunk } from './discoveryThunks'; import { @@ -17,6 +18,7 @@ import { toggleAreTestnetsEnabled, setEnabledDiscoveryNetworkSymbols, toggleEnabledDiscoveryNetworkSymbol, + addEnabledDiscoveryNetworkSymbol, } from './discoveryConfigSlice'; export const prepareDiscoveryMiddleware = createMiddlewareWithExtraDeps( @@ -69,6 +71,15 @@ export const prepareDiscoveryMiddleware = createMiddlewareWithExtraDeps( ); } + // ensure that BTC is enabled when device with BTC-only firmware is connected + // (it could have been disabled via some other device with universal firmware) + if (deviceActions.selectDevice.match(action)) { + const device = action.payload; + if (device?.connected && hasBitcoinOnlyFirmware(device)) { + dispatch(addEnabledDiscoveryNetworkSymbol('btc')); + } + } + // for further continual discovery check for various other reasons if ( deviceActions.selectDevice.match(action) || // user switched device