Skip to content

Commit ecd7175

Browse files
improve network connectivity (Uniswap#441)
1 parent 0f20788 commit ecd7175

File tree

4 files changed

+1484
-1197
lines changed

4 files changed

+1484
-1197
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"@uniswap/sdk": "^1.0.0-beta.4",
1111
"copy-to-clipboard": "^3.2.0",
1212
"escape-string-regexp": "^2.0.0",
13-
"ethers": "^4.0.33",
13+
"ethers": "^4.0.36",
1414
"i18next": "^15.0.9",
1515
"i18next-browser-languagedetector": "^3.0.1",
1616
"i18next-xhr-backend": "^2.0.1",
@@ -27,7 +27,7 @@
2727
"react-spring": "^8.0.20",
2828
"react-switch": "^5.0.1",
2929
"styled-components": "^4.2.0",
30-
"web3-react": "^5.0.4"
30+
"web3-react": "5.0.5"
3131
},
3232
"scripts": {
3333
"start": "react-scripts start",

src/NetworkOnlyConnector.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { ethers } from 'ethers'
2+
import { Connectors } from 'web3-react'
3+
4+
const { Connector } = Connectors
5+
6+
function getFallbackProvider(providerURL) {
7+
const etherscan = new ethers.providers.EtherscanProvider()
8+
const infura = new ethers.providers.JsonRpcProvider(providerURL)
9+
10+
const providers = [infura, etherscan]
11+
12+
return new ethers.providers.FallbackProvider(providers)
13+
}
14+
15+
export default class NetworkOnlyConnector extends Connector {
16+
constructor(kwargs) {
17+
const { providerURL, ...rest } = kwargs || {}
18+
super(rest)
19+
this.providerURL = providerURL
20+
}
21+
22+
async onActivation() {
23+
if (!this.engine) {
24+
const provider = getFallbackProvider(this.providerURL)
25+
provider.polling = false
26+
provider.pollingInterval = 300000 // 5 minutes
27+
this.engine = provider
28+
}
29+
}
30+
31+
async getNetworkId(provider) {
32+
const networkId = await provider.getNetwork().then(network => network.chainId)
33+
return super._validateNetworkId(networkId)
34+
}
35+
36+
async getProvider() {
37+
return this.engine
38+
}
39+
40+
async getAccount() {
41+
return null
42+
}
43+
}

src/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react'
22
import ReactDOM from 'react-dom'
33
import ReactGA from 'react-ga'
4-
import Web3Provider, { Connectors } from 'web3-react'
4+
import Web3Provider from 'web3-react'
55

66
import ThemeProvider, { GlobalStyle } from './theme'
77
import LocalStorageContextProvider, { Updater as LocalStorageContextUpdater } from './contexts/LocalStorage'
@@ -13,6 +13,7 @@ import AllowancesContextProvider from './contexts/Allowances'
1313
import AllBalancesContextProvider from './contexts/AllBalances'
1414

1515
import App from './pages/App'
16+
import NetworkOnlyConnector from './NetworkOnlyConnector'
1617
import InjectedConnector from './InjectedConnector'
1718

1819
import './i18n'
@@ -24,9 +25,8 @@ if (process.env.NODE_ENV === 'production') {
2425
}
2526
ReactGA.pageview(window.location.pathname + window.location.search)
2627

27-
const { NetworkOnlyConnector } = Connectors
28-
const Injected = new InjectedConnector({ supportedNetworks: [Number(process.env.REACT_APP_NETWORK_ID || '1')] })
2928
const Network = new NetworkOnlyConnector({ providerURL: process.env.REACT_APP_NETWORK_URL || '' })
29+
const Injected = new InjectedConnector({ supportedNetworks: [Number(process.env.REACT_APP_NETWORK_ID || '1')] })
3030
const connectors = { Injected, Network }
3131

3232
function ContextProviders({ children }) {

0 commit comments

Comments
 (0)