MetaMask eth_signTypedData_v4 returns 4100 in Brave even with "Default wallet: None"

I’m building a Web3 app that uses eth_signTypedData_v4 (EIP-712) for wallet ownership verification. MetaMask extension works perfectly in Chrome, but in Brave I get:

Error 4100: The requested account and/or method has not been authorized by the user.

What happens:

  • eth_requestAccounts → :white_check_mark: works, MetaMask popup appears, account returned
  • eth_signTypedData_v4 → :cross_mark: 4100 in ~15ms (no MetaMask popup ever shown)
  • Same behavior with personal_sign
  • wallet_revokePermissions before connect makes it worse (signing never recovers)

What I tried:

  • brave://settings/web3 → “Extensions (no fallback)” → still 4100
  • brave://settings/web3 → “None” → still 4100 until full browser restart
  • Private window, cleared cache — no change without restart
  • Same code, same MetaMask, Chrome → works instantly :white_check_mark:

Key finding: Changing the wallet setting requires a full Brave restart (all windows closed) to take effect. Page refresh is not enough. After restart with “None” → everything works - once.

Is this expected behavior? It seems like Brave’s crypto middleware stays active in the browser process until restart, even after changing settings. This is confusing for users who change the setting and expect it to work immediately.

Brave version: latest (Feb 2026), MetaMask v12.x

Hello, please make sure you have the default wallet set to Extensions in your Web3 settings. This should help avoid connection issues.

brave://settings/web3

https://support.brave.app/hc/en-us/articles/15241705110157-Adjusting-the-Default-Wallet

Thanks!

I now have it set to “Extension (no fallback)”.

Actually, I’m almost certain that my problem is bad code in my application, so it seems that my topic can be closed.

1 Like