Building off of #62, one thing that web3py supports in both sync and async versions is the caching of chainids by using the simple_cache_middleware.
Would it be an overreach to modify the default middlewares in utils.py and remove the internal mapping, where users will simply have to ensure they're using it (unless we want to check in utils and add it in a similar fashion as ClientTimeout)?