diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 9ae15a5a6597..c34af3b6423d 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -642,8 +642,9 @@ export default class MetamaskController extends EventEmitter { await opts.openPopup(); }); - let additionalKeyrings = []; - if (!isManifestV3) { + let additionalKeyrings = [keyringBuilderFactory(QRHardwareKeyring)]; + + if (this.canUseHardwareWallets()) { const additionalKeyringTypes = [ TrezorKeyring, LedgerBridgeKeyring, @@ -661,6 +662,7 @@ export default class MetamaskController extends EventEmitter { encryptor: opts.encryptor || undefined, cacheEncryptionKey: isManifestV3, }); + this.keyringController.memStore.subscribe((state) => this._onKeyringControllerUpdate(state), ); @@ -1330,6 +1332,10 @@ export default class MetamaskController extends EventEmitter { } } + canUseHardwareWallets() { + return !isManifestV3 || process.env.CONF?.HARDWARE_WALLETS_MV3; + } + resetStates(resetMethods) { resetMethods.forEach((resetMethod) => { try { @@ -2588,6 +2594,12 @@ export default class MetamaskController extends EventEmitter { async getKeyringForDevice(deviceName, hdPath = null) { let keyringName = null; + if ( + deviceName !== HardwareDeviceNames.QR && + !this.canUseHardwareWallets() + ) { + throw new Error('Hardware wallets are not supported on this version.'); + } switch (deviceName) { case HardwareDeviceNames.trezor: keyringName = TrezorKeyring.type; @@ -4405,6 +4417,10 @@ export default class MetamaskController extends EventEmitter { * @param {string} transportType - The Ledger transport type. */ async setLedgerTransportPreference(transportType) { + if (!this.canUseHardwareWallets()) { + return undefined; + } + const currentValue = this.preferencesController.getLedgerTransportPreference(); const newValue = diff --git a/ui/pages/create-account/connect-hardware/select-hardware.js b/ui/pages/create-account/connect-hardware/select-hardware.js index 1329ca90c8e1..59793028dd20 100644 --- a/ui/pages/create-account/connect-hardware/select-hardware.js +++ b/ui/pages/create-account/connect-hardware/select-hardware.js @@ -15,6 +15,7 @@ import { } from '../../../../shared/constants/hardware-wallets'; import ZENDESK_URLS from '../../../helpers/constants/zendesk-url'; import { EVENT } from '../../../../shared/constants/metametrics'; +import { isManifestV3 } from '../../../../shared/modules/mv3.utils'; export default class SelectHardware extends Component { static contextTypes = { @@ -32,6 +33,10 @@ export default class SelectHardware extends Component { selectedDevice: null, }; + shouldShowConnectButton() { + return !isManifestV3 || process.env.CONF?.HARDWARE_WALLETS_MV3; + } + connect = () => { if (this.state.selectedDevice) { this.props.connectToHardwareWallet(this.state.selectedDevice); @@ -103,14 +108,15 @@ export default class SelectHardware extends Component { return ( <>