{"version":3,"file":"ledger-keyring.mjs","sourceRoot":"","sources":["../src/ledger-keyring.ts"],"names":[],"mappings":"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","sourcesContent":["import { RLP } from '@ethereumjs/rlp';\nimport { TransactionFactory, TypedTxData } from '@ethereumjs/tx';\nimport type { TypedTransaction } from '@ethereumjs/tx';\nimport { publicToAddress } from '@ethereumjs/util';\nimport type { MessageTypes, TypedMessage } from '@metamask/eth-sig-util';\nimport {\n  recoverEIP7702Authorization,\n  recoverPersonalSignature,\n  recoverTypedSignature,\n  SignTypedDataVersion,\n  TypedDataUtils,\n} from '@metamask/eth-sig-util';\nimport { ErrorCode } from '@metamask/hw-wallet-sdk';\nimport type { Keyring } from '@metamask/keyring-utils';\nimport {\n  add0x,\n  bytesToHex,\n  getChecksumAddress,\n  Hex,\n  hexToNumber,\n  isStrictHexString,\n  remove0x,\n} from '@metamask/utils';\nimport { Buffer } from 'buffer';\nimport type OldEthJsTransaction from 'ethereumjs-tx';\nimport HDKey from 'hdkey';\n\nimport { createKeyringStateError } from './errors';\nimport {\n  AppConfigurationResponse,\n  GetAppNameAndVersionResponse,\n  LedgerBridge,\n  LedgerBridgeOptions,\n} from './ledger-bridge';\nimport { handleLedgerTransportError } from './ledger-error-handler';\n\nconst pathBase = 'm';\nconst hdPathString = `${pathBase}/44'/60'/0'`;\nconst keyringType = 'Ledger Hardware';\n\n// This number causes one of our failing tests to run very slowly, as the for loop needs to iterate 1000 times.\nconst MAX_INDEX = 1000;\n\nenum NetworkApiUrls {\n  Ropsten = 'https://api-ropsten.etherscan.io',\n  Kovan = 'https://api-kovan.etherscan.io',\n  Rinkeby = 'https://api-rinkeby.etherscan.io',\n  Mainnet = `https://api.etherscan.io`,\n}\n\ntype SignTransactionPayload = Awaited<\n  ReturnType<LedgerBridge<LedgerBridgeOptions>['deviceSignTransaction']>\n>;\n\nexport type AccountPageEntry = {\n  address: string;\n  balance: number | null;\n  index: number;\n};\n\nexport type AccountPage = AccountPageEntry[];\n\nexport type AccountDetails = {\n  index?: number;\n  bip44?: boolean;\n  hdPath?: string;\n};\n\nexport type LedgerBridgeKeyringOptions = {\n  hdPath: string;\n  accounts: Hex[];\n  deviceId: string;\n  accountDetails: Readonly<Record<Hex, AccountDetails>>;\n  accountIndexes: Readonly<Record<Hex, number>>;\n  implementFullBIP44: boolean;\n};\n\nexport type LedgerKeyringSerializedState = Partial<LedgerBridgeKeyringOptions>;\n\n/**\n * Check if the given transaction is made with ethereumjs-tx or @ethereumjs/tx\n *\n * Transactions built with older versions of ethereumjs-tx have a\n * getChainId method that newer versions do not.\n * Older versions are mutable\n * while newer versions default to being immutable.\n * Expected shape and type\n * of data for v, r and s differ (Buffer (old) vs BN (new)).\n *\n * @param tx - Transaction to check, instance of either ethereumjs-tx or @ethereumjs/tx.\n * @returns Returns `true` if tx is an old-style ethereumjs-tx transaction.\n */\nfunction isOldStyleEthereumjsTx(\n  tx: TypedTransaction | OldEthJsTransaction,\n): tx is OldEthJsTransaction {\n  return 'getChainId' in tx && typeof tx.getChainId === 'function';\n}\n\nexport class LedgerKeyring implements Keyring {\n  static type: string = keyringType;\n\n  deviceId = '';\n\n  readonly type: string = keyringType;\n\n  page = 0;\n\n  perPage = 5;\n\n  unlockedAccount = 0;\n\n  accounts: readonly Hex[] = [];\n\n  accountDetails: Record<string, AccountDetails> = {};\n\n  hdk = new HDKey();\n\n  hdPath = hdPathString;\n\n  paths: Record<string, number> = {};\n\n  network: NetworkApiUrls = NetworkApiUrls.Mainnet;\n\n  implementFullBIP44 = false;\n\n  bridge: LedgerBridge<LedgerBridgeOptions>;\n\n  constructor({ bridge }: { bridge: LedgerBridge<LedgerBridgeOptions> }) {\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.destroy();\n  }\n\n  async serialize(): Promise<\n    Omit<LedgerKeyringSerializedState, 'accountIndexes'>\n  > {\n    return {\n      hdPath: this.hdPath,\n      accounts: this.accounts.slice(),\n      deviceId: this.deviceId,\n      accountDetails: this.accountDetails,\n      implementFullBIP44: false,\n    };\n  }\n\n  async deserialize(opts: LedgerKeyringSerializedState): Promise<void> {\n    this.hdPath = opts.hdPath ?? hdPathString;\n    this.accounts = opts.accounts ?? [];\n    this.deviceId = opts.deviceId ?? '';\n    this.accountDetails = opts.accountDetails ?? {};\n\n    if (!opts.accountDetails) {\n      this.#migrateAccountDetails(opts);\n    }\n\n    this.implementFullBIP44 = opts.implementFullBIP44 ?? false;\n\n    const keys = new Set<string>(Object.keys(this.accountDetails));\n    // Remove accounts that don't have corresponding account details\n    this.accounts = this.accounts.filter((account) =>\n      keys.has(this.#getChecksumHexAddress(account)),\n    );\n\n    return Promise.resolve();\n  }\n\n  public setDeviceId(deviceId: string): void {\n    this.deviceId = deviceId;\n  }\n\n  public getDeviceId(): string {\n    return this.deviceId;\n  }\n\n  #migrateAccountDetails(opts: Partial<LedgerBridgeKeyringOptions>): void {\n    if (this.#isLedgerLiveHdPath() && opts.accountIndexes) {\n      for (const [account, index] of Object.entries(opts.accountIndexes)) {\n        this.accountDetails[account] = {\n          bip44: true,\n          hdPath: this.#getPathForIndex(index),\n        };\n      }\n    }\n    const keys = new Set<string>(Object.keys(this.accountDetails));\n    // try to migrate non-LedgerLive accounts too\n    if (!this.#isLedgerLiveHdPath()) {\n      this.accounts.forEach((account) => {\n        const key = this.#getChecksumHexAddress(account);\n\n        if (!keys.has(key)) {\n          this.accountDetails[key] = {\n            bip44: false,\n            hdPath: this.#pathFromAddress(account),\n          };\n        }\n      });\n    }\n  }\n\n  isUnlocked(): boolean {\n    return Boolean(this.hdk.publicKey);\n  }\n\n  isConnected(): boolean {\n    return this.bridge.isDeviceConnected;\n  }\n\n  setAccountToUnlock(index: number): void {\n    this.unlockedAccount = index;\n  }\n\n  setHdPath(hdPath: string): void {\n    // Reset HDKey if the path changes\n    if (this.hdPath !== hdPath) {\n      this.hdk = new HDKey();\n    }\n    this.hdPath = hdPath;\n  }\n\n  async unlock(hdPath?: string, updateHdk = true): Promise<Hex> {\n    if (this.isUnlocked() && !hdPath) {\n      // if the device is already unlocked and no path is provided,\n      // we return the checksummed address of the public key stored in\n      // `this.hdk`, which is the root address of the last unlocked path.\n      return this.#getChecksumHexAddress(\n        bytesToHex(publicToAddress(this.hdk.publicKey, true)),\n      );\n    }\n    const path = hdPath ? this.#toLedgerPath(hdPath) : this.hdPath;\n\n    let payload;\n    try {\n      payload = await this.bridge.getPublicKey({\n        hdPath: path,\n      });\n    } catch (error: unknown) {\n      handleLedgerTransportError(\n        error,\n        'Ledger: Unknown error while unlocking account',\n      );\n    }\n\n    if (updateHdk && payload.chainCode) {\n      this.hdk.publicKey = Buffer.from(payload.publicKey, 'hex');\n      this.hdk.chainCode = Buffer.from(payload.chainCode, 'hex');\n    }\n\n    return add0x(payload.address);\n  }\n\n  async addAccounts(amount: number): Promise<Hex[]> {\n    return new Promise((resolve, reject) => {\n      this.unlock()\n        .then(async (_) => {\n          const from = this.unlockedAccount;\n          const to = from + amount;\n          const newAccounts: Hex[] = [];\n          for (let i = from; i < to; i++) {\n            const path = this.#getPathForIndex(i);\n            let address: Hex;\n            if (this.#isLedgerLiveHdPath()) {\n              address = await this.unlock(path);\n            } else {\n              address = this.#addressFromIndex(pathBase, i);\n            }\n\n            this.accountDetails[this.#getChecksumHexAddress(address)] = {\n              // TODO: consider renaming this property, as the current name is misleading\n              // It's currently used to represent whether an account uses the Ledger Live path.\n              bip44: this.#isLedgerLiveHdPath(),\n              hdPath: path,\n            };\n\n            if (!this.accounts.includes(address)) {\n              this.accounts = [...this.accounts, address];\n              newAccounts.push(address);\n            }\n            this.page = 0;\n          }\n          resolve(newAccounts);\n        })\n        .catch(reject);\n    });\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[this.#getChecksumHexAddress(address)];\n  }\n\n  async attemptMakeApp(): Promise<boolean> {\n    return this.bridge.attemptMakeApp();\n  }\n\n  async updateTransportMethod(transportType: string): Promise<boolean> {\n    return this.bridge.updateTransportMethod(transportType);\n  }\n\n  async getAppNameAndVersion(): Promise<GetAppNameAndVersionResponse> {\n    try {\n      return await this.bridge.getAppNameAndVersion();\n    } catch (error: unknown) {\n      return handleLedgerTransportError(\n        error,\n        'Ledger: Unknown error while getting app name and version',\n      );\n    }\n  }\n\n  async getAppConfiguration(): Promise<AppConfigurationResponse> {\n    try {\n      return await this.bridge.getAppConfiguration();\n    } catch (error: unknown) {\n      return handleLedgerTransportError(\n        error,\n        'Ledger: Unknown error while getting app configuration',\n      );\n    }\n  }\n\n  // tx is an instance of the ethereumjs-transaction class.\n  async signTransaction(\n    address: Hex,\n    tx: TypedTransaction | OldEthJsTransaction,\n  ): Promise<TypedTransaction | OldEthJsTransaction> {\n    let rawTxHex;\n    // transactions built with older versions of ethereumjs-tx have a\n    // getChainId method that newer versions do not. Older versions are mutable\n    // while newer versions default to being immutable. Expected shape and type\n    // of data for v, r and s differ (Buffer (old) vs BN (new))\n    if (isOldStyleEthereumjsTx(tx)) {\n      // In this version of ethereumjs-tx we must add the chainId in hex format\n      // to the initial v value. The chainId must be included in the serialized\n      // transaction which is only communicated to ethereumjs-tx in this\n      // value. In newer versions the chainId is communicated via the 'Common'\n      // object.\n      tx.v = tx.getChainId();\n      // @ts-expect-error tx.r should be a Buffer, but we are assigning a string\n      tx.r = '0x00';\n      // @ts-expect-error tx.s should be a Buffer, but we are assigning a string\n      tx.s = '0x00';\n\n      rawTxHex = tx.serialize().toString('hex');\n\n      return this.#signTransaction(address, rawTxHex, (payload) => {\n        tx.v = Buffer.from(payload.v, 'hex');\n        tx.r = Buffer.from(payload.r, 'hex');\n        tx.s = Buffer.from(payload.s, 'hex');\n        return tx;\n      });\n    }\n\n    // The below `encode` call is only necessary for legacy transactions, as `getMessageToSign`\n    // calls `rlp.encode` internally for non-legacy transactions. As per the \"Transaction Execution\"\n    // section of the ethereum yellow paper, transactions need to be \"well-formed RLP, with no additional\n    // trailing bytes\".\n\n    // Note also that `getMessageToSign` will return valid RLP for all transaction types, whereas the\n    // `serialize` method will not for any transaction type except legacy. This is because `serialize` includes\n    // empty r, s and v values in the encoded rlp. This is why we use `getMessageToSign` here instead of `serialize`.\n    const messageToSign = tx.getMessageToSign();\n\n    rawTxHex = Array.isArray(messageToSign)\n      ? Buffer.from(RLP.encode(messageToSign)).toString('hex')\n      : bytesToHex(messageToSign);\n\n    return this.#signTransaction(address, rawTxHex, (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 = add0x(payload.v);\n      txData.r = add0x(payload.r);\n      txData.s = add0x(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  async #signTransaction(\n    address: Hex,\n    rawTxHex: string,\n    handleSigning: (\n      payload: SignTransactionPayload,\n    ) => TypedTransaction | OldEthJsTransaction,\n  ): Promise<TypedTransaction | OldEthJsTransaction> {\n    const hdPath = await this.unlockAccountByAddress(address);\n\n    if (!hdPath) {\n      throw new Error('Ledger: hdPath is empty while signing transaction');\n    }\n\n    let payload;\n\n    try {\n      payload = await this.bridge.deviceSignTransaction({\n        tx: remove0x(rawTxHex),\n        hdPath,\n      });\n    } catch (error: unknown) {\n      handleLedgerTransportError(\n        error,\n        'Ledger: Unknown error while signing transaction',\n      );\n    }\n\n    const newOrMutatedTx = handleSigning(payload);\n    const valid = newOrMutatedTx.verifySignature();\n    if (valid) {\n      return newOrMutatedTx;\n    }\n    throw new Error('Ledger: The transaction signature is not valid');\n  }\n\n  async signMessage(withAccount: Hex, 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: Hex,\n    message: string,\n  ): Promise<string> {\n    const hdPath = await this.unlockAccountByAddress(withAccount);\n\n    if (!hdPath) {\n      throw new Error('Ledger: Unknown error while signing message');\n    }\n\n    let payload;\n    try {\n      payload = await this.bridge.deviceSignMessage({\n        hdPath,\n        message: remove0x(message),\n      });\n    } catch (error: unknown) {\n      handleLedgerTransportError(\n        error,\n        'Ledger: Unknown error while signing message',\n      );\n    }\n\n    const modifiedV = this.#normalizeRecoveryParam(\n      this.#parseLedgerRecoveryParam(payload.v),\n    );\n\n    const signature = `0x${payload.r}${payload.s}${modifiedV}`;\n    const addressSignedWith = recoverPersonalSignature({\n      data: message,\n      signature,\n    });\n    if (\n      this.#getChecksumHexAddress(addressSignedWith) !==\n      this.#getChecksumHexAddress(withAccount)\n    ) {\n      throw new Error('Ledger: The signature doesnt match the right address');\n    }\n    return signature;\n  }\n\n  async unlockAccountByAddress(address: Hex): Promise<string | undefined> {\n    const checksummedAddress = this.#getChecksumHexAddress(address);\n    const accountDetails = this.accountDetails[checksummedAddress];\n    if (!accountDetails) {\n      throw new Error(\n        `Ledger: Account for address '${checksummedAddress}' not found`,\n      );\n    }\n    const { hdPath } = accountDetails;\n    const unlockedAddress = await this.unlock(hdPath, false);\n\n    // unlock resolves to the address for the given hdPath as reported by the ledger device\n    // if that address is not the requested address, then this account belongs to a different device or seed\n    if (unlockedAddress.toLowerCase() !== address.toLowerCase()) {\n      throw new Error(\n        `Ledger: Account ${address} does not belong to the connected device`,\n      );\n    }\n    return hdPath;\n  }\n\n  async signTypedData<\n    Version extends SignTypedDataVersion.V4,\n    Types extends MessageTypes,\n    Options extends { version?: Version },\n  >(\n    withAccount: Hex,\n    data: TypedMessage<Types>,\n    options?: Options,\n  ): Promise<string> {\n    const { version } = options ?? {};\n    const isV4 = version === 'V4';\n    if (!isV4) {\n      throw createKeyringStateError(ErrorCode.DeviceStateOnlyV4Supported);\n    }\n\n    const { domain, types, primaryType, message } =\n      TypedDataUtils.sanitizeData(data);\n\n    const hdPath = await this.unlockAccountByAddress(withAccount);\n\n    if (!hdPath) {\n      throw new Error('Ledger: Unknown error while signing message');\n    }\n\n    let payload;\n    try {\n      payload = await this.bridge.deviceSignTypedData({\n        hdPath,\n        message: {\n          domain: {\n            name: domain.name,\n            chainId: domain.chainId,\n            version: domain.version,\n            verifyingContract: domain.verifyingContract,\n            salt:\n              domain.salt instanceof ArrayBuffer\n                ? Buffer.from(domain.salt).toString('hex')\n                : domain.salt,\n          },\n          types,\n          primaryType: primaryType.toString(),\n          message,\n        },\n      });\n    } catch (error: unknown) {\n      handleLedgerTransportError(\n        error,\n        'Ledger: Unknown error while signing message',\n      );\n    }\n\n    const recoveryId = this.#normalizeRecoveryParam(\n      this.#parseLedgerRecoveryParam(payload.v),\n    );\n    const signature = `0x${payload.r}${payload.s}${recoveryId}`;\n    const addressSignedWith = recoverTypedSignature({\n      data,\n      signature,\n      version: SignTypedDataVersion.V4,\n    });\n\n    if (\n      this.#getChecksumHexAddress(addressSignedWith) !==\n      this.#getChecksumHexAddress(withAccount)\n    ) {\n      throw new Error('Ledger: The signature doesnt match the right address');\n    }\n    return signature;\n  }\n\n  async signEip7702Authorization(\n    withAccount: Hex,\n    authorization: [chainId: number, contractAddress: Hex, nonce: number],\n  ): Promise<string> {\n    const [chainId, contractAddress, nonce] = authorization;\n    const hdPath = await this.unlockAccountByAddress(withAccount);\n\n    if (!hdPath) {\n      throw new Error(\n        'Ledger: Missing hdPath while signing EIP-7702 authorization',\n      );\n    }\n\n    let payload;\n    try {\n      payload = await this.bridge.deviceSignDelegationAuthorization({\n        hdPath,\n        chainId,\n        contractAddress: remove0x(contractAddress),\n        nonce,\n      });\n    } catch (error: unknown) {\n      handleLedgerTransportError(\n        error,\n        'Ledger: Error while signing EIP-7702 authorization',\n      );\n    }\n\n    // EIP-7702 authorization signatures use yParity (0 or 1), unlike\n    // EIP-191/EIP-712 signatures which use the legacy format (27 or 28).\n    const yParity = this.#normalizeYParity(\n      this.#parseLedgerRecoveryParam(payload.v),\n    );\n    const signature = `0x${payload.r}${payload.s}${yParity}`;\n\n    const addressSignedWith = recoverEIP7702Authorization({\n      signature,\n      authorization,\n    });\n\n    if (\n      this.#getChecksumHexAddress(addressSignedWith) !==\n      this.#getChecksumHexAddress(withAccount)\n    ) {\n      throw new Error(\n        'Ledger: The EIP-7702 authorization signature does not match the right address',\n      );\n    }\n    return signature;\n  }\n\n  forgetDevice(): void {\n    this.deviceId = '';\n    this.accounts = [];\n    this.page = 0;\n    this.unlockedAccount = 0;\n    this.paths = {};\n    this.accountDetails = {};\n    this.hdk = new HDKey();\n  }\n\n  /* PRIVATE METHODS */\n  async #getPage(increment: number): Promise<AccountPage> {\n    this.page += increment;\n\n    if (this.page <= 0) {\n      this.page = 1;\n    }\n    const from = (this.page - 1) * this.perPage;\n    const to = from + this.perPage;\n\n    await this.unlock();\n    let accounts;\n    if (this.#isLedgerLiveHdPath()) {\n      accounts = await this.#getAccountsBIP44(from, to);\n    } else {\n      accounts = this.#getAccountsLegacy(from, to);\n    }\n    return accounts;\n  }\n\n  async #getAccountsBIP44(from: number, to: number): Promise<AccountPage> {\n    const accounts: AccountPage = [];\n\n    for (let i = from; i < to; i++) {\n      const path = this.#getPathForIndex(i);\n      const address = await this.unlock(path);\n      const valid = this.implementFullBIP44\n        ? await this.#hasPreviousTransactions(address)\n        : true;\n      accounts.push({\n        address,\n        balance: null,\n        index: i,\n      });\n\n      // PER BIP44\n      // \"Software should prevent a creation of an account if\n      // a previous account does not have a transaction history\n      // (meaning none of its addresses have been used before).\"\n      if (!valid) {\n        break;\n      }\n    }\n    return accounts;\n  }\n\n  #getAccountsLegacy(from: number, to: number): AccountPage {\n    const accounts: AccountPage = [];\n\n    for (let i = from; i < to; i++) {\n      const address = this.#addressFromIndex(pathBase, i);\n      accounts.push({\n        address,\n        balance: null,\n        index: i,\n      });\n      this.paths[this.#getChecksumHexAddress(address)] = i;\n    }\n    return accounts;\n  }\n\n  #addressFromIndex(basePath: string, i: number): Hex {\n    const dkey = this.hdk.derive(`${basePath}/${i}`);\n    const address = bytesToHex(publicToAddress(dkey.publicKey, true));\n    return this.#getChecksumHexAddress(address);\n  }\n\n  #pathFromAddress(address: string): string {\n    const checksummedAddress = this.#getChecksumHexAddress(address);\n    let index = this.paths[checksummedAddress];\n    if (typeof index === 'undefined') {\n      for (let i = 0; i < MAX_INDEX; i++) {\n        if (checksummedAddress === this.#addressFromIndex(pathBase, i)) {\n          index = i;\n          break;\n        }\n      }\n    }\n\n    if (typeof index === 'undefined') {\n      throw new Error('Unknown address');\n    }\n    return this.#getPathForIndex(index);\n  }\n\n  #getPathForIndex(index: number): string {\n    // Check if the path is BIP 44 (Ledger Live)\n    return this.#isLedgerLiveHdPath()\n      ? `m/44'/60'/${index}'/0/0`\n      : `${this.hdPath}/${index}`;\n  }\n\n  #isLedgerLiveHdPath(): boolean {\n    return this.hdPath === `m/44'/60'/0'/0/0`;\n  }\n\n  #toLedgerPath(path: string): string {\n    return path.toString().replace('m/', '');\n  }\n\n  async #hasPreviousTransactions(address: string): Promise<boolean> {\n    const apiUrl = this.#getApiUrl();\n    const response = await window.fetch(\n      `${apiUrl}/api?module=account&action=txlist&address=${address}&tag=latest&page=1&offset=1`,\n    );\n    const parsedResponse = await response.json();\n    return parsedResponse.status !== '0' && parsedResponse.result.length > 0;\n  }\n\n  #getApiUrl(): NetworkApiUrls {\n    return this.network;\n  }\n\n  #getChecksumHexAddress(address: string): Hex {\n    return getChecksumAddress(add0x(address));\n  }\n\n  /**\n   * Parses the recovery parameter (`v`) returned by a Ledger device.\n   * Ledger may return `v` as a number, a `0x`-prefixed hex string, a bare hex\n   * string (e.g. `'1b'` for 27), or a decimal string.\n   *\n   * @param recoveryParam - The recovery parameter from Ledger.\n   * @returns The recovery parameter as a number.\n   */\n  #parseLedgerRecoveryParam(recoveryParam: string | number): number {\n    if (typeof recoveryParam === 'number') {\n      return recoveryParam;\n    }\n\n    const value = String(recoveryParam).trim();\n\n    if (value.startsWith('0x') || value.startsWith('0X')) {\n      if (!isStrictHexString(value)) {\n        throw new Error(`Invalid hex recovery parameter: \"${recoveryParam}\"`);\n      }\n      return hexToNumber(value);\n    }\n\n    // If the string contains hex letters (a-f), interpret it as hex;\n    // otherwise interpret it as a regular decimal number.\n    const radix = /[a-f]/iu.test(value) ? 16 : 10;\n    const result = parseInt(value, radix);\n\n    if (Number.isNaN(result)) {\n      throw new Error(`Invalid recovery parameter: \"${recoveryParam}\"`);\n    }\n\n    return result;\n  }\n\n  /**\n   * Normalizes the signature recovery parameter (v) to legacy format.\n   * Ledger devices may return v as 0 or 1 (modern format), but signature\n   * recovery expects 27 or 28 (legacy format per EIP-191/EIP-712).\n   *\n   * @param recoveryParam - The recovery parameter from Ledger.\n   * @returns The normalized recovery parameter as a hex string.\n   */\n  #normalizeRecoveryParam(recoveryParam: number): string {\n    if (recoveryParam === 0 || recoveryParam === 1) {\n      return (recoveryParam + 27).toString(16);\n    }\n    return recoveryParam.toString(16);\n  }\n\n  /**\n   * Normalizes the signature recovery parameter (`v`) to yParity format and\n   * returns it as a 2-character hex string suitable for appending to a signature.\n   *\n   * Ledger devices may return `v` as 0/1 (yParity) or 27/28 (legacy). EIP-7702\n   * authorization signatures require the yParity value (0 or 1), unlike\n   * EIP-191/EIP-712 signatures which use the legacy format (27 or 28).\n   *\n   * @param recoveryParam - The parsed recovery parameter from Ledger.\n   * @returns The yParity as a 2-character lowercase hex string ('00' or '01').\n   */\n  #normalizeYParity(recoveryParam: number): string {\n    const yParity =\n      recoveryParam === 0 || recoveryParam === 1\n        ? recoveryParam\n        : recoveryParam - 27;\n    return yParity.toString(16).padStart(2, '0');\n  }\n}\n"]}