From 021aab6547144d0f396b47add4921832996d59cf Mon Sep 17 00:00:00 2001 From: Moody Salem Date: Thu, 6 May 2021 11:10:45 -0400 Subject: [PATCH] fix(wallet): workaround the ethers bug to fix other wallets --- src/utils/getLibrary.ts | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/utils/getLibrary.ts b/src/utils/getLibrary.ts index 6d0e5674c5a..fc4ee0df27c 100644 --- a/src/utils/getLibrary.ts +++ b/src/utils/getLibrary.ts @@ -1,17 +1,21 @@ -import { Web3Provider } from '@ethersproject/providers' -import { Web3ReactContextInterface } from '@web3-react/core/dist/types' +import { Web3Provider, Network } from '@ethersproject/providers' -export default function getLibrary( - provider: any, - connector?: Required['connector'] -): Web3Provider { - // todo: need to add types to this function and fix the issue with latest version of ethers not able to detect network if we pass in 'any' - const chainId = - provider?.chainId ?? connector?.supportedChainIds?.length === 1 ? connector?.supportedChainIds?.[0] : undefined - // latest ethers version tries to detect the network which fails - const library = new Web3Provider( +class WorkaroundWeb3Provider extends Web3Provider { + private _detectNetworkResult: Promise | null = null + + async detectNetwork(): Promise { + return this._detectNetworkResult ?? (this._detectNetworkResult = this._uncachedDetectNetwork()) + } +} + +export default function getLibrary(provider: any): Web3Provider { + const library = new WorkaroundWeb3Provider( provider, - typeof chainId === 'number' ? chainId : typeof chainId === 'string' ? parseInt(chainId) : 'any' + typeof provider.chainId === 'number' + ? provider.chainId + : typeof provider.chainId === 'string' + ? parseInt(provider.chainId) + : 'any' ) library.pollingInterval = 15000 return library