From fa70dd3bb66dcc1db482f11a144f60038d4784a0 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Tue, 6 Oct 2020 14:11:15 -0300 Subject: [PATCH 1/8] use parametrized network values for wallet connection --- src/components/ConnectButton/index.tsx | 9 ++++--- src/config/index.ts | 21 ++++++++------- src/logic/wallets/getWeb3.ts | 8 +++--- src/logic/wallets/utils/walletList.ts | 37 +++++++++++++++----------- src/utils/constants.ts | 36 ++++++++++++++++++++----- 5 files changed, 71 insertions(+), 40 deletions(-) diff --git a/src/components/ConnectButton/index.tsx b/src/components/ConnectButton/index.tsx index a719776f04..a520594bf8 100644 --- a/src/components/ConnectButton/index.tsx +++ b/src/components/ConnectButton/index.tsx @@ -3,15 +3,16 @@ import React from 'react' import Button from 'src/components/layout/Button' import { getNetworkId } from 'src/config' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { getWeb3, setWeb3 } from 'src/logic/wallets/getWeb3' import { fetchProvider } from 'src/logic/wallets/store/actions' import transactionDataCheck from 'src/logic/wallets/transactionDataCheck' import { getSupportedWallets } from 'src/logic/wallets/utils/walletList' import { store } from 'src/store' +import { BLOCKNATIVE_KEY } from 'src/utils/constants' -const isMainnet = process.env.REACT_APP_NETWORK === 'mainnet' - -const BLOCKNATIVE_API_KEY = isMainnet ? process.env.REACT_APP_BLOCKNATIVE_KEY : '7fbb9cee-7e97-4436-8770-8b29a9a8814c' +const networkId = getNetworkId() +const BLOCKNATIVE_API_KEY = BLOCKNATIVE_KEY[networkId] ?? BLOCKNATIVE_KEY[ETHEREUM_NETWORK.RINKEBY] let lastUsedAddress = '' let providerName @@ -20,7 +21,7 @@ const wallets = getSupportedWallets() export const onboard = Onboard({ dappId: BLOCKNATIVE_API_KEY, - networkId: getNetworkId(), + networkId: networkId, subscriptions: { wallet: (wallet) => { if (wallet.provider) { diff --git a/src/config/index.ts b/src/config/index.ts index d790d2a11b..b5a77283c9 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,12 +1,7 @@ import networks from 'src/config/networks' -import { - EnvironmentSettings, - ETHEREUM_NETWORK, - NetworkSettings, - SafeFeatures, -} from 'src/config/networks/network.d' +import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkSettings, SafeFeatures } from 'src/config/networks/network.d' import { checksumAddress } from 'src/utils/checksumAddress' -import { GOOGLE_ANALYTICS_ID, NETWORK, APP_ENV, NODE_ENV, ETHERSCAN_API_KEY } from 'src/utils/constants' +import { APP_ENV, ETHERSCAN_API_KEY, GOOGLE_ANALYTICS_ID, INFURA_TOKEN, NETWORK, NODE_ENV } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' import memoize from 'lodash.memoize' @@ -67,7 +62,15 @@ export const getRelayUrl = (): string | undefined => getConfig()?.relayApiUrl export const getGnosisSafeAppsUrl = (): string => getConfig()?.safeAppsUrl -export const getRpcServiceUrl = (): string => getConfig()?.rpcServiceUrl +export const getRpcServiceUrl = (): string => { + const usesInfuraRPC = [ETHEREUM_NETWORK.MAINNET, ETHEREUM_NETWORK.RINKEBY].includes(getNetworkId()) + + if (usesInfuraRPC) { + return getConfig()?.rpcServiceUrl + INFURA_TOKEN + } + + return getConfig()?.rpcServiceUrl +} export const getNetworkExplorerInfo = (): { name: string; url: string; apiUrl: string } => ({ name: getConfig()?.networkExplorerName, @@ -87,7 +90,7 @@ export const getAllTransactionsUriFrom = (safeAddress: string) => `safes/${safeA export const getSafeCreationTxUri = (safeAddress: string) => `safes/${safeAddress}/creation/` -export const getGoogleAnalyticsTrackingID = (): string => GOOGLE_ANALYTICS_ID[getNetworkName()] +export const getGoogleAnalyticsTrackingID = (): string => GOOGLE_ANALYTICS_ID[getNetworkId()] export const buildSafeCreationTxUrl = (safeAddress: string) => { const host = getTxServiceUrl() diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index 0b303d660e..07e1de94bf 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -4,10 +4,10 @@ import { ContentHash } from 'web3-eth-ens' import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' -import { NETWORK } from 'src/utils/constants' import { sameAddress } from './ethAddresses' import { EMPTY_DATA } from './ethTransactions' import { ProviderProps } from './store/model/provider' +import { NODE_ENV, NETWORK, INFURA_TOKEN } from 'src/utils/constants' export const WALLET_PROVIDER = { SAFE: 'SAFE', @@ -55,9 +55,7 @@ export const getExplorerLink = (type: ExplorerTypes, value: string): string => { } export const getInfuraUrl = (network: ETHEREUM_NETWORK): string => - `https://${network === ETHEREUM_NETWORK.MAINNET ? 'mainnet' : 'rinkeby'}.infura.io:443/v3/${ - process.env.REACT_APP_INFURA_TOKEN - }` + `https://${ETHEREUM_NETWORK[network].toLowerCase()}.infura.io:443/v3/${INFURA_TOKEN}` export const getRPCUrl = (network: ETHEREUM_NETWORK): string => { switch (network) { @@ -92,7 +90,7 @@ export const resetWeb3 = (): void => { export const getAccountFrom = async (web3Provider: Web3): Promise => { const accounts = await web3Provider.eth.getAccounts() - if (process.env.NODE_ENV === 'test' && window.testAccountIndex) { + if (NODE_ENV === 'test' && window.testAccountIndex) { return accounts[window.testAccountIndex] } diff --git a/src/logic/wallets/utils/walletList.ts b/src/logic/wallets/utils/walletList.ts index 8fcf755c3e..1939a1c3d8 100644 --- a/src/logic/wallets/utils/walletList.ts +++ b/src/logic/wallets/utils/walletList.ts @@ -1,22 +1,25 @@ -import { getInfuraUrl, getRPCUrl } from '../getWeb3' -import { getNetworkId } from 'src/config' +import { WalletInitOptions } from 'bnc-onboard/dist/src/interfaces' -const isMainnet = process.env.REACT_APP_NETWORK === 'mainnet' +import { getNetworkId, getRpcServiceUrl } from 'src/config' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' +import { FORTMATIC_KEY, PORTIS_ID } from 'src/utils/constants' -const PORTIS_DAPP_ID = isMainnet ? process.env.REACT_APP_PORTIS_ID : '852b763d-f28b-4463-80cb-846d7ec5806b' -// const SQUARELINK_CLIENT_ID = isMainnet ? process.env.REACT_APP_SQUARELINK_ID : '46ce08fe50913cfa1b78' -const FORTMATIC_API_KEY = isMainnet ? process.env.REACT_APP_FORTMATIC_KEY : 'pk_test_CAD437AA29BE0A40' +const networkId = getNetworkId() +const PORTIS_DAPP_ID = PORTIS_ID[networkId] ?? PORTIS_ID[ETHEREUM_NETWORK.RINKEBY] +const FORTMATIC_API_KEY = FORTMATIC_KEY[networkId] ?? FORTMATIC_KEY[ETHEREUM_NETWORK.RINKEBY] -const network = getNetworkId() -const infuraUrl = getInfuraUrl(network) +type Wallet = WalletInitOptions & { + desktop: boolean +} -const wallets = [ +const rpcUrl = getRpcServiceUrl() +const wallets: Wallet[] = [ { walletName: 'metamask', preferred: true, desktop: false }, { walletName: 'walletConnect', preferred: true, - infuraKey: process.env.REACT_APP_INFURA_TOKEN, - rpc: { [network]: getRPCUrl(network) }, + // as stated in the documentation, `infuraKey` is not mandatory if rpc is provided + rpc: { [networkId]: rpcUrl }, desktop: true, bridge: 'https://safe-walletconnect.gnosis.io/', }, @@ -26,13 +29,13 @@ const wallets = [ preferred: true, email: 'safe@gnosis.io', desktop: true, - rpcUrl: infuraUrl, + rpcUrl, }, { walletName: 'ledger', desktop: true, preferred: true, - rpcUrl: infuraUrl, + rpcUrl, LedgerTransport: (window as any).TransportNodeHid, }, { walletName: 'trust', preferred: true, desktop: false }, @@ -51,16 +54,18 @@ const wallets = [ { walletName: 'torus', desktop: true }, { walletName: 'unilogin', desktop: true }, { walletName: 'coinbase', desktop: false }, - { walletName: 'walletLink', rpcUrl: infuraUrl, desktop: false }, + { walletName: 'walletLink', rpcUrl, desktop: false }, { walletName: 'opera', desktop: false }, { walletName: 'operaTouch', desktop: false }, ] -export const getSupportedWallets = () => { +export const getSupportedWallets = (): WalletInitOptions[] => { const { isDesktop } = window as any /* eslint-disable no-unused-vars */ - if (isDesktop) return wallets.filter((wallet) => wallet.desktop).map(({ desktop, ...rest }) => rest) + if (isDesktop) { + return wallets.filter((wallet) => wallet.desktop).map(({ desktop, ...rest }) => rest) + } return wallets.map(({ desktop, ...rest }) => rest) } diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 44fb98ee27..cb56ff7b04 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1,14 +1,37 @@ +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' + export const APP_ENV = process.env.REACT_APP_ENV export const NODE_ENV = process.env.NODE_ENV export const NETWORK = process.env.REACT_APP_NETWORK?.toUpperCase() || 'RINKEBY' +export const INTERCOM_ID = APP_ENV === 'production' ? process.env.REACT_APP_INTERCOM_ID : 'plssl1fl' export const GOOGLE_ANALYTICS_ID = { - RINKEBY: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY, - MAINNET: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET, + [ETHEREUM_NETWORK.RINKEBY]: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY, + [ETHEREUM_NETWORK.MAINNET]: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET, + [ETHEREUM_NETWORK.XDAI]: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_XDAI, } -export const INTERCOM_ID = process.env.REACT_APP_ENV === 'production' ? process.env.REACT_APP_INTERCOM_ID : 'plssl1fl' -export const PORTIS_ID = process.env.REACT_APP_PORTIS_ID -export const SQUARELINK_ID = process.env.REACT_APP_SQUARELINK_ID -export const FORTMATIC_KEY = process.env.REACT_APP_FORTMATIC_KEY +export const PORTIS_ID = { + [ETHEREUM_NETWORK.RINKEBY]: '852b763d-f28b-4463-80cb-846d7ec5806b', + [ETHEREUM_NETWORK.MAINNET]: process.env.REACT_APP_PORTIS_ID, + [ETHEREUM_NETWORK.XDAI]: process.env.REACT_APP_PORTIS_ID, +} +export const FORTMATIC_KEY = { + [ETHEREUM_NETWORK.RINKEBY]: 'pk_test_CAD437AA29BE0A40', + [ETHEREUM_NETWORK.MAINNET]: process.env.REACT_APP_FORTMATIC_KEY, + [ETHEREUM_NETWORK.XDAI]: process.env.REACT_APP_FORTMATIC_KEY, +} +export const BLOCKNATIVE_KEY = { + [ETHEREUM_NETWORK.RINKEBY]: '7fbb9cee-7e97-4436-8770-8b29a9a8814c', + [ETHEREUM_NETWORK.MAINNET]: process.env.REACT_APP_BLOCKNATIVE_KEY, + [ETHEREUM_NETWORK.XDAI]: process.env.REACT_APP_BLOCKNATIVE_KEY, +} +/* + * Not being used +export const SQUARELINK_ID = { + [ETHEREUM_NETWORK.RINKEBY]: '46ce08fe50913cfa1b78', + [ETHEREUM_NETWORK.MAINNET]: process.env.REACT_APP_SQUARELINK_ID, + [ETHEREUM_NETWORK.XDAI]: process.env.REACT_APP_SQUARELINK_ID, +} + */ export const INFURA_TOKEN = process.env.REACT_APP_INFURA_TOKEN || '' export const LATEST_SAFE_VERSION = process.env.REACT_APP_LATEST_SAFE_VERSION || '1.1.1' export const APP_VERSION = process.env.REACT_APP_APP_VERSION || 'not-defined' @@ -18,3 +41,4 @@ export const TIMEOUT = process.env.NODE_ENV === 'test' ? 1500 : 5000 export const ETHERSCAN_API_KEY = process.env.REACT_APP_ETHERSCAN_API_KEY export const EXCHANGE_RATE_URL = 'https://api.exchangeratesapi.io/latest' export const EXCHANGE_RATE_URL_FALLBACK = 'https://api.coinbase.com/v2/exchange-rates' +export const IPFS_GATEWAY = process.env.REACT_APP_IPFS_GATEWAY From 29d3b2ca3211d4d0252d61616bdab5206b6356b9 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Tue, 6 Oct 2020 21:55:43 -0300 Subject: [PATCH 2/8] use mainnet contract address as a fallback if network is not defined in the truffle artifact - also migrated safeMaster contract instance from truffle-contract to web3 --- src/logic/contracts/safeContracts.ts | 81 +++++++++---------- src/logic/safe/utils/safeVersion.ts | 2 +- .../load/components/DetailsForm/index.tsx | 2 +- src/routes/open/container/Open.tsx | 7 +- src/test/builder/safe.redux.builder.ts | 4 +- 5 files changed, 45 insertions(+), 51 deletions(-) diff --git a/src/logic/contracts/safeContracts.ts b/src/logic/contracts/safeContracts.ts index 68d971f92b..c25b9941a3 100644 --- a/src/logic/contracts/safeContracts.ts +++ b/src/logic/contracts/safeContracts.ts @@ -1,17 +1,17 @@ -import { AbiItem } from 'web3-utils' -import contract from 'truffle-contract' -import Web3 from 'web3' -import ProxyFactorySol from '@gnosis.pm/safe-contracts/build/contracts/GnosisSafeProxyFactory.json' import GnosisSafeSol from '@gnosis.pm/safe-contracts/build/contracts/GnosisSafe.json' import SafeProxy from '@gnosis.pm/safe-contracts/build/contracts/GnosisSafeProxy.json' -import { ensureOnce } from 'src/utils/singleton' +import ProxyFactorySol from '@gnosis.pm/safe-contracts/build/contracts/GnosisSafeProxyFactory.json' import memoize from 'lodash.memoize' -import { getWeb3, getNetworkIdFrom } from 'src/logic/wallets/getWeb3' -import { calculateGasOf, calculateGasPrice } from 'src/logic/wallets/ethTransactions' -import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses' + +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { isProxyCode } from 'src/logic/contracts/historicProxyCode' -import { GnosisSafeProxyFactory } from 'src/types/contracts/GnosisSafeProxyFactory.d'; +import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses' +import { calculateGasOf, calculateGasPrice } from 'src/logic/wallets/ethTransactions' +import { getWeb3, getNetworkIdFrom } from 'src/logic/wallets/getWeb3' import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d' +import { GnosisSafeProxyFactory } from 'src/types/contracts/GnosisSafeProxyFactory.d' +import Web3 from 'web3' +import { AbiItem } from 'web3-utils' export const SENTINEL_ADDRESS = '0x0000000000000000000000000000000000000001' export const MULTI_SEND_ADDRESS = '0x8d29be29923b68abfdd21e541b9374737b49cdad' @@ -20,24 +20,33 @@ export const DEFAULT_FALLBACK_HANDLER_ADDRESS = '0xd5D82B6aDDc9027B22dCA772Aa68D export const SAFE_MASTER_COPY_ADDRESS_V10 = '0xb6029EA3B2c51D09a50B53CA8012FeEB05bDa35A' -let proxyFactoryMaster -let safeMaster - -const createGnosisSafeContract = (web3: Web3) => { - const gnosisSafe = contract(GnosisSafeSol) - gnosisSafe.setProvider(web3.currentProvider) +let proxyFactoryMaster: GnosisSafeProxyFactory +let safeMaster: GnosisSafe - return gnosisSafe +/** + * Creates a Contract instance of the GnosisSafe contract + * @param {Web3} web3 + * @param {ETHEREUM_NETWORK} networkId + */ +const createGnosisSafeContract = (web3: Web3, networkId: ETHEREUM_NETWORK) => { + const networks = GnosisSafeSol.networks + const contractAddress = networks[networkId]?.address ?? networks[ETHEREUM_NETWORK.MAINNET].address + return new web3.eth.Contract(GnosisSafeSol.abi as AbiItem[], contractAddress) as unknown as GnosisSafe } -const createProxyFactoryContract = (web3: Web3, networkId: number): GnosisSafeProxyFactory => { - const contractAddress = ProxyFactorySol.networks[networkId].address - const proxyFactory = new web3.eth.Contract(ProxyFactorySol.abi as AbiItem[], contractAddress) as unknown as GnosisSafeProxyFactory - - return proxyFactory +/** + * Creates a Contract instance of the GnosisSafeProxyFactory contract + * @param {Web3} web3 + * @param {ETHEREUM_NETWORK} networkId + */ +const createProxyFactoryContract = (web3: Web3, networkId: ETHEREUM_NETWORK): GnosisSafeProxyFactory => { + const networks = ProxyFactorySol.networks + const contractAddress = networks[networkId]?.address ?? networks[ETHEREUM_NETWORK.MAINNET].address + return new web3.eth.Contract(ProxyFactorySol.abi as AbiItem[], contractAddress) as unknown as GnosisSafeProxyFactory } export const getGnosisSafeContract = memoize(createGnosisSafeContract) + const getCreateProxyFactoryContract = memoize(createProxyFactoryContract) const instantiateMasterCopies = async () => { @@ -47,25 +56,11 @@ const instantiateMasterCopies = async () => { // Create ProxyFactory Master Copy proxyFactoryMaster = getCreateProxyFactoryContract(web3, networkId) - // Initialize Safe master copy - const GnosisSafe = getGnosisSafeContract(web3) - safeMaster = await GnosisSafe.deployed() -} - -// ONLY USED IN TEST ENVIRONMENT -const createMasterCopies = async () => { - const web3 = getWeb3() - const accounts = await web3.eth.getAccounts() - const userAccount = accounts[0] - - const ProxyFactory = getCreateProxyFactoryContract(web3, 4441) - proxyFactoryMaster = await ProxyFactory.deploy({ data: GnosisSafeSol.bytecode }).send({ from: userAccount, gas: 5000000 }) - - const GnosisSafe = getGnosisSafeContract(web3) - safeMaster = await GnosisSafe.new({ from: userAccount, gas: '7000000' }) + // Create Safe Master copy + safeMaster = getGnosisSafeContract(web3, networkId) } -export const initContracts = process.env.NODE_ENV === 'test' ? ensureOnce(createMasterCopies) : instantiateMasterCopies +export const initContracts = instantiateMasterCopies export const getSafeMasterContract = async () => { await initContracts() @@ -74,11 +69,11 @@ export const getSafeMasterContract = async () => { } export const getSafeDeploymentTransaction = (safeAccounts, numConfirmations) => { - const gnosisSafeData = safeMaster.contract.methods + const gnosisSafeData = safeMaster.methods .setup(safeAccounts, numConfirmations, ZERO_ADDRESS, '0x', DEFAULT_FALLBACK_HANDLER_ADDRESS, ZERO_ADDRESS, 0, ZERO_ADDRESS) .encodeABI() - return proxyFactoryMaster.methods.createProxy(safeMaster.address, gnosisSafeData) + return proxyFactoryMaster.methods.createProxy(safeMaster.options.address, gnosisSafeData) } export const estimateGasForDeployingSafe = async ( @@ -86,13 +81,13 @@ export const estimateGasForDeployingSafe = async ( numConfirmations, userAccount, ) => { - const gnosisSafeData = await safeMaster.contract.methods + const gnosisSafeData = await safeMaster.methods .setup(safeAccounts, numConfirmations, ZERO_ADDRESS, '0x', DEFAULT_FALLBACK_HANDLER_ADDRESS, ZERO_ADDRESS, 0, ZERO_ADDRESS) .encodeABI() const proxyFactoryData = proxyFactoryMaster.methods - .createProxy(safeMaster.address, gnosisSafeData) + .createProxy(safeMaster.options.address, gnosisSafeData) .encodeABI() - const gas = await calculateGasOf(proxyFactoryData, userAccount, proxyFactoryMaster.address) + const gas = await calculateGasOf(proxyFactoryData, userAccount, proxyFactoryMaster.options.address) const gasPrice = await calculateGasPrice() return gas * parseInt(gasPrice, 10) diff --git a/src/logic/safe/utils/safeVersion.ts b/src/logic/safe/utils/safeVersion.ts index 25618a557b..de6fc60b03 100644 --- a/src/logic/safe/utils/safeVersion.ts +++ b/src/logic/safe/utils/safeVersion.ts @@ -60,7 +60,7 @@ export const getCurrentMasterContractLastVersion = async (): Promise => const safeMaster = await getSafeMasterContract() let safeMasterVersion try { - safeMasterVersion = await safeMaster.VERSION() + safeMasterVersion = await safeMaster.methods.VERSION().call() } catch (err) { // Default in case that it's not possible to obtain the version from the contract, returns a hardcoded value or an // env variable diff --git a/src/routes/load/components/DetailsForm/index.tsx b/src/routes/load/components/DetailsForm/index.tsx index 66a198b994..1524f9e122 100644 --- a/src/routes/load/components/DetailsForm/index.tsx +++ b/src/routes/load/components/DetailsForm/index.tsx @@ -73,7 +73,7 @@ export const safeFieldsValidation = async (values): Promise { const deploymentTx = getSafeDeploymentTransaction(ownerAddresses, confirmations) - const promiEvent = deploymentTx.send({ from: userAccount, value: 0 }) + const promiEvent = deploymentTx.send({ from: userAccount }) promiEvent .once('transactionHash', (txHash) => { @@ -68,7 +69,7 @@ export const createSafe = (values, userAccount) => { }) .then(async (receipt) => { await checkReceiptStatus(receipt.transactionHash) - const safeAddress = receipt.events.ProxyCreation.returnValues.proxy + const safeAddress = receipt.events?.ProxyCreation.returnValues.proxy const safeProps = await getSafeProps(safeAddress, name, ownersNames, ownerAddresses) // returning info for testing purposes, in app is fully async return { safeAddress: safeProps.address, safeTx: receipt } @@ -83,7 +84,7 @@ export const createSafe = (values, userAccount) => { const Open = (): React.ReactElement => { const [loading, setLoading] = useState(false) const [showProgress, setShowProgress] = useState(false) - const [creationTxPromise, setCreationTxPromise] = useState() + const [creationTxPromise, setCreationTxPromise] = useState>() const [safeCreationPendingInfo, setSafeCreationPendingInfo] = useState() const [safePropsFromUrl, setSafePropsFromUrl] = useState() const userAccount = useSelector(userAccountSelector) diff --git a/src/test/builder/safe.redux.builder.ts b/src/test/builder/safe.redux.builder.ts index cf6f297ba6..8a44555ae7 100644 --- a/src/test/builder/safe.redux.builder.ts +++ b/src/test/builder/safe.redux.builder.ts @@ -89,9 +89,7 @@ export const aMinedSafe = async ( form[getOwnerAddressBy(i)] = accounts[i] } - const openSafeProps = await createSafe(form, accounts[0]) - - return openSafeProps.safeAddress + return createSafe(form, accounts[0]).then((receipt) => receipt.events?.ProxyCreation.returnValues.proxy) } export default aSafe From 32f353cb2d54f88b563d5923c2640a5ee0321f76 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Wed, 7 Oct 2020 11:41:57 -0300 Subject: [PATCH 3/8] comment the reasons of using MAINNET network address --- src/logic/contracts/safeContracts.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/logic/contracts/safeContracts.ts b/src/logic/contracts/safeContracts.ts index c25b9941a3..5d1aa9086f 100644 --- a/src/logic/contracts/safeContracts.ts +++ b/src/logic/contracts/safeContracts.ts @@ -30,6 +30,9 @@ let safeMaster: GnosisSafe */ const createGnosisSafeContract = (web3: Web3, networkId: ETHEREUM_NETWORK) => { const networks = GnosisSafeSol.networks + // TODO: this may not be the most scalable approach, + // but up until v1.2.0 the address is the same for all the networks. + // So, if we can't find the network in the Contract artifact, we fallback to MAINNET. const contractAddress = networks[networkId]?.address ?? networks[ETHEREUM_NETWORK.MAINNET].address return new web3.eth.Contract(GnosisSafeSol.abi as AbiItem[], contractAddress) as unknown as GnosisSafe } @@ -41,6 +44,9 @@ const createGnosisSafeContract = (web3: Web3, networkId: ETHEREUM_NETWORK) => { */ const createProxyFactoryContract = (web3: Web3, networkId: ETHEREUM_NETWORK): GnosisSafeProxyFactory => { const networks = ProxyFactorySol.networks + // TODO: this may not be the most scalable approach, + // but up until v1.2.0 the address is the same for all the networks. + // So, if we can't find the network in the Contract artifact, we fallback to MAINNET. const contractAddress = networks[networkId]?.address ?? networks[ETHEREUM_NETWORK.MAINNET].address return new web3.eth.Contract(ProxyFactorySol.abi as AbiItem[], contractAddress) as unknown as GnosisSafeProxyFactory } From a79bf1600600001464e09b4d5461073612d95af3 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Wed, 7 Oct 2020 13:55:42 -0300 Subject: [PATCH 4/8] replace `getExplorerLink` with the config-based `getExplorerInfo` function --- src/components/AddressInfo/index.tsx | 3 +- src/components/App/ReceiveModal.tsx | 3 +- src/components/EtherscanBtn/index.tsx | 15 +++--- src/components/EtherscanLink/index.tsx | 6 +-- src/logic/wallets/getWeb3.ts | 28 ----------- .../load/components/OwnerList/index.tsx | 3 +- .../components/ReviewInformation/index.tsx | 5 +- .../components/ReviewInformation/index.tsx | 4 +- src/routes/opening/components/Footer.tsx | 46 +++++++++++-------- .../ReviewCustomTx/index.tsx | 4 +- .../SendCustomTx/index.tsx | 3 +- .../screens/ReviewCollectible/index.tsx | 4 +- .../SendModal/screens/ReviewTx/index.tsx | 4 +- .../screens/SendCollectible/index.tsx | 3 +- .../SendModal/screens/SendFunds/index.tsx | 3 +- .../Settings/Advanced/RemoveModuleModal.tsx | 11 ++--- .../AddOwnerModal/screens/Review/index.tsx | 6 +-- .../ManageOwners/EditOwnerModal/index.tsx | 3 +- .../OwnerAddressTableCell/index.tsx | 3 +- .../screens/CheckOwner/index.tsx | 3 +- .../RemoveOwnerModal/screens/Review/index.tsx | 6 +-- .../screens/OwnerForm/index.tsx | 3 +- .../screens/Review/index.tsx | 8 ++-- .../Settings/RemoveSafeModal/index.tsx | 7 +-- .../IncomingTxDescription/index.tsx | 3 +- .../TxDescription/SettingsDescription.tsx | 9 ++-- .../TxDescription/TransferDescription.tsx | 3 +- 27 files changed, 79 insertions(+), 120 deletions(-) diff --git a/src/components/AddressInfo/index.tsx b/src/components/AddressInfo/index.tsx index 44aba892f9..99f94a0903 100644 --- a/src/components/AddressInfo/index.tsx +++ b/src/components/AddressInfo/index.tsx @@ -6,7 +6,6 @@ import Identicon from 'src/components/Identicon' import Block from 'src/components/layout/Block' import Bold from 'src/components/layout/Bold' import Paragraph from 'src/components/layout/Paragraph' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import { border, xs } from 'src/theme/variables' import styled from 'styled-components' @@ -60,7 +59,7 @@ const AddressInfo = ({ ethBalance, safeAddress, safeName }: Props): React.ReactE {safeAddress} - + {ethBalance && ( diff --git a/src/components/App/ReceiveModal.tsx b/src/components/App/ReceiveModal.tsx index 6aa6c4d575..6281a4b43f 100644 --- a/src/components/App/ReceiveModal.tsx +++ b/src/components/App/ReceiveModal.tsx @@ -13,7 +13,6 @@ import Col from 'src/components/layout/Col' import Hairline from 'src/components/layout/Hairline' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import { lg, md, screenSm, secondaryText, sm } from 'src/theme/variables' import { copyToClipboard } from 'src/utils/clipboard' @@ -116,7 +115,7 @@ const ReceiveModal = ({ onClose, safeAddress, safeName }: Props) => { {safeAddress} - + diff --git a/src/components/EtherscanBtn/index.tsx b/src/components/EtherscanBtn/index.tsx index 294e8473b0..f760948943 100644 --- a/src/components/EtherscanBtn/index.tsx +++ b/src/components/EtherscanBtn/index.tsx @@ -6,8 +6,8 @@ import React from 'react' import EtherscanOpenIcon from './img/etherscan-open.svg' import Img from 'src/components/layout/Img' -import { ExplorerTypes, getExplorerLink } from 'src/logic/wallets/getWeb3' import { xs } from 'src/theme/variables' +import { getExplorerInfo } from 'src/config' const useStyles = makeStyles({ container: { @@ -30,26 +30,23 @@ const useStyles = makeStyles({ interface EtherscanBtnProps { className?: string increaseZindex?: boolean - type: ExplorerTypes value: string } -const EtherscanBtn = ({ - className = '', - increaseZindex = false, - type, - value, -}: EtherscanBtnProps): React.ReactElement => { +const EtherscanBtn = ({ className = '', increaseZindex = false, value }: EtherscanBtnProps): React.ReactElement => { const classes = useStyles() const customClasses = increaseZindex ? { popper: classes.increasedPopperZindex } : {} + const explorerInfo = getExplorerInfo(value) + const { url } = explorerInfo() + return ( event.stopPropagation()} - href={getExplorerLink(type, value)} + href={url} rel="noopener noreferrer" target="_blank" > diff --git a/src/components/EtherscanLink/index.tsx b/src/components/EtherscanLink/index.tsx index 59585b9ee7..e37beeefea 100644 --- a/src/components/EtherscanLink/index.tsx +++ b/src/components/EtherscanLink/index.tsx @@ -1,7 +1,6 @@ import { makeStyles } from '@material-ui/core/styles' import cn from 'classnames' import React from 'react' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import { styles } from './style' @@ -18,11 +17,10 @@ interface EtherscanLinkProps { className?: string cut?: number knownAddress?: boolean - type: ExplorerTypes value: string } -const EtherscanLink = ({ className, cut, knownAddress, type, value }: EtherscanLinkProps): React.ReactElement => { +const EtherscanLink = ({ className, cut, knownAddress, value }: EtherscanLinkProps): React.ReactElement => { const classes = useStyles() return ( @@ -31,7 +29,7 @@ const EtherscanLink = ({ className, cut, knownAddress, type, value }: EtherscanL {cut ? shortVersionOf(value, cut) : value} - + {knownAddress !== undefined ? : null} ) diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index 07e1de94bf..a9bf4e158f 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -2,7 +2,6 @@ import Web3 from 'web3' import { provider as Provider } from 'web3-core' import { ContentHash } from 'web3-eth-ens' -import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { sameAddress } from './ethAddresses' import { EMPTY_DATA } from './ethTransactions' @@ -27,33 +26,6 @@ export const WALLET_PROVIDER = { TREZOR: 'TREZOR', } -export enum ExplorerTypes { - Tx = 'tx', - Address = 'address', -} - -export const getEtherScanLink = (network: ETHEREUM_NETWORK, type: ExplorerTypes, value: string): string => - `https://${ - network === ETHEREUM_NETWORK.MAINNET ? '' : `${ETHEREUM_NETWORK[network].toLowerCase()}.` - }etherscan.io/${type}/${value}` - -export const getExplorerLink = (type: ExplorerTypes, value: string): string => { - const network = getNetworkId() - - switch (network) { - case ETHEREUM_NETWORK.MAINNET: - return getEtherScanLink(ETHEREUM_NETWORK.MAINNET, type, value) - case ETHEREUM_NETWORK.RINKEBY: - return getEtherScanLink(ETHEREUM_NETWORK.RINKEBY, type, value) - case ETHEREUM_NETWORK.ENERGY_WEB_CHAIN: - return `https://explorer.energyweb.org/${type}/${value}` - case ETHEREUM_NETWORK.VOLTA: - return `https://volta-explorer.energyweb.org/${type}/${value}` - default: - return getEtherScanLink(network, type, value) - } -} - export const getInfuraUrl = (network: ETHEREUM_NETWORK): string => `https://${ETHEREUM_NETWORK[network].toLowerCase()}.infura.io:443/v3/${INFURA_TOKEN}` diff --git a/src/routes/load/components/OwnerList/index.tsx b/src/routes/load/components/OwnerList/index.tsx index a7919100b1..ab34fa7dd8 100644 --- a/src/routes/load/components/OwnerList/index.tsx +++ b/src/routes/load/components/OwnerList/index.tsx @@ -21,7 +21,6 @@ import { addressBookSelector } from 'src/logic/addressBook/store/selectors' import { formatAddressListToAddressBookNames } from 'src/logic/addressBook/utils' import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import { FIELD_LOAD_ADDRESS, THRESHOLD } from 'src/routes/load/components/fields' import { getOwnerAddressBy, getOwnerNameBy } from 'src/routes/open/components/fields' import { styles } from './styles' @@ -113,7 +112,7 @@ const OwnerListComponent = (props) => { {address} - + diff --git a/src/routes/load/components/ReviewInformation/index.tsx b/src/routes/load/components/ReviewInformation/index.tsx index 7c728bcf04..2c5ba0759a 100644 --- a/src/routes/load/components/ReviewInformation/index.tsx +++ b/src/routes/load/components/ReviewInformation/index.tsx @@ -12,7 +12,6 @@ import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' import OpenPaper from 'src/components/Stepper/OpenPaper' import { shortVersionOf } from 'src/logic/wallets/ethAddresses' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import { FIELD_LOAD_ADDRESS, FIELD_LOAD_NAME, THRESHOLD } from 'src/routes/load/components/fields' import { getNumOwnersFrom, getOwnerAddressBy, getOwnerNameBy } from 'src/routes/open/components/fields' import { getAccountsFrom } from 'src/routes/open/utils/safeDataExtractor' @@ -77,7 +76,7 @@ const ReviewComponent = ({ userAddress, values }: Props): React.ReactElement => {shortVersionOf(safeAddress, 4)} - + @@ -122,7 +121,7 @@ const ReviewComponent = ({ userAddress, values }: Props): React.ReactElement => {address} - + diff --git a/src/routes/open/components/ReviewInformation/index.tsx b/src/routes/open/components/ReviewInformation/index.tsx index f76792b79b..2ed3dff91e 100644 --- a/src/routes/open/components/ReviewInformation/index.tsx +++ b/src/routes/open/components/ReviewInformation/index.tsx @@ -13,7 +13,7 @@ import Row from 'src/components/layout/Row' import OpenPaper from 'src/components/Stepper/OpenPaper' import { estimateGasForDeployingSafe } from 'src/logic/contracts/safeContracts' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { ExplorerTypes, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { getAccountsFrom, getNamesFrom } from 'src/routes/open/utils/safeDataExtractor' import { FIELD_CONFIRMATIONS, FIELD_NAME, getNumOwnersFrom } from '../fields' @@ -118,7 +118,7 @@ const ReviewComponent = ({ userAccount, values }: ReviewComponentProps) => { {addresses[index]} - + diff --git a/src/routes/opening/components/Footer.tsx b/src/routes/opening/components/Footer.tsx index bd531c1edb..01e6560bc3 100644 --- a/src/routes/opening/components/Footer.tsx +++ b/src/routes/opening/components/Footer.tsx @@ -2,10 +2,10 @@ import React, { SyntheticEvent } from 'react' import styled from 'styled-components' import Button from 'src/components/layout/Button' -import { getExplorerLink, ExplorerTypes } from 'src/logic/wallets/getWeb3' import { connected } from 'src/theme/variables' +import { getExplorerInfo } from 'src/config' -const EtherScanLink = styled.a` +const ExplorerLink = styled.a` color: ${connected}; ` @@ -13,24 +13,30 @@ const ButtonWithMargin = styled(Button)` margin-right: 16px; ` -export const GenericFooter = ({ safeCreationTxHash }: { safeCreationTxHash: string }) => ( - -

This process should take a couple of minutes.

-

- Follow the progress on{' '} - - Etherscan.io - - . -

-
-) +export const GenericFooter = ({ safeCreationTxHash }: { safeCreationTxHash: string }) => { + const explorerInfo = getExplorerInfo(safeCreationTxHash) + const { url, alt } = explorerInfo() + const [, explorerDomain] = /(http|https):\/\/(\w+\.\w+)\/.*/i.exec(url) ?? [] + + return ( + +

This process should take a couple of minutes.

+

+ Follow the progress on{' '} + + {explorerDomain} + + . +

+
+ ) +} export const ContinueFooter = ({ continueButtonDisabled, diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx index 4b8129ee4b..4b6ffa401e 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx @@ -20,7 +20,7 @@ import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers' -import { ExplorerTypes, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { sm } from 'src/theme/variables' @@ -122,7 +122,7 @@ const ReviewCustomTx = ({ onClose, onPrev, tx }: Props): React.ReactElement => { {tx.contractAddress} - + diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx index e53bca0d60..2599f4f358 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/SendCustomTx/index.tsx @@ -25,7 +25,6 @@ import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' import ScanQRModal from 'src/components/ScanQRModal' import { safeSelector } from 'src/logic/safe/store/selectors' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import AddressBookInput from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' import { sm } from 'src/theme/variables' @@ -178,7 +177,7 @@ const SendCustomTx: React.FC = ({ initialValues, onClose, onNext, contrac - + diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx index b9783e58a3..7a77be83b8 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx @@ -27,7 +27,7 @@ import { } from 'src/logic/tokens/store/actions/fetchTokens' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH } from 'src/logic/tokens/utils/tokenHelpers' -import { ExplorerTypes, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { sm } from 'src/theme/variables' @@ -135,7 +135,7 @@ const ReviewCollectible = ({ closeSnackbar, enqueueSnackbar, onClose, onPrev, tx {tx.recipientAddress} - + diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx index 0fe167da22..f9e1ff3035 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx @@ -24,7 +24,7 @@ import { getHumanFriendlyToken } from 'src/logic/tokens/store/actions/fetchToken import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { ETH_ADDRESS } from 'src/logic/tokens/utils/tokenHelpers' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { ExplorerTypes, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { extendedSafeTokensSelector } from 'src/routes/safe/container/selector' @@ -149,7 +149,7 @@ const ReviewTx = ({ closeSnackbar, enqueueSnackbar, onClose, onPrev, tx }) => { {tx.recipientAddress} - + diff --git a/src/routes/safe/components/Balances/SendModal/screens/SendCollectible/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/SendCollectible/index.tsx index 22ca6d03ca..833f4e9956 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/SendCollectible/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/SendCollectible/index.tsx @@ -19,7 +19,6 @@ import WhenFieldChanges from 'src/components/WhenFieldChanges' import { addressBookSelector } from 'src/logic/addressBook/store/selectors' import { getNameFromAddressBook } from 'src/logic/addressBook/utils' import { nftTokensSelector, safeActiveSelectorMap } from 'src/logic/collectibles/store/selectors' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import AddressBookInput from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' import CollectibleSelectField from 'src/routes/safe/components/Balances/SendModal/screens/SendCollectible/CollectibleSelectField' @@ -172,7 +171,7 @@ const SendCollectible = ({ - + diff --git a/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.tsx index 4d1ea8e3b1..8ccd275e05 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/SendFunds/index.tsx @@ -23,7 +23,6 @@ import Row from 'src/components/layout/Row' import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' import { addressBookSelector } from 'src/logic/addressBook/store/selectors' import { getNameFromAddressBook } from 'src/logic/addressBook/utils' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import AddressBookInput from 'src/routes/safe/components/Balances/SendModal/screens/AddressBookInput' @@ -185,7 +184,7 @@ const SendFunds = ({ - + diff --git a/src/routes/safe/components/Settings/Advanced/RemoveModuleModal.tsx b/src/routes/safe/components/Settings/Advanced/RemoveModuleModal.tsx index 9b33f83324..cfe23ac0fa 100644 --- a/src/routes/safe/components/Settings/Advanced/RemoveModuleModal.tsx +++ b/src/routes/safe/components/Settings/Advanced/RemoveModuleModal.tsx @@ -14,13 +14,13 @@ import Link from 'src/components/layout/Link' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' import Modal from 'src/components/Modal' +import { getExplorerInfo } from 'src/config' import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' import createTransaction from 'src/logic/safe/store/actions/createTransaction' import { ModulePair } from 'src/logic/safe/store/models/safe' import { safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' -import { ExplorerTypes, getExplorerLink } from 'src/logic/wallets/getWeb3' import { md, secondary } from 'src/theme/variables' import styled from 'styled-components' @@ -49,6 +49,9 @@ const RemoveModuleModal = ({ onClose, selectedModule }: RemoveModuleModal): Reac const safeAddress = useSelector(safeParamAddressFromStateSelector) as string const dispatch = useDispatch() + const explorerInfo = getExplorerInfo(selectedModule[0]) + const { url } = explorerInfo() + const removeSelectedModule = async (): Promise => { try { const safeInstance = await getGnosisSafeInstanceAt(safeAddress) @@ -101,11 +104,7 @@ const RemoveModuleModal = ({ onClose, selectedModule }: RemoveModuleModal): Reac {selectedModule[0]} - + diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx index cd5a6cb9ac..1f659eba39 100644 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx @@ -18,7 +18,7 @@ import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' import { safeNameSelector, safeOwnersSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { ExplorerTypes, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { styles } from './style' @@ -118,7 +118,7 @@ const ReviewAddOwner = ({ classes, onClickBack, onClose, onSubmit, values }) => {owner.address} - + @@ -146,7 +146,7 @@ const ReviewAddOwner = ({ classes, onClickBack, onClose, onSubmit, values }) => {values.ownerAddress} - + diff --git a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx index 1d0794ea9c..6d750aed04 100644 --- a/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/EditOwnerModal/index.tsx @@ -23,7 +23,6 @@ import { NOTIFICATIONS } from 'src/logic/notifications' import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' import editSafeOwner from 'src/logic/safe/store/actions/editSafeOwner' import { safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import { sm } from 'src/theme/variables' import { styles } from './style' @@ -94,7 +93,7 @@ const EditOwnerComponent = ({ isOpen, onClose, ownerAddress, selectedOwnerName } {ownerAddress} - + diff --git a/src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell/index.tsx b/src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell/index.tsx index 4bd3d8d22e..0caf445ca6 100644 --- a/src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell/index.tsx @@ -7,7 +7,6 @@ import Block from 'src/components/layout/Block' import Paragraph from 'src/components/layout/Paragraph' import { getValidAddressBookName } from 'src/logic/addressBook/utils' import { useWindowDimensions } from 'src/logic/hooks/useWindowDimensions' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' type OwnerAddressTableCellProps = { address: string @@ -37,7 +36,7 @@ const OwnerAddressTableCell = (props: OwnerAddressTableCellProps): React.ReactEl {showLinks ? (
{userName && getValidAddressBookName(userName)} - +
) : ( {address} diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/index.tsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/index.tsx index f3ab823304..3ab15c42a6 100644 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/CheckOwner/index.tsx @@ -13,7 +13,6 @@ import Col from 'src/components/layout/Col' import Hairline from 'src/components/layout/Hairline' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import { styles } from './style' @@ -54,7 +53,7 @@ const CheckOwner = ({ classes, onClose, onSubmit, ownerAddress, ownerName }) => {ownerAddress} - + diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx index f10e362041..0a9b13b336 100644 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx @@ -18,7 +18,7 @@ import { getGnosisSafeInstanceAt, SENTINEL_ADDRESS } from 'src/logic/contracts/s import { safeNameSelector, safeOwnersSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { ExplorerTypes, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { styles } from './style' @@ -120,7 +120,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre {owner.address} - + @@ -149,7 +149,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre {ownerAddress} - + diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/index.tsx b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/index.tsx index a66965cc87..c808f411df 100644 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/OwnerForm/index.tsx @@ -21,7 +21,6 @@ import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' import { ScanQRWrapper } from 'src/components/ScanQRModal/ScanQRWrapper' import { safeOwnersSelector } from 'src/logic/safe/store/selectors' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import { styles } from './style' @@ -95,7 +94,7 @@ const OwnerForm = ({ classes, onClose, onSubmit, ownerAddress, ownerName }) => { {ownerAddress} - + diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx index 3b1ce84db6..1b1e475243 100644 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx @@ -23,7 +23,7 @@ import { } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { ExplorerTypes, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { styles } from './style' @@ -124,7 +124,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre {owner.address} - + @@ -153,7 +153,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre {ownerAddress} - + @@ -178,7 +178,7 @@ const ReviewRemoveOwner = ({ classes, onClickBack, onClose, onSubmit, ownerAddre {values.ownerAddress} - + diff --git a/src/routes/safe/components/Settings/RemoveSafeModal/index.tsx b/src/routes/safe/components/Settings/RemoveSafeModal/index.tsx index 35edc8dd72..5524ecd31d 100644 --- a/src/routes/safe/components/Settings/RemoveSafeModal/index.tsx +++ b/src/routes/safe/components/Settings/RemoveSafeModal/index.tsx @@ -5,6 +5,7 @@ import OpenInNew from '@material-ui/icons/OpenInNew' import classNames from 'classnames' import React from 'react' import { useDispatch, useSelector } from 'react-redux' +import { getExplorerInfo } from 'src/config' import { styles } from './style' @@ -17,7 +18,6 @@ import Hairline from 'src/components/layout/Hairline' import Link from 'src/components/layout/Link' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' -import { getExplorerLink, ExplorerTypes } from 'src/logic/wallets/getWeb3' import removeSafe from 'src/logic/safe/store/actions/removeSafe' import { safeNameSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { md, secondary } from 'src/theme/variables' @@ -34,7 +34,8 @@ const RemoveSafeComponent = ({ isOpen, onClose }) => { const safeAddress = useSelector(safeParamAddressFromStateSelector) as string const safeName = useSelector(safeNameSelector) const dispatch = useDispatch() - const etherScanLink = getExplorerLink(ExplorerTypes.Address, safeAddress) + const explorerInfo = getExplorerInfo(safeAddress) + const { url } = explorerInfo() return ( { {safeAddress} - + diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription/index.tsx index 6ab5fc723f..532ce9ac18 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/IncomingTxDescription/index.tsx @@ -6,7 +6,6 @@ import EtherscanLink from 'src/components/EtherscanLink' import Block from 'src/components/layout/Block' import Bold from 'src/components/layout/Bold' import { getNameFromAddressBookSelector } from 'src/logic/addressBook/store/selectors' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import OwnerAddressTableCell from 'src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell' import { getIncomingTxAmount } from 'src/routes/safe/components/Transactions/TxsTable/columns' import { lg, md } from 'src/theme/variables' @@ -29,7 +28,7 @@ const TransferDescription = ({ from, txFromName, value = '' }) => ( {txFromName ? ( ) : ( - + )} ) diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/SettingsDescription.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/SettingsDescription.tsx index 6075415789..ccaf06fe80 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/SettingsDescription.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/SettingsDescription.tsx @@ -6,7 +6,6 @@ import Bold from 'src/components/layout/Bold' import Paragraph from 'src/components/layout/Paragraph' import { getNameFromAddressBookSelector } from 'src/logic/addressBook/store/selectors' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import OwnerAddressTableCell from 'src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell' import { SAFE_METHODS_NAMES, SafeMethods } from 'src/routes/safe/store/models/types/transactions.d' @@ -30,7 +29,7 @@ const RemovedOwner = ({ removedOwner }: RemovedOwnerProps): React.ReactElement = {ownerChangedName ? ( ) : ( - + )} ) @@ -49,7 +48,7 @@ const AddedOwner = ({ addedOwner }: AddedOwnerProps): React.ReactElement => { {ownerChangedName ? ( ) : ( - + )} ) @@ -75,7 +74,7 @@ interface AddModuleProps { const AddModule = ({ module }: AddModuleProps): React.ReactElement => ( Add module: - + ) @@ -86,7 +85,7 @@ interface RemoveModuleProps { const RemoveModule = ({ module }: RemoveModuleProps): React.ReactElement => ( Remove module: - + ) diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/TransferDescription.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/TransferDescription.tsx index 1128d07103..afc5f2c13c 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/TransferDescription.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/TransferDescription.tsx @@ -4,7 +4,6 @@ import EtherscanLink from 'src/components/EtherscanLink' import Block from 'src/components/layout/Block' import Bold from 'src/components/layout/Bold' import { getNameFromAddressBookSelector } from 'src/logic/addressBook/store/selectors' -import { ExplorerTypes } from 'src/logic/wallets/getWeb3' import OwnerAddressTableCell from 'src/routes/safe/components/Settings/ManageOwners/OwnerAddressTableCell' import { TRANSACTIONS_DESC_SEND_TEST_ID } from './index' @@ -22,7 +21,7 @@ const TransferDescription = ({ amount = '', recipient }: TransferDescriptionProp {recipientName ? ( ) : ( - + )} ) From 10193e6bc147f3056397316919e64d3f60a73057 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Wed, 7 Oct 2020 16:56:47 -0300 Subject: [PATCH 5/8] use config based rpc address --- src/components/ConnectButton/index.tsx | 3 +- src/components/forms/AddressInput/index.tsx | 2 +- src/components/forms/validator.ts | 2 +- src/config/index.ts | 43 ++++++++++++- .../sources/ABIService/index.ts | 2 +- src/logic/contracts/generateBatchRequests.ts | 2 +- src/logic/contracts/methodIds.ts | 2 +- src/logic/contracts/safeContracts.ts | 3 +- .../safe/store/actions/fetchEtherBalance.ts | 2 +- src/logic/safe/store/actions/fetchSafe.ts | 2 +- .../safe/store/actions/fetchSafeCreationTx.ts | 3 +- .../loadIncomingTransactions.ts | 2 +- .../loadOutgoingTransactions.ts | 2 +- src/logic/safe/transactions/gasNew.ts | 3 +- src/logic/safe/transactions/multisend.ts | 2 +- .../offchainSigner/EIP712Signer.ts | 2 +- .../transactions/offchainSigner/ethSigner.ts | 2 +- src/logic/safe/utils/upgradeSafe.ts | 2 +- src/logic/tokens/store/actions/fetchTokens.ts | 2 +- src/logic/tokens/utils/tokenHelpers.ts | 2 +- src/logic/wallets/ethTransactions.ts | 2 +- src/logic/wallets/getWeb3.ts | 60 +------------------ .../wallets/store/actions/fetchProvider.ts | 4 +- .../wallets/store/actions/removeProvider.ts | 2 +- .../store/middlewares/providerWatcher.ts | 3 +- src/logic/wallets/tokens.ts | 2 +- .../load/components/DetailsForm/index.tsx | 2 +- .../components/ReviewInformation/index.tsx | 2 +- src/routes/opening/index.tsx | 2 +- src/routes/safe/components/Apps/utils.ts | 3 +- .../screens/AddressBookInput/index.tsx | 2 +- .../ContractInteraction/Review/index.tsx | 2 +- .../ReviewCustomTx/index.tsx | 2 +- .../ContractInteraction/utils/index.ts | 2 +- .../screens/ReviewCollectible/index.tsx | 2 +- .../SendModal/screens/ReviewTx/index.tsx | 2 +- .../AddOwnerModal/screens/Review/index.tsx | 2 +- .../RemoveOwnerModal/screens/Review/index.tsx | 2 +- .../screens/Review/index.tsx | 2 +- .../ChangeThreshold/index.tsx | 2 +- .../ExpandedTx/ApproveTxModal/index.tsx | 2 +- .../ExpandedTx/RejectTxModal/index.tsx | 2 +- .../TxsTable/ExpandedTx/index.tsx | 3 +- src/test/builder/safe.dom.builder.ts | 4 +- src/test/builder/safe.redux.builder.ts | 3 +- src/test/safe.dom.create.tsx | 5 +- src/test/safe.dom.funds.thresholdGt1.ts | 3 +- src/test/safe.dom.load.tsx | 5 +- src/test/utils/ethereumErrors.ts | 3 +- src/test/utils/tokenMovements.ts | 4 +- src/utils/checksumAddress.ts | 2 +- 51 files changed, 100 insertions(+), 123 deletions(-) diff --git a/src/components/ConnectButton/index.tsx b/src/components/ConnectButton/index.tsx index a520594bf8..2b17a989d4 100644 --- a/src/components/ConnectButton/index.tsx +++ b/src/components/ConnectButton/index.tsx @@ -2,9 +2,8 @@ import Onboard from 'bnc-onboard' import React from 'react' import Button from 'src/components/layout/Button' -import { getNetworkId } from 'src/config' +import { getNetworkId, getWeb3, setWeb3 } from 'src/config' import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' -import { getWeb3, setWeb3 } from 'src/logic/wallets/getWeb3' import { fetchProvider } from 'src/logic/wallets/store/actions' import transactionDataCheck from 'src/logic/wallets/transactionDataCheck' import { getSupportedWallets } from 'src/logic/wallets/utils/walletList' diff --git a/src/components/forms/AddressInput/index.tsx b/src/components/forms/AddressInput/index.tsx index 8655d2590c..92501a645b 100644 --- a/src/components/forms/AddressInput/index.tsx +++ b/src/components/forms/AddressInput/index.tsx @@ -5,7 +5,7 @@ import { OnChange } from 'react-final-form-listeners' import TextField from 'src/components/forms/TextField' import { Validator, composeValidators, mustBeEthereumAddress, required } from 'src/components/forms/validator' import { trimSpaces } from 'src/utils/strings' -import { getAddressFromENS } from 'src/logic/wallets/getWeb3' +import { getAddressFromENS } from 'src/config' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' import { checksumAddress } from 'src/utils/checksumAddress' diff --git a/src/components/forms/validator.ts b/src/components/forms/validator.ts index 0d50cb93c8..e23ea147a2 100644 --- a/src/components/forms/validator.ts +++ b/src/components/forms/validator.ts @@ -1,7 +1,7 @@ import { List } from 'immutable' import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import memoize from 'lodash.memoize' type ValidatorReturnType = string | undefined diff --git a/src/config/index.ts b/src/config/index.ts index b5a77283c9..55cfe62c42 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,9 +1,13 @@ +import memoize from 'lodash.memoize' +import Web3 from 'web3' +import { provider as Provider } from 'web3-core' +import { ContentHash } from 'web3-eth-ens' + import networks from 'src/config/networks' import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkSettings, SafeFeatures } from 'src/config/networks/network.d' import { checksumAddress } from 'src/utils/checksumAddress' import { APP_ENV, ETHERSCAN_API_KEY, GOOGLE_ANALYTICS_ID, INFURA_TOKEN, NETWORK, NODE_ENV } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' -import memoize from 'lodash.memoize' export const getNetworkId = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] @@ -172,3 +176,40 @@ export const getExplorerInfo = (hash: string): BlockScanInfo => { return blockScanInfo } + +// With some wallets from web3connect you have to use their provider instance only for signing +// And our own one to fetch data +export const web3ReadOnly = new Web3( + process.env.NODE_ENV !== 'test' + ? new Web3.providers.HttpProvider(getRpcServiceUrl()) + : window.web3?.currentProvider || 'ws://localhost:8545', +) + +let web3 = web3ReadOnly +export const getWeb3 = (): Web3 => web3 + +export const resetWeb3 = (): void => { + web3 = web3ReadOnly +} + +export const setWeb3 = (provider: Provider): void => { + web3 = new Web3(provider) +} + +export const getBalanceInEtherOf = async (safeAddress: string): Promise => { + if (!web3) { + return '0' + } + + const funds = await web3.eth.getBalance(safeAddress) + + if (!funds) { + return '0' + } + + return web3.utils.fromWei(funds, 'ether').toString() +} + +export const getAddressFromENS = (name: string): Promise => web3.eth.ens.getAddress(name) + +export const getContentFromENS = (name: string): Promise => web3.eth.ens.getContenthash(name) diff --git a/src/logic/contractInteraction/sources/ABIService/index.ts b/src/logic/contractInteraction/sources/ABIService/index.ts index c9dc15b77d..b0b627a371 100644 --- a/src/logic/contractInteraction/sources/ABIService/index.ts +++ b/src/logic/contractInteraction/sources/ABIService/index.ts @@ -1,6 +1,6 @@ import { AbiItem } from 'web3-utils' -import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' +import { web3ReadOnly as web3 } from 'src/config' export interface AllowedAbiItem extends AbiItem { name: string diff --git a/src/logic/contracts/generateBatchRequests.ts b/src/logic/contracts/generateBatchRequests.ts index 2d48979bd8..5d2e008aea 100644 --- a/src/logic/contracts/generateBatchRequests.ts +++ b/src/logic/contracts/generateBatchRequests.ts @@ -1,4 +1,4 @@ -import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' +import { web3ReadOnly as web3 } from 'src/config' /** * Generates a batch request for grouping RPC calls diff --git a/src/logic/contracts/methodIds.ts b/src/logic/contracts/methodIds.ts index e24a7e6621..a6ff9de330 100644 --- a/src/logic/contracts/methodIds.ts +++ b/src/logic/contracts/methodIds.ts @@ -1,4 +1,4 @@ -import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' +import { web3ReadOnly as web3 } from 'src/config' import { DataDecoded, METHOD_TO_ID } from 'src/routes/safe/store/models/types/transactions.d' export const decodeParamsFromSafeMethod = (data: string): DataDecoded | null => { diff --git a/src/logic/contracts/safeContracts.ts b/src/logic/contracts/safeContracts.ts index 5d1aa9086f..dd0ef994a8 100644 --- a/src/logic/contracts/safeContracts.ts +++ b/src/logic/contracts/safeContracts.ts @@ -7,7 +7,8 @@ import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { isProxyCode } from 'src/logic/contracts/historicProxyCode' import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses' import { calculateGasOf, calculateGasPrice } from 'src/logic/wallets/ethTransactions' -import { getWeb3, getNetworkIdFrom } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' +import { getNetworkIdFrom } from 'src/logic/wallets/getWeb3' import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d' import { GnosisSafeProxyFactory } from 'src/types/contracts/GnosisSafeProxyFactory.d' import Web3 from 'web3' diff --git a/src/logic/safe/store/actions/fetchEtherBalance.ts b/src/logic/safe/store/actions/fetchEtherBalance.ts index 146a20330b..c1cf13af4a 100644 --- a/src/logic/safe/store/actions/fetchEtherBalance.ts +++ b/src/logic/safe/store/actions/fetchEtherBalance.ts @@ -1,4 +1,4 @@ -import { getBalanceInEtherOf } from 'src/logic/wallets/getWeb3' +import { getBalanceInEtherOf } from 'src/config' import updateSafe from 'src/logic/safe/store/actions/updateSafe' import { SAFE_REDUCER_ID } from 'src/logic/safe/store/reducer/safe' import { Dispatch } from 'redux' diff --git a/src/logic/safe/store/actions/fetchSafe.ts b/src/logic/safe/store/actions/fetchSafe.ts index a398ffb733..9552c7a17d 100644 --- a/src/logic/safe/store/actions/fetchSafe.ts +++ b/src/logic/safe/store/actions/fetchSafe.ts @@ -5,7 +5,7 @@ import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { getLocalSafe, getSafeName } from 'src/logic/safe/utils' import { enabledFeatures, safeNeedsUpdate } from 'src/logic/safe/utils/safeVersion' import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { getBalanceInEtherOf } from 'src/logic/wallets/getWeb3' +import { getBalanceInEtherOf } from 'src/config' import addSafeOwner from 'src/logic/safe/store/actions/addSafeOwner' import removeSafeOwner from 'src/logic/safe/store/actions/removeSafeOwner' import updateSafe from 'src/logic/safe/store/actions/updateSafe' diff --git a/src/logic/safe/store/actions/fetchSafeCreationTx.ts b/src/logic/safe/store/actions/fetchSafeCreationTx.ts index d0e79de406..3ce7723080 100644 --- a/src/logic/safe/store/actions/fetchSafeCreationTx.ts +++ b/src/logic/safe/store/actions/fetchSafeCreationTx.ts @@ -1,11 +1,10 @@ import axios from 'axios' import { List } from 'immutable' -import { buildSafeCreationTxUrl } from 'src/config' +import { buildSafeCreationTxUrl, web3ReadOnly } from 'src/config' import { addOrUpdateTransactions } from './transactions/addOrUpdateTransactions' import { makeTransaction } from 'src/logic/safe/store/models/transaction' import { TransactionTypes, TransactionStatus } from 'src/logic/safe/store/models/types/transaction' -import { web3ReadOnly } from 'src/logic/wallets/getWeb3' const getCreationTx = async (safeAddress) => { const url = buildSafeCreationTxUrl(safeAddress) diff --git a/src/logic/safe/store/actions/transactions/fetchTransactions/loadIncomingTransactions.ts b/src/logic/safe/store/actions/transactions/fetchTransactions/loadIncomingTransactions.ts index ec79aa234a..e9757552aa 100644 --- a/src/logic/safe/store/actions/transactions/fetchTransactions/loadIncomingTransactions.ts +++ b/src/logic/safe/store/actions/transactions/fetchTransactions/loadIncomingTransactions.ts @@ -3,7 +3,7 @@ import { List, Map } from 'immutable' import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { ALTERNATIVE_TOKEN_ABI } from 'src/logic/tokens/utils/alternativeAbi' -import { web3ReadOnly } from 'src/logic/wallets/getWeb3' +import { web3ReadOnly } from 'src/config' import { makeIncomingTransaction } from 'src/logic/safe/store/models/incomingTransaction' import fetchTransactions from 'src/logic/safe/store/actions/transactions/fetchTransactions/fetchTransactions' import { TransactionTypes } from 'src/logic/safe/store/models/types/transaction' diff --git a/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts b/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts index 89d53d9599..a9b6b518d5 100644 --- a/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts +++ b/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts @@ -2,7 +2,7 @@ import { fromJS, List, Map } from 'immutable' import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { TOKEN_REDUCER_ID } from 'src/logic/tokens/store/reducer/tokens' -import { web3ReadOnly } from 'src/logic/wallets/getWeb3' +import { web3ReadOnly } from 'src/config' import { PROVIDER_REDUCER_ID } from 'src/logic/wallets/store/reducer/provider' import { buildTx, isCancelTransaction } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' import { SAFE_REDUCER_ID } from 'src/logic/safe/store/reducer/safe' diff --git a/src/logic/safe/transactions/gasNew.ts b/src/logic/safe/transactions/gasNew.ts index 91015c6206..ec0cb03892 100644 --- a/src/logic/safe/transactions/gasNew.ts +++ b/src/logic/safe/transactions/gasNew.ts @@ -9,7 +9,8 @@ import { generateSignaturesFromTxConfirmations } from 'src/logic/safe/safeTxSign import { Transaction } from 'src/logic/safe/store/models/types/transaction' import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses' import { EMPTY_DATA, calculateGasOf, calculateGasPrice } from 'src/logic/wallets/ethTransactions' -import { getAccountFrom, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' +import { getAccountFrom } from 'src/logic/wallets/getWeb3' import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d' const estimateDataGasCosts = (data: string): number => { diff --git a/src/logic/safe/transactions/multisend.ts b/src/logic/safe/transactions/multisend.ts index 18d6d16de8..02ae91b7a1 100644 --- a/src/logic/safe/transactions/multisend.ts +++ b/src/logic/safe/transactions/multisend.ts @@ -1,7 +1,7 @@ import { Transaction } from '@gnosis.pm/safe-apps-sdk' import { AbiItem } from 'web3-utils' import { MultiSend } from 'src/types/contracts/MultiSend.d' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { MULTI_SEND_ADDRESS } from 'src/logic/contracts/safeContracts' const multiSendAbi: AbiItem[] = [ diff --git a/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts b/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts index 55fe61d728..0244f6f1df 100644 --- a/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts +++ b/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts @@ -1,5 +1,5 @@ import { AbstractProvider } from 'web3-core' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' const EIP712_NOT_SUPPORTED_ERROR_MSG = "EIP712 is not supported by user's wallet" diff --git a/src/logic/safe/transactions/offchainSigner/ethSigner.ts b/src/logic/safe/transactions/offchainSigner/ethSigner.ts index 5daeedba84..6ac2fd1839 100644 --- a/src/logic/safe/transactions/offchainSigner/ethSigner.ts +++ b/src/logic/safe/transactions/offchainSigner/ethSigner.ts @@ -1,5 +1,5 @@ import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { AbstractProvider } from 'web3-core/types' const ETH_SIGN_NOT_SUPPORTED_ERROR_MSG = 'ETH_SIGN_NOT_SUPPORTED' diff --git a/src/logic/safe/utils/upgradeSafe.ts b/src/logic/safe/utils/upgradeSafe.ts index 3cd8661016..c33555e76b 100644 --- a/src/logic/safe/utils/upgradeSafe.ts +++ b/src/logic/safe/utils/upgradeSafe.ts @@ -7,7 +7,7 @@ import { getGnosisSafeInstanceAt, } from 'src/logic/contracts/safeContracts' import { DELEGATE_CALL } from 'src/logic/safe/transactions' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { MultiSend } from 'src/types/contracts/MultiSend.d' interface MultiSendTx { diff --git a/src/logic/tokens/store/actions/fetchTokens.ts b/src/logic/tokens/store/actions/fetchTokens.ts index 5c5bde4959..6e3bd732fd 100644 --- a/src/logic/tokens/store/actions/fetchTokens.ts +++ b/src/logic/tokens/store/actions/fetchTokens.ts @@ -11,7 +11,7 @@ import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { fetchTokenList } from 'src/logic/tokens/api' import { makeToken, Token } from 'src/logic/tokens/store/model/token' import { tokensSelector } from 'src/logic/tokens/store/selectors' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { AppReduxState, store } from 'src/store' import { ensureOnce } from 'src/utils/singleton' import { ThunkDispatch } from 'redux-thunk' diff --git a/src/logic/tokens/utils/tokenHelpers.ts b/src/logic/tokens/utils/tokenHelpers.ts index 48134bdb2b..b619140ebe 100644 --- a/src/logic/tokens/utils/tokenHelpers.ts +++ b/src/logic/tokens/utils/tokenHelpers.ts @@ -7,7 +7,7 @@ import { } from 'src/logic/tokens/store/actions/fetchTokens' import { makeToken, Token } from 'src/logic/tokens/store/model/token' import { ALTERNATIVE_TOKEN_ABI } from 'src/logic/tokens/utils/alternativeAbi' -import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' +import { web3ReadOnly as web3 } from 'src/config' import { isEmptyData } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' import { TxServiceModel } from 'src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions' import { Map } from 'immutable' diff --git a/src/logic/wallets/ethTransactions.ts b/src/logic/wallets/ethTransactions.ts index 745ac60a89..fa79d0e47d 100644 --- a/src/logic/wallets/ethTransactions.ts +++ b/src/logic/wallets/ethTransactions.ts @@ -1,7 +1,7 @@ import axios from 'axios' import { BigNumber } from 'bignumber.js' -import { getWeb3, web3ReadOnly } from 'src/logic/wallets/getWeb3' +import { getWeb3, web3ReadOnly } from 'src/config' // const MAINNET_NETWORK = 1 export const EMPTY_DATA = '0x' diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index a9bf4e158f..0ab0ce46a2 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -1,12 +1,9 @@ import Web3 from 'web3' -import { provider as Provider } from 'web3-core' -import { ContentHash } from 'web3-eth-ens' -import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { sameAddress } from './ethAddresses' import { EMPTY_DATA } from './ethTransactions' import { ProviderProps } from './store/model/provider' -import { NODE_ENV, NETWORK, INFURA_TOKEN } from 'src/utils/constants' +import { NODE_ENV } from 'src/utils/constants' export const WALLET_PROVIDER = { SAFE: 'SAFE', @@ -26,39 +23,6 @@ export const WALLET_PROVIDER = { TREZOR: 'TREZOR', } -export const getInfuraUrl = (network: ETHEREUM_NETWORK): string => - `https://${ETHEREUM_NETWORK[network].toLowerCase()}.infura.io:443/v3/${INFURA_TOKEN}` - -export const getRPCUrl = (network: ETHEREUM_NETWORK): string => { - switch (network) { - case ETHEREUM_NETWORK.MAINNET: - return getInfuraUrl(network) - case ETHEREUM_NETWORK.RINKEBY: - return getInfuraUrl(network) - case ETHEREUM_NETWORK.ENERGY_WEB_CHAIN: - return 'https://rpc.energyweb.org' - case ETHEREUM_NETWORK.VOLTA: - return 'https://volta-rpc.energyweb.org' - default: - return '' - } -} - -// With some wallets from web3connect you have to use their provider instance only for signing -// And our own one to fetch data -export const web3ReadOnly = new Web3( - process.env.NODE_ENV !== 'test' - ? new Web3.providers.HttpProvider(getRPCUrl(ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY)) - : window.web3?.currentProvider || 'ws://localhost:8545', -) - -let web3 = web3ReadOnly -export const getWeb3 = (): Web3 => web3 - -export const resetWeb3 = (): void => { - web3 = web3ReadOnly -} - export const getAccountFrom = async (web3Provider: Web3): Promise => { const accounts = await web3Provider.eth.getAccounts() @@ -98,25 +62,3 @@ export const getProviderInfo = async (web3Instance: Web3, providerName = 'Wallet hardwareWallet, } } - -export const getAddressFromENS = (name: string): Promise => web3.eth.ens.getAddress(name) - -export const getContentFromENS = (name: string): Promise => web3.eth.ens.getContenthash(name) - -export const setWeb3 = (provider: Provider): void => { - web3 = new Web3(provider) -} - -export const getBalanceInEtherOf = async (safeAddress: string): Promise => { - if (!web3) { - return '0' - } - - const funds = await web3.eth.getBalance(safeAddress) - - if (!funds) { - return '0' - } - - return web3.utils.fromWei(funds, 'ether').toString() -} diff --git a/src/logic/wallets/store/actions/fetchProvider.ts b/src/logic/wallets/store/actions/fetchProvider.ts index c2907c67dc..6cbf5f2627 100644 --- a/src/logic/wallets/store/actions/fetchProvider.ts +++ b/src/logic/wallets/store/actions/fetchProvider.ts @@ -2,11 +2,11 @@ import ReactGA from 'react-ga' import addProvider from './addProvider' -import { getNetworkId } from 'src/config' +import { getNetworkId, getWeb3 } from 'src/config' import { NOTIFICATIONS, enhanceSnackbarForAction } from 'src/logic/notifications' import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' -import { getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getProviderInfo } from 'src/logic/wallets/getWeb3' import { makeProvider } from 'src/logic/wallets/store/model/provider' import { updateStoredTransactionsStatus } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' import { Dispatch } from 'redux' diff --git a/src/logic/wallets/store/actions/removeProvider.ts b/src/logic/wallets/store/actions/removeProvider.ts index be7396b722..cf75fb4473 100644 --- a/src/logic/wallets/store/actions/removeProvider.ts +++ b/src/logic/wallets/store/actions/removeProvider.ts @@ -4,7 +4,7 @@ import { createAction } from 'redux-actions' import { onboard } from 'src/components/ConnectButton' import { NOTIFICATIONS, enhanceSnackbarForAction } from 'src/logic/notifications' import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' -import { resetWeb3 } from 'src/logic/wallets/getWeb3' +import { resetWeb3 } from 'src/config' export const REMOVE_PROVIDER = 'REMOVE_PROVIDER' diff --git a/src/logic/wallets/store/middlewares/providerWatcher.ts b/src/logic/wallets/store/middlewares/providerWatcher.ts index fa938cf685..0f78fdc6eb 100644 --- a/src/logic/wallets/store/middlewares/providerWatcher.ts +++ b/src/logic/wallets/store/middlewares/providerWatcher.ts @@ -1,5 +1,6 @@ import closeSnackbar from 'src/logic/notifications/store/actions/closeSnackbar' -import { WALLET_PROVIDER, getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' +import { WALLET_PROVIDER, getProviderInfo } from 'src/logic/wallets/getWeb3' import { fetchProvider } from 'src/logic/wallets/store/actions' import { ADD_PROVIDER } from 'src/logic/wallets/store/actions/addProvider' import { REMOVE_PROVIDER } from 'src/logic/wallets/store/actions/removeProvider' diff --git a/src/logic/wallets/tokens.ts b/src/logic/wallets/tokens.ts index 1ee65887de..67400d32f0 100644 --- a/src/logic/wallets/tokens.ts +++ b/src/logic/wallets/tokens.ts @@ -1,4 +1,4 @@ -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' export const toNative = (amt, decimal) => { const web3 = getWeb3() diff --git a/src/routes/load/components/DetailsForm/index.tsx b/src/routes/load/components/DetailsForm/index.tsx index 1524f9e122..18c2289228 100644 --- a/src/routes/load/components/DetailsForm/index.tsx +++ b/src/routes/load/components/DetailsForm/index.tsx @@ -21,7 +21,7 @@ import Block from 'src/components/layout/Block' import Col from 'src/components/layout/Col' import Paragraph from 'src/components/layout/Paragraph' import { SAFE_MASTER_COPY_ADDRESS_V10, getSafeMasterContract, validateProxy } from 'src/logic/contracts/safeContracts' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { FIELD_LOAD_ADDRESS, FIELD_LOAD_NAME } from 'src/routes/load/components/fields' import { secondary } from 'src/theme/variables' diff --git a/src/routes/open/components/ReviewInformation/index.tsx b/src/routes/open/components/ReviewInformation/index.tsx index 2ed3dff91e..8ef97c1fd0 100644 --- a/src/routes/open/components/ReviewInformation/index.tsx +++ b/src/routes/open/components/ReviewInformation/index.tsx @@ -13,7 +13,7 @@ import Row from 'src/components/layout/Row' import OpenPaper from 'src/components/Stepper/OpenPaper' import { estimateGasForDeployingSafe } from 'src/logic/contracts/safeContracts' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { getAccountsFrom, getNamesFrom } from 'src/routes/open/utils/safeDataExtractor' import { FIELD_CONFIRMATIONS, FIELD_NAME, getNumOwnersFrom } from '../fields' diff --git a/src/routes/opening/index.tsx b/src/routes/opening/index.tsx index d976284625..15b09a1b23 100644 --- a/src/routes/opening/index.tsx +++ b/src/routes/opening/index.tsx @@ -11,7 +11,7 @@ import Img from 'src/components/layout/Img' import Paragraph from 'src/components/layout/Paragraph' import { initContracts } from 'src/logic/contracts/safeContracts' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { background, connected } from 'src/theme/variables' import { providerNameSelector } from 'src/logic/wallets/store/selectors' import { useSelector } from 'react-redux' diff --git a/src/routes/safe/components/Apps/utils.ts b/src/routes/safe/components/Apps/utils.ts index af670e6737..f4ba4ae52c 100644 --- a/src/routes/safe/components/Apps/utils.ts +++ b/src/routes/safe/components/Apps/utils.ts @@ -3,8 +3,7 @@ import memoize from 'lodash.memoize' import { SafeApp } from './types.d' -import { getGnosisSafeAppsUrl } from 'src/config' -import { getContentFromENS } from 'src/logic/wallets/getWeb3' +import { getContentFromENS, getGnosisSafeAppsUrl } from 'src/config' import appsIconSvg from 'src/routes/safe/components/Transactions/TxsTable/TxType/assets/appsIcon.svg' import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx index db9b9c90d2..f2fd3f26d4 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx @@ -10,7 +10,7 @@ import { styles } from './style' import Identicon from 'src/components/Identicon' import { mustBeEthereumAddress, mustBeEthereumContractAddress } from 'src/components/forms/validator' import { addressBookSelector } from 'src/logic/addressBook/store/selectors' -import { getAddressFromENS } from 'src/logic/wallets/getWeb3' +import { getAddressFromENS } from 'src/config' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' import { AddressBookEntry, AddressBookState } from 'src/logic/addressBook/model/addressBook' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx index 5d2d1c1064..57e970cc16 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx @@ -16,7 +16,7 @@ import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { styles } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/style' import Header from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Header' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx index 4b6ffa401e..00ffc0db42 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx @@ -20,7 +20,7 @@ import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { sm } from 'src/theme/variables' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts index c30e1eaad4..aa6ef4dbed 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts @@ -3,7 +3,7 @@ import createDecorator from 'final-form-calculate' import { ContractSendMethod } from 'web3-eth-contract' import { AbiItemExtended } from 'src/logic/contractInteraction/sources/ABIService' -import { getAddressFromENS, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getAddressFromENS, getWeb3 } from 'src/config' import { TransactionReviewType } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx index 7a77be83b8..4ec4733655 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx @@ -27,7 +27,7 @@ import { } from 'src/logic/tokens/store/actions/fetchTokens' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH } from 'src/logic/tokens/utils/tokenHelpers' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { sm } from 'src/theme/variables' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx index f9e1ff3035..b51540c1c0 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx @@ -24,7 +24,7 @@ import { getHumanFriendlyToken } from 'src/logic/tokens/store/actions/fetchToken import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { ETH_ADDRESS } from 'src/logic/tokens/utils/tokenHelpers' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { extendedSafeTokensSelector } from 'src/routes/safe/container/selector' diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx index 1f659eba39..29d69fc302 100644 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx @@ -18,7 +18,7 @@ import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' import { safeNameSelector, safeOwnersSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { styles } from './style' diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx index 0a9b13b336..a76d6e6cc2 100644 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx @@ -18,7 +18,7 @@ import { getGnosisSafeInstanceAt, SENTINEL_ADDRESS } from 'src/logic/contracts/s import { safeNameSelector, safeOwnersSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { styles } from './style' diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx index 1b1e475243..654ae11640 100644 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx @@ -23,7 +23,7 @@ import { } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { styles } from './style' diff --git a/src/routes/safe/components/Settings/ThresholdSettings/ChangeThreshold/index.tsx b/src/routes/safe/components/Settings/ThresholdSettings/ChangeThreshold/index.tsx index e821d4d3ed..02a26987f0 100644 --- a/src/routes/safe/components/Settings/ThresholdSettings/ChangeThreshold/index.tsx +++ b/src/routes/safe/components/Settings/ThresholdSettings/ChangeThreshold/index.tsx @@ -19,7 +19,7 @@ import Row from 'src/components/layout/Row' import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' const THRESHOLD_FIELD_NAME = 'threshold' diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.tsx index e6eb22ee76..c140bf31c4 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.tsx @@ -18,7 +18,7 @@ import Row from 'src/components/layout/Row' import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { userAccountSelector } from 'src/logic/wallets/store/selectors' import processTransaction from 'src/logic/safe/store/actions/processTransaction' diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/RejectTxModal/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/RejectTxModal/index.tsx index e5372d4c15..16275c58df 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/RejectTxModal/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/RejectTxModal/index.tsx @@ -17,7 +17,7 @@ import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import createTransaction from 'src/logic/safe/store/actions/createTransaction' import { safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx index eaae1cb214..2fa0867ef7 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx @@ -20,12 +20,11 @@ import Hairline from 'src/components/layout/Hairline' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' import Span from 'src/components/layout/Span' -import { getWeb3 } from 'src/logic/wallets/getWeb3' import { INCOMING_TX_TYPES } from 'src/logic/safe/store/models/incomingTransaction' import { safeNonceSelector, safeThresholdSelector } from 'src/logic/safe/store/selectors' import { Transaction, TransactionTypes } from 'src/logic/safe/store/models/types/transaction' import IncomingTxDescription from './IncomingTxDescription' -import { getExplorerInfo } from 'src/config' +import { getExplorerInfo, getWeb3 } from 'src/config' const useStyles = makeStyles(styles as any) diff --git a/src/test/builder/safe.dom.builder.ts b/src/test/builder/safe.dom.builder.ts index 8bed2bd758..9454e7e982 100644 --- a/src/test/builder/safe.dom.builder.ts +++ b/src/test/builder/safe.dom.builder.ts @@ -1,8 +1,6 @@ -// -import { } from 'redux' import { aNewStore, } from 'src/store' import { sleep } from 'src/utils/timer' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' import { sendEtherTo } from 'src/test/utils/tokenMovements' import { aMinedSafe } from 'src/test/builder/safe.redux.builder' import { renderSafeView } from 'src/test/builder/safe.dom.utils' diff --git a/src/test/builder/safe.redux.builder.ts b/src/test/builder/safe.redux.builder.ts index 8a44555ae7..b7292eff4c 100644 --- a/src/test/builder/safe.redux.builder.ts +++ b/src/test/builder/safe.redux.builder.ts @@ -7,7 +7,8 @@ import { getOwnerNameBy, getOwnerAddressBy, } from 'src/routes/open/components/fields' -import { getWeb3, getProviderInfo } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' +import { getProviderInfo } from 'src/logic/wallets/getWeb3' import { createSafe, } from 'src/routes/open/container/Open' import { makeProvider } from 'src/logic/wallets/store/model/provider' import addProvider from 'src/logic/wallets/store/actions/addProvider' diff --git a/src/test/safe.dom.create.tsx b/src/test/safe.dom.create.tsx index 032ebbf3de..16843fed20 100644 --- a/src/test/safe.dom.create.tsx +++ b/src/test/safe.dom.create.tsx @@ -1,6 +1,4 @@ -// import * as React from 'react' -import { } from 'redux' import { render, fireEvent, act } from '@testing-library/react' import { Provider } from 'react-redux' import { ConnectedRouter } from 'connected-react-router' @@ -8,7 +6,8 @@ import { sleep } from 'src/utils/timer' import { ADD_OWNER_BUTTON } from 'src/routes/open/components/SafeOwnersConfirmationsForm' import Open from 'src/routes/open/container/Open' import { aNewStore, history, } from 'src/store' -import { getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' +import { getProviderInfo} from 'src/logic/wallets/getWeb3' import addProvider from 'src/logic/wallets/store/actions/addProvider' import { makeProvider } from 'src/logic/wallets/store/model/provider' import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' diff --git a/src/test/safe.dom.funds.thresholdGt1.ts b/src/test/safe.dom.funds.thresholdGt1.ts index 7331aba493..6486622575 100644 --- a/src/test/safe.dom.funds.thresholdGt1.ts +++ b/src/test/safe.dom.funds.thresholdGt1.ts @@ -1,10 +1,9 @@ -// import { fireEvent, waitForElement } from '@testing-library/react' import { aNewStore } from 'src/store' import { aMinedSafe } from 'src/test/builder/safe.redux.builder' import { sendEtherTo } from 'src/test/utils/tokenMovements' import { renderSafeView } from 'src/test/builder/safe.dom.utils' -import { getWeb3, getBalanceInEtherOf } from 'src/logic/wallets/getWeb3' +import { getBalanceInEtherOf, getWeb3 } from 'src/config' import { sleep } from 'src/utils/timer' import '@testing-library/jest-dom/extend-expect' import { BALANCE_ROW_TEST_ID } from 'src/routes/safe/components/Balances' diff --git a/src/test/safe.dom.load.tsx b/src/test/safe.dom.load.tsx index 7e10d01752..049c923760 100644 --- a/src/test/safe.dom.load.tsx +++ b/src/test/safe.dom.load.tsx @@ -1,13 +1,12 @@ -// import * as React from 'react' -import { } from 'redux' import { Provider } from 'react-redux' import { render, fireEvent, act } from '@testing-library/react' import { ConnectedRouter } from 'connected-react-router' import Load from 'src/routes/load/container/Load' import { aNewStore, history, } from 'src/store' import { sleep } from 'src/utils/timer' -import { getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' +import { getProviderInfo } from 'src/logic/wallets/getWeb3' import addProvider from 'src/logic/wallets/store/actions/addProvider' import { makeProvider } from 'src/logic/wallets/store/model/provider' import { aMinedSafe } from './builder/safe.redux.builder' diff --git a/src/test/utils/ethereumErrors.ts b/src/test/utils/ethereumErrors.ts index c141e836ac..ef653c08c6 100644 --- a/src/test/utils/ethereumErrors.ts +++ b/src/test/utils/ethereumErrors.ts @@ -1,6 +1,5 @@ -// import abi from 'ethereumjs-abi' -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' export const getErrorMessage = async (to, value, data, from) => { const web3 = getWeb3() diff --git a/src/test/utils/tokenMovements.ts b/src/test/utils/tokenMovements.ts index e15863d868..ebbc22ba78 100644 --- a/src/test/utils/tokenMovements.ts +++ b/src/test/utils/tokenMovements.ts @@ -1,7 +1,7 @@ //import contract from '@truffle/contract' -import { getBalanceInEtherOf, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getBalanceInEtherOf, getWeb3 } from 'src/config' //import { ensureOnce } from 'src/utils/singleton' -import { toNative } from 'src/logic/wallets/tokens' +// import { toNative } from 'src/logic/wallets/tokens' //import TokenOMG from '../../../build/contracts/TokenOMG' //import TokenRDN from '../../../build/contracts/TokenRDN' //import Token6Decimals from '../../../build/contracts/Token6Decimals.json' diff --git a/src/utils/checksumAddress.ts b/src/utils/checksumAddress.ts index b0cd1fdca4..43357f26b2 100644 --- a/src/utils/checksumAddress.ts +++ b/src/utils/checksumAddress.ts @@ -1,4 +1,4 @@ -import { getWeb3 } from 'src/logic/wallets/getWeb3' +import { getWeb3 } from 'src/config' export const checksumAddress = (address: string): string => { return getWeb3().utils.toChecksumAddress(address) From a7be1fe158597503d3724e8c1501a52732193d44 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Wed, 7 Oct 2020 17:22:42 -0300 Subject: [PATCH 6/8] fix explorer domain extraction --- src/routes/opening/components/Footer.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/routes/opening/components/Footer.tsx b/src/routes/opening/components/Footer.tsx index 01e6560bc3..8f213484c4 100644 --- a/src/routes/opening/components/Footer.tsx +++ b/src/routes/opening/components/Footer.tsx @@ -16,7 +16,8 @@ const ButtonWithMargin = styled(Button)` export const GenericFooter = ({ safeCreationTxHash }: { safeCreationTxHash: string }) => { const explorerInfo = getExplorerInfo(safeCreationTxHash) const { url, alt } = explorerInfo() - const [, explorerDomain] = /(http|https):\/\/(\w+\.\w+)\/.*/i.exec(url) ?? [] + const match = /(http|https):\/\/(\w+\.\w+)\/.*/i.exec(url) + const explorerDomain = match !== null ? match[2] : 'Network Explorer' return ( From e7794f07edf25c8aabc2bab4aadb975a25f70405 Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Date: Thu, 8 Oct 2020 18:50:44 +0200 Subject: [PATCH 7/8] Revert "use config based rpc address" This reverts commit 10193e6bc147f3056397316919e64d3f60a73057. --- src/components/ConnectButton/index.tsx | 3 +- src/components/forms/AddressInput/index.tsx | 2 +- src/components/forms/validator.ts | 2 +- src/config/index.ts | 43 +------------ .../sources/ABIService/index.ts | 2 +- src/logic/contracts/generateBatchRequests.ts | 2 +- src/logic/contracts/methodIds.ts | 2 +- src/logic/contracts/safeContracts.ts | 3 +- .../safe/store/actions/fetchEtherBalance.ts | 2 +- src/logic/safe/store/actions/fetchSafe.ts | 2 +- .../safe/store/actions/fetchSafeCreationTx.ts | 3 +- .../loadIncomingTransactions.ts | 2 +- .../loadOutgoingTransactions.ts | 2 +- src/logic/safe/transactions/gasNew.ts | 3 +- src/logic/safe/transactions/multisend.ts | 2 +- .../offchainSigner/EIP712Signer.ts | 2 +- .../transactions/offchainSigner/ethSigner.ts | 2 +- src/logic/safe/utils/upgradeSafe.ts | 2 +- src/logic/tokens/store/actions/fetchTokens.ts | 2 +- src/logic/tokens/utils/tokenHelpers.ts | 2 +- src/logic/wallets/ethTransactions.ts | 2 +- src/logic/wallets/getWeb3.ts | 60 ++++++++++++++++++- .../wallets/store/actions/fetchProvider.ts | 4 +- .../wallets/store/actions/removeProvider.ts | 2 +- .../store/middlewares/providerWatcher.ts | 3 +- src/logic/wallets/tokens.ts | 2 +- .../load/components/DetailsForm/index.tsx | 2 +- .../components/ReviewInformation/index.tsx | 2 +- src/routes/opening/index.tsx | 2 +- src/routes/safe/components/Apps/utils.ts | 3 +- .../screens/AddressBookInput/index.tsx | 2 +- .../ContractInteraction/Review/index.tsx | 2 +- .../ReviewCustomTx/index.tsx | 2 +- .../ContractInteraction/utils/index.ts | 2 +- .../screens/ReviewCollectible/index.tsx | 2 +- .../SendModal/screens/ReviewTx/index.tsx | 2 +- .../AddOwnerModal/screens/Review/index.tsx | 2 +- .../RemoveOwnerModal/screens/Review/index.tsx | 2 +- .../screens/Review/index.tsx | 2 +- .../ChangeThreshold/index.tsx | 2 +- .../ExpandedTx/ApproveTxModal/index.tsx | 2 +- .../ExpandedTx/RejectTxModal/index.tsx | 2 +- .../TxsTable/ExpandedTx/index.tsx | 3 +- src/test/builder/safe.dom.builder.ts | 4 +- src/test/builder/safe.redux.builder.ts | 3 +- src/test/safe.dom.create.tsx | 5 +- src/test/safe.dom.funds.thresholdGt1.ts | 3 +- src/test/safe.dom.load.tsx | 5 +- src/test/utils/ethereumErrors.ts | 3 +- src/test/utils/tokenMovements.ts | 4 +- src/utils/checksumAddress.ts | 2 +- 51 files changed, 123 insertions(+), 100 deletions(-) diff --git a/src/components/ConnectButton/index.tsx b/src/components/ConnectButton/index.tsx index 2b17a989d4..a520594bf8 100644 --- a/src/components/ConnectButton/index.tsx +++ b/src/components/ConnectButton/index.tsx @@ -2,8 +2,9 @@ import Onboard from 'bnc-onboard' import React from 'react' import Button from 'src/components/layout/Button' -import { getNetworkId, getWeb3, setWeb3 } from 'src/config' +import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' +import { getWeb3, setWeb3 } from 'src/logic/wallets/getWeb3' import { fetchProvider } from 'src/logic/wallets/store/actions' import transactionDataCheck from 'src/logic/wallets/transactionDataCheck' import { getSupportedWallets } from 'src/logic/wallets/utils/walletList' diff --git a/src/components/forms/AddressInput/index.tsx b/src/components/forms/AddressInput/index.tsx index 92501a645b..8655d2590c 100644 --- a/src/components/forms/AddressInput/index.tsx +++ b/src/components/forms/AddressInput/index.tsx @@ -5,7 +5,7 @@ import { OnChange } from 'react-final-form-listeners' import TextField from 'src/components/forms/TextField' import { Validator, composeValidators, mustBeEthereumAddress, required } from 'src/components/forms/validator' import { trimSpaces } from 'src/utils/strings' -import { getAddressFromENS } from 'src/config' +import { getAddressFromENS } from 'src/logic/wallets/getWeb3' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' import { checksumAddress } from 'src/utils/checksumAddress' diff --git a/src/components/forms/validator.ts b/src/components/forms/validator.ts index e23ea147a2..0d50cb93c8 100644 --- a/src/components/forms/validator.ts +++ b/src/components/forms/validator.ts @@ -1,7 +1,7 @@ import { List } from 'immutable' import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import memoize from 'lodash.memoize' type ValidatorReturnType = string | undefined diff --git a/src/config/index.ts b/src/config/index.ts index 55cfe62c42..b5a77283c9 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,13 +1,9 @@ -import memoize from 'lodash.memoize' -import Web3 from 'web3' -import { provider as Provider } from 'web3-core' -import { ContentHash } from 'web3-eth-ens' - import networks from 'src/config/networks' import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkSettings, SafeFeatures } from 'src/config/networks/network.d' import { checksumAddress } from 'src/utils/checksumAddress' import { APP_ENV, ETHERSCAN_API_KEY, GOOGLE_ANALYTICS_ID, INFURA_TOKEN, NETWORK, NODE_ENV } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' +import memoize from 'lodash.memoize' export const getNetworkId = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] @@ -176,40 +172,3 @@ export const getExplorerInfo = (hash: string): BlockScanInfo => { return blockScanInfo } - -// With some wallets from web3connect you have to use their provider instance only for signing -// And our own one to fetch data -export const web3ReadOnly = new Web3( - process.env.NODE_ENV !== 'test' - ? new Web3.providers.HttpProvider(getRpcServiceUrl()) - : window.web3?.currentProvider || 'ws://localhost:8545', -) - -let web3 = web3ReadOnly -export const getWeb3 = (): Web3 => web3 - -export const resetWeb3 = (): void => { - web3 = web3ReadOnly -} - -export const setWeb3 = (provider: Provider): void => { - web3 = new Web3(provider) -} - -export const getBalanceInEtherOf = async (safeAddress: string): Promise => { - if (!web3) { - return '0' - } - - const funds = await web3.eth.getBalance(safeAddress) - - if (!funds) { - return '0' - } - - return web3.utils.fromWei(funds, 'ether').toString() -} - -export const getAddressFromENS = (name: string): Promise => web3.eth.ens.getAddress(name) - -export const getContentFromENS = (name: string): Promise => web3.eth.ens.getContenthash(name) diff --git a/src/logic/contractInteraction/sources/ABIService/index.ts b/src/logic/contractInteraction/sources/ABIService/index.ts index b0b627a371..c9dc15b77d 100644 --- a/src/logic/contractInteraction/sources/ABIService/index.ts +++ b/src/logic/contractInteraction/sources/ABIService/index.ts @@ -1,6 +1,6 @@ import { AbiItem } from 'web3-utils' -import { web3ReadOnly as web3 } from 'src/config' +import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' export interface AllowedAbiItem extends AbiItem { name: string diff --git a/src/logic/contracts/generateBatchRequests.ts b/src/logic/contracts/generateBatchRequests.ts index 5d2e008aea..2d48979bd8 100644 --- a/src/logic/contracts/generateBatchRequests.ts +++ b/src/logic/contracts/generateBatchRequests.ts @@ -1,4 +1,4 @@ -import { web3ReadOnly as web3 } from 'src/config' +import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' /** * Generates a batch request for grouping RPC calls diff --git a/src/logic/contracts/methodIds.ts b/src/logic/contracts/methodIds.ts index a6ff9de330..e24a7e6621 100644 --- a/src/logic/contracts/methodIds.ts +++ b/src/logic/contracts/methodIds.ts @@ -1,4 +1,4 @@ -import { web3ReadOnly as web3 } from 'src/config' +import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' import { DataDecoded, METHOD_TO_ID } from 'src/routes/safe/store/models/types/transactions.d' export const decodeParamsFromSafeMethod = (data: string): DataDecoded | null => { diff --git a/src/logic/contracts/safeContracts.ts b/src/logic/contracts/safeContracts.ts index dd0ef994a8..5d1aa9086f 100644 --- a/src/logic/contracts/safeContracts.ts +++ b/src/logic/contracts/safeContracts.ts @@ -7,8 +7,7 @@ import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { isProxyCode } from 'src/logic/contracts/historicProxyCode' import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses' import { calculateGasOf, calculateGasPrice } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/config' -import { getNetworkIdFrom } from 'src/logic/wallets/getWeb3' +import { getWeb3, getNetworkIdFrom } from 'src/logic/wallets/getWeb3' import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d' import { GnosisSafeProxyFactory } from 'src/types/contracts/GnosisSafeProxyFactory.d' import Web3 from 'web3' diff --git a/src/logic/safe/store/actions/fetchEtherBalance.ts b/src/logic/safe/store/actions/fetchEtherBalance.ts index c1cf13af4a..146a20330b 100644 --- a/src/logic/safe/store/actions/fetchEtherBalance.ts +++ b/src/logic/safe/store/actions/fetchEtherBalance.ts @@ -1,4 +1,4 @@ -import { getBalanceInEtherOf } from 'src/config' +import { getBalanceInEtherOf } from 'src/logic/wallets/getWeb3' import updateSafe from 'src/logic/safe/store/actions/updateSafe' import { SAFE_REDUCER_ID } from 'src/logic/safe/store/reducer/safe' import { Dispatch } from 'redux' diff --git a/src/logic/safe/store/actions/fetchSafe.ts b/src/logic/safe/store/actions/fetchSafe.ts index 9552c7a17d..a398ffb733 100644 --- a/src/logic/safe/store/actions/fetchSafe.ts +++ b/src/logic/safe/store/actions/fetchSafe.ts @@ -5,7 +5,7 @@ import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { getLocalSafe, getSafeName } from 'src/logic/safe/utils' import { enabledFeatures, safeNeedsUpdate } from 'src/logic/safe/utils/safeVersion' import { sameAddress } from 'src/logic/wallets/ethAddresses' -import { getBalanceInEtherOf } from 'src/config' +import { getBalanceInEtherOf } from 'src/logic/wallets/getWeb3' import addSafeOwner from 'src/logic/safe/store/actions/addSafeOwner' import removeSafeOwner from 'src/logic/safe/store/actions/removeSafeOwner' import updateSafe from 'src/logic/safe/store/actions/updateSafe' diff --git a/src/logic/safe/store/actions/fetchSafeCreationTx.ts b/src/logic/safe/store/actions/fetchSafeCreationTx.ts index 3ce7723080..d0e79de406 100644 --- a/src/logic/safe/store/actions/fetchSafeCreationTx.ts +++ b/src/logic/safe/store/actions/fetchSafeCreationTx.ts @@ -1,10 +1,11 @@ import axios from 'axios' import { List } from 'immutable' -import { buildSafeCreationTxUrl, web3ReadOnly } from 'src/config' +import { buildSafeCreationTxUrl } from 'src/config' import { addOrUpdateTransactions } from './transactions/addOrUpdateTransactions' import { makeTransaction } from 'src/logic/safe/store/models/transaction' import { TransactionTypes, TransactionStatus } from 'src/logic/safe/store/models/types/transaction' +import { web3ReadOnly } from 'src/logic/wallets/getWeb3' const getCreationTx = async (safeAddress) => { const url = buildSafeCreationTxUrl(safeAddress) diff --git a/src/logic/safe/store/actions/transactions/fetchTransactions/loadIncomingTransactions.ts b/src/logic/safe/store/actions/transactions/fetchTransactions/loadIncomingTransactions.ts index e9757552aa..ec79aa234a 100644 --- a/src/logic/safe/store/actions/transactions/fetchTransactions/loadIncomingTransactions.ts +++ b/src/logic/safe/store/actions/transactions/fetchTransactions/loadIncomingTransactions.ts @@ -3,7 +3,7 @@ import { List, Map } from 'immutable' import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { ALTERNATIVE_TOKEN_ABI } from 'src/logic/tokens/utils/alternativeAbi' -import { web3ReadOnly } from 'src/config' +import { web3ReadOnly } from 'src/logic/wallets/getWeb3' import { makeIncomingTransaction } from 'src/logic/safe/store/models/incomingTransaction' import fetchTransactions from 'src/logic/safe/store/actions/transactions/fetchTransactions/fetchTransactions' import { TransactionTypes } from 'src/logic/safe/store/models/types/transaction' diff --git a/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts b/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts index a9b6b518d5..89d53d9599 100644 --- a/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts +++ b/src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions.ts @@ -2,7 +2,7 @@ import { fromJS, List, Map } from 'immutable' import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { TOKEN_REDUCER_ID } from 'src/logic/tokens/store/reducer/tokens' -import { web3ReadOnly } from 'src/config' +import { web3ReadOnly } from 'src/logic/wallets/getWeb3' import { PROVIDER_REDUCER_ID } from 'src/logic/wallets/store/reducer/provider' import { buildTx, isCancelTransaction } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' import { SAFE_REDUCER_ID } from 'src/logic/safe/store/reducer/safe' diff --git a/src/logic/safe/transactions/gasNew.ts b/src/logic/safe/transactions/gasNew.ts index ec0cb03892..91015c6206 100644 --- a/src/logic/safe/transactions/gasNew.ts +++ b/src/logic/safe/transactions/gasNew.ts @@ -9,8 +9,7 @@ import { generateSignaturesFromTxConfirmations } from 'src/logic/safe/safeTxSign import { Transaction } from 'src/logic/safe/store/models/types/transaction' import { ZERO_ADDRESS } from 'src/logic/wallets/ethAddresses' import { EMPTY_DATA, calculateGasOf, calculateGasPrice } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/config' -import { getAccountFrom } from 'src/logic/wallets/getWeb3' +import { getAccountFrom, getWeb3 } from 'src/logic/wallets/getWeb3' import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d' const estimateDataGasCosts = (data: string): number => { diff --git a/src/logic/safe/transactions/multisend.ts b/src/logic/safe/transactions/multisend.ts index 02ae91b7a1..18d6d16de8 100644 --- a/src/logic/safe/transactions/multisend.ts +++ b/src/logic/safe/transactions/multisend.ts @@ -1,7 +1,7 @@ import { Transaction } from '@gnosis.pm/safe-apps-sdk' import { AbiItem } from 'web3-utils' import { MultiSend } from 'src/types/contracts/MultiSend.d' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { MULTI_SEND_ADDRESS } from 'src/logic/contracts/safeContracts' const multiSendAbi: AbiItem[] = [ diff --git a/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts b/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts index 0244f6f1df..55fe61d728 100644 --- a/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts +++ b/src/logic/safe/transactions/offchainSigner/EIP712Signer.ts @@ -1,5 +1,5 @@ import { AbstractProvider } from 'web3-core' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' const EIP712_NOT_SUPPORTED_ERROR_MSG = "EIP712 is not supported by user's wallet" diff --git a/src/logic/safe/transactions/offchainSigner/ethSigner.ts b/src/logic/safe/transactions/offchainSigner/ethSigner.ts index 6ac2fd1839..5daeedba84 100644 --- a/src/logic/safe/transactions/offchainSigner/ethSigner.ts +++ b/src/logic/safe/transactions/offchainSigner/ethSigner.ts @@ -1,5 +1,5 @@ import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { AbstractProvider } from 'web3-core/types' const ETH_SIGN_NOT_SUPPORTED_ERROR_MSG = 'ETH_SIGN_NOT_SUPPORTED' diff --git a/src/logic/safe/utils/upgradeSafe.ts b/src/logic/safe/utils/upgradeSafe.ts index c33555e76b..3cd8661016 100644 --- a/src/logic/safe/utils/upgradeSafe.ts +++ b/src/logic/safe/utils/upgradeSafe.ts @@ -7,7 +7,7 @@ import { getGnosisSafeInstanceAt, } from 'src/logic/contracts/safeContracts' import { DELEGATE_CALL } from 'src/logic/safe/transactions' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { MultiSend } from 'src/types/contracts/MultiSend.d' interface MultiSendTx { diff --git a/src/logic/tokens/store/actions/fetchTokens.ts b/src/logic/tokens/store/actions/fetchTokens.ts index 6e3bd732fd..5c5bde4959 100644 --- a/src/logic/tokens/store/actions/fetchTokens.ts +++ b/src/logic/tokens/store/actions/fetchTokens.ts @@ -11,7 +11,7 @@ import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' import { fetchTokenList } from 'src/logic/tokens/api' import { makeToken, Token } from 'src/logic/tokens/store/model/token' import { tokensSelector } from 'src/logic/tokens/store/selectors' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { AppReduxState, store } from 'src/store' import { ensureOnce } from 'src/utils/singleton' import { ThunkDispatch } from 'redux-thunk' diff --git a/src/logic/tokens/utils/tokenHelpers.ts b/src/logic/tokens/utils/tokenHelpers.ts index b619140ebe..48134bdb2b 100644 --- a/src/logic/tokens/utils/tokenHelpers.ts +++ b/src/logic/tokens/utils/tokenHelpers.ts @@ -7,7 +7,7 @@ import { } from 'src/logic/tokens/store/actions/fetchTokens' import { makeToken, Token } from 'src/logic/tokens/store/model/token' import { ALTERNATIVE_TOKEN_ABI } from 'src/logic/tokens/utils/alternativeAbi' -import { web3ReadOnly as web3 } from 'src/config' +import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3' import { isEmptyData } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' import { TxServiceModel } from 'src/logic/safe/store/actions/transactions/fetchTransactions/loadOutgoingTransactions' import { Map } from 'immutable' diff --git a/src/logic/wallets/ethTransactions.ts b/src/logic/wallets/ethTransactions.ts index fa79d0e47d..745ac60a89 100644 --- a/src/logic/wallets/ethTransactions.ts +++ b/src/logic/wallets/ethTransactions.ts @@ -1,7 +1,7 @@ import axios from 'axios' import { BigNumber } from 'bignumber.js' -import { getWeb3, web3ReadOnly } from 'src/config' +import { getWeb3, web3ReadOnly } from 'src/logic/wallets/getWeb3' // const MAINNET_NETWORK = 1 export const EMPTY_DATA = '0x' diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index 0ab0ce46a2..a9bf4e158f 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -1,9 +1,12 @@ import Web3 from 'web3' +import { provider as Provider } from 'web3-core' +import { ContentHash } from 'web3-eth-ens' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { sameAddress } from './ethAddresses' import { EMPTY_DATA } from './ethTransactions' import { ProviderProps } from './store/model/provider' -import { NODE_ENV } from 'src/utils/constants' +import { NODE_ENV, NETWORK, INFURA_TOKEN } from 'src/utils/constants' export const WALLET_PROVIDER = { SAFE: 'SAFE', @@ -23,6 +26,39 @@ export const WALLET_PROVIDER = { TREZOR: 'TREZOR', } +export const getInfuraUrl = (network: ETHEREUM_NETWORK): string => + `https://${ETHEREUM_NETWORK[network].toLowerCase()}.infura.io:443/v3/${INFURA_TOKEN}` + +export const getRPCUrl = (network: ETHEREUM_NETWORK): string => { + switch (network) { + case ETHEREUM_NETWORK.MAINNET: + return getInfuraUrl(network) + case ETHEREUM_NETWORK.RINKEBY: + return getInfuraUrl(network) + case ETHEREUM_NETWORK.ENERGY_WEB_CHAIN: + return 'https://rpc.energyweb.org' + case ETHEREUM_NETWORK.VOLTA: + return 'https://volta-rpc.energyweb.org' + default: + return '' + } +} + +// With some wallets from web3connect you have to use their provider instance only for signing +// And our own one to fetch data +export const web3ReadOnly = new Web3( + process.env.NODE_ENV !== 'test' + ? new Web3.providers.HttpProvider(getRPCUrl(ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY)) + : window.web3?.currentProvider || 'ws://localhost:8545', +) + +let web3 = web3ReadOnly +export const getWeb3 = (): Web3 => web3 + +export const resetWeb3 = (): void => { + web3 = web3ReadOnly +} + export const getAccountFrom = async (web3Provider: Web3): Promise => { const accounts = await web3Provider.eth.getAccounts() @@ -62,3 +98,25 @@ export const getProviderInfo = async (web3Instance: Web3, providerName = 'Wallet hardwareWallet, } } + +export const getAddressFromENS = (name: string): Promise => web3.eth.ens.getAddress(name) + +export const getContentFromENS = (name: string): Promise => web3.eth.ens.getContenthash(name) + +export const setWeb3 = (provider: Provider): void => { + web3 = new Web3(provider) +} + +export const getBalanceInEtherOf = async (safeAddress: string): Promise => { + if (!web3) { + return '0' + } + + const funds = await web3.eth.getBalance(safeAddress) + + if (!funds) { + return '0' + } + + return web3.utils.fromWei(funds, 'ether').toString() +} diff --git a/src/logic/wallets/store/actions/fetchProvider.ts b/src/logic/wallets/store/actions/fetchProvider.ts index 6cbf5f2627..c2907c67dc 100644 --- a/src/logic/wallets/store/actions/fetchProvider.ts +++ b/src/logic/wallets/store/actions/fetchProvider.ts @@ -2,11 +2,11 @@ import ReactGA from 'react-ga' import addProvider from './addProvider' -import { getNetworkId, getWeb3 } from 'src/config' +import { getNetworkId } from 'src/config' import { NOTIFICATIONS, enhanceSnackbarForAction } from 'src/logic/notifications' import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' -import { getProviderInfo } from 'src/logic/wallets/getWeb3' +import { getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' import { makeProvider } from 'src/logic/wallets/store/model/provider' import { updateStoredTransactionsStatus } from 'src/logic/safe/store/actions/transactions/utils/transactionHelpers' import { Dispatch } from 'redux' diff --git a/src/logic/wallets/store/actions/removeProvider.ts b/src/logic/wallets/store/actions/removeProvider.ts index cf75fb4473..be7396b722 100644 --- a/src/logic/wallets/store/actions/removeProvider.ts +++ b/src/logic/wallets/store/actions/removeProvider.ts @@ -4,7 +4,7 @@ import { createAction } from 'redux-actions' import { onboard } from 'src/components/ConnectButton' import { NOTIFICATIONS, enhanceSnackbarForAction } from 'src/logic/notifications' import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' -import { resetWeb3 } from 'src/config' +import { resetWeb3 } from 'src/logic/wallets/getWeb3' export const REMOVE_PROVIDER = 'REMOVE_PROVIDER' diff --git a/src/logic/wallets/store/middlewares/providerWatcher.ts b/src/logic/wallets/store/middlewares/providerWatcher.ts index 0f78fdc6eb..fa938cf685 100644 --- a/src/logic/wallets/store/middlewares/providerWatcher.ts +++ b/src/logic/wallets/store/middlewares/providerWatcher.ts @@ -1,6 +1,5 @@ import closeSnackbar from 'src/logic/notifications/store/actions/closeSnackbar' -import { getWeb3 } from 'src/config' -import { WALLET_PROVIDER, getProviderInfo } from 'src/logic/wallets/getWeb3' +import { WALLET_PROVIDER, getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' import { fetchProvider } from 'src/logic/wallets/store/actions' import { ADD_PROVIDER } from 'src/logic/wallets/store/actions/addProvider' import { REMOVE_PROVIDER } from 'src/logic/wallets/store/actions/removeProvider' diff --git a/src/logic/wallets/tokens.ts b/src/logic/wallets/tokens.ts index 67400d32f0..1ee65887de 100644 --- a/src/logic/wallets/tokens.ts +++ b/src/logic/wallets/tokens.ts @@ -1,4 +1,4 @@ -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' export const toNative = (amt, decimal) => { const web3 = getWeb3() diff --git a/src/routes/load/components/DetailsForm/index.tsx b/src/routes/load/components/DetailsForm/index.tsx index 18c2289228..1524f9e122 100644 --- a/src/routes/load/components/DetailsForm/index.tsx +++ b/src/routes/load/components/DetailsForm/index.tsx @@ -21,7 +21,7 @@ import Block from 'src/components/layout/Block' import Col from 'src/components/layout/Col' import Paragraph from 'src/components/layout/Paragraph' import { SAFE_MASTER_COPY_ADDRESS_V10, getSafeMasterContract, validateProxy } from 'src/logic/contracts/safeContracts' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { FIELD_LOAD_ADDRESS, FIELD_LOAD_NAME } from 'src/routes/load/components/fields' import { secondary } from 'src/theme/variables' diff --git a/src/routes/open/components/ReviewInformation/index.tsx b/src/routes/open/components/ReviewInformation/index.tsx index 8ef97c1fd0..2ed3dff91e 100644 --- a/src/routes/open/components/ReviewInformation/index.tsx +++ b/src/routes/open/components/ReviewInformation/index.tsx @@ -13,7 +13,7 @@ import Row from 'src/components/layout/Row' import OpenPaper from 'src/components/Stepper/OpenPaper' import { estimateGasForDeployingSafe } from 'src/logic/contracts/safeContracts' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { getAccountsFrom, getNamesFrom } from 'src/routes/open/utils/safeDataExtractor' import { FIELD_CONFIRMATIONS, FIELD_NAME, getNumOwnersFrom } from '../fields' diff --git a/src/routes/opening/index.tsx b/src/routes/opening/index.tsx index 15b09a1b23..d976284625 100644 --- a/src/routes/opening/index.tsx +++ b/src/routes/opening/index.tsx @@ -11,7 +11,7 @@ import Img from 'src/components/layout/Img' import Paragraph from 'src/components/layout/Paragraph' import { initContracts } from 'src/logic/contracts/safeContracts' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { background, connected } from 'src/theme/variables' import { providerNameSelector } from 'src/logic/wallets/store/selectors' import { useSelector } from 'react-redux' diff --git a/src/routes/safe/components/Apps/utils.ts b/src/routes/safe/components/Apps/utils.ts index f4ba4ae52c..af670e6737 100644 --- a/src/routes/safe/components/Apps/utils.ts +++ b/src/routes/safe/components/Apps/utils.ts @@ -3,7 +3,8 @@ import memoize from 'lodash.memoize' import { SafeApp } from './types.d' -import { getContentFromENS, getGnosisSafeAppsUrl } from 'src/config' +import { getGnosisSafeAppsUrl } from 'src/config' +import { getContentFromENS } from 'src/logic/wallets/getWeb3' import appsIconSvg from 'src/routes/safe/components/Transactions/TxsTable/TxType/assets/appsIcon.svg' import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' diff --git a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx index f2fd3f26d4..db9b9c90d2 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/AddressBookInput/index.tsx @@ -10,7 +10,7 @@ import { styles } from './style' import Identicon from 'src/components/Identicon' import { mustBeEthereumAddress, mustBeEthereumContractAddress } from 'src/components/forms/validator' import { addressBookSelector } from 'src/logic/addressBook/store/selectors' -import { getAddressFromENS } from 'src/config' +import { getAddressFromENS } from 'src/logic/wallets/getWeb3' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' import { AddressBookEntry, AddressBookState } from 'src/logic/addressBook/model/addressBook' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx index 57e970cc16..5d2d1c1064 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review/index.tsx @@ -16,7 +16,7 @@ import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { styles } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/style' import Header from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Header' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx index 00ffc0db42..4b6ffa401e 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/ReviewCustomTx/index.tsx @@ -20,7 +20,7 @@ import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { getEthAsToken } from 'src/logic/tokens/utils/tokenHelpers' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { sm } from 'src/theme/variables' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts index aa6ef4dbed..c30e1eaad4 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts +++ b/src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils/index.ts @@ -3,7 +3,7 @@ import createDecorator from 'final-form-calculate' import { ContractSendMethod } from 'web3-eth-contract' import { AbiItemExtended } from 'src/logic/contractInteraction/sources/ABIService' -import { getAddressFromENS, getWeb3 } from 'src/config' +import { getAddressFromENS, getWeb3 } from 'src/logic/wallets/getWeb3' import { TransactionReviewType } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review' import { isValidEnsName } from 'src/logic/wallets/ethAddresses' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx index 4ec4733655..7a77be83b8 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewCollectible/index.tsx @@ -27,7 +27,7 @@ import { } from 'src/logic/tokens/store/actions/fetchTokens' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH } from 'src/logic/tokens/utils/tokenHelpers' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { sm } from 'src/theme/variables' diff --git a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx index b51540c1c0..f9e1ff3035 100644 --- a/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx +++ b/src/routes/safe/components/Balances/SendModal/screens/ReviewTx/index.tsx @@ -24,7 +24,7 @@ import { getHumanFriendlyToken } from 'src/logic/tokens/store/actions/fetchToken import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { ETH_ADDRESS } from 'src/logic/tokens/utils/tokenHelpers' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import SafeInfo from 'src/routes/safe/components/Balances/SendModal/SafeInfo' import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils' import { extendedSafeTokensSelector } from 'src/routes/safe/container/selector' diff --git a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx index 29d69fc302..1f659eba39 100644 --- a/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/AddOwnerModal/screens/Review/index.tsx @@ -18,7 +18,7 @@ import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' import { safeNameSelector, safeOwnersSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { styles } from './style' diff --git a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx index a76d6e6cc2..0a9b13b336 100644 --- a/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/RemoveOwnerModal/screens/Review/index.tsx @@ -18,7 +18,7 @@ import { getGnosisSafeInstanceAt, SENTINEL_ADDRESS } from 'src/logic/contracts/s import { safeNameSelector, safeOwnersSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { styles } from './style' diff --git a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx index 654ae11640..1b1e475243 100644 --- a/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx +++ b/src/routes/safe/components/Settings/ManageOwners/ReplaceOwnerModal/screens/Review/index.tsx @@ -23,7 +23,7 @@ import { } from 'src/logic/safe/store/selectors' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { styles } from './style' diff --git a/src/routes/safe/components/Settings/ThresholdSettings/ChangeThreshold/index.tsx b/src/routes/safe/components/Settings/ThresholdSettings/ChangeThreshold/index.tsx index 02a26987f0..e821d4d3ed 100644 --- a/src/routes/safe/components/Settings/ThresholdSettings/ChangeThreshold/index.tsx +++ b/src/routes/safe/components/Settings/ThresholdSettings/ChangeThreshold/index.tsx @@ -19,7 +19,7 @@ import Row from 'src/components/layout/Row' import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' const THRESHOLD_FIELD_NAME = 'threshold' diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.tsx index c140bf31c4..e6eb22ee76 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/ApproveTxModal/index.tsx @@ -18,7 +18,7 @@ import Row from 'src/components/layout/Row' import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { userAccountSelector } from 'src/logic/wallets/store/selectors' import processTransaction from 'src/logic/safe/store/actions/processTransaction' diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/RejectTxModal/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/RejectTxModal/index.tsx index 16275c58df..e5372d4c15 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/RejectTxModal/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/RejectTxModal/index.tsx @@ -17,7 +17,7 @@ import { TX_NOTIFICATION_TYPES } from 'src/logic/safe/transactions' import { estimateTxGasCosts } from 'src/logic/safe/transactions/gasNew' import { formatAmount } from 'src/logic/tokens/utils/formatAmount' import { EMPTY_DATA } from 'src/logic/wallets/ethTransactions' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import createTransaction from 'src/logic/safe/store/actions/createTransaction' import { safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx index 2fa0867ef7..eaae1cb214 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx @@ -20,11 +20,12 @@ import Hairline from 'src/components/layout/Hairline' import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' import Span from 'src/components/layout/Span' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { INCOMING_TX_TYPES } from 'src/logic/safe/store/models/incomingTransaction' import { safeNonceSelector, safeThresholdSelector } from 'src/logic/safe/store/selectors' import { Transaction, TransactionTypes } from 'src/logic/safe/store/models/types/transaction' import IncomingTxDescription from './IncomingTxDescription' -import { getExplorerInfo, getWeb3 } from 'src/config' +import { getExplorerInfo } from 'src/config' const useStyles = makeStyles(styles as any) diff --git a/src/test/builder/safe.dom.builder.ts b/src/test/builder/safe.dom.builder.ts index 9454e7e982..8bed2bd758 100644 --- a/src/test/builder/safe.dom.builder.ts +++ b/src/test/builder/safe.dom.builder.ts @@ -1,6 +1,8 @@ +// +import { } from 'redux' import { aNewStore, } from 'src/store' import { sleep } from 'src/utils/timer' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' import { sendEtherTo } from 'src/test/utils/tokenMovements' import { aMinedSafe } from 'src/test/builder/safe.redux.builder' import { renderSafeView } from 'src/test/builder/safe.dom.utils' diff --git a/src/test/builder/safe.redux.builder.ts b/src/test/builder/safe.redux.builder.ts index b7292eff4c..8a44555ae7 100644 --- a/src/test/builder/safe.redux.builder.ts +++ b/src/test/builder/safe.redux.builder.ts @@ -7,8 +7,7 @@ import { getOwnerNameBy, getOwnerAddressBy, } from 'src/routes/open/components/fields' -import { getWeb3 } from 'src/config' -import { getProviderInfo } from 'src/logic/wallets/getWeb3' +import { getWeb3, getProviderInfo } from 'src/logic/wallets/getWeb3' import { createSafe, } from 'src/routes/open/container/Open' import { makeProvider } from 'src/logic/wallets/store/model/provider' import addProvider from 'src/logic/wallets/store/actions/addProvider' diff --git a/src/test/safe.dom.create.tsx b/src/test/safe.dom.create.tsx index 16843fed20..032ebbf3de 100644 --- a/src/test/safe.dom.create.tsx +++ b/src/test/safe.dom.create.tsx @@ -1,4 +1,6 @@ +// import * as React from 'react' +import { } from 'redux' import { render, fireEvent, act } from '@testing-library/react' import { Provider } from 'react-redux' import { ConnectedRouter } from 'connected-react-router' @@ -6,8 +8,7 @@ import { sleep } from 'src/utils/timer' import { ADD_OWNER_BUTTON } from 'src/routes/open/components/SafeOwnersConfirmationsForm' import Open from 'src/routes/open/container/Open' import { aNewStore, history, } from 'src/store' -import { getWeb3 } from 'src/config' -import { getProviderInfo} from 'src/logic/wallets/getWeb3' +import { getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' import addProvider from 'src/logic/wallets/store/actions/addProvider' import { makeProvider } from 'src/logic/wallets/store/model/provider' import { getGnosisSafeInstanceAt } from 'src/logic/contracts/safeContracts' diff --git a/src/test/safe.dom.funds.thresholdGt1.ts b/src/test/safe.dom.funds.thresholdGt1.ts index 6486622575..7331aba493 100644 --- a/src/test/safe.dom.funds.thresholdGt1.ts +++ b/src/test/safe.dom.funds.thresholdGt1.ts @@ -1,9 +1,10 @@ +// import { fireEvent, waitForElement } from '@testing-library/react' import { aNewStore } from 'src/store' import { aMinedSafe } from 'src/test/builder/safe.redux.builder' import { sendEtherTo } from 'src/test/utils/tokenMovements' import { renderSafeView } from 'src/test/builder/safe.dom.utils' -import { getBalanceInEtherOf, getWeb3 } from 'src/config' +import { getWeb3, getBalanceInEtherOf } from 'src/logic/wallets/getWeb3' import { sleep } from 'src/utils/timer' import '@testing-library/jest-dom/extend-expect' import { BALANCE_ROW_TEST_ID } from 'src/routes/safe/components/Balances' diff --git a/src/test/safe.dom.load.tsx b/src/test/safe.dom.load.tsx index 049c923760..7e10d01752 100644 --- a/src/test/safe.dom.load.tsx +++ b/src/test/safe.dom.load.tsx @@ -1,12 +1,13 @@ +// import * as React from 'react' +import { } from 'redux' import { Provider } from 'react-redux' import { render, fireEvent, act } from '@testing-library/react' import { ConnectedRouter } from 'connected-react-router' import Load from 'src/routes/load/container/Load' import { aNewStore, history, } from 'src/store' import { sleep } from 'src/utils/timer' -import { getWeb3 } from 'src/config' -import { getProviderInfo } from 'src/logic/wallets/getWeb3' +import { getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' import addProvider from 'src/logic/wallets/store/actions/addProvider' import { makeProvider } from 'src/logic/wallets/store/model/provider' import { aMinedSafe } from './builder/safe.redux.builder' diff --git a/src/test/utils/ethereumErrors.ts b/src/test/utils/ethereumErrors.ts index ef653c08c6..c141e836ac 100644 --- a/src/test/utils/ethereumErrors.ts +++ b/src/test/utils/ethereumErrors.ts @@ -1,5 +1,6 @@ +// import abi from 'ethereumjs-abi' -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' export const getErrorMessage = async (to, value, data, from) => { const web3 = getWeb3() diff --git a/src/test/utils/tokenMovements.ts b/src/test/utils/tokenMovements.ts index ebbc22ba78..e15863d868 100644 --- a/src/test/utils/tokenMovements.ts +++ b/src/test/utils/tokenMovements.ts @@ -1,7 +1,7 @@ //import contract from '@truffle/contract' -import { getBalanceInEtherOf, getWeb3 } from 'src/config' +import { getBalanceInEtherOf, getWeb3 } from 'src/logic/wallets/getWeb3' //import { ensureOnce } from 'src/utils/singleton' -// import { toNative } from 'src/logic/wallets/tokens' +import { toNative } from 'src/logic/wallets/tokens' //import TokenOMG from '../../../build/contracts/TokenOMG' //import TokenRDN from '../../../build/contracts/TokenRDN' //import Token6Decimals from '../../../build/contracts/Token6Decimals.json' diff --git a/src/utils/checksumAddress.ts b/src/utils/checksumAddress.ts index 43357f26b2..b0cd1fdca4 100644 --- a/src/utils/checksumAddress.ts +++ b/src/utils/checksumAddress.ts @@ -1,4 +1,4 @@ -import { getWeb3 } from 'src/config' +import { getWeb3 } from 'src/logic/wallets/getWeb3' export const checksumAddress = (address: string): string => { return getWeb3().utils.toChecksumAddress(address) From dc83b5bf01fd96b87ca340cde42a761a96717d7c Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Date: Thu, 8 Oct 2020 19:03:33 +0200 Subject: [PATCH 8/8] Remove buildSafeCreationTxUrl from config index to avoid circular dependency --- src/config/index.ts | 9 ------- .../safe/store/actions/fetchSafeCreationTx.ts | 2 +- .../safe/utils/buildSafeCreationTxUrl.ts | 10 ++++++++ src/logic/wallets/getWeb3.ts | 24 +++---------------- 4 files changed, 14 insertions(+), 31 deletions(-) create mode 100644 src/logic/safe/utils/buildSafeCreationTxUrl.ts diff --git a/src/config/index.ts b/src/config/index.ts index b5a77283c9..5c9223eddb 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,6 +1,5 @@ import networks from 'src/config/networks' import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkSettings, SafeFeatures } from 'src/config/networks/network.d' -import { checksumAddress } from 'src/utils/checksumAddress' import { APP_ENV, ETHERSCAN_API_KEY, GOOGLE_ANALYTICS_ID, INFURA_TOKEN, NETWORK, NODE_ENV } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' import memoize from 'lodash.memoize' @@ -92,14 +91,6 @@ export const getSafeCreationTxUri = (safeAddress: string) => `safes/${safeAddres export const getGoogleAnalyticsTrackingID = (): string => GOOGLE_ANALYTICS_ID[getNetworkId()] -export const buildSafeCreationTxUrl = (safeAddress: string) => { - const host = getTxServiceUrl() - const address = checksumAddress(safeAddress) - const base = getSafeCreationTxUri(address) - - return `${host}${base}` -} - const fetchContractABI = memoize( async (url: string, contractAddress: string, apiKey?: string) => { let params: any = { diff --git a/src/logic/safe/store/actions/fetchSafeCreationTx.ts b/src/logic/safe/store/actions/fetchSafeCreationTx.ts index d0e79de406..6504d22600 100644 --- a/src/logic/safe/store/actions/fetchSafeCreationTx.ts +++ b/src/logic/safe/store/actions/fetchSafeCreationTx.ts @@ -1,7 +1,7 @@ import axios from 'axios' import { List } from 'immutable' -import { buildSafeCreationTxUrl } from 'src/config' +import { buildSafeCreationTxUrl } from 'src/logic/safe/utils/buildSafeCreationTxUrl' import { addOrUpdateTransactions } from './transactions/addOrUpdateTransactions' import { makeTransaction } from 'src/logic/safe/store/models/transaction' import { TransactionTypes, TransactionStatus } from 'src/logic/safe/store/models/types/transaction' diff --git a/src/logic/safe/utils/buildSafeCreationTxUrl.ts b/src/logic/safe/utils/buildSafeCreationTxUrl.ts new file mode 100644 index 0000000000..19554e563a --- /dev/null +++ b/src/logic/safe/utils/buildSafeCreationTxUrl.ts @@ -0,0 +1,10 @@ +import { getTxServiceUrl, getSafeCreationTxUri } from 'src/config' +import { checksumAddress } from 'src/utils/checksumAddress' + +export const buildSafeCreationTxUrl = (safeAddress: string): string => { + const host = getTxServiceUrl() + const address = checksumAddress(safeAddress) + const base = getSafeCreationTxUri(address) + + return `${host}${base}` +} diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index a9bf4e158f..c6c61ab4c4 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -2,11 +2,11 @@ import Web3 from 'web3' import { provider as Provider } from 'web3-core' import { ContentHash } from 'web3-eth-ens' -import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { sameAddress } from './ethAddresses' import { EMPTY_DATA } from './ethTransactions' import { ProviderProps } from './store/model/provider' -import { NODE_ENV, NETWORK, INFURA_TOKEN } from 'src/utils/constants' +import { NODE_ENV } from 'src/utils/constants' +import { getRpcServiceUrl } from 'src/config' export const WALLET_PROVIDER = { SAFE: 'SAFE', @@ -26,29 +26,11 @@ export const WALLET_PROVIDER = { TREZOR: 'TREZOR', } -export const getInfuraUrl = (network: ETHEREUM_NETWORK): string => - `https://${ETHEREUM_NETWORK[network].toLowerCase()}.infura.io:443/v3/${INFURA_TOKEN}` - -export const getRPCUrl = (network: ETHEREUM_NETWORK): string => { - switch (network) { - case ETHEREUM_NETWORK.MAINNET: - return getInfuraUrl(network) - case ETHEREUM_NETWORK.RINKEBY: - return getInfuraUrl(network) - case ETHEREUM_NETWORK.ENERGY_WEB_CHAIN: - return 'https://rpc.energyweb.org' - case ETHEREUM_NETWORK.VOLTA: - return 'https://volta-rpc.energyweb.org' - default: - return '' - } -} - // With some wallets from web3connect you have to use their provider instance only for signing // And our own one to fetch data export const web3ReadOnly = new Web3( process.env.NODE_ENV !== 'test' - ? new Web3.providers.HttpProvider(getRPCUrl(ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY)) + ? new Web3.providers.HttpProvider(getRpcServiceUrl()) : window.web3?.currentProvider || 'ws://localhost:8545', )