MetaMask / eth-json-rpc-middleware

Ethereum middleware for composing an Ethereum provider using json-rpc-engine. Intended to replace provider-engine
ISC License
179 stars 88 forks source link

[bug] CCIP read is not working with a provider managed by this middleware #335

Open mirceanis opened 3 days ago

mirceanis commented 3 days ago

ENS resolution sometimes uses CCIP read (eip-3668) to resolve an address. That relies on a reverted execution being interpreted as a redirect. When the provider used to perform such a read is managed by this middleware, the read operation fails. My guess is that the reverted execution is somehow wrapped such that the error is no longer interpretable.

This bug showed up after the upgrade from v13 to v14 of this lib in the MetaMask extension.

The environment to reproduce it has ethers@6.x as a dependency, and a simple test to reproduce would go along the lines of:

const provider = new BrowserProvider(setup.provider); // provider managed by this middleware
const sampleDomain = 'jwt.ro'; // resolving a linked DNS domain uses CCIP read
const ensResolver = await provider.getResolver(sampleDomain);
const ethAddress = await ensResolver?.getAddress();
expect(ethAddress).toBe('0xd08E08a0551575eE6bcE6d56180148EB68Bca061');