eth-onekey-bridge-keyring
Version:
A MetaMask compatible keyring, for OneKey hardware wallets
1 lines • 32.5 kB
Source Map (JSON)
{"version":3,"file":"onekey-keyring.cjs","sourceRoot":"","sources":["../src/onekey-keyring.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypedTransaction, TypedTxData } from '@ethereumjs/tx';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport * as ethUtil from '@ethereumjs/util';\nimport type { MessageTypes, TypedMessage } from '@metamask/eth-sig-util';\nimport {\n SignTypedDataVersion,\n TypedDataUtils,\n recoverPersonalSignature,\n recoverTypedSignature,\n} from '@metamask/eth-sig-util';\nimport type { Keyring } from '@metamask/keyring-utils';\nimport type { Hex } from '@metamask/utils';\nimport type {\n ConnectSettings,\n EthereumSignTypedDataMessage,\n EthereumSignTypedDataTypes,\n EVMSignedTx,\n EVMSignTransactionParams,\n} from '@onekeyfe/hd-core';\n// eslint-disable-next-line @typescript-eslint/no-shadow, n/prefer-global/buffer\nimport { Buffer } from 'buffer';\n// eslint-disable-next-line @typescript-eslint/naming-convention\nimport HDKey from 'hdkey';\n\nimport type { OneKeyBridge } from './onekey-bridge';\n\nconst pathBase = 'm';\nconst defaultHdPath = `${pathBase}/44'/60'/0'/0`;\nconst keyringType = 'OneKey Hardware';\n\nconst hdPathString = `m/44'/60'/0'/0/x`;\nconst ledgerLegacyHdPathString = `m/44'/60'/0'/x`;\n\nconst ALLOWED_HD_PATHS: Record<string, boolean> = {\n [defaultHdPath]: true,\n [hdPathString]: true,\n [ledgerLegacyHdPathString]: true,\n} as const;\n\nexport type AccountDetails = {\n index?: number;\n hdPath: string;\n passphraseState?: string | undefined;\n};\n\nexport type AccountPageEntry = {\n address: string;\n balance: number | null;\n index: number;\n};\n\nexport type AccountPage = AccountPageEntry[];\n\nexport type OneKeyControllerOptions = {\n hdPath?: string;\n accounts?: Hex[];\n accountDetails?: Readonly<Record<string, AccountDetails>>;\n page?: number;\n passphraseState?: string;\n // onUIEvent?: (event: HardwareUIEvent) => void;\n};\n\nexport type OneKeyControllerState = {\n hdPath: string;\n accounts: string[];\n accountDetails: Record<string, AccountDetails>;\n page: number;\n passphraseState?: string;\n};\n\n/**\n * Check if the given value has a hex prefix.\n *\n * @param value - The value to check.\n * @returns Returns `true` if the value has a hex prefix.\n */\nfunction hasHexPrefix(value: string): boolean {\n return value.startsWith('0x');\n}\n\n/**\n * Add a hex prefix to the given value.\n *\n * @param value - The value to add a hex prefix to.\n * @returns Returns the value with a hex prefix.\n */\nfunction addHexPrefix(value: string): string {\n if (hasHexPrefix(value)) {\n return value;\n }\n return `0x${value}`;\n}\n\n/**\n * Check if the passphrase state is empty.\n *\n * @param passphraseState - The passphrase state to check.\n * @returns Returns `true` if the passphrase state is empty.\n */\nfunction isEmptyPassphrase(passphraseState: string | undefined): boolean {\n return (\n passphraseState === null ||\n passphraseState === undefined ||\n passphraseState === ''\n );\n}\n\nexport class OneKeyKeyring implements Keyring {\n readonly type: string = keyringType;\n\n static type: string = keyringType;\n\n page = 0;\n\n perPage = 5;\n\n unlockedAccount = 0;\n\n hdk = new HDKey();\n\n accounts: readonly Hex[] = [];\n\n accountDetails: Record<string, AccountDetails> = {};\n\n passphraseState: string | undefined;\n\n hdPath = defaultHdPath;\n\n readonly bridge: OneKeyBridge;\n\n constructor({ bridge }: { bridge: OneKeyBridge }) {\n if (!bridge) {\n throw new Error('Bridge is a required dependency for the keyring');\n }\n\n this.bridge = bridge;\n }\n\n async init(): Promise<void> {\n return this.bridge.init();\n }\n\n async destroy(): Promise<void> {\n return this.bridge.dispose();\n }\n\n async serialize(): Promise<OneKeyControllerState> {\n return {\n hdPath: this.hdPath,\n accounts: [...this.accounts],\n accountDetails: { ...this.accountDetails },\n page: this.page,\n };\n }\n\n async deserialize(state: OneKeyControllerOptions): Promise<void> {\n this.hdPath = state.hdPath ?? defaultHdPath;\n this.accounts = state.accounts ?? [];\n this.accountDetails = state.accountDetails ?? {};\n this.page = state.page ?? 0;\n }\n\n getModel(): string | undefined {\n return this.bridge.model;\n }\n\n setAccountToUnlock(index: number): void {\n this.unlockedAccount = index;\n }\n\n setHdPath(hdPath: string): void {\n if (!ALLOWED_HD_PATHS[hdPath]) {\n throw new Error('Unknown HD path');\n }\n\n // Reset HDKey if the path changes\n if (!this.#isSameHdPath(hdPath)) {\n this.hdk = new HDKey();\n this.accounts = [];\n this.page = 0;\n this.perPage = 5;\n this.unlockedAccount = 0;\n this.accountDetails = {};\n }\n this.hdPath = hdPath;\n }\n\n lock(): void {\n this.hdk = new HDKey();\n }\n\n isUnlocked(): boolean {\n return Boolean(this.hdk?.publicKey);\n }\n\n async unlock(): Promise<string> {\n if (this.isUnlocked()) {\n return 'already unlocked';\n }\n\n return new Promise((resolve, reject) => {\n // eslint-disable-next-line no-void\n void this.bridge\n .getPassphraseState()\n .then((passphraseResponse) => {\n if (!passphraseResponse.success) {\n throw new Error(\n passphraseResponse.payload?.error || 'Unknown error',\n );\n }\n this.passphraseState = passphraseResponse.payload;\n\n // eslint-disable-next-line no-void\n void this.bridge\n .getPublicKey({\n showOnOneKey: false,\n chainId: 1,\n path: this.#getBasePath(),\n passphraseState: this.passphraseState ?? '',\n })\n .then(async (res) => {\n if (res.success) {\n this.hdk.publicKey = Buffer.from(res.payload.publicKey, 'hex');\n this.hdk.chainCode = Buffer.from(res.payload.chainCode, 'hex');\n resolve('just unlocked');\n } else {\n reject(new Error('getPublicKey failed'));\n }\n })\n .catch((error) => {\n reject(new Error(error?.toString() || 'Unknown error'));\n });\n })\n .catch((error) => {\n reject(new Error(error?.toString() || 'Unknown error'));\n });\n });\n }\n\n async addAccounts(numberOfAccounts = 1): Promise<Hex[]> {\n await this.unlock();\n\n const from = this.unlockedAccount;\n const to = from + numberOfAccounts;\n const newAccounts: Hex[] = [];\n\n for (let i = from; i < to; i++) {\n const address = this.#addressFromIndex(i);\n const hdPath = this.#getPathForIndex(i);\n if (typeof address === 'undefined') {\n throw new Error('Unknown error');\n }\n if (!this.accounts.includes(address)) {\n this.accounts = [...this.accounts, address];\n newAccounts.push(address);\n }\n if (!this.accountDetails[address]) {\n this.accountDetails[address] = {\n index: i,\n hdPath,\n passphraseState: this.passphraseState,\n };\n }\n this.page = 0;\n }\n\n return newAccounts;\n }\n\n getName(): string {\n return keyringType;\n }\n\n async getFirstPage(): Promise<AccountPage> {\n this.page = 0;\n return this.#getPage(1);\n }\n\n async getNextPage(): Promise<AccountPage> {\n return this.#getPage(1);\n }\n\n async getPreviousPage(): Promise<AccountPage> {\n return this.#getPage(-1);\n }\n\n async getAccounts(): Promise<Hex[]> {\n return Promise.resolve(this.accounts.slice());\n }\n\n removeAccount(address: string): void {\n const filteredAccounts = this.accounts.filter(\n (a) => a.toLowerCase() !== address.toLowerCase(),\n );\n\n if (filteredAccounts.length === this.accounts.length) {\n throw new Error(`Address ${address} not found in this keyring`);\n }\n\n this.accounts = filteredAccounts;\n delete this.accountDetails[ethUtil.toChecksumAddress(address)];\n }\n\n async updateTransportMethod(\n transportType: ConnectSettings['env'],\n ): Promise<void> {\n return this.bridge.updateTransportMethod(transportType);\n }\n\n #normalize(buffer: Buffer): string {\n return ethUtil.bytesToHex(new Uint8Array(buffer));\n }\n\n /**\n * Signs a transaction using OneKey.\n *\n * Accepts either an ethereumjs-tx or @ethereumjs/tx transaction, and returns\n * the same type.\n *\n * @param address - Hex string address.\n * @param tx - Instance of either new-style or old-style ethereumjs transaction.\n * @returns The signed transaction, an instance of either new-style or old-style\n * ethereumjs transaction.\n */\n async signTransaction(\n address: Hex,\n tx: TypedTransaction,\n ): Promise<TypedTransaction> {\n return this.#signTransaction(\n address,\n Number(tx.common.chainId()),\n tx,\n (payload) => {\n // Because tx will be immutable, first get a plain javascript object that\n // represents the transaction. Using txData here as it aligns with the\n // nomenclature of ethereumjs/tx.\n const txData: TypedTxData = tx.toJSON();\n // The fromTxData utility expects a type to support transactions with a type other than 0\n txData.type = tx.type;\n // The fromTxData utility expects v,r and s to be hex prefixed\n txData.v = ethUtil.addHexPrefix(payload.v);\n txData.r = ethUtil.addHexPrefix(payload.r);\n txData.s = ethUtil.addHexPrefix(payload.s);\n // Adopt the 'common' option from the original transaction and set the\n // returned object to be frozen if the original is frozen.\n return TransactionFactory.fromTxData(txData, {\n common: tx.common,\n freeze: Object.isFrozen(tx),\n });\n },\n );\n }\n\n async #signTransaction<TXData extends TypedTransaction>(\n address: string,\n chainId: number,\n tx: TXData,\n handleSigning: (tx: EVMSignedTx) => TXData,\n ): Promise<TXData> {\n // new-style transaction from @ethereumjs/tx package\n // we can just copy tx.toJSON() for everything except chainId, which must be a number\n const transaction: EVMSignTransactionParams['transaction'] = {\n ...tx.toJSON(),\n chainId,\n to: this.#normalize(Buffer.from(tx.to?.bytes ?? [])),\n } as unknown as EVMSignTransactionParams['transaction'];\n\n try {\n const details = this.#accountDetailsFromAddress(address);\n const response = await this.bridge.ethereumSignTransaction({\n path: details.hdPath,\n passphraseState: details.passphraseState ?? '',\n useEmptyPassphrase: isEmptyPassphrase(details.passphraseState),\n transaction,\n });\n if (response.success) {\n const newOrMutatedTx = handleSigning(response.payload);\n\n const addressSignedWith = ethUtil.toChecksumAddress(\n ethUtil.addHexPrefix(newOrMutatedTx.getSenderAddress().toString()),\n );\n const correctAddress = ethUtil.toChecksumAddress(address);\n if (addressSignedWith !== correctAddress) {\n throw new Error(\"signature doesn't match the right address\");\n }\n\n return newOrMutatedTx;\n }\n throw new Error(response.payload?.error || 'Unknown error');\n } catch (error) {\n throw new Error(error?.toString() ?? 'Unknown error');\n }\n }\n\n async signMessage(withAccount: string, data: string): Promise<string> {\n return this.signPersonalMessage(withAccount, data);\n }\n\n // For personal_sign, we need to prefix the message:\n async signPersonalMessage(\n withAccount: string,\n message: string,\n ): Promise<string> {\n return new Promise((resolve, reject) => {\n const details = this.#accountDetailsFromAddress(withAccount);\n this.bridge\n .ethereumSignMessage({\n path: details.hdPath,\n passphraseState: details.passphraseState ?? '',\n useEmptyPassphrase: isEmptyPassphrase(details.passphraseState),\n messageHex: ethUtil.stripHexPrefix(message),\n })\n .then((response) => {\n if (response.success) {\n const signature = addHexPrefix(response.payload.signature);\n const addressSignedWith = recoverPersonalSignature({\n data: message,\n signature,\n });\n if (\n ethUtil.toChecksumAddress(addressSignedWith) !==\n ethUtil.toChecksumAddress(withAccount)\n ) {\n reject(new Error('signature doesnt match the right address'));\n }\n // eslint-disable-next-line promise/no-multiple-resolved\n resolve(signature);\n } else {\n reject(new Error(response.payload?.error || 'Unknown error'));\n }\n })\n .catch((error) => {\n reject(new Error(error?.toString() || 'Unknown error'));\n });\n });\n }\n\n // EIP-712 Sign Typed Data\n async signTypedData<Types extends MessageTypes>(\n address: string,\n data: TypedMessage<Types>,\n { version }: { version?: SignTypedDataVersion },\n ): Promise<string> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n const useV4 = version === SignTypedDataVersion.V4;\n const dataVersion = useV4\n ? SignTypedDataVersion.V4\n : SignTypedDataVersion.V3;\n const typedData = TypedDataUtils.sanitizeData(data);\n const domainHash = TypedDataUtils.hashStruct(\n 'EIP712Domain',\n typedData.domain,\n typedData.types,\n dataVersion,\n ).toString('hex');\n const messageHash = TypedDataUtils.hashStruct(\n typedData.primaryType as string,\n typedData.message,\n typedData.types,\n dataVersion,\n ).toString('hex');\n\n const details = this.#accountDetailsFromAddress(address);\n const response = await this.bridge.ethereumSignTypedData({\n path: details.hdPath,\n passphraseState: details.passphraseState ?? '',\n useEmptyPassphrase: isEmptyPassphrase(details.passphraseState),\n data: data as EthereumSignTypedDataMessage<EthereumSignTypedDataTypes>,\n domainHash,\n messageHash,\n metamaskV4Compat: Boolean(useV4), // eslint-disable-line camelcase\n });\n\n if (response.success) {\n const signature = addHexPrefix(response.payload.signature);\n const addressSignedWith = recoverTypedSignature({\n data: typedData,\n signature,\n version: dataVersion,\n });\n if (\n ethUtil.toChecksumAddress(addressSignedWith) !==\n ethUtil.toChecksumAddress(address)\n ) {\n throw new Error('signature doesnt match the right address');\n }\n return signature;\n }\n\n throw new Error(response.payload?.error || 'Unknown error');\n }\n\n forgetDevice(): void {\n this.hdk = new HDKey();\n this.accounts = [];\n this.page = 0;\n this.unlockedAccount = 0;\n this.accountDetails = {};\n this.passphraseState = undefined;\n }\n\n async #getPage(\n increment: number,\n ): Promise<{ address: string; balance: number | null; index: number }[]> {\n this.page += increment;\n\n if (this.page <= 0) {\n this.page = 1;\n }\n\n return new Promise((resolve, reject) => {\n const from = (this.page - 1) * this.perPage;\n const to = from + this.perPage;\n\n const accounts: {\n address: string;\n balance: number | null;\n index: number;\n }[] = [];\n\n this.unlock()\n .then(async () => {\n for (let i = from; i < to; i++) {\n const address = this.#addressFromIndex(i);\n if (typeof address === 'undefined') {\n throw new Error('Unknown error');\n }\n accounts.push({\n index: i,\n address,\n balance: null,\n });\n }\n resolve(accounts);\n })\n .catch((error) => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(error);\n });\n });\n }\n\n #accountDetailsFromAddress(address: string): AccountDetails {\n const checksummedAddress = ethUtil.toChecksumAddress(address);\n const accountDetails = this.accountDetails[checksummedAddress];\n if (typeof accountDetails === 'undefined') {\n throw new Error('Unknown address');\n }\n return accountDetails;\n }\n\n #addressFromIndex(i: number): Hex {\n const dkey = this.hdk.derive(this.#getDerivePath(i));\n const address = ethUtil.bytesToHex(\n ethUtil.publicToAddress(new Uint8Array(dkey.publicKey), true),\n );\n return ethUtil.toChecksumAddress(address);\n }\n\n #getDerivePath(index: number): string {\n if (this.#isLedgerLiveHdPath()) {\n throw new Error('Ledger Live is not supported');\n }\n if (this.#isStandardBip44HdPath()) {\n return `${pathBase}/0/${index}`;\n }\n return `${pathBase}/${index}`;\n }\n\n #getBasePath(): string {\n if (this.#isLedgerLiveHdPath()) {\n throw new Error('Ledger Live is not supported');\n }\n return \"m/44'/60'/0'\";\n }\n\n #getPathForIndex(index: number): string {\n // Check if the path is BIP 44 (Ledger Live)\n if (this.#isLedgerLiveHdPath()) {\n return `m/44'/60'/${index}'/0/0`;\n }\n\n if (this.#isLedgerLegacyHdPath()) {\n return `m/44'/60'/0'/${index}`;\n }\n\n if (this.#isStandardBip44HdPath()) {\n return `m/44'/60'/0'/0/${index}`;\n }\n\n // default path: m/44'/60'/0'/0/x\n return `${this.hdPath}/${index}`;\n }\n\n #isLedgerLiveHdPath(): boolean {\n return this.hdPath === `m/44'/60'/x'/0/0`;\n }\n\n #isLedgerLegacyHdPath(): boolean {\n return this.hdPath === `m/44'/60'/0'/x`;\n }\n\n #isStandardBip44HdPath(): boolean {\n return this.hdPath === `m/44'/60'/0'/0/x` || this.hdPath === defaultHdPath;\n }\n\n #isSameHdPath(newHdPath: string): boolean {\n if (this.#isLedgerLiveHdPath()) {\n return newHdPath === `m/44'/60'/x'/0/0`;\n }\n if (this.#isLedgerLegacyHdPath()) {\n return newHdPath === `m/44'/60'/0'/x`;\n }\n if (this.#isStandardBip44HdPath()) {\n return newHdPath === `m/44'/60'/0'/0/x` || newHdPath === defaultHdPath;\n }\n\n return this.hdPath === newHdPath;\n }\n}\n"]}