From 16ea4a8046cf5e6e76ad077fc45651e69ff95982 Mon Sep 17 00:00:00 2001 From: Olusegun Akintayo Date: Wed, 25 Jan 2023 22:12:08 +0100 Subject: [PATCH] Put hardware wallets behind an HARDWARE_WALLETS_MV3 flag (#17354) * Put hardware wallets behind an HARDWARE_WALLETS_MV3 flag Disable Hardware connect buttons if the flag is set. Signed-off-by: Akintayo A. Olusegun update to metamask/eth-keyring-controller Signed-off-by: Akintayo A. Olusegun revert to eth-keyring-controller v8 Signed-off-by: Akintayo A. Olusegun LAvamost after rebase Signed-off-by: Akintayo A. Olusegun lock file. Signed-off-by: Akintayo A. Olusegun Added toaster for removed NFTs (#17297) * added notification for remove nfts * reverted names for tabs * updated default key * updated snapshot * updated remove nft toast to danger Setup network controller mocks per-test (#17250) The network controller unit test network mocks are now setup for each test. This makes modifying network behavior on a per-test basis easier, and makes it more clear which test relies upon which mocks. Security provider check (OpenSea) (#16584) chore: copy update for metamask fee on swaps (#17133) * linter fix Signed-off-by: Akintayo A. Olusegun * setLedgerTransportPreference in the metamask-controller should not be called, or should return immediately, if canUseHardwareWallets() is false Signed-off-by: Akintayo A. Olusegun Signed-off-by: Akintayo A. Olusegun Co-authored-by: Jyoti Puri --- app/scripts/metamask-controller.js | 20 +++++++++++++++++-- .../connect-hardware/select-hardware.js | 12 ++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) 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 ( <>
- {this.renderConnectToLedgerButton()} - {this.renderConnectToTrezorButton()} + {this.shouldShowConnectButton() && this.renderConnectToLedgerButton()} + {this.shouldShowConnectButton() && this.renderConnectToTrezorButton()}
- {this.renderConnectToLatticeButton()} + {this.shouldShowConnectButton() && + this.renderConnectToLatticeButton()} {this.renderConnectToQRButton()}