diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 6941d6eb88b2..3c042ecb7fb0 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -32,6 +32,7 @@ import { JsonRpcError, providerErrors, rpcErrors } from '@metamask/rpc-errors'; import { Mutex } from 'await-semaphore'; import log from 'loglevel'; import { + OneKeyKeyring, TrezorConnectBridge, TrezorKeyring, } from '@metamask/eth-trezor-keyring'; @@ -426,9 +427,6 @@ const API_TYPE = { // stream channels const PHISHING_SAFELIST = 'metamask-phishing-safelist'; -// OneKey devices can connect to Metamask using Trezor USB transport. They use a specific device minor version (99) to differentiate between genuine Trezor and OneKey devices. -export const ONE_KEY_VIA_TREZOR_MINOR_VERSION = 99; - const environmentMappingForRemoteFeatureFlag = { [ENVIRONMENT.DEVELOPMENT]: EnvironmentType.Development, [ENVIRONMENT.RELEASE_CANDIDATE]: EnvironmentType.ReleaseCandidate, @@ -1122,6 +1120,10 @@ export default class MetamaskController extends EventEmitter { keyring: keyringOverrides?.trezor || TrezorKeyring, bridge: keyringOverrides?.trezorBridge || TrezorConnectBridge, }, + { + keyring: keyringOverrides?.oneKey || OneKeyKeyring, + bridge: keyringOverrides?.oneKeyBridge || TrezorConnectBridge, + }, { keyring: keyringOverrides?.ledger || LedgerKeyring, bridge: keyringOverrides?.ledgerBridge || LedgerIframeBridge, @@ -1146,6 +1148,10 @@ export default class MetamaskController extends EventEmitter { TrezorKeyring, keyringOverrides?.trezorBridge || TrezorOffscreenBridge, ), + hardwareKeyringBuilderFactory( + OneKeyKeyring, + keyringOverrides?.oneKey || TrezorOffscreenBridge, + ), hardwareKeyringBuilderFactory( LedgerKeyring, keyringOverrides?.ledgerBridge || LedgerOffscreenBridge, @@ -4951,16 +4957,9 @@ export default class MetamaskController extends EventEmitter { * @returns {HardwareKeyringType} Keyring hardware type */ async getHardwareTypeForMetric(address) { - // The `getKeyringForAccount` is now deprecated, so we just use `withKeyring` instead to access our keyring. return await this.keyringController.withKeyring( { address }, - ({ keyring }) => { - const { type: keyringType, bridge: keyringBridge } = keyring; - // Specific case for OneKey devices, see `ONE_KEY_VIA_TREZOR_MINOR_VERSION` for further details. - return keyringBridge?.minorVersion === ONE_KEY_VIA_TREZOR_MINOR_VERSION - ? HardwareKeyringType.oneKey - : HardwareKeyringType[keyringType]; - }, + ({ keyring }) => HardwareKeyringType[keyring.type], ); } @@ -8071,9 +8070,11 @@ export default class MetamaskController extends EventEmitter { let keyringType = null; switch (options.name) { case HardwareDeviceNames.trezor: - case HardwareDeviceNames.oneKey: keyringType = keyringOverrides?.trezor?.type || TrezorKeyring.type; break; + case HardwareDeviceNames.oneKey: + keyringType = keyringOverrides?.oneKey?.type || OneKeyKeyring?.type; + break; case HardwareDeviceNames.ledger: keyringType = keyringOverrides?.ledger?.type || LedgerKeyring.type; break; diff --git a/app/scripts/metamask-controller.test.js b/app/scripts/metamask-controller.test.js index 5121682e9b85..5e87ff3eff4f 100644 --- a/app/scripts/metamask-controller.test.js +++ b/app/scripts/metamask-controller.test.js @@ -58,9 +58,7 @@ import { } from '../../shared/constants/permissions'; import { deferredPromise } from './lib/util'; import { METAMASK_COOKIE_HANDLER } from './constants/stream'; -import MetaMaskController, { - ONE_KEY_VIA_TREZOR_MINOR_VERSION, -} from './metamask-controller'; +import MetaMaskController from './metamask-controller'; import { PermissionNames } from './controllers/permissions'; const { Ganache } = require('../../test/e2e/seeder/ganache'); @@ -1913,7 +1911,7 @@ describe('MetaMaskController', () => { }); describe('getHardwareTypeForMetric', () => { - it.each(['ledger', 'lattice', 'trezor', 'qr'])( + it.each(['ledger', 'lattice', 'trezor', 'oneKey', 'qr'])( 'should return the correct type for %s', async (type) => { jest @@ -1927,24 +1925,6 @@ describe('MetaMaskController', () => { expect(result).toBe(HardwareKeyringType[type]); }, ); - - it('should handle special case for oneKey', async () => { - jest - .spyOn(metamaskController.keyringController, 'withKeyring') - .mockImplementation((_, fn) => { - const keyring = { - type: 'trezor', - bridge: { minorVersion: ONE_KEY_VIA_TREZOR_MINOR_VERSION }, - }; - return fn({ keyring }); - }); - - const result = await metamaskController.getHardwareTypeForMetric( - '0x123', - ); - - expect(result).toBe('OneKey Hardware'); - }); }); describe('forgetDevice', () => { diff --git a/shared/constants/hardware-wallets.ts b/shared/constants/hardware-wallets.ts index d9d2ee9f555b..e211f50f855c 100644 --- a/shared/constants/hardware-wallets.ts +++ b/shared/constants/hardware-wallets.ts @@ -12,6 +12,7 @@ export enum HardwareKeyringType { export enum HardwareKeyringNames { ledger = 'Ledger', trezor = 'Trezor', + oneKey = 'OneKey', lattice = 'Lattice1', qr = 'QR', } @@ -19,7 +20,7 @@ export enum HardwareKeyringNames { export enum HardwareDeviceNames { ledger = 'ledger', trezor = 'trezor', - oneKey = 'onekey', + oneKey = 'oneKey', lattice = 'lattice', qr = 'QR Hardware', } diff --git a/ui/ducks/app/app.test.js b/ui/ducks/app/app.test.js index 1d28ec12f402..94352e7729f1 100644 --- a/ui/ducks/app/app.test.js +++ b/ui/ducks/app/app.test.js @@ -230,7 +230,7 @@ describe('App State', () => { it('sets hardware wallet default hd path', () => { const hdPaths = { trezor: "m/44'/60'/0'/0", - onekey: "m/44'/60'/0'/0", + oneKey: "m/44'/60'/0'/0", ledger: "m/44'/60'/0'", lattice: "m/44'/60'/0'/0", }; diff --git a/ui/ducks/app/app.ts b/ui/ducks/app/app.ts index e16e82c9964e..da5deffe8479 100644 --- a/ui/ducks/app/app.ts +++ b/ui/ducks/app/app.ts @@ -72,7 +72,7 @@ type AppState = { buyView: Record; defaultHdPaths: { trezor: string; - onekey: string; + oneKey: string; ledger: string; lattice: string; }; @@ -181,7 +181,7 @@ const initialState: AppState = { buyView: {}, defaultHdPaths: { trezor: `m/44'/60'/0'/0`, - onekey: `m/44'/60'/0'/0`, + oneKey: `m/44'/60'/0'/0`, ledger: `m/44'/60'/0'/0/0`, lattice: `m/44'/60'/0'/0`, }, diff --git a/ui/helpers/utils/accounts.js b/ui/helpers/utils/accounts.js index b80e9bd84ee9..b8e1094f6a44 100644 --- a/ui/helpers/utils/accounts.js +++ b/ui/helpers/utils/accounts.js @@ -91,6 +91,8 @@ export function getAccountLabel( return HardwareKeyringNames.qr; case KeyringType.trezor: return HardwareKeyringNames.trezor; + case KeyringType.oneKey: + return HardwareKeyringNames.oneKey; case KeyringType.ledger: return HardwareKeyringNames.ledger; case KeyringType.lattice: diff --git a/ui/helpers/utils/accounts.test.js b/ui/helpers/utils/accounts.test.js index d3ffc3a67511..544a0cbd6a8a 100644 --- a/ui/helpers/utils/accounts.test.js +++ b/ui/helpers/utils/accounts.test.js @@ -142,6 +142,13 @@ describe('Accounts', () => { ); }); + it('should return the correct label for OneKey hardware wallet', () => { + mockAccount.metadata.keyring.type = KeyringType.oneKey; + expect(getAccountLabel(KeyringType.oneKey, mockAccount)).toBe( + HardwareKeyringNames.oneKey, + ); + }); + it('should return the correct label for Ledger hardware wallet', () => { mockAccount.metadata.keyring.type = KeyringType.ledger; expect(getAccountLabel(KeyringType.ledger, mockAccount)).toBe( diff --git a/ui/pages/create-account/connect-hardware/account-list.js b/ui/pages/create-account/connect-hardware/account-list.js index b96a8604aa53..37c241d011d0 100644 --- a/ui/pages/create-account/connect-hardware/account-list.js +++ b/ui/pages/create-account/connect-hardware/account-list.js @@ -50,7 +50,7 @@ class AccountList extends Component {
{ this.setPath(value); @@ -73,7 +73,7 @@ class AccountList extends Component { HardwareDeviceNames.lattice, HardwareDeviceNames.trezor, HardwareDeviceNames.oneKey, - ].includes(device.toLowerCase()); + ].includes(device); return (

diff --git a/ui/pages/create-account/connect-hardware/account-list.test.js b/ui/pages/create-account/connect-hardware/account-list.test.js index e070b631603e..ea941f9abe63 100644 --- a/ui/pages/create-account/connect-hardware/account-list.test.js +++ b/ui/pages/create-account/connect-hardware/account-list.test.js @@ -55,7 +55,7 @@ const render = () => { ledger: LEDGER_HD_PATHS, lattice: LATTICE_HD_PATHS, trezor: TREZOR_HD_PATHS, - onekey: TREZOR_HD_PATHS, + oneKey: TREZOR_HD_PATHS, }, onPathChange: jest.fn(), onAccountChange: jest.fn(), diff --git a/ui/pages/create-account/connect-hardware/index.js b/ui/pages/create-account/connect-hardware/index.js index 6c95c99ae8d8..1cd007b7ac70 100644 --- a/ui/pages/create-account/connect-hardware/index.js +++ b/ui/pages/create-account/connect-hardware/index.js @@ -74,7 +74,7 @@ const HD_PATHS = { ledger: LEDGER_HD_PATHS, lattice: LATTICE_HD_PATHS, trezor: TREZOR_HD_PATHS, - onekey: TREZOR_HD_PATHS, + oneKey: TREZOR_HD_PATHS, }; const getErrorMessage = (errorCode, t) => { diff --git a/ui/selectors/selectors.js b/ui/selectors/selectors.js index 094b8d6c82af..8c7114809810 100644 --- a/ui/selectors/selectors.js +++ b/ui/selectors/selectors.js @@ -361,6 +361,7 @@ export function getAccountTypeForKeyring(keyring) { switch (type) { case KeyringType.trezor: + case KeyringType.oneKey: case KeyringType.ledger: case KeyringType.lattice: case KeyringType.qr: