From 4be997076e99ee04c55ca44b499bd803290c9b01 Mon Sep 17 00:00:00 2001 From: Corantin Noll Date: Wed, 6 Apr 2022 11:34:42 -0400 Subject: [PATCH 1/4] Reload on network change + Fallaback to http provider when wrong chainId --- packages/react-app/src/networks.ts | 4 ++-- packages/react-app/src/utils/web3.utils.ts | 12 +++++++----- packages/react-app/template.env | 1 + 3 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 packages/react-app/template.env diff --git a/packages/react-app/src/networks.ts b/packages/react-app/src/networks.ts index 0094a965..5d148398 100644 --- a/packages/react-app/src/networks.ts +++ b/packages/react-app/src/networks.ts @@ -32,7 +32,7 @@ export const networks = { governAddress: '0xa0F5e6759d49063040eAB18c1B0E684C45a4B4cA', governQueueAddress: '0x19B918802eA9C71c500Ca481917F383f3992cDB0', celesteAddress: '0xdd58ebed3c36460939285a92807f90e3d3a26789', - httpProvider: 'https://rinkeby.infura.io/v3/', + httpProvider: 'https://rinkeby.infura.io/v3', defaultToken: TOKENS.HoneyTest, nativeToken: TOKENS.Ether, isTestNetwork: true, @@ -49,7 +49,7 @@ export const networks = { defaultEthNode: 'https://xdai.poanetwork.dev/', questFactory: HardhatDeployement[100]?.xdai.contracts.QuestFactory.address, govern: '', // TODO : When govern will be on xDai - httpProvider: 'https://xdai.poanetwork.dev/', + httpProvider: 'https://xdai.poanetwork.dev', defaultToken: TOKENS.Honey, nativeToken: TOKENS.xDAI, stableToken: TOKENS.xDAI, diff --git a/packages/react-app/src/utils/web3.utils.ts b/packages/react-app/src/utils/web3.utils.ts index aa5da1f3..a5ca51f2 100644 --- a/packages/react-app/src/utils/web3.utils.ts +++ b/packages/react-app/src/utils/web3.utils.ts @@ -11,6 +11,8 @@ import { wrapError } from './errors.util'; import { Logger } from './logger'; const DEFAULT_LOCAL_CHAIN = 'private'; +const ethOrWeb = (window as any).ethereum ?? (window as any).web3?.currentProvider; +ethOrWeb?.on('chainChanged', (_chainId: string) => window.location.reload()); export function getWeb3(): Web3 { let ethereum: any = null; @@ -158,13 +160,13 @@ export function fromBigNumber(bigNumber: BigNumber | string, decimals: number | } export function getDefaultProvider() { - const { httpProvider } = getNetwork(); - let ethOrWeb = (window as any).ethereum ?? (window as any).web3; - if (!ethOrWeb) { - ethOrWeb = new Web3.providers.HttpProvider(`${httpProvider}/${env('INFURA_API_KEY')}`); + const { httpProvider, chainId: expectedChainId } = getNetwork(); + let provider = ethOrWeb; + if (!provider || +provider.chainId !== +expectedChainId) { + provider = new Web3.providers.HttpProvider(`${httpProvider}/${env('INFURA_ID')}`); } - return ethOrWeb && new ethersUtil.providers.Web3Provider(ethOrWeb); + return provider && new ethersUtil.providers.Web3Provider(provider); } // Re-export some web3-utils functions diff --git a/packages/react-app/template.env b/packages/react-app/template.env new file mode 100644 index 00000000..90ebac96 --- /dev/null +++ b/packages/react-app/template.env @@ -0,0 +1 @@ +REACT_APP_INFURA_ID=[INFURA_ID] From a1589d2c053e2a3543451f136858f54740743c49 Mon Sep 17 00:00:00 2001 From: Corantin Noll Date: Wed, 6 Apr 2022 11:47:08 -0400 Subject: [PATCH 2/4] Update web3.utils.ts --- packages/react-app/src/utils/web3.utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-app/src/utils/web3.utils.ts b/packages/react-app/src/utils/web3.utils.ts index a5ca51f2..63858bf6 100644 --- a/packages/react-app/src/utils/web3.utils.ts +++ b/packages/react-app/src/utils/web3.utils.ts @@ -163,7 +163,7 @@ export function getDefaultProvider() { const { httpProvider, chainId: expectedChainId } = getNetwork(); let provider = ethOrWeb; if (!provider || +provider.chainId !== +expectedChainId) { - provider = new Web3.providers.HttpProvider(`${httpProvider}/${env('INFURA_ID')}`); + provider = new Web3.providers.HttpProvider(`${httpProvider}/${env('INFURA_API_KEY')}`); } return provider && new ethersUtil.providers.Web3Provider(provider); From c04155003d9e9e8dc38e06111ddc41ae8fcd474a Mon Sep 17 00:00:00 2001 From: Corantin Noll Date: Wed, 6 Apr 2022 11:49:55 -0400 Subject: [PATCH 3/4] Add env infura guard --- packages/react-app/src/utils/web3.utils.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/react-app/src/utils/web3.utils.ts b/packages/react-app/src/utils/web3.utils.ts index 63858bf6..822384bf 100644 --- a/packages/react-app/src/utils/web3.utils.ts +++ b/packages/react-app/src/utils/web3.utils.ts @@ -163,7 +163,12 @@ export function getDefaultProvider() { const { httpProvider, chainId: expectedChainId } = getNetwork(); let provider = ethOrWeb; if (!provider || +provider.chainId !== +expectedChainId) { - provider = new Web3.providers.HttpProvider(`${httpProvider}/${env('INFURA_API_KEY')}`); + const infuraId = env('INFURA_API_KEY'); + if (infuraId) { + provider = new Web3.providers.HttpProvider(`${httpProvider}/${infuraId}`); + } else { + throw new Error(`No http provider key provided in env`); + } } return provider && new ethersUtil.providers.Web3Provider(provider); From e5ce5cf445d45f08fdf4b099d3d56e36010b5e16 Mon Sep 17 00:00:00 2001 From: Corantin Noll Date: Wed, 6 Apr 2022 11:55:22 -0400 Subject: [PATCH 4/4] Update template.env --- packages/react-app/template.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-app/template.env b/packages/react-app/template.env index 90ebac96..a6bd0662 100644 --- a/packages/react-app/template.env +++ b/packages/react-app/template.env @@ -1 +1 @@ -REACT_APP_INFURA_ID=[INFURA_ID] +REACT_APP_INFURA_API_KEY=[INFURA_ID]