diff --git a/.changeset/tiny-crabs-hug.md b/.changeset/tiny-crabs-hug.md new file mode 100644 index 0000000000..9e3cc56265 --- /dev/null +++ b/.changeset/tiny-crabs-hug.md @@ -0,0 +1,5 @@ +--- +"@wagmi/connectors": patch +--- + +Fixed MetaMask Connector throwing error after switching to a chain that was just added via `'wallet_addEthereumChain'`. diff --git a/packages/connectors/src/metaMask.ts b/packages/connectors/src/metaMask.ts index b35a9e0b3f..2331621f9b 100644 --- a/packages/connectors/src/metaMask.ts +++ b/packages/connectors/src/metaMask.ts @@ -17,6 +17,7 @@ import type { import { type AddEthereumChainParameter, type Address, + type Hex, type ProviderConnectInfo, type ProviderRpcError, ResourceUnavailableRpcError, @@ -24,6 +25,7 @@ import { SwitchChainError, UserRejectedRequestError, getAddress, + hexToNumber, numberToHex, withRetry, withTimeout, @@ -288,7 +290,10 @@ export function metaMask(parameters: MetaMaskParameters = {}) { params: [addEthereumChain], }) - const currentChainId = await this.getChainId() + const currentChainId = hexToNumber( + // Call `'eth_chainId'` directly to guard against `this.state.chainId` (via `provider.getChainId`) being stale. + (await provider.request({ method: 'eth_chainId' })) as Hex, + ) if (currentChainId !== chainId) throw new UserRejectedRequestError( new Error('User rejected switch after adding network.'),