From 9ab20604b1e3415c646b46162e7732bcf352297d Mon Sep 17 00:00:00 2001 From: fernandomg Date: Wed, 30 Sep 2020 16:33:34 -0300 Subject: [PATCH 01/26] add network based configs Co-authored-by: Matias Dastugue --- src/config/mainnet.ts | 40 +++++++++++++++++++++++++++++ src/config/network.d.ts | 57 +++++++++++++++++++++++++++++++++++++++++ src/config/rinkeby.ts | 40 +++++++++++++++++++++++++++++ src/config/xdai.ts | 28 ++++++++++++++++++++ 4 files changed, 165 insertions(+) create mode 100644 src/config/mainnet.ts create mode 100644 src/config/network.d.ts create mode 100644 src/config/rinkeby.ts create mode 100644 src/config/xdai.ts diff --git a/src/config/mainnet.ts b/src/config/mainnet.ts new file mode 100644 index 0000000000..87e3716a8d --- /dev/null +++ b/src/config/mainnet.ts @@ -0,0 +1,40 @@ +import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' +import { EnvironmentSettings, NetworkConfig } from 'src/config/network' + +const dev: EnvironmentSettings = { + TX_SERVICE_HOST: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', + SAFE_APPS_URL: 'https://safe-apps.dev.gnosisdev.com/', + GAS_PRICE_ORACLE_URL: 'https://ethgasstation.info/json/ethgasAPI.json', + RPC_SERVICE_URL: 'https://mainnet.infura.io:443/v3/', + NETWORK_EXPLORER_URL: 'https://etherscan.io/', + NETWORK_EXPLORER_API_URL: 'https://api.etherscan.io/api', +} + +const mainnet: NetworkConfig = { + environment: { + dev, + staging: { + ...dev, + SAFE_APPS_URL: 'https://safe-apps.staging.gnosisdev.com', + }, + production: { + ...dev, + TX_SERVICE_HOST: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', + SAFE_APPS_URL: 'https://apps.gnosis-safe.io/', + }, + }, + network: { + ID: 1, + COLOR: '#E8E7E6', + LABEL: 'Mainnet', + NATIVE_COIN: { + address: '0x000', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoUri: EtherLogo, + }, + } +} + +export default mainnet diff --git a/src/config/network.d.ts b/src/config/network.d.ts new file mode 100644 index 0000000000..6e4c68ca12 --- /dev/null +++ b/src/config/network.d.ts @@ -0,0 +1,57 @@ +type DisplayFlag = 'enable' | 'disable' + +// matches src/logic/tokens/store/model/token.ts `TokenProps` type +type Token = { + address: string + name: string + symbol: string + decimals: number + logoUri?: string +} + +type NetworkSettings = { + ID: number, + COLOR: string, + LABEL: string, + NATIVE_COIN: Token, +} + +// something around this to display or not some critical sections in the app, depending on the network support +// I listed the ones that may conflict with the network. +// If non is present, all the sections are available. +type SafeFeatures = { + SAFE_APPS?: DisplayFlag, + COLLECTIBLES?: DisplayFlag, + CONTRACT_INTERACTION?: DisplayFlag +} + +type GasPrice = { + GAS_PRICE: number + GAS_PRICE_ORACLE_URL?: string +} | { + GAS_PRICE?: number + // for infura there's a REST API Token required stored in: `REACT_APP_INFURA_TOKEN` + GAS_PRICE_ORACLE_URL: string +} + +export type EnvironmentSettings = GasPrice & { + TX_SERVICE_HOST: string + // Shall we keep a reference to the relay? + RELAY_API_URL?: string + SAFE_APPS_URL: string + RPC_SERVICE_URL: string + NETWORK_EXPLORER_URL: string + NETWORK_EXPLORER_API_URL: string +} + +type SafeEnvironments = { + dev?: EnvironmentSettings + staging?: EnvironmentSettings + production: EnvironmentSettings +} + +export interface NetworkConfig { + network: NetworkSettings + features?: SafeFeatures + environment: SafeEnvironments +} diff --git a/src/config/rinkeby.ts b/src/config/rinkeby.ts new file mode 100644 index 0000000000..45b8878970 --- /dev/null +++ b/src/config/rinkeby.ts @@ -0,0 +1,40 @@ +import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' +import { NetworkConfig } from 'src/config/network' + +const dev = { + TX_SERVICE_HOST: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', + SAFE_APPS_URL: 'https://safe-apps.dev.gnosisdev.com/', + GAS_PRICE_ORACLE_URL: 'https://ethgasstation.info/json/ethgasAPI.json', + RPC_SERVICE_URL: 'https://rinkeby.infura.io:443/v3/', + NETWORK_EXPLORER_URL: 'https://rinkeby.etherscan.io/', + NETWORK_EXPLORER_API_URL: 'https://api-rinkeby.etherscan.io/api' +} + +const rinkeby: NetworkConfig = { + environment: { + dev, + staging: { + ...dev, + SAFE_APPS_URL: 'https://safe-apps.staging.gnosisdev.com', + }, + production: { + ...dev, + TX_SERVICE_HOST: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', + SAFE_APPS_URL: 'https://apps.gnosis-safe.io/', + }, + }, + network: { + ID: 4, + COLOR: '#E8673C', + LABEL: 'Rinkeby', + NATIVE_COIN: { + address: '0x000', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoUri: EtherLogo, + }, + } +} + +export default rinkeby diff --git a/src/config/xdai.ts b/src/config/xdai.ts new file mode 100644 index 0000000000..cbdc6a5b4e --- /dev/null +++ b/src/config/xdai.ts @@ -0,0 +1,28 @@ +import { NetworkConfig } from 'src/config/network' + +const xDai: NetworkConfig = { + network: { + ID: 100, + COLOR: '#48A8A6', + LABEL: 'xDai STAKE', + NATIVE_COIN: { + address: '0x000', + name: 'xDai', + symbol: 'xDai', + decimals: 18, + logoUri: '', + }, + }, + environment: { + production: { + TX_SERVICE_HOST: 'https://safe-transaction.xdai.gnosis.io/api/v1/', + SAFE_APPS_URL: 'https://apps.gnosis-safe.io/', + GAS_PRICE: 1e9, + RPC_SERVICE_URL: 'https://rpc.xdaichain.com/', + NETWORK_EXPLORER_URL: 'https://blockscout.com/poa/xdai/', + NETWORK_EXPLORER_API_URL: 'https://blockscout.com/poa/xdai/api', + }, + } +} + +export default xDai From 79fdcd9a9e62b4bbbfbbec9284510ab7b453f102 Mon Sep 17 00:00:00 2001 From: Mati Dastugue Date: Thu, 1 Oct 2020 12:08:39 -0300 Subject: [PATCH 02/26] Rename dev config by baseConfig --- src/config/mainnet.ts | 10 ++++++---- src/config/rinkeby.ts | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/config/mainnet.ts b/src/config/mainnet.ts index 87e3716a8d..6c1ed77417 100644 --- a/src/config/mainnet.ts +++ b/src/config/mainnet.ts @@ -1,7 +1,7 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' import { EnvironmentSettings, NetworkConfig } from 'src/config/network' -const dev: EnvironmentSettings = { +const baseConfig: EnvironmentSettings = { TX_SERVICE_HOST: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', SAFE_APPS_URL: 'https://safe-apps.dev.gnosisdev.com/', GAS_PRICE_ORACLE_URL: 'https://ethgasstation.info/json/ethgasAPI.json', @@ -12,13 +12,15 @@ const dev: EnvironmentSettings = { const mainnet: NetworkConfig = { environment: { - dev, + dev:{ + ...baseConfig + }, staging: { - ...dev, + ...baseConfig, SAFE_APPS_URL: 'https://safe-apps.staging.gnosisdev.com', }, production: { - ...dev, + ...baseConfig, TX_SERVICE_HOST: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', SAFE_APPS_URL: 'https://apps.gnosis-safe.io/', }, diff --git a/src/config/rinkeby.ts b/src/config/rinkeby.ts index 45b8878970..095f5a1b01 100644 --- a/src/config/rinkeby.ts +++ b/src/config/rinkeby.ts @@ -1,7 +1,7 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' import { NetworkConfig } from 'src/config/network' -const dev = { +const baseConfig = { TX_SERVICE_HOST: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', SAFE_APPS_URL: 'https://safe-apps.dev.gnosisdev.com/', GAS_PRICE_ORACLE_URL: 'https://ethgasstation.info/json/ethgasAPI.json', @@ -12,13 +12,15 @@ const dev = { const rinkeby: NetworkConfig = { environment: { - dev, + dev:{ + ...baseConfig + }, staging: { - ...dev, + ...baseConfig, SAFE_APPS_URL: 'https://safe-apps.staging.gnosisdev.com', }, production: { - ...dev, + ...baseConfig, TX_SERVICE_HOST: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', SAFE_APPS_URL: 'https://apps.gnosis-safe.io/', }, From 5b90fa92923ceba4e2409c63c74e7b0e3132bfe2 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Thu, 1 Oct 2020 13:18:54 -0300 Subject: [PATCH 03/26] use ETHEREUM_NETWORK enum to define the network id Co-authored-by: Matias Dastugue --- src/config/mainnet.ts | 7 ++++--- src/config/rinkeby.ts | 7 ++++--- src/config/xdai.ts | 3 ++- src/logic/wallets/getWeb3.ts | 1 + 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/config/mainnet.ts b/src/config/mainnet.ts index 6c1ed77417..519af81b23 100644 --- a/src/config/mainnet.ts +++ b/src/config/mainnet.ts @@ -1,5 +1,6 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' import { EnvironmentSettings, NetworkConfig } from 'src/config/network' +import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { TX_SERVICE_HOST: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', @@ -12,8 +13,8 @@ const baseConfig: EnvironmentSettings = { const mainnet: NetworkConfig = { environment: { - dev:{ - ...baseConfig + dev: { + ...baseConfig, }, staging: { ...baseConfig, @@ -26,7 +27,7 @@ const mainnet: NetworkConfig = { }, }, network: { - ID: 1, + ID: ETHEREUM_NETWORK.MAINNET, COLOR: '#E8E7E6', LABEL: 'Mainnet', NATIVE_COIN: { diff --git a/src/config/rinkeby.ts b/src/config/rinkeby.ts index 095f5a1b01..392334779f 100644 --- a/src/config/rinkeby.ts +++ b/src/config/rinkeby.ts @@ -1,5 +1,6 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' import { NetworkConfig } from 'src/config/network' +import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig = { TX_SERVICE_HOST: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', @@ -12,8 +13,8 @@ const baseConfig = { const rinkeby: NetworkConfig = { environment: { - dev:{ - ...baseConfig + dev: { + ...baseConfig, }, staging: { ...baseConfig, @@ -26,7 +27,7 @@ const rinkeby: NetworkConfig = { }, }, network: { - ID: 4, + ID: ETHEREUM_NETWORK.RINKEBY, COLOR: '#E8673C', LABEL: 'Rinkeby', NATIVE_COIN: { diff --git a/src/config/xdai.ts b/src/config/xdai.ts index cbdc6a5b4e..9e6c92ebc1 100644 --- a/src/config/xdai.ts +++ b/src/config/xdai.ts @@ -1,8 +1,9 @@ import { NetworkConfig } from 'src/config/network' +import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const xDai: NetworkConfig = { network: { - ID: 100, + ID: ETHEREUM_NETWORK.XDAI, COLOR: '#48A8A6', LABEL: 'xDai STAKE', NATIVE_COIN: { diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index a67f1da2a8..0853df8ee9 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -16,6 +16,7 @@ export enum ETHEREUM_NETWORK { RINKEBY = 4, GOERLI = 5, KOVAN = 42, + XDAI = 100, ENERGY_WEB_CHAIN = 246, VOLTA = 73799, UNKNOWN = 0, From c0859fdc4368e42865a850c5d94507de5f4773eb Mon Sep 17 00:00:00 2001 From: fernandomg Date: Thu, 1 Oct 2020 13:55:12 -0300 Subject: [PATCH 04/26] change config keys from CONSTANT_CASE to upperCase Co-authored-by: Matias Dastugue --- src/config/mainnet.ts | 26 +++++++++++++------------- src/config/network.d.ts | 34 +++++++++++++++++----------------- src/config/rinkeby.ts | 31 +++++++++++++++---------------- src/config/xdai.ts | 20 ++++++++++---------- 4 files changed, 55 insertions(+), 56 deletions(-) diff --git a/src/config/mainnet.ts b/src/config/mainnet.ts index 519af81b23..ea3c78abfd 100644 --- a/src/config/mainnet.ts +++ b/src/config/mainnet.ts @@ -3,12 +3,12 @@ import { EnvironmentSettings, NetworkConfig } from 'src/config/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { - TX_SERVICE_HOST: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', - SAFE_APPS_URL: 'https://safe-apps.dev.gnosisdev.com/', - GAS_PRICE_ORACLE_URL: 'https://ethgasstation.info/json/ethgasAPI.json', - RPC_SERVICE_URL: 'https://mainnet.infura.io:443/v3/', - NETWORK_EXPLORER_URL: 'https://etherscan.io/', - NETWORK_EXPLORER_API_URL: 'https://api.etherscan.io/api', + txServiceHost: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', + safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', + gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', + rpcServiceUrl: 'https://mainnet.infura.io:443/v3/', + networkExplorerUrl: 'https://etherscan.io/', + networkExplorerApiUrl: 'https://api.etherscan.io/api', } const mainnet: NetworkConfig = { @@ -18,19 +18,19 @@ const mainnet: NetworkConfig = { }, staging: { ...baseConfig, - SAFE_APPS_URL: 'https://safe-apps.staging.gnosisdev.com', + safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com', }, production: { ...baseConfig, - TX_SERVICE_HOST: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', - SAFE_APPS_URL: 'https://apps.gnosis-safe.io/', + txServiceHost: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', + safeAppsUrl: 'https://apps.gnosis-safe.io/', }, }, network: { - ID: ETHEREUM_NETWORK.MAINNET, - COLOR: '#E8E7E6', - LABEL: 'Mainnet', - NATIVE_COIN: { + id: ETHEREUM_NETWORK.MAINNET, + color: '#E8E7E6', + label: 'Mainnet', + nativeCoin: { address: '0x000', name: 'Ether', symbol: 'ETH', diff --git a/src/config/network.d.ts b/src/config/network.d.ts index 6e4c68ca12..b2b889a108 100644 --- a/src/config/network.d.ts +++ b/src/config/network.d.ts @@ -10,38 +10,38 @@ type Token = { } type NetworkSettings = { - ID: number, - COLOR: string, - LABEL: string, - NATIVE_COIN: Token, + id: number, + color: string, + label: string, + nativeCoin: Token, } // something around this to display or not some critical sections in the app, depending on the network support // I listed the ones that may conflict with the network. // If non is present, all the sections are available. type SafeFeatures = { - SAFE_APPS?: DisplayFlag, - COLLECTIBLES?: DisplayFlag, - CONTRACT_INTERACTION?: DisplayFlag + safeApps?: DisplayFlag, + collectibles?: DisplayFlag, + contractInteraction?: DisplayFlag } type GasPrice = { - GAS_PRICE: number - GAS_PRICE_ORACLE_URL?: string + gasPrice: number + gasPriceOracleUrl?: string } | { - GAS_PRICE?: number + gasPrice?: number // for infura there's a REST API Token required stored in: `REACT_APP_INFURA_TOKEN` - GAS_PRICE_ORACLE_URL: string + gasPriceOracleUrl: string } export type EnvironmentSettings = GasPrice & { - TX_SERVICE_HOST: string + txServiceHost: string // Shall we keep a reference to the relay? - RELAY_API_URL?: string - SAFE_APPS_URL: string - RPC_SERVICE_URL: string - NETWORK_EXPLORER_URL: string - NETWORK_EXPLORER_API_URL: string + relayApiUrl?: string + safeAppsUrl: string + rpcServiceUrl: string + networkExplorerUrl: string + networkExplorerApiUrl: string } type SafeEnvironments = { diff --git a/src/config/rinkeby.ts b/src/config/rinkeby.ts index 392334779f..0859e9aa4e 100644 --- a/src/config/rinkeby.ts +++ b/src/config/rinkeby.ts @@ -3,41 +3,40 @@ import { NetworkConfig } from 'src/config/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig = { - TX_SERVICE_HOST: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', - SAFE_APPS_URL: 'https://safe-apps.dev.gnosisdev.com/', - GAS_PRICE_ORACLE_URL: 'https://ethgasstation.info/json/ethgasAPI.json', - RPC_SERVICE_URL: 'https://rinkeby.infura.io:443/v3/', - NETWORK_EXPLORER_URL: 'https://rinkeby.etherscan.io/', - NETWORK_EXPLORER_API_URL: 'https://api-rinkeby.etherscan.io/api' + txServiceHost: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', + safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', + gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', + rpcServiceUrl: 'https://rinkeby.infura.io:443/v3/', + networkExplorerUrl: 'https://rinkeby.etherscan.io/', + networkExplorerApiUrl: 'https://api-rinkeby.etherscan.io/api', } const rinkeby: NetworkConfig = { environment: { dev: { ...baseConfig, - }, - staging: { + }, staging: { ...baseConfig, - SAFE_APPS_URL: 'https://safe-apps.staging.gnosisdev.com', + safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com', }, production: { ...baseConfig, - TX_SERVICE_HOST: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', - SAFE_APPS_URL: 'https://apps.gnosis-safe.io/', + txServiceHost: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', + safeAppsUrl: 'https://apps.gnosis-safe.io/', }, }, network: { - ID: ETHEREUM_NETWORK.RINKEBY, - COLOR: '#E8673C', - LABEL: 'Rinkeby', - NATIVE_COIN: { + id: ETHEREUM_NETWORK.RINKEBY, + color: '#E8673C', + label: 'Rinkeby', + nativeCoin: { address: '0x000', name: 'Ether', symbol: 'ETH', decimals: 18, logoUri: EtherLogo, }, - } + }, } export default rinkeby diff --git a/src/config/xdai.ts b/src/config/xdai.ts index 9e6c92ebc1..4f5b88bb1d 100644 --- a/src/config/xdai.ts +++ b/src/config/xdai.ts @@ -3,10 +3,10 @@ import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const xDai: NetworkConfig = { network: { - ID: ETHEREUM_NETWORK.XDAI, - COLOR: '#48A8A6', - LABEL: 'xDai STAKE', - NATIVE_COIN: { + id: ETHEREUM_NETWORK.XDAI, + color: '#48A8A6', + label: 'xDai STAKE', + nativeCoin: { address: '0x000', name: 'xDai', symbol: 'xDai', @@ -16,12 +16,12 @@ const xDai: NetworkConfig = { }, environment: { production: { - TX_SERVICE_HOST: 'https://safe-transaction.xdai.gnosis.io/api/v1/', - SAFE_APPS_URL: 'https://apps.gnosis-safe.io/', - GAS_PRICE: 1e9, - RPC_SERVICE_URL: 'https://rpc.xdaichain.com/', - NETWORK_EXPLORER_URL: 'https://blockscout.com/poa/xdai/', - NETWORK_EXPLORER_API_URL: 'https://blockscout.com/poa/xdai/api', + txServiceHost: 'https://safe-transaction.xdai.gnosis.io/api/v1/', + safeAppsUrl: 'https://apps.gnosis-safe.io/', + gasPrice: 1e9, + rpcServiceUrl: 'https://rpc.xdaichain.com/', + networkExplorerUrl: 'https://blockscout.com/poa/xdai/', + networkExplorerApiUrl: 'https://blockscout.com/poa/xdai/api', }, } } From 1b39ee1a9cf48439ec35dad9c956ad15dfb2c586 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Thu, 1 Oct 2020 13:59:49 -0300 Subject: [PATCH 05/26] replace Host and Url with Uri in config keys Co-authored-by: Matias Dastugue --- src/config/mainnet.ts | 18 +++++++++--------- src/config/network.d.ts | 16 ++++++++-------- src/config/rinkeby.ts | 25 +++++++++++++------------ src/config/xdai.ts | 20 ++++++++++---------- 4 files changed, 40 insertions(+), 39 deletions(-) diff --git a/src/config/mainnet.ts b/src/config/mainnet.ts index ea3c78abfd..43840657d6 100644 --- a/src/config/mainnet.ts +++ b/src/config/mainnet.ts @@ -3,12 +3,12 @@ import { EnvironmentSettings, NetworkConfig } from 'src/config/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { - txServiceHost: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', - safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', - gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', - rpcServiceUrl: 'https://mainnet.infura.io:443/v3/', - networkExplorerUrl: 'https://etherscan.io/', - networkExplorerApiUrl: 'https://api.etherscan.io/api', + txServiceUri: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', + safeAppsUri: 'https://safe-apps.dev.gnosisdev.com/', + gasPriceOracleUri: 'https://ethgasstation.info/json/ethgasAPI.json', + rpcServiceUri: 'https://mainnet.infura.io:443/v3/', + networkExplorerUri: 'https://etherscan.io/', + networkExplorerApiUri: 'https://api.etherscan.io/api', } const mainnet: NetworkConfig = { @@ -18,12 +18,12 @@ const mainnet: NetworkConfig = { }, staging: { ...baseConfig, - safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com', + safeAppsUri: 'https://safe-apps.staging.gnosisdev.com', }, production: { ...baseConfig, - txServiceHost: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', - safeAppsUrl: 'https://apps.gnosis-safe.io/', + txServiceUri: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', + safeAppsUri: 'https://apps.gnosis-safe.io/', }, }, network: { diff --git a/src/config/network.d.ts b/src/config/network.d.ts index b2b889a108..e042879668 100644 --- a/src/config/network.d.ts +++ b/src/config/network.d.ts @@ -27,21 +27,21 @@ type SafeFeatures = { type GasPrice = { gasPrice: number - gasPriceOracleUrl?: string + gasPriceOracleUri?: string } | { gasPrice?: number // for infura there's a REST API Token required stored in: `REACT_APP_INFURA_TOKEN` - gasPriceOracleUrl: string + gasPriceOracleUri: string } export type EnvironmentSettings = GasPrice & { - txServiceHost: string + txServiceUri: string // Shall we keep a reference to the relay? - relayApiUrl?: string - safeAppsUrl: string - rpcServiceUrl: string - networkExplorerUrl: string - networkExplorerApiUrl: string + relayApiUri?: string + safeAppsUri: string + rpcServiceUri: string + networkExplorerUri: string + networkExplorerApiUri: string } type SafeEnvironments = { diff --git a/src/config/rinkeby.ts b/src/config/rinkeby.ts index 0859e9aa4e..cdd90c73d3 100644 --- a/src/config/rinkeby.ts +++ b/src/config/rinkeby.ts @@ -1,28 +1,29 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' -import { NetworkConfig } from 'src/config/network' +import { EnvironmentSettings, NetworkConfig } from 'src/config/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' -const baseConfig = { - txServiceHost: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', - safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', - gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', - rpcServiceUrl: 'https://rinkeby.infura.io:443/v3/', - networkExplorerUrl: 'https://rinkeby.etherscan.io/', - networkExplorerApiUrl: 'https://api-rinkeby.etherscan.io/api', +const baseConfig: EnvironmentSettings = { + txServiceUri: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', + safeAppsUri: 'https://safe-apps.dev.gnosisdev.com/', + gasPriceOracleUri: 'https://ethgasstation.info/json/ethgasAPI.json', + rpcServiceUri: 'https://rinkeby.infura.io:443/v3/', + networkExplorerUri: 'https://rinkeby.etherscan.io/', + networkExplorerApiUri: 'https://api-rinkeby.etherscan.io/api', } const rinkeby: NetworkConfig = { environment: { dev: { ...baseConfig, - }, staging: { + }, + staging: { ...baseConfig, - safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com', + safeAppsUri: 'https://safe-apps.staging.gnosisdev.com', }, production: { ...baseConfig, - txServiceHost: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', - safeAppsUrl: 'https://apps.gnosis-safe.io/', + txServiceUri: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', + safeAppsUri: 'https://apps.gnosis-safe.io/', }, }, network: { diff --git a/src/config/xdai.ts b/src/config/xdai.ts index 4f5b88bb1d..55c6bca9b9 100644 --- a/src/config/xdai.ts +++ b/src/config/xdai.ts @@ -2,6 +2,16 @@ import { NetworkConfig } from 'src/config/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const xDai: NetworkConfig = { + environment: { + production: { + txServiceUri: 'https://safe-transaction.xdai.gnosis.io/api/v1/', + safeAppsUri: 'https://apps.gnosis-safe.io/', + gasPrice: 1e9, + rpcServiceUri: 'https://rpc.xdaichain.com/', + networkExplorerUri: 'https://blockscout.com/poa/xdai/', + networkExplorerApiUri: 'https://blockscout.com/poa/xdai/api', + }, + }, network: { id: ETHEREUM_NETWORK.XDAI, color: '#48A8A6', @@ -13,16 +23,6 @@ const xDai: NetworkConfig = { decimals: 18, logoUri: '', }, - }, - environment: { - production: { - txServiceHost: 'https://safe-transaction.xdai.gnosis.io/api/v1/', - safeAppsUrl: 'https://apps.gnosis-safe.io/', - gasPrice: 1e9, - rpcServiceUrl: 'https://rpc.xdaichain.com/', - networkExplorerUrl: 'https://blockscout.com/poa/xdai/', - networkExplorerApiUrl: 'https://blockscout.com/poa/xdai/api', - }, } } From 79e2a70ee8cc80c476d8d5de6d8697fd50005835 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Thu, 1 Oct 2020 14:09:35 -0300 Subject: [PATCH 06/26] move network config files into a `networks` directory Co-authored-by: Matias Dastugue --- src/config/{ => networks}/mainnet.ts | 2 +- src/config/{ => networks}/network.d.ts | 0 src/config/{ => networks}/rinkeby.ts | 2 +- src/config/{ => networks}/xdai.ts | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename src/config/{ => networks}/mainnet.ts (98%) rename src/config/{ => networks}/network.d.ts (100%) rename src/config/{ => networks}/rinkeby.ts (98%) rename src/config/{ => networks}/xdai.ts (92%) diff --git a/src/config/mainnet.ts b/src/config/networks/mainnet.ts similarity index 98% rename from src/config/mainnet.ts rename to src/config/networks/mainnet.ts index 43840657d6..2622a29022 100644 --- a/src/config/mainnet.ts +++ b/src/config/networks/mainnet.ts @@ -1,5 +1,5 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' -import { EnvironmentSettings, NetworkConfig } from 'src/config/network' +import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { diff --git a/src/config/network.d.ts b/src/config/networks/network.d.ts similarity index 100% rename from src/config/network.d.ts rename to src/config/networks/network.d.ts diff --git a/src/config/rinkeby.ts b/src/config/networks/rinkeby.ts similarity index 98% rename from src/config/rinkeby.ts rename to src/config/networks/rinkeby.ts index cdd90c73d3..f4d24992ff 100644 --- a/src/config/rinkeby.ts +++ b/src/config/networks/rinkeby.ts @@ -1,5 +1,5 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' -import { EnvironmentSettings, NetworkConfig } from 'src/config/network' +import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { diff --git a/src/config/xdai.ts b/src/config/networks/xdai.ts similarity index 92% rename from src/config/xdai.ts rename to src/config/networks/xdai.ts index 55c6bca9b9..489b396eb1 100644 --- a/src/config/xdai.ts +++ b/src/config/networks/xdai.ts @@ -1,4 +1,4 @@ -import { NetworkConfig } from 'src/config/network' +import { NetworkConfig } from 'src/config/networks/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const xDai: NetworkConfig = { From ab69f74b52bfcdb1af550218ac57a3383a21363c Mon Sep 17 00:00:00 2001 From: fernandomg Date: Thu, 1 Oct 2020 16:27:17 -0300 Subject: [PATCH 07/26] add tests for config files Co-authored-by: Matias Dastugue --- package.json | 3 +- .../networks/__tests__/networks.test.ts | 109 ++++++++++++++++++ src/config/networks/mainnet.ts | 2 +- src/config/networks/network.d.ts | 4 +- src/config/networks/rinkeby.ts | 2 +- src/config/networks/xdai.ts | 2 +- 6 files changed, 116 insertions(+), 6 deletions(-) create mode 100644 src/config/networks/__tests__/networks.test.ts diff --git a/package.json b/package.json index 7ca2a4bbc2..764d2ba6e9 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,7 @@ "src/**/*.{js,jsx,ts,tsx}", "!src/**/*.{.test.*}", "!src/**/test/**/*", - "!src/**/assets/**", - "!src/config/**/*" + "!src/**/assets/**" ] }, "productName": "Safe Multisig", diff --git a/src/config/networks/__tests__/networks.test.ts b/src/config/networks/__tests__/networks.test.ts new file mode 100644 index 0000000000..a674449e23 --- /dev/null +++ b/src/config/networks/__tests__/networks.test.ts @@ -0,0 +1,109 @@ +import fs from 'fs' + +import { NetworkConfig } from 'src/config/networks/network.d' +import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { isValidURL } from 'src/utils/url' + +describe('Network config file test', () => { + const NETWORKS_PATH = 'src/config/networks/' + const configFiles = fs.readdirSync(NETWORKS_PATH) + const networksFileNames = configFiles + .filter((file) => !fs.lstatSync(`${NETWORKS_PATH}${file}`).isDirectory()) + .filter((file) => { + const [, extension] = file.split('.') + return extension === 'ts' + }) + const environments = ['dev', 'staging', 'production'] + + environments.forEach((environment) => { + networksFileNames.forEach((networkFileName) => { + it(`should validate "${environment}" environment URIs for ${networkFileName} config`, async () => { + // Given + const { default: networkConfig } = await import(`${NETWORKS_PATH}${networkFileName}`) + + // When + const networkConfigElement = networkConfig.environment[environment] + if (!networkConfigElement) { + return + } + + const environmentConfigKeys = Object + .keys(networkConfigElement) + .filter((environmentConfigKey) => + environmentConfigKey.endsWith('Uri') && !!networkConfigElement[environmentConfigKey] + ) + + // Then + environmentConfigKeys.forEach((environmentConfigKey) => { + const networkConfigElementUri = networkConfigElement[environmentConfigKey] + const isValid = isValidURL(networkConfigElementUri) + + if (!isValid) { + console.log(`Invalid URI in "${networkFileName}" at ${environment}.${environmentConfigKey}:`, networkConfigElementUri) + } + + expect(isValid).toBeTruthy() + }) + }) + }) + }) + + networksFileNames.forEach((networkFileName) => { + it(`should have a valid 'decimal' value for 'nativeToken'`, async() => { + // Given + const { default: networkConfig }: { default: NetworkConfig } = await import(`${NETWORKS_PATH}${networkFileName}`) + + // When + const { decimals } = networkConfig.network.nativeCoin + + // Then + const isValid = Number.isInteger(decimals) && decimals >= 0 + + if (!isValid) { + console.log(`Invalid value in "${networkFileName}" at network.decimals:`, decimals) + } + + expect(isValid).toBeTruthy() + }) + }) + + networksFileNames.forEach((networkFileName) => { + it(`should have one of 'ETHEREUM_NETWORK' values for 'network.id'`, async() => { + // Given + const { default: networkConfig }: { default: NetworkConfig } = await import(`${NETWORKS_PATH}${networkFileName}`) + + // When + const { id } = networkConfig.network + + // Then + const isValid = ETHEREUM_NETWORK[id] + + if (!isValid) { + console.log(`Invalid value in "${networkFileName}" at network.id:`, id) + } + + expect(isValid).toBeTruthy() + }) + }) + + networksFileNames.forEach((networkFileName) => { + it(`should have a valid CSS color defined for 'network.color'`, async() => { + // Given + const { default: networkConfig }: { default: NetworkConfig } = await import(`${NETWORKS_PATH}${networkFileName}`) + + // When + const { color } = networkConfig.network + + // Then + const s = new Option().style + s.color = color + const isValid = s.color !== '' + + if (!isValid) { + console.log(`Invalid value in "${networkFileName}" at network.color:`, color) + } + + expect(isValid).toBeTruthy() + }) + }) +}) diff --git a/src/config/networks/mainnet.ts b/src/config/networks/mainnet.ts index 2622a29022..cb920cc5d9 100644 --- a/src/config/networks/mainnet.ts +++ b/src/config/networks/mainnet.ts @@ -1,5 +1,5 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' -import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network' +import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network.d' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index e042879668..6723c696e2 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -1,3 +1,5 @@ +import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' + type DisplayFlag = 'enable' | 'disable' // matches src/logic/tokens/store/model/token.ts `TokenProps` type @@ -10,7 +12,7 @@ type Token = { } type NetworkSettings = { - id: number, + id: ETHEREUM_NETWORK, color: string, label: string, nativeCoin: Token, diff --git a/src/config/networks/rinkeby.ts b/src/config/networks/rinkeby.ts index f4d24992ff..93f9102a59 100644 --- a/src/config/networks/rinkeby.ts +++ b/src/config/networks/rinkeby.ts @@ -1,5 +1,5 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' -import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network' +import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network.d' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { diff --git a/src/config/networks/xdai.ts b/src/config/networks/xdai.ts index 489b396eb1..c2677948a7 100644 --- a/src/config/networks/xdai.ts +++ b/src/config/networks/xdai.ts @@ -1,4 +1,4 @@ -import { NetworkConfig } from 'src/config/networks/network' +import { NetworkConfig } from 'src/config/networks/network.d' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const xDai: NetworkConfig = { From 7ea7c10893cc9a8cc57c0a9effe1ca67ea82f962 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Thu, 1 Oct 2020 21:49:11 -0300 Subject: [PATCH 08/26] replace current configs with generic configs --- src/config/development-mainnet.ts | 11 --- src/config/development.ts | 11 --- src/config/index.ts | 91 +++++++++--------------- src/config/names.ts | 4 -- src/config/networks/index.ts | 9 +++ src/config/networks/network.d.ts | 4 +- src/config/production-mainnet.ts | 11 --- src/config/production.ts | 10 --- src/config/staging-mainnet.ts | 11 --- src/config/staging.ts | 10 --- src/config/testing.ts | 10 --- src/routes/safe/components/Apps/utils.ts | 2 +- src/utils/constants.ts | 6 +- 13 files changed, 50 insertions(+), 140 deletions(-) delete mode 100644 src/config/development-mainnet.ts delete mode 100644 src/config/development.ts delete mode 100644 src/config/names.ts create mode 100644 src/config/networks/index.ts delete mode 100644 src/config/production-mainnet.ts delete mode 100644 src/config/production.ts delete mode 100644 src/config/staging-mainnet.ts delete mode 100644 src/config/staging.ts delete mode 100644 src/config/testing.ts diff --git a/src/config/development-mainnet.ts b/src/config/development-mainnet.ts deleted file mode 100644 index a26a7075ae..0000000000 --- a/src/config/development-mainnet.ts +++ /dev/null @@ -1,11 +0,0 @@ -// -import devConfig from './development' -import { TX_SERVICE_HOST, RELAY_API_URL } from 'src/config/names' - -const devMainnetConfig = { - ...devConfig, - [TX_SERVICE_HOST]: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', - [RELAY_API_URL]: 'https://safe-relay.mainnet.staging.gnosisdev.com/api/v1/', -} - -export default devMainnetConfig diff --git a/src/config/development.ts b/src/config/development.ts deleted file mode 100644 index fa26777e48..0000000000 --- a/src/config/development.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TX_SERVICE_HOST, SIGNATURES_VIA_METAMASK, RELAY_API_URL, SAFE_APPS_URL } from 'src/config/names' - -const devConfig = { - [TX_SERVICE_HOST]: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', - [SIGNATURES_VIA_METAMASK]: false, - [RELAY_API_URL]: 'https://safe-relay.staging.gnosisdev.com/api/v1/', - [SAFE_APPS_URL]: 'https://safe-apps.dev.gnosisdev.com/' - //[SAFE_APPS_URL]: 'http://localhost:3002/' -} - -export default devConfig diff --git a/src/config/index.ts b/src/config/index.ts index b6847acd91..f66748ecf1 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,51 +1,42 @@ -import { checksumAddress } from 'src/utils/checksumAddress'; -import { ensureOnce } from 'src/utils/singleton' +import networks from 'src/config/networks' +import { EnvironmentSettings, NetworkConfig, NetworkSettings, SafeFeatures } from 'src/config/networks/network' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' -import { - RELAY_API_URL, - SIGNATURES_VIA_METAMASK, - TX_SERVICE_HOST, - SAFE_APPS_URL -} from 'src/config/names' -import devConfig from './development' -import testConfig from './testing' -import stagingConfig from './staging' -import prodConfig from './production' -import mainnetDevConfig from './development-mainnet' -import mainnetProdConfig from './production-mainnet' -import mainnetStagingConfig from './staging-mainnet' -import { NETWORK } from 'src/utils/constants' - -const configuration = () => { - if (process.env.NODE_ENV === 'test') { - return testConfig - } +import { checksumAddress } from 'src/utils/checksumAddress' +import { GOOGLE_ANALYTICS_ID, NETWORK } from 'src/utils/constants' +import { ensureOnce } from 'src/utils/singleton' - if (process.env.NODE_ENV === 'production') { - if (process.env.REACT_APP_NETWORK === 'mainnet') { - return process.env.REACT_APP_ENV === 'production' - ? mainnetProdConfig - : mainnetStagingConfig - } +export const getNetwork = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY - return process.env.REACT_APP_ENV === 'production' - ? prodConfig - : stagingConfig - } +type NetworkSpecificConfiguration = EnvironmentSettings & { + network: NetworkSettings, + features: SafeFeatures, +} - return process.env.REACT_APP_NETWORK === 'mainnet' - ? mainnetDevConfig - : devConfig +const configuration = (): Promise => { + const configFile: NetworkConfig = networks[ETHEREUM_NETWORK[getNetwork()].toLowerCase()] + + return { + ...configFile.environment[process.env.REACT_APP_ENV ?? 'production'], + network: configFile.network, + features: configFile.features, + } } -export const getNetwork = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY +const getConfig: () => NetworkSpecificConfiguration = ensureOnce(configuration) -const getConfig = ensureOnce(configuration) +export const getTxServiceHost = (): string => { + const config = getConfig() + return config.txServiceUri +} -export const getTxServiceHost = () => { +export const getRelayUrl = (): string | undefined => { const config = getConfig() + return config.relayApiUri +} - return config[TX_SERVICE_HOST] +export const getGnosisSafeAppsUrl = (): string => { + const config = getConfig() + return config.safeAppsUri } export const getTxServiceUriFrom = (safeAddress) => @@ -59,34 +50,20 @@ export const getAllTransactionsUriFrom = (safeAddress: string): string => export const getSafeCreationTxUri = (safeAddress) => `safes/${safeAddress}/creation/` -export const getRelayUrl = () => getConfig()[RELAY_API_URL] - -export const signaturesViaMetamask = () => { - const config = getConfig() - - return config[SIGNATURES_VIA_METAMASK] -} - -export const getGnosisSafeAppsUrl = () => { - const config = getConfig() - - return config[SAFE_APPS_URL] -} - -export const getGoogleAnalyticsTrackingID = () => - getNetwork() === ETHEREUM_NETWORK.MAINNET - ? process.env.REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET - : process.env.REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY +export const getGoogleAnalyticsTrackingID = () => GOOGLE_ANALYTICS_ID[ETHEREUM_NETWORK[getNetwork()]] +// TODO: replace this with an `INTERCOM_ID` constant? export const getIntercomId = () => process.env.REACT_APP_ENV === 'production' ? process.env.REACT_APP_INTERCOM_ID : 'plssl1fl' +// TODO: handle this within one function? or expose both urls in respective constants? +// `EXCHANGE_RATE_URI`, `EXCHANGE_RATES_URI_FALLBACK` export const getExchangeRatesUrl = () => 'https://api.exchangeratesapi.io/latest' - export const getExchangeRatesUrlFallback = () => 'https://api.coinbase.com/v2/exchange-rates' +// TODO: This can be exposed directly in the `constants.ts` file export const getSafeLastVersion = () => process.env.REACT_APP_LATEST_SAFE_VERSION || '1.1.1' export const buildSafeCreationTxUrl = (safeAddress) => { diff --git a/src/config/names.ts b/src/config/names.ts deleted file mode 100644 index 3390fbecb8..0000000000 --- a/src/config/names.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const TX_SERVICE_HOST = 'tsh' -export const SIGNATURES_VIA_METAMASK = 'svm' -export const RELAY_API_URL = 'rau' -export const SAFE_APPS_URL = 'sau' diff --git a/src/config/networks/index.ts b/src/config/networks/index.ts new file mode 100644 index 0000000000..1c165b0ca9 --- /dev/null +++ b/src/config/networks/index.ts @@ -0,0 +1,9 @@ +import mainnet from './mainnet' +import rinkeby from './rinkeby' +import xdai from './xdai' + +export default { + mainnet, + rinkeby, + xdai, +} diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index 6723c696e2..4e2efe60b4 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -11,7 +11,7 @@ type Token = { logoUri?: string } -type NetworkSettings = { +export type NetworkSettings = { id: ETHEREUM_NETWORK, color: string, label: string, @@ -21,7 +21,7 @@ type NetworkSettings = { // something around this to display or not some critical sections in the app, depending on the network support // I listed the ones that may conflict with the network. // If non is present, all the sections are available. -type SafeFeatures = { +export type SafeFeatures = { safeApps?: DisplayFlag, collectibles?: DisplayFlag, contractInteraction?: DisplayFlag diff --git a/src/config/production-mainnet.ts b/src/config/production-mainnet.ts deleted file mode 100644 index d24d20e19a..0000000000 --- a/src/config/production-mainnet.ts +++ /dev/null @@ -1,11 +0,0 @@ -// -import prodConfig from './production' -import { TX_SERVICE_HOST, RELAY_API_URL } from 'src/config/names' - -const prodMainnetConfig = { - ...prodConfig, - [TX_SERVICE_HOST]: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', - [RELAY_API_URL]: 'https://safe-relay.gnosis.io/api/v1/', -} - -export default prodMainnetConfig diff --git a/src/config/production.ts b/src/config/production.ts deleted file mode 100644 index 246fcb9c71..0000000000 --- a/src/config/production.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TX_SERVICE_HOST, SIGNATURES_VIA_METAMASK, RELAY_API_URL, SAFE_APPS_URL } from 'src/config/names' - -const prodConfig = { - [TX_SERVICE_HOST]: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', - [SIGNATURES_VIA_METAMASK]: false, - [RELAY_API_URL]: 'https://safe-relay.rinkeby.gnosis.io/api/v1/', - [SAFE_APPS_URL]: 'https://apps.gnosis-safe.io/' -} - -export default prodConfig diff --git a/src/config/staging-mainnet.ts b/src/config/staging-mainnet.ts deleted file mode 100644 index 08f225fad6..0000000000 --- a/src/config/staging-mainnet.ts +++ /dev/null @@ -1,11 +0,0 @@ -// -import stagingConfig from './staging' -import { TX_SERVICE_HOST, RELAY_API_URL } from 'src/config/names' - -const stagingMainnetConfig = { - ...stagingConfig, - [TX_SERVICE_HOST]: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', - [RELAY_API_URL]: 'https://safe-relay.mainnet.staging.gnosisdev.com/api/v1/', -} - -export default stagingMainnetConfig diff --git a/src/config/staging.ts b/src/config/staging.ts deleted file mode 100644 index 61b4ebca25..0000000000 --- a/src/config/staging.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TX_SERVICE_HOST, SIGNATURES_VIA_METAMASK, RELAY_API_URL, SAFE_APPS_URL } from 'src/config/names' - -const stagingConfig = { - [TX_SERVICE_HOST]: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', - [SIGNATURES_VIA_METAMASK]: false, - [RELAY_API_URL]: 'https://safe-relay.staging.gnosisdev.com/api/v1/', - [SAFE_APPS_URL]: 'https://safe-apps.staging.gnosisdev.com' -} - -export default stagingConfig diff --git a/src/config/testing.ts b/src/config/testing.ts deleted file mode 100644 index cce8aa963a..0000000000 --- a/src/config/testing.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TX_SERVICE_HOST, SIGNATURES_VIA_METAMASK, RELAY_API_URL, SAFE_APPS_URL } from 'src/config/names' - -const testConfig = { - [TX_SERVICE_HOST]: 'http://localhost:8000/api/v1/', - [SIGNATURES_VIA_METAMASK]: false, - [RELAY_API_URL]: 'https://safe-relay.staging.gnosisdev.com/api/v1', - [SAFE_APPS_URL]: 'http://localhost:3002/' -} - -export default testConfig diff --git a/src/routes/safe/components/Apps/utils.ts b/src/routes/safe/components/Apps/utils.ts index beeba0c089..74358ab12b 100644 --- a/src/routes/safe/components/Apps/utils.ts +++ b/src/routes/safe/components/Apps/utils.ts @@ -3,7 +3,7 @@ import memoize from 'lodash.memoize' import { SafeApp } from './types.d' -import { getGnosisSafeAppsUrl } from 'src/config/index' +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' diff --git a/src/utils/constants.ts b/src/utils/constants.ts index b873693fb3..a49c513fd8 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1,6 +1,8 @@ export const NETWORK = process.env.REACT_APP_NETWORK || 'RINKEBY' -export const GOOGLE_ANALYTICS_ID_RINKEBY = process.env.REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY -export const GOOGLE_ANALYTICS_ID_MAINNET = process.env.REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET +export const GOOGLE_ANALYTICS_ID = { + RINKEBY: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY, + MAINNET: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET, +} export const INTERCOM_ID = process.env.REACT_APP_INTERCOM_ID export const PORTIS_ID = process.env.REACT_APP_PORTIS_ID export const SQUARELINK_ID = process.env.REACT_APP_SQUARELINK_ID From 9e2e7552ce60c6b43455ba97b61ae48cc37778e3 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 09:23:17 -0300 Subject: [PATCH 09/26] fix test description --- src/config/networks/__tests__/networks.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/networks/__tests__/networks.test.ts b/src/config/networks/__tests__/networks.test.ts index a674449e23..bb29462d0c 100644 --- a/src/config/networks/__tests__/networks.test.ts +++ b/src/config/networks/__tests__/networks.test.ts @@ -4,7 +4,7 @@ import { NetworkConfig } from 'src/config/networks/network.d' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import { isValidURL } from 'src/utils/url' -describe('Network config file test', () => { +describe('Networks config files test', () => { const NETWORKS_PATH = 'src/config/networks/' const configFiles = fs.readdirSync(NETWORKS_PATH) const networksFileNames = configFiles From 4cc35e12430d3e31487a44d19eee20ef67bf74ed Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 10:06:57 -0300 Subject: [PATCH 10/26] rename `getNetwork` to `getNetworkId` Co-authored-by: Matias Dastugue --- src/components/App/index.tsx | 4 ++-- .../AppLayout/Header/components/NetworkLabel.tsx | 4 ++-- src/components/AppLayout/Sidebar/SafeHeader/index.tsx | 4 ++-- src/components/ConnectButton/index.tsx | 4 ++-- src/components/SafeListSidebar/SafeList/index.tsx | 4 ++-- src/config/index.ts | 4 ++-- src/logic/collectibles/store/actions/fetchCollectibles.ts | 4 ++-- src/logic/cookies/utils/index.ts | 4 ++-- src/logic/notifications/notificationTypes.ts | 4 ++-- src/logic/wallets/getWeb3.ts | 4 ++-- src/logic/wallets/store/actions/fetchProvider.ts | 6 +++--- src/logic/wallets/utils/walletList.ts | 4 ++-- .../SendModal/screens/ContractInteraction/utils/index.ts | 4 ++-- .../Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx | 8 ++++---- .../TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx | 4 ++-- .../ExpandedTx/TxDescription/CustomDescription.tsx | 6 +++--- .../TxsTable/ExpandedTx/TxDescription/Value.tsx | 4 ++-- .../components/Transactions/TxsTable/ExpandedTx/index.tsx | 4 ++-- src/utils/storage/index.ts | 4 ++-- 19 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/components/App/index.tsx b/src/components/App/index.tsx index ee90992af8..a8cc887ea3 100644 --- a/src/components/App/index.tsx +++ b/src/components/App/index.tsx @@ -16,7 +16,7 @@ import CookiesBanner from 'src/components/CookiesBanner' import Notifier from 'src/components/Notifier' import Backdrop from 'src/components/layout/Backdrop' import Img from 'src/components/layout/Img' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import { networkSelector } from 'src/logic/wallets/store/selectors' import { SAFELIST_ADDRESS, WELCOME_ADDRESS } from 'src/routes/routes' @@ -55,7 +55,7 @@ const Frame = styled.div` max-width: 100%; ` -const desiredNetwork = getNetwork() +const desiredNetwork = getNetworkId() const useStyles = makeStyles(notificationStyles) diff --git a/src/components/AppLayout/Header/components/NetworkLabel.tsx b/src/components/AppLayout/Header/components/NetworkLabel.tsx index 2ff24a5a73..c9e98deadb 100644 --- a/src/components/AppLayout/Header/components/NetworkLabel.tsx +++ b/src/components/AppLayout/Header/components/NetworkLabel.tsx @@ -3,11 +3,11 @@ import * as React from 'react' import Col from 'src/components/layout/Col' import Paragraph from 'src/components/layout/Paragraph' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import { border, md, screenSm, sm, xs } from 'src/theme/variables' -const interfaceNetwork = getNetwork() +const interfaceNetwork = getNetworkId() const formatNetwork = (network: number): string => ETHEREUM_NETWORK[network][0].toUpperCase() + ETHEREUM_NETWORK[network].substring(1).toLowerCase() diff --git a/src/components/AppLayout/Sidebar/SafeHeader/index.tsx b/src/components/AppLayout/Sidebar/SafeHeader/index.tsx index 273a1476b2..d4bf11ad3a 100644 --- a/src/components/AppLayout/Sidebar/SafeHeader/index.tsx +++ b/src/components/AppLayout/Sidebar/SafeHeader/index.tsx @@ -12,7 +12,7 @@ import { EtherscanButton, } from '@gnosis.pm/safe-react-components' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import FlexSpacer from 'src/components/FlexSpacer' export const TOGGLE_SIDEBAR_BTN_TESTID = 'TOGGLE_SIDEBAR_BTN' @@ -129,7 +129,7 @@ const SafeHeader = ({ - + {granted ? null : ( diff --git a/src/components/ConnectButton/index.tsx b/src/components/ConnectButton/index.tsx index db81d05ce9..a719776f04 100644 --- a/src/components/ConnectButton/index.tsx +++ b/src/components/ConnectButton/index.tsx @@ -2,7 +2,7 @@ import Onboard from 'bnc-onboard' import React from 'react' import Button from 'src/components/layout/Button' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { getWeb3, setWeb3 } from 'src/logic/wallets/getWeb3' import { fetchProvider } from 'src/logic/wallets/store/actions' import transactionDataCheck from 'src/logic/wallets/transactionDataCheck' @@ -20,7 +20,7 @@ const wallets = getSupportedWallets() export const onboard = Onboard({ dappId: BLOCKNATIVE_API_KEY, - networkId: getNetwork(), + networkId: getNetworkId(), subscriptions: { wallet: (wallet) => { if (wallet.provider) { diff --git a/src/components/SafeListSidebar/SafeList/index.tsx b/src/components/SafeListSidebar/SafeList/index.tsx index f0875334de..2da90494f5 100644 --- a/src/components/SafeListSidebar/SafeList/index.tsx +++ b/src/components/SafeListSidebar/SafeList/index.tsx @@ -9,7 +9,7 @@ import styled from 'styled-components' import { SafeRecord } from 'src/logic/safe/store/models/safe' import { DefaultSafe } from 'src/routes/safe/store/reducer/types/safe' import { SetDefaultSafe } from 'src/logic/safe/store/actions/setDefaultSafe' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import DefaultBadge from './DefaultBadge' import Hairline from 'src/components/layout/Hairline' import Link from 'src/components/layout/Link' @@ -115,7 +115,7 @@ const SafeList = ({ currentSafe, defaultSafe, onSafeClick, safes, setDefaultSafe name={safe.name} showIdenticon shortenHash={4} - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> diff --git a/src/config/index.ts b/src/config/index.ts index f66748ecf1..ec52d30026 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -5,7 +5,7 @@ import { checksumAddress } from 'src/utils/checksumAddress' import { GOOGLE_ANALYTICS_ID, NETWORK } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' -export const getNetwork = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY +export const getNetworkId = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY type NetworkSpecificConfiguration = EnvironmentSettings & { network: NetworkSettings, @@ -13,7 +13,7 @@ type NetworkSpecificConfiguration = EnvironmentSettings & { } const configuration = (): Promise => { - const configFile: NetworkConfig = networks[ETHEREUM_NETWORK[getNetwork()].toLowerCase()] + const configFile: NetworkConfig = networks[ETHEREUM_NETWORK[getNetworkId()].toLowerCase()] return { ...configFile.environment[process.env.REACT_APP_ENV ?? 'production'], diff --git a/src/logic/collectibles/store/actions/fetchCollectibles.ts b/src/logic/collectibles/store/actions/fetchCollectibles.ts index c87e51df06..feb4dc2df1 100644 --- a/src/logic/collectibles/store/actions/fetchCollectibles.ts +++ b/src/logic/collectibles/store/actions/fetchCollectibles.ts @@ -1,13 +1,13 @@ import { batch } from 'react-redux' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { getConfiguredSource } from 'src/logic/collectibles/sources' import { addNftAssets, addNftTokens } from 'src/logic/collectibles/store/actions/addCollectibles' import { Dispatch } from 'redux' const fetchCollectibles = (safeAddress: string) => async (dispatch: Dispatch): Promise => { try { - const network = getNetwork() + const network = getNetworkId() const source = getConfiguredSource() const collectibles = await source.fetchAllUserCollectiblesByCategoryAsync(safeAddress, network) diff --git a/src/logic/cookies/utils/index.ts b/src/logic/cookies/utils/index.ts index 6be77a0ae8..06082ce434 100644 --- a/src/logic/cookies/utils/index.ts +++ b/src/logic/cookies/utils/index.ts @@ -1,9 +1,9 @@ import Cookies from 'js-cookie' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' -const PREFIX = `v1_${ETHEREUM_NETWORK[getNetwork()]}` +const PREFIX = `v1_${ETHEREUM_NETWORK[getNetworkId()]}` export const loadFromCookie = async (key) => { try { diff --git a/src/logic/notifications/notificationTypes.ts b/src/logic/notifications/notificationTypes.ts index 62fbe24744..0cd17622e5 100644 --- a/src/logic/notifications/notificationTypes.ts +++ b/src/logic/notifications/notificationTypes.ts @@ -1,6 +1,6 @@ import { OptionsObject } from 'notistack' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import { capitalize } from 'src/utils/css' @@ -199,7 +199,7 @@ export const NOTIFICATIONS: Record = { options: { variant: WARNING, persist: true, preventDuplicate: true }, }, WRONG_NETWORK_MSG: { - message: `Wrong network: Please use ${capitalize(ETHEREUM_NETWORK[getNetwork()])}`, + message: `Wrong network: Please use ${capitalize(ETHEREUM_NETWORK[getNetworkId()])}`, options: { variant: WARNING, persist: true, preventDuplicate: true }, }, diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index fbe9854362..8529373ea0 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -4,7 +4,7 @@ import Web3 from 'web3' import { sameAddress } from './ethAddresses' import { EMPTY_DATA } from './ethTransactions' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { ContentHash } from 'web3-eth-ens' import { provider as Provider } from 'web3-core' import { ProviderProps } from './store/model/provider' @@ -51,7 +51,7 @@ export const getEtherScanLink = (network: ETHEREUM_NETWORK, type: ExplorerTypes, }etherscan.io/${type}/${value}` export const getExplorerLink = (type: ExplorerTypes, value: string): string => { - const network = getNetwork() + const network = getNetworkId() switch (network) { case ETHEREUM_NETWORK.MAINNET: diff --git a/src/logic/wallets/store/actions/fetchProvider.ts b/src/logic/wallets/store/actions/fetchProvider.ts index 9e2390fdaa..137a92e05f 100644 --- a/src/logic/wallets/store/actions/fetchProvider.ts +++ b/src/logic/wallets/store/actions/fetchProvider.ts @@ -2,7 +2,7 @@ import ReactGA from 'react-ga' import addProvider from './addProvider' -import { getNetwork } 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, getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' @@ -24,11 +24,11 @@ const handleProviderNotification = (provider, dispatch) => { return } - if (network !== getNetwork()) { + if (network !== getNetworkId()) { dispatch(enqueueSnackbar(NOTIFICATIONS.WRONG_NETWORK_MSG)) return } - if (ETHEREUM_NETWORK.RINKEBY === getNetwork()) { + if (ETHEREUM_NETWORK.RINKEBY === getNetworkId()) { dispatch(enqueueSnackbar(enhanceSnackbarForAction(NOTIFICATIONS.RINKEBY_VERSION_MSG))) } diff --git a/src/logic/wallets/utils/walletList.ts b/src/logic/wallets/utils/walletList.ts index 0921a76ae9..8fcf755c3e 100644 --- a/src/logic/wallets/utils/walletList.ts +++ b/src/logic/wallets/utils/walletList.ts @@ -1,5 +1,5 @@ import { getInfuraUrl, getRPCUrl } from '../getWeb3' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' const isMainnet = process.env.REACT_APP_NETWORK === 'mainnet' @@ -7,7 +7,7 @@ const PORTIS_DAPP_ID = isMainnet ? process.env.REACT_APP_PORTIS_ID : '852b763d-f // 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 network = getNetwork() +const network = getNetworkId() const infuraUrl = getInfuraUrl(network) const wallets = [ 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 52922fd024..125462fc02 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 { mustBeEthereumAddress, mustBeEthereumContractAddress } from 'src/components/forms/validator' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { getConfiguredSource } from 'src/logic/contractInteraction/sources' import { AbiItemExtended } from 'src/logic/contractInteraction/sources/ABIService' import { getAddressFromENS, getWeb3 } from 'src/logic/wallets/getWeb3' @@ -23,7 +23,7 @@ export const abiExtractor = createDecorator({ ) { return } - const network = getNetwork() + const network = getNetworkId() const source = getConfiguredSource() return source.getContractABI(contractAddress, network) }, diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx index 181722bda6..250e7178c9 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx @@ -1,7 +1,7 @@ import { makeStyles } from '@material-ui/core/styles' import React from 'react' import { EthHashInfo } from '@gnosis.pm/safe-react-components' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { Transaction } from 'src/logic/safe/store/models/types/transaction' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' @@ -52,7 +52,7 @@ export const CreationTx = ({ tx }: Props): React.ReactElement | null => { shortenHash={4} showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> ) : ( 'n/a' @@ -66,7 +66,7 @@ export const CreationTx = ({ tx }: Props): React.ReactElement | null => { shortenHash={4} showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> ) : ( 'n/a' @@ -80,7 +80,7 @@ export const CreationTx = ({ tx }: Props): React.ReactElement | null => { shortenHash={4} showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> ) : ( 'n/a' diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx index 0d2348d022..af77510b56 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx @@ -3,7 +3,7 @@ import cn from 'classnames' import React from 'react' import { useSelector } from 'react-redux' import { EthHashInfo } from '@gnosis.pm/safe-react-components' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import CancelSmallFilledCircle from './assets/cancel-small-filled.svg' @@ -184,7 +184,7 @@ const OwnerComponent = (props: OwnerComponentProps): React.ReactElement => { showIdenticon showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> {owner === userAddress && {isCancelTx ? rejectButton() : confirmButton()}} diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/CustomDescription.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/CustomDescription.tsx index 030f00a7f5..c5e7c8aaa6 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/CustomDescription.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/CustomDescription.tsx @@ -24,7 +24,7 @@ import { Transaction } from 'src/logic/safe/store/models/types/transaction' import { DataDecoded } from 'src/routes/safe/store/models/types/transactions.d' import DividerLine from 'src/components/DividerLine' import { isArrayParameter } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' export const TRANSACTIONS_DESC_CUSTOM_VALUE_TEST_ID = 'tx-description-custom-value' export const TRANSACTIONS_DESC_CUSTOM_DATA_TEST_ID = 'tx-description-custom-data' @@ -91,7 +91,7 @@ const MultiSendCustomDataAction = ({ tx, order }: { tx: MultiSendDetails; order: showIdenticon showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> @@ -196,7 +196,7 @@ const GenericCustomData = ({ amount = '0', data, recipient, storedTx }: GenericC showIdenticon showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/Value.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/Value.tsx index ae46d2e15e..de77bb1d43 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/Value.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/Value.tsx @@ -3,7 +3,7 @@ import React from 'react' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import styled from 'styled-components' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { isAddress, isArrayParameter, @@ -58,7 +58,7 @@ const Value = ({ type, ...props }: RenderValueProps): React.ReactElement => { showCopyBtn showEtherscanBtn shortenHash={4} - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> ) } diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx index ce655808a2..1f6a5bd2cf 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx @@ -13,7 +13,7 @@ import { CreationTx } from './CreationTx' import { OutgoingTx } from './OutgoingTx' import { styles } from './style' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import Block from 'src/components/layout/Block' import Bold from 'src/components/layout/Bold' import Col from 'src/components/layout/Col' @@ -73,7 +73,7 @@ const ExpandedTx = ({ cancelTx, tx }: ExpandedTxProps): React.ReactElement => { shortenHash={4} showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetwork()]} + network={ETHEREUM_NETWORK[getNetworkId()]} /> ) : ( 'n/a' diff --git a/src/utils/storage/index.ts b/src/utils/storage/index.ts index dcc3f5564b..8abc43db05 100644 --- a/src/utils/storage/index.ts +++ b/src/utils/storage/index.ts @@ -1,6 +1,6 @@ import { ImmortalStorage, IndexedDbStore, LocalStorageStore } from 'immortal-db' -import { getNetwork } from 'src/config' +import { getNetworkId } from 'src/config' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' // Don't use sessionStorage and cookieStorage @@ -9,7 +9,7 @@ import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const stores = [IndexedDbStore, LocalStorageStore] export const storage = new ImmortalStorage(stores) -const PREFIX = `v2_${ETHEREUM_NETWORK[getNetwork()]}` +const PREFIX = `v2_${ETHEREUM_NETWORK[getNetworkId()]}` export const loadFromStorage = async (key: string): Promise => { try { From 1f132ef5f25d414faff8c891cbee5c0822753eb3 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 10:32:30 -0300 Subject: [PATCH 11/26] create `getNetworkName` function and use it where needed Co-authored-by: Matias Dastugue --- .../AppLayout/Sidebar/SafeHeader/index.tsx | 5 ++--- .../SafeListSidebar/SafeList/index.tsx | 5 ++--- src/config/index.ts | 4 +++- src/logic/cookies/utils/index.ts | 5 ++--- src/logic/notifications/notificationTypes.ts | 6 ++---- .../TxsTable/ExpandedTx/CreationTx/index.tsx | 21 ++++--------------- .../OwnersColumn/OwnerComponent.tsx | 5 ++--- .../TxDescription/CustomDescription.tsx | 13 +++--------- .../ExpandedTx/TxDescription/Value.tsx | 5 ++--- .../TxsTable/ExpandedTx/index.tsx | 6 +++--- src/utils/storage/index.ts | 5 ++--- 11 files changed, 27 insertions(+), 53 deletions(-) diff --git a/src/components/AppLayout/Sidebar/SafeHeader/index.tsx b/src/components/AppLayout/Sidebar/SafeHeader/index.tsx index d4bf11ad3a..f00c03adaf 100644 --- a/src/components/AppLayout/Sidebar/SafeHeader/index.tsx +++ b/src/components/AppLayout/Sidebar/SafeHeader/index.tsx @@ -1,5 +1,4 @@ import React from 'react' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import styled from 'styled-components' import { Icon, @@ -12,7 +11,7 @@ import { EtherscanButton, } from '@gnosis.pm/safe-react-components' -import { getNetworkId } from 'src/config' +import { getNetworkName } from 'src/config' import FlexSpacer from 'src/components/FlexSpacer' export const TOGGLE_SIDEBAR_BTN_TESTID = 'TOGGLE_SIDEBAR_BTN' @@ -129,7 +128,7 @@ const SafeHeader = ({ - + {granted ? null : ( diff --git a/src/components/SafeListSidebar/SafeList/index.tsx b/src/components/SafeListSidebar/SafeList/index.tsx index 2da90494f5..f2327a8698 100644 --- a/src/components/SafeListSidebar/SafeList/index.tsx +++ b/src/components/SafeListSidebar/SafeList/index.tsx @@ -3,13 +3,12 @@ import ListItem from '@material-ui/core/ListItem' import { makeStyles } from '@material-ui/core/styles' import { EthHashInfo, Icon, Text, ButtonLink } from '@gnosis.pm/safe-react-components' import * as React from 'react' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import styled from 'styled-components' import { SafeRecord } from 'src/logic/safe/store/models/safe' import { DefaultSafe } from 'src/routes/safe/store/reducer/types/safe' import { SetDefaultSafe } from 'src/logic/safe/store/actions/setDefaultSafe' -import { getNetworkId } from 'src/config' +import { getNetworkName } from 'src/config' import DefaultBadge from './DefaultBadge' import Hairline from 'src/components/layout/Hairline' import Link from 'src/components/layout/Link' @@ -115,7 +114,7 @@ const SafeList = ({ currentSafe, defaultSafe, onSafeClick, safes, setDefaultSafe name={safe.name} showIdenticon shortenHash={4} - network={ETHEREUM_NETWORK[getNetworkId()]} + network={getNetworkName()} /> diff --git a/src/config/index.ts b/src/config/index.ts index ec52d30026..c0965eb9ec 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -7,13 +7,15 @@ import { ensureOnce } from 'src/utils/singleton' export const getNetworkId = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY +export const getNetworkName = (): string => ETHEREUM_NETWORK[getNetworkId()] + type NetworkSpecificConfiguration = EnvironmentSettings & { network: NetworkSettings, features: SafeFeatures, } const configuration = (): Promise => { - const configFile: NetworkConfig = networks[ETHEREUM_NETWORK[getNetworkId()].toLowerCase()] + const configFile: NetworkConfig = networks[getNetworkName().toLowerCase()] return { ...configFile.environment[process.env.REACT_APP_ENV ?? 'production'], diff --git a/src/logic/cookies/utils/index.ts b/src/logic/cookies/utils/index.ts index 06082ce434..7b9f8ce7ea 100644 --- a/src/logic/cookies/utils/index.ts +++ b/src/logic/cookies/utils/index.ts @@ -1,9 +1,8 @@ import Cookies from 'js-cookie' -import { getNetworkId } from 'src/config' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { getNetworkName } from 'src/config' -const PREFIX = `v1_${ETHEREUM_NETWORK[getNetworkId()]}` +const PREFIX = `v1_${getNetworkName()}` export const loadFromCookie = async (key) => { try { diff --git a/src/logic/notifications/notificationTypes.ts b/src/logic/notifications/notificationTypes.ts index 0cd17622e5..d1b1b90cd7 100644 --- a/src/logic/notifications/notificationTypes.ts +++ b/src/logic/notifications/notificationTypes.ts @@ -1,8 +1,6 @@ import { OptionsObject } from 'notistack' -import { getNetworkId } from 'src/config' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' -import { capitalize } from 'src/utils/css' +import { getNetworkName } from 'src/config' export const SUCCESS = 'success' export const ERROR = 'error' @@ -199,7 +197,7 @@ export const NOTIFICATIONS: Record = { options: { variant: WARNING, persist: true, preventDuplicate: true }, }, WRONG_NETWORK_MSG: { - message: `Wrong network: Please use ${capitalize(ETHEREUM_NETWORK[getNetworkId()])}`, + message: `Wrong network: Please use ${getNetworkName()}`, options: { variant: WARNING, persist: true, preventDuplicate: true }, }, diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx index 250e7178c9..d70ac9d498 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/CreationTx/index.tsx @@ -1,10 +1,9 @@ import { makeStyles } from '@material-ui/core/styles' import React from 'react' import { EthHashInfo } from '@gnosis.pm/safe-react-components' -import { getNetworkId } from 'src/config' +import { getNetworkName } from 'src/config' import { Transaction } from 'src/logic/safe/store/models/types/transaction' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import { formatDate } from 'src/routes/safe/components/Transactions/TxsTable/columns' import Bold from 'src/components/layout/Bold' import Paragraph from 'src/components/layout/Paragraph' @@ -47,13 +46,7 @@ export const CreationTx = ({ tx }: Props): React.ReactElement | null => { Creator: {tx.creator ? ( - + ) : ( 'n/a' )} @@ -66,7 +59,7 @@ export const CreationTx = ({ tx }: Props): React.ReactElement | null => { shortenHash={4} showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetworkId()]} + network={getNetworkName()} /> ) : ( 'n/a' @@ -75,13 +68,7 @@ export const CreationTx = ({ tx }: Props): React.ReactElement | null => { Mastercopy: {tx.masterCopy ? ( - + ) : ( 'n/a' )} diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx index af77510b56..fc973f8670 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/OwnersColumn/OwnerComponent.tsx @@ -3,8 +3,6 @@ import cn from 'classnames' import React from 'react' import { useSelector } from 'react-redux' import { EthHashInfo } from '@gnosis.pm/safe-react-components' -import { getNetworkId } from 'src/config' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import CancelSmallFilledCircle from './assets/cancel-small-filled.svg' import ConfirmSmallFilledCircle from './assets/confirm-small-filled.svg' @@ -14,6 +12,7 @@ import ConfirmSmallRedCircle from './assets/confirm-small-red.svg' import PendingSmallYellowCircle from './assets/confirm-small-yellow.svg' import { styles } from './style' +import { getNetworkName } from 'src/config' import Block from 'src/components/layout/Block' import Button from 'src/components/layout/Button' import Img from 'src/components/layout/Img' @@ -184,7 +183,7 @@ const OwnerComponent = (props: OwnerComponentProps): React.ReactElement => { showIdenticon showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetworkId()]} + network={getNetworkName()} /> {owner === userAddress && {isCancelTx ? rejectButton() : confirmButton()}} diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/CustomDescription.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/CustomDescription.tsx index c5e7c8aaa6..10353ded90 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/CustomDescription.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/CustomDescription.tsx @@ -1,7 +1,6 @@ import { IconText, Text, EthHashInfo } from '@gnosis.pm/safe-react-components' import { makeStyles } from '@material-ui/core/styles' import React from 'react' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import styled from 'styled-components' import { styles } from './styles' @@ -24,7 +23,7 @@ import { Transaction } from 'src/logic/safe/store/models/types/transaction' import { DataDecoded } from 'src/routes/safe/store/models/types/transactions.d' import DividerLine from 'src/components/DividerLine' import { isArrayParameter } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils' -import { getNetworkId } from 'src/config' +import { getNetworkName } from 'src/config' export const TRANSACTIONS_DESC_CUSTOM_VALUE_TEST_ID = 'tx-description-custom-value' export const TRANSACTIONS_DESC_CUSTOM_DATA_TEST_ID = 'tx-description-custom-data' @@ -86,13 +85,7 @@ const MultiSendCustomDataAction = ({ tx, order }: { tx: MultiSendDetails; order: Send {humanReadableValue(tx.value)} ETH to: - + {!!tx.data && } @@ -196,7 +189,7 @@ const GenericCustomData = ({ amount = '0', data, recipient, storedTx }: GenericC showIdenticon showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetworkId()]} + network={getNetworkName()} /> diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/Value.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/Value.tsx index de77bb1d43..d773789a88 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/Value.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/TxDescription/Value.tsx @@ -1,9 +1,8 @@ import { Text, EthHashInfo } from '@gnosis.pm/safe-react-components' import React from 'react' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import styled from 'styled-components' -import { getNetworkId } from 'src/config' +import { getNetworkName } from 'src/config' import { isAddress, isArrayParameter, @@ -58,7 +57,7 @@ const Value = ({ type, ...props }: RenderValueProps): React.ReactElement => { showCopyBtn showEtherscanBtn shortenHash={4} - network={ETHEREUM_NETWORK[getNetworkId()]} + network={getNetworkName()} /> ) } diff --git a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx index 1f6a5bd2cf..b9b31884aa 100644 --- a/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx +++ b/src/routes/safe/components/Transactions/TxsTable/ExpandedTx/index.tsx @@ -13,7 +13,7 @@ import { CreationTx } from './CreationTx' import { OutgoingTx } from './OutgoingTx' import { styles } from './style' -import { getNetworkId } from 'src/config' +import { getNetworkName } from 'src/config' import Block from 'src/components/layout/Block' import Bold from 'src/components/layout/Bold' import Col from 'src/components/layout/Col' @@ -21,7 +21,7 @@ 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 { ETHEREUM_NETWORK, getWeb3 } from 'src/logic/wallets/getWeb3' +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' @@ -73,7 +73,7 @@ const ExpandedTx = ({ cancelTx, tx }: ExpandedTxProps): React.ReactElement => { shortenHash={4} showCopyBtn showEtherscanBtn - network={ETHEREUM_NETWORK[getNetworkId()]} + network={getNetworkName()} /> ) : ( 'n/a' diff --git a/src/utils/storage/index.ts b/src/utils/storage/index.ts index 8abc43db05..d9f7a13328 100644 --- a/src/utils/storage/index.ts +++ b/src/utils/storage/index.ts @@ -1,7 +1,6 @@ import { ImmortalStorage, IndexedDbStore, LocalStorageStore } from 'immortal-db' -import { getNetworkId } from 'src/config' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { getNetworkName } from 'src/config' // Don't use sessionStorage and cookieStorage // https://github.com/gruns/ImmortalDB/issues/22 @@ -9,7 +8,7 @@ import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const stores = [IndexedDbStore, LocalStorageStore] export const storage = new ImmortalStorage(stores) -const PREFIX = `v2_${ETHEREUM_NETWORK[getNetworkId()]}` +const PREFIX = `v2_${getNetworkName()}` export const loadFromStorage = async (key: string): Promise => { try { From 9a467d0f022058a34893a1e32eae73da518e996b Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 10:40:59 -0300 Subject: [PATCH 12/26] simplify config file and use CONSTANTS where possible Co-authored-by: Matias Dastugue --- src/config/index.ts | 42 ++++--------------- .../api/fetchCurrenciesRates.ts | 4 +- src/logic/safe/utils/safeVersion.ts | 4 +- src/utils/constants.ts | 6 ++- src/utils/intercom.ts | 4 +- 5 files changed, 18 insertions(+), 42 deletions(-) diff --git a/src/config/index.ts b/src/config/index.ts index c0965eb9ec..e93736199b 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -26,47 +26,21 @@ const configuration = (): Promise => { const getConfig: () => NetworkSpecificConfiguration = ensureOnce(configuration) -export const getTxServiceHost = (): string => { - const config = getConfig() - return config.txServiceUri -} - -export const getRelayUrl = (): string | undefined => { - const config = getConfig() - return config.relayApiUri -} - -export const getGnosisSafeAppsUrl = (): string => { - const config = getConfig() - return config.safeAppsUri -} - -export const getTxServiceUriFrom = (safeAddress) => - `safes/${safeAddress}/transactions/` +export const getTxServiceHost = (): string => getConfig()?.txServiceUri -export const getIncomingTxServiceUriTo = (safeAddress) => - `safes/${safeAddress}/incoming-transfers/` +export const getRelayUrl = (): string | undefined => getConfig()?.relayApiUri -export const getAllTransactionsUriFrom = (safeAddress: string): string => - `safes/${safeAddress}/all-transactions/` +export const getGnosisSafeAppsUrl = (): string => getConfig()?.safeAppsUri -export const getSafeCreationTxUri = (safeAddress) => `safes/${safeAddress}/creation/` +export const getTxServiceUriFrom = (safeAddress) => `safes/${safeAddress}/transactions/` -export const getGoogleAnalyticsTrackingID = () => GOOGLE_ANALYTICS_ID[ETHEREUM_NETWORK[getNetwork()]] +export const getIncomingTxServiceUriTo = (safeAddress: string) => `safes/${safeAddress}/incoming-transfers/` -// TODO: replace this with an `INTERCOM_ID` constant? -export const getIntercomId = () => - process.env.REACT_APP_ENV === 'production' - ? process.env.REACT_APP_INTERCOM_ID - : 'plssl1fl' +export const getAllTransactionsUriFrom = (safeAddress: string) => `safes/${safeAddress}/all-transactions/` -// TODO: handle this within one function? or expose both urls in respective constants? -// `EXCHANGE_RATE_URI`, `EXCHANGE_RATES_URI_FALLBACK` -export const getExchangeRatesUrl = () => 'https://api.exchangeratesapi.io/latest' -export const getExchangeRatesUrlFallback = () => 'https://api.coinbase.com/v2/exchange-rates' +export const getSafeCreationTxUri = (safeAddress: string) => `safes/${safeAddress}/creation/` -// TODO: This can be exposed directly in the `constants.ts` file -export const getSafeLastVersion = () => process.env.REACT_APP_LATEST_SAFE_VERSION || '1.1.1' +export const getGoogleAnalyticsTrackingID = (): string => GOOGLE_ANALYTICS_ID[getNetworkName()] export const buildSafeCreationTxUrl = (safeAddress) => { const host = getTxServiceHost() diff --git a/src/logic/currencyValues/api/fetchCurrenciesRates.ts b/src/logic/currencyValues/api/fetchCurrenciesRates.ts index 00e2c48a1d..6f0c0f59f2 100644 --- a/src/logic/currencyValues/api/fetchCurrenciesRates.ts +++ b/src/logic/currencyValues/api/fetchCurrenciesRates.ts @@ -1,6 +1,6 @@ import axios from 'axios' -import { getExchangeRatesUrl } from 'src/config' +import { EXCHANGE_RATE_URL } from 'src/utils/constants' import { AVAILABLE_CURRENCIES } from '../store/model/currencyValues' import fetchTokenCurrenciesBalances from './fetchTokenCurrenciesBalances' import BigNumber from 'bignumber.js' @@ -25,7 +25,7 @@ const fetchCurrenciesRates = async ( } try { - const url = `${getExchangeRatesUrl()}?base=${baseCurrency}&symbols=${targetCurrencyValue}` + const url = `${EXCHANGE_RATE_URL}?base=${baseCurrency}&symbols=${targetCurrencyValue}` const result = await axios.get(url) if (result?.data) { const { rates } = result.data diff --git a/src/logic/safe/utils/safeVersion.ts b/src/logic/safe/utils/safeVersion.ts index 5fe5ee3460..25618a557b 100644 --- a/src/logic/safe/utils/safeVersion.ts +++ b/src/logic/safe/utils/safeVersion.ts @@ -3,8 +3,8 @@ import semverSatisfies from 'semver/functions/satisfies' import semverValid from 'semver/functions/valid' import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d' -import { getSafeLastVersion } from 'src/config' import { getGnosisSafeInstanceAt, getSafeMasterContract } from 'src/logic/contracts/safeContracts' +import { LATEST_SAFE_VERSION } from 'src/utils/constants' export const FEATURES = [ { name: 'ERC721', validVersion: '>=1.1.1' }, @@ -64,7 +64,7 @@ export const getCurrentMasterContractLastVersion = async (): Promise => } 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 - safeMasterVersion = getSafeLastVersion() + safeMasterVersion = LATEST_SAFE_VERSION } return safeMasterVersion } diff --git a/src/utils/constants.ts b/src/utils/constants.ts index a49c513fd8..2cd50d1057 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -3,14 +3,16 @@ export const GOOGLE_ANALYTICS_ID = { RINKEBY: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY, MAINNET: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET, } -export const INTERCOM_ID = process.env.REACT_APP_INTERCOM_ID +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 INFURA_TOKEN = process.env.REACT_APP_INFURA_TOKEN || '' -export const LATEST_SAFE_VERSION = process.env.REACT_APP_LATEST_SAFE_VERSION || 'not-defined' +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' export const OPENSEA_API_KEY = process.env.REACT_APP_OPENSEA_API_KEY || '' export const COLLECTIBLES_SOURCE = process.env.REACT_APP_COLLECTIBLES_SOURCE || 'OpenSea' 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' diff --git a/src/utils/intercom.ts b/src/utils/intercom.ts index 6fb98cbf97..68035e7d98 100644 --- a/src/utils/intercom.ts +++ b/src/utils/intercom.ts @@ -1,8 +1,8 @@ -import { getIntercomId } from 'src/config' +import { INTERCOM_ID } from 'src/utils/constants' // eslint-disable-next-line consistent-return export const loadIntercom = () => { - const APP_ID = getIntercomId() + const APP_ID = INTERCOM_ID if (!APP_ID) { console.error('[Intercom] - In order to use Intercom you need to add an appID') return null From 95bd0fb1b08f33f02677015ce4c653cb806396c4 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 10:55:57 -0300 Subject: [PATCH 13/26] update tests Co-authored-by: Matias Dastugue --- .../networks/__tests__/networks.test.ts | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/config/networks/__tests__/networks.test.ts b/src/config/networks/__tests__/networks.test.ts index a674449e23..92ab5d10a8 100644 --- a/src/config/networks/__tests__/networks.test.ts +++ b/src/config/networks/__tests__/networks.test.ts @@ -1,25 +1,39 @@ import fs from 'fs' -import { NetworkConfig } from 'src/config/networks/network.d' +import networks from 'src/config/networks' import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import { isValidURL } from 'src/utils/url' describe('Network config file test', () => { + const environments = ['dev', 'staging', 'production'] + const NETWORKS_PATH = 'src/config/networks/' const configFiles = fs.readdirSync(NETWORKS_PATH) const networksFileNames = configFiles .filter((file) => !fs.lstatSync(`${NETWORKS_PATH}${file}`).isDirectory()) .filter((file) => { - const [, extension] = file.split('.') - return extension === 'ts' + const [fileName, extension] = file.split('.') + return extension === 'ts' && fileName !== 'index' }) - const environments = ['dev', 'staging', 'production'] + .map((file) => file.split('.')[0]) + + it(`should verify that the network file is exported in the networks/index.ts file`, () => { + networksFileNames.forEach((networkFileName) => { + const isValid = !!networks[networkFileName] + + if (!isValid) { + console.log(`Network file "${networkFileName}" is not exported in "networks/index.ts"`) + } + + expect(isValid).toBeTruthy() + }) + }) environments.forEach((environment) => { networksFileNames.forEach((networkFileName) => { - it(`should validate "${environment}" environment URIs for ${networkFileName} config`, async () => { + it(`should validate "${environment}" environment URIs for ${networkFileName} config`, () => { // Given - const { default: networkConfig } = await import(`${NETWORKS_PATH}${networkFileName}`) + const networkConfig = networks[networkFileName] // When const networkConfigElement = networkConfig.environment[environment] @@ -49,9 +63,9 @@ describe('Network config file test', () => { }) networksFileNames.forEach((networkFileName) => { - it(`should have a valid 'decimal' value for 'nativeToken'`, async() => { + it(`should have a valid 'decimal' value for 'nativeToken'`, () => { // Given - const { default: networkConfig }: { default: NetworkConfig } = await import(`${NETWORKS_PATH}${networkFileName}`) + const networkConfig = networks[networkFileName] // When const { decimals } = networkConfig.network.nativeCoin @@ -68,9 +82,9 @@ describe('Network config file test', () => { }) networksFileNames.forEach((networkFileName) => { - it(`should have one of 'ETHEREUM_NETWORK' values for 'network.id'`, async() => { + it(`should have one of 'ETHEREUM_NETWORK' values for 'network.id'`, () => { // Given - const { default: networkConfig }: { default: NetworkConfig } = await import(`${NETWORKS_PATH}${networkFileName}`) + const networkConfig = networks[networkFileName] // When const { id } = networkConfig.network @@ -87,9 +101,9 @@ describe('Network config file test', () => { }) networksFileNames.forEach((networkFileName) => { - it(`should have a valid CSS color defined for 'network.color'`, async() => { + it(`should have a valid CSS color defined for 'network.color'`, () => { // Given - const { default: networkConfig }: { default: NetworkConfig } = await import(`${NETWORKS_PATH}${networkFileName}`) + const networkConfig = networks[networkFileName] // When const { color } = networkConfig.network From dfd1b2a1026ad208d9063f8f28f7375921a2cb5f Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 11:58:30 -0300 Subject: [PATCH 14/26] change features' type to boolean --- src/config/networks/network.d.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index 6723c696e2..b008a907d8 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -1,7 +1,5 @@ import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' -type DisplayFlag = 'enable' | 'disable' - // matches src/logic/tokens/store/model/token.ts `TokenProps` type type Token = { address: string @@ -22,9 +20,9 @@ type NetworkSettings = { // I listed the ones that may conflict with the network. // If non is present, all the sections are available. type SafeFeatures = { - safeApps?: DisplayFlag, - collectibles?: DisplayFlag, - contractInteraction?: DisplayFlag + safeApps?: boolean, + collectibles?: boolean, + contractInteraction?: boolean } type GasPrice = { From dc26462147115913597b4f18925dee579be36075 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 12:00:54 -0300 Subject: [PATCH 15/26] replace `Uri` with `Url` --- src/config/networks/mainnet.ts | 18 +++++++++--------- src/config/networks/network.d.ts | 16 ++++++++-------- src/config/networks/rinkeby.ts | 18 +++++++++--------- src/config/networks/xdai.ts | 10 +++++----- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/config/networks/mainnet.ts b/src/config/networks/mainnet.ts index cb920cc5d9..2eeccf2052 100644 --- a/src/config/networks/mainnet.ts +++ b/src/config/networks/mainnet.ts @@ -3,12 +3,12 @@ import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network. import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { - txServiceUri: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', - safeAppsUri: 'https://safe-apps.dev.gnosisdev.com/', - gasPriceOracleUri: 'https://ethgasstation.info/json/ethgasAPI.json', - rpcServiceUri: 'https://mainnet.infura.io:443/v3/', - networkExplorerUri: 'https://etherscan.io/', - networkExplorerApiUri: 'https://api.etherscan.io/api', + txServiceUrl: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', + safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', + gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', + rpcServiceUrl: 'https://mainnet.infura.io:443/v3/', + networkExplorerUrl: 'https://etherscan.io/', + networkExplorerApiUrl: 'https://api.etherscan.io/api', } const mainnet: NetworkConfig = { @@ -18,12 +18,12 @@ const mainnet: NetworkConfig = { }, staging: { ...baseConfig, - safeAppsUri: 'https://safe-apps.staging.gnosisdev.com', + safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com', }, production: { ...baseConfig, - txServiceUri: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', - safeAppsUri: 'https://apps.gnosis-safe.io/', + txServiceUrl: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', + safeAppsUrl: 'https://apps.gnosis-safe.io/', }, }, network: { diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index b008a907d8..0f0ae29554 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -27,21 +27,21 @@ type SafeFeatures = { type GasPrice = { gasPrice: number - gasPriceOracleUri?: string + gasPriceOracleUrl?: string } | { gasPrice?: number // for infura there's a REST API Token required stored in: `REACT_APP_INFURA_TOKEN` - gasPriceOracleUri: string + gasPriceOracleUrl: string } export type EnvironmentSettings = GasPrice & { - txServiceUri: string + txServiceUrl: string // Shall we keep a reference to the relay? - relayApiUri?: string - safeAppsUri: string - rpcServiceUri: string - networkExplorerUri: string - networkExplorerApiUri: string + relayApiUrl?: string + safeAppsUrl: string + rpcServiceUrl: string + networkExplorerUrl: string + networkExplorerApiUrl: string } type SafeEnvironments = { diff --git a/src/config/networks/rinkeby.ts b/src/config/networks/rinkeby.ts index 93f9102a59..bcedab8889 100644 --- a/src/config/networks/rinkeby.ts +++ b/src/config/networks/rinkeby.ts @@ -3,12 +3,12 @@ import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network. import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const baseConfig: EnvironmentSettings = { - txServiceUri: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', - safeAppsUri: 'https://safe-apps.dev.gnosisdev.com/', - gasPriceOracleUri: 'https://ethgasstation.info/json/ethgasAPI.json', - rpcServiceUri: 'https://rinkeby.infura.io:443/v3/', - networkExplorerUri: 'https://rinkeby.etherscan.io/', - networkExplorerApiUri: 'https://api-rinkeby.etherscan.io/api', + txServiceUrl: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', + safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', + gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', + rpcServiceUrl: 'https://rinkeby.infura.io:443/v3/', + networkExplorerUrl: 'https://rinkeby.etherscan.io/', + networkExplorerApiUrl: 'https://api-rinkeby.etherscan.io/api', } const rinkeby: NetworkConfig = { @@ -18,12 +18,12 @@ const rinkeby: NetworkConfig = { }, staging: { ...baseConfig, - safeAppsUri: 'https://safe-apps.staging.gnosisdev.com', + safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com', }, production: { ...baseConfig, - txServiceUri: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', - safeAppsUri: 'https://apps.gnosis-safe.io/', + txServiceUrl: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', + safeAppsUrl: 'https://apps.gnosis-safe.io/', }, }, network: { diff --git a/src/config/networks/xdai.ts b/src/config/networks/xdai.ts index c2677948a7..f87fb60f62 100644 --- a/src/config/networks/xdai.ts +++ b/src/config/networks/xdai.ts @@ -4,12 +4,12 @@ import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' const xDai: NetworkConfig = { environment: { production: { - txServiceUri: 'https://safe-transaction.xdai.gnosis.io/api/v1/', - safeAppsUri: 'https://apps.gnosis-safe.io/', + txServiceUrl: 'https://safe-transaction.xdai.gnosis.io/api/v1/', + safeAppsUrl: 'https://apps.gnosis-safe.io/', gasPrice: 1e9, - rpcServiceUri: 'https://rpc.xdaichain.com/', - networkExplorerUri: 'https://blockscout.com/poa/xdai/', - networkExplorerApiUri: 'https://blockscout.com/poa/xdai/api', + rpcServiceUrl: 'https://rpc.xdaichain.com/', + networkExplorerUrl: 'https://blockscout.com/poa/xdai/', + networkExplorerApiUrl: 'https://blockscout.com/poa/xdai/api', }, }, network: { From 35604e7d855cc05a521aa566398fa17b7c49f403 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 12:03:38 -0300 Subject: [PATCH 16/26] add `networkExplorerName` key --- src/config/networks/mainnet.ts | 1 + src/config/networks/network.d.ts | 1 + src/config/networks/rinkeby.ts | 1 + src/config/networks/xdai.ts | 1 + 4 files changed, 4 insertions(+) diff --git a/src/config/networks/mainnet.ts b/src/config/networks/mainnet.ts index 2eeccf2052..d9f0fcf3ab 100644 --- a/src/config/networks/mainnet.ts +++ b/src/config/networks/mainnet.ts @@ -7,6 +7,7 @@ const baseConfig: EnvironmentSettings = { safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', rpcServiceUrl: 'https://mainnet.infura.io:443/v3/', + networkExplorerName: 'Etherscan', networkExplorerUrl: 'https://etherscan.io/', networkExplorerApiUrl: 'https://api.etherscan.io/api', } diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index 0f0ae29554..0d061a20c0 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -40,6 +40,7 @@ export type EnvironmentSettings = GasPrice & { relayApiUrl?: string safeAppsUrl: string rpcServiceUrl: string + networkExplorerName: string networkExplorerUrl: string networkExplorerApiUrl: string } diff --git a/src/config/networks/rinkeby.ts b/src/config/networks/rinkeby.ts index bcedab8889..b37f04e002 100644 --- a/src/config/networks/rinkeby.ts +++ b/src/config/networks/rinkeby.ts @@ -7,6 +7,7 @@ const baseConfig: EnvironmentSettings = { safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', rpcServiceUrl: 'https://rinkeby.infura.io:443/v3/', + networkExplorerName: 'Etherscan', networkExplorerUrl: 'https://rinkeby.etherscan.io/', networkExplorerApiUrl: 'https://api-rinkeby.etherscan.io/api', } diff --git a/src/config/networks/xdai.ts b/src/config/networks/xdai.ts index f87fb60f62..05a8aef442 100644 --- a/src/config/networks/xdai.ts +++ b/src/config/networks/xdai.ts @@ -8,6 +8,7 @@ const xDai: NetworkConfig = { safeAppsUrl: 'https://apps.gnosis-safe.io/', gasPrice: 1e9, rpcServiceUrl: 'https://rpc.xdaichain.com/', + networkExplorerName: 'Blockscout', networkExplorerUrl: 'https://blockscout.com/poa/xdai/', networkExplorerApiUrl: 'https://blockscout.com/poa/xdai/api', }, From 4e5e8bf6ba5d744e62beb7935d22caaec6395d0b Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 12:31:00 -0300 Subject: [PATCH 17/26] move `ETHEREUM_NETWORK` enum into `config/networks/network.d` definition file Co-authored-by: Matias Dastugue --- src/components/App/index.tsx | 4 ++-- .../Header/components/NetworkLabel.tsx | 2 +- .../ProviderDetails/UserDetails.tsx | 2 +- .../ProviderInfo/ProviderAccessible.tsx | 2 +- src/config/index.ts | 9 ++++++-- .../networks/__tests__/networks.test.ts | 2 +- src/config/networks/mainnet.ts | 3 +-- src/config/networks/network.d.ts | 15 ++++++++++-- src/config/networks/rinkeby.ts | 3 +-- src/config/networks/xdai.ts | 3 +-- src/logic/collectibles/sources/OpenSea.ts | 2 +- .../sources/EtherscanService.ts | 2 +- src/logic/wallets/getWeb3.ts | 23 ++++--------------- .../wallets/store/actions/fetchProvider.ts | 3 ++- src/logic/wallets/store/model/provider.ts | 3 ++- src/logic/wallets/store/selectors/index.ts | 2 +- src/routes/load/container/Load.tsx | 2 +- .../Apps/hooks/useIframeMessageHandler.ts | 2 +- src/routes/safe/components/Apps/index.tsx | 2 +- 19 files changed, 44 insertions(+), 42 deletions(-) diff --git a/src/components/App/index.tsx b/src/components/App/index.tsx index a8cc887ea3..466fabb987 100644 --- a/src/components/App/index.tsx +++ b/src/components/App/index.tsx @@ -17,7 +17,7 @@ import Notifier from 'src/components/Notifier' import Backdrop from 'src/components/layout/Backdrop' import Img from 'src/components/layout/Img' import { getNetworkId } from 'src/config' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import { networkSelector } from 'src/logic/wallets/store/selectors' import { SAFELIST_ADDRESS, WELCOME_ADDRESS } from 'src/routes/routes' import { safeNameSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' @@ -26,7 +26,7 @@ import SendModal from 'src/routes/safe/components/Balances/SendModal' import { useLoadSafe } from 'src/logic/safe/hooks/useLoadSafe' import { useSafeScheduledUpdates } from 'src/logic/safe/hooks/useSafeScheduledUpdates' import useSafeActions from 'src/logic/safe/hooks/useSafeActions' -import { currentCurrencySelector, safeFiatBalancesTotalSelector } from 'src/logic/currencyValues/store/selectors/index' +import { currentCurrencySelector, safeFiatBalancesTotalSelector } from 'src/logic/currencyValues/store/selectors' import { formatAmountInUsFormat } from 'src/logic/tokens/utils/formatAmount' import { grantedSelector } from 'src/routes/safe/container/selector' diff --git a/src/components/AppLayout/Header/components/NetworkLabel.tsx b/src/components/AppLayout/Header/components/NetworkLabel.tsx index c9e98deadb..88cb71fccc 100644 --- a/src/components/AppLayout/Header/components/NetworkLabel.tsx +++ b/src/components/AppLayout/Header/components/NetworkLabel.tsx @@ -4,7 +4,7 @@ import * as React from 'react' import Col from 'src/components/layout/Col' import Paragraph from 'src/components/layout/Paragraph' import { getNetworkId } from 'src/config' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import { border, md, screenSm, sm, xs } from 'src/theme/variables' const interfaceNetwork = getNetworkId() diff --git a/src/components/AppLayout/Header/components/ProviderDetails/UserDetails.tsx b/src/components/AppLayout/Header/components/ProviderDetails/UserDetails.tsx index f651eeef50..5255e48b11 100644 --- a/src/components/AppLayout/Header/components/ProviderDetails/UserDetails.tsx +++ b/src/components/AppLayout/Header/components/ProviderDetails/UserDetails.tsx @@ -14,7 +14,7 @@ import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' import { background, connected as connectedBg, lg, md, sm, warning, xs } from 'src/theme/variables' import { upperFirst } from 'src/utils/css' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' const dot = require('../../assets/dotRinkeby.svg') const walletIcon = require('../../assets/wallet.svg') diff --git a/src/components/AppLayout/Header/components/ProviderInfo/ProviderAccessible.tsx b/src/components/AppLayout/Header/components/ProviderInfo/ProviderAccessible.tsx index 8253833781..c4ba67588b 100644 --- a/src/components/AppLayout/Header/components/ProviderInfo/ProviderAccessible.tsx +++ b/src/components/AppLayout/Header/components/ProviderInfo/ProviderAccessible.tsx @@ -1,8 +1,8 @@ import { makeStyles } from '@material-ui/core/styles' import * as React from 'react' import { EthHashInfo, Text } from '@gnosis.pm/safe-react-components' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import NetworkLabel from '../NetworkLabel' import CircleDot from 'src/components/AppLayout/Header/components/CircleDot' import Col from 'src/components/layout/Col' diff --git a/src/config/index.ts b/src/config/index.ts index 0ed4bd8781..0431e2233f 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,6 +1,11 @@ import networks from 'src/config/networks' -import { EnvironmentSettings, NetworkConfig, NetworkSettings, SafeFeatures } from 'src/config/networks/network' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { + EnvironmentSettings, + ETHEREUM_NETWORK, + NetworkConfig, + NetworkSettings, + SafeFeatures, +} from 'src/config/networks/network' import { checksumAddress } from 'src/utils/checksumAddress' import { GOOGLE_ANALYTICS_ID, NETWORK } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' diff --git a/src/config/networks/__tests__/networks.test.ts b/src/config/networks/__tests__/networks.test.ts index 304a5d1cec..ce39052959 100644 --- a/src/config/networks/__tests__/networks.test.ts +++ b/src/config/networks/__tests__/networks.test.ts @@ -1,7 +1,7 @@ import fs from 'fs' import networks from 'src/config/networks' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import { isValidURL } from 'src/utils/url' describe('Networks config files test', () => { diff --git a/src/config/networks/mainnet.ts b/src/config/networks/mainnet.ts index d9f0fcf3ab..5ff483db08 100644 --- a/src/config/networks/mainnet.ts +++ b/src/config/networks/mainnet.ts @@ -1,6 +1,5 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' -import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network.d' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d' const baseConfig: EnvironmentSettings = { txServiceUrl: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index c4936f6e0e..b5528eb87a 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -1,5 +1,3 @@ -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' - // matches src/logic/tokens/store/model/token.ts `TokenProps` type type Token = { address: string @@ -9,6 +7,19 @@ type Token = { logoUri?: string } +export enum ETHEREUM_NETWORK { + MAINNET = 1, + MORDEN = 2, + ROPSTEN = 3, + RINKEBY = 4, + GOERLI = 5, + KOVAN = 42, + XDAI = 100, + ENERGY_WEB_CHAIN = 246, + VOLTA = 73799, + UNKNOWN = 0, +} + export type NetworkSettings = { id: ETHEREUM_NETWORK, color: string, diff --git a/src/config/networks/rinkeby.ts b/src/config/networks/rinkeby.ts index b37f04e002..7a6d78325f 100644 --- a/src/config/networks/rinkeby.ts +++ b/src/config/networks/rinkeby.ts @@ -1,6 +1,5 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' -import { EnvironmentSettings, NetworkConfig } from 'src/config/networks/network.d' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d' const baseConfig: EnvironmentSettings = { txServiceUrl: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', diff --git a/src/config/networks/xdai.ts b/src/config/networks/xdai.ts index 05a8aef442..d3a29a93e9 100644 --- a/src/config/networks/xdai.ts +++ b/src/config/networks/xdai.ts @@ -1,5 +1,4 @@ -import { NetworkConfig } from 'src/config/networks/network.d' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d' const xDai: NetworkConfig = { environment: { diff --git a/src/logic/collectibles/sources/OpenSea.ts b/src/logic/collectibles/sources/OpenSea.ts index 2175ec59af..a5db3ee5d5 100644 --- a/src/logic/collectibles/sources/OpenSea.ts +++ b/src/logic/collectibles/sources/OpenSea.ts @@ -1,6 +1,6 @@ import { RateLimit } from 'async-sema' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import NFTIcon from 'src/routes/safe/components/Balances/assets/nft_icon.png' import { OPENSEA_API_KEY } from 'src/utils/constants' diff --git a/src/logic/contractInteraction/sources/EtherscanService.ts b/src/logic/contractInteraction/sources/EtherscanService.ts index d9e7bfc5df..9741d1c203 100644 --- a/src/logic/contractInteraction/sources/EtherscanService.ts +++ b/src/logic/contractInteraction/sources/EtherscanService.ts @@ -1,7 +1,7 @@ import { RateLimit } from 'async-sema' import memoize from 'lodash.memoize' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import { ETHERSCAN_API_KEY } from 'src/utils/constants' class EtherscanService { diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index 8529373ea0..7e8c72c5e5 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -1,27 +1,14 @@ -import { NETWORK } from 'src/utils/constants' 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' +import { NETWORK } from 'src/utils/constants' import { sameAddress } from './ethAddresses' import { EMPTY_DATA } from './ethTransactions' - -import { getNetworkId } from 'src/config' -import { ContentHash } from 'web3-eth-ens' -import { provider as Provider } from 'web3-core' import { ProviderProps } from './store/model/provider' -export enum ETHEREUM_NETWORK { - MAINNET = 1, - MORDEN = 2, - ROPSTEN = 3, - RINKEBY = 4, - GOERLI = 5, - KOVAN = 42, - XDAI = 100, - ENERGY_WEB_CHAIN = 246, - VOLTA = 73799, - UNKNOWN = 0, -} - export const WALLET_PROVIDER = { SAFE: 'SAFE', METAMASK: 'METAMASK', diff --git a/src/logic/wallets/store/actions/fetchProvider.ts b/src/logic/wallets/store/actions/fetchProvider.ts index 137a92e05f..a02e04d1f7 100644 --- a/src/logic/wallets/store/actions/fetchProvider.ts +++ b/src/logic/wallets/store/actions/fetchProvider.ts @@ -5,7 +5,8 @@ import addProvider from './addProvider' import { getNetworkId } from 'src/config' import { NOTIFICATIONS, enhanceSnackbarForAction } from 'src/logic/notifications' import enqueueSnackbar from 'src/logic/notifications/store/actions/enqueueSnackbar' -import { ETHEREUM_NETWORK, getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' +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/model/provider.ts b/src/logic/wallets/store/model/provider.ts index dd7c4c389a..a329c9a416 100644 --- a/src/logic/wallets/store/model/provider.ts +++ b/src/logic/wallets/store/model/provider.ts @@ -1,5 +1,6 @@ import { Record, RecordOf } from 'immutable' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' + +import { ETHEREUM_NETWORK } from 'src/config/networks/network' export type ProviderProps = { name: string diff --git a/src/logic/wallets/store/selectors/index.ts b/src/logic/wallets/store/selectors/index.ts index 51a0474006..dba317ce44 100644 --- a/src/logic/wallets/store/selectors/index.ts +++ b/src/logic/wallets/store/selectors/index.ts @@ -1,6 +1,6 @@ import { createSelector } from 'reselect' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import { PROVIDER_REDUCER_ID, ProviderState } from 'src/logic/wallets/store/reducer/provider' import { AppReduxState } from 'src/store' diff --git a/src/routes/load/container/Load.tsx b/src/routes/load/container/Load.tsx index efa6ba79ca..a1fb517993 100644 --- a/src/routes/load/container/Load.tsx +++ b/src/routes/load/container/Load.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import { useDispatch, useSelector } from 'react-redux' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import Layout from 'src/routes/load/components/Layout' import { FIELD_LOAD_ADDRESS, FIELD_LOAD_NAME } from '../components/fields' diff --git a/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts b/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts index 590402807b..5e297f01e0 100644 --- a/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts +++ b/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts @@ -13,12 +13,12 @@ import { import { useDispatch, useSelector } from 'react-redux' import { useEffect, useCallback, MutableRefObject } from 'react' import { getTxServiceHost } from 'src/config/' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import { safeEthBalanceSelector, safeNameSelector, safeParamAddressFromStateSelector, } from 'src/logic/safe/store/selectors' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' import { networkSelector } from 'src/logic/wallets/store/selectors' import { SafeApp } from 'src/routes/safe/components/Apps/types.d' diff --git a/src/routes/safe/components/Apps/index.tsx b/src/routes/safe/components/Apps/index.tsx index 9de471bdac..66405683eb 100644 --- a/src/routes/safe/components/Apps/index.tsx +++ b/src/routes/safe/components/Apps/index.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react' import { INTERFACE_MESSAGES, Transaction, RequestId, LowercaseNetworks } from '@gnosis.pm/safe-apps-sdk' import { Card, IconText, Loader, Menu, Title } from '@gnosis.pm/safe-react-components' import { useSelector } from 'react-redux' -import { ETHEREUM_NETWORK } from 'src/logic/wallets/getWeb3' +import { ETHEREUM_NETWORK } from 'src/config/networks/network' import styled, { css } from 'styled-components' import ManageApps from './components/ManageApps' From 834f383b3b7e8186d9b785d1ac65675b0721f31a Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 12:41:47 -0300 Subject: [PATCH 18/26] rename `getxServiceHost` to `getTxServiceUrl` Co-authored-by: Matias Dastugue --- src/config/index.ts | 4 ++-- src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts | 4 ++-- src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts | 4 ++-- .../safe/store/actions/allTransactions/loadAllTransactions.ts | 4 ++-- src/logic/safe/transactions/incomingTxHistory.ts | 4 ++-- src/logic/safe/transactions/txHistory.ts | 4 ++-- src/logic/tokens/api/fetchTokenBalanceList.ts | 4 ++-- .../safe/components/Apps/hooks/useIframeMessageHandler.ts | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/config/index.ts b/src/config/index.ts index 0431e2233f..1c4ab91340 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -31,7 +31,7 @@ const configuration = (): Promise => { const getConfig: () => NetworkSpecificConfiguration = ensureOnce(configuration) -export const getTxServiceHost = (): string => getConfig()?.txServiceUrl +export const getTxServiceUrl = (): string => getConfig()?.txServiceUrl export const getRelayUrl = (): string | undefined => getConfig()?.relayApiUrl @@ -48,7 +48,7 @@ export const getSafeCreationTxUri = (safeAddress: string) => `safes/${safeAddres export const getGoogleAnalyticsTrackingID = (): string => GOOGLE_ANALYTICS_ID[getNetworkName()] export const buildSafeCreationTxUrl = (safeAddress) => { - const host = getTxServiceHost() + const host = getTxServiceUrl() const address = checksumAddress(safeAddress) const base = getSafeCreationTxUri(address) diff --git a/src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts b/src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts index 32bf362ff5..7d9f35d0e4 100644 --- a/src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts +++ b/src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts @@ -1,7 +1,7 @@ import { aNewStore } from 'src/store' import fetchTokenCurrenciesBalances from 'src/logic/currencyValues/api/fetchTokenCurrenciesBalances' import axios from 'axios' -import { getTxServiceHost } from 'src/config' +import { getTxServiceUrl } from 'src/config' jest.mock('axios') describe('fetchTokenCurrenciesBalances', () => { @@ -38,7 +38,7 @@ describe('fetchTokenCurrenciesBalances', () => { usdConversion: '1.188', }, ] - const apiUrl = getTxServiceHost() + const apiUrl = getTxServiceUrl() // @ts-ignore axios.get.mockImplementationOnce(() => Promise.resolve(expectedResult)) diff --git a/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts b/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts index c2804708a9..28eba7e05d 100644 --- a/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts +++ b/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts @@ -1,6 +1,6 @@ import axios, { AxiosResponse } from 'axios' -import { getTxServiceHost } from 'src/config' +import { getTxServiceUrl } from 'src/config' import { TokenProps } from 'src/logic/tokens/store/model/token' export type BalanceEndpoint = { @@ -15,7 +15,7 @@ const fetchTokenCurrenciesBalances = ( safeAddress: string, excludeSpamTokens = true, ): Promise> => { - const apiUrl = getTxServiceHost() + const apiUrl = getTxServiceUrl() const url = `${apiUrl}safes/${safeAddress}/balances/usd/?exclude_spam=${excludeSpamTokens}` return axios.get(url, { diff --git a/src/logic/safe/store/actions/allTransactions/loadAllTransactions.ts b/src/logic/safe/store/actions/allTransactions/loadAllTransactions.ts index b054b123e8..6265ff024e 100644 --- a/src/logic/safe/store/actions/allTransactions/loadAllTransactions.ts +++ b/src/logic/safe/store/actions/allTransactions/loadAllTransactions.ts @@ -1,6 +1,6 @@ import axios, { AxiosResponse } from 'axios' -import { getAllTransactionsUriFrom, getTxServiceHost } from 'src/config' +import { getAllTransactionsUriFrom, getTxServiceUrl } from 'src/config' import { checksumAddress } from 'src/utils/checksumAddress' import { Transaction } from '../../models/types/transactions.d' @@ -21,7 +21,7 @@ type TransactionDTO = { } const getAllTransactionsUri = (safeAddress: string): string => { - const host = getTxServiceHost() + const host = getTxServiceUrl() const address = checksumAddress(safeAddress) const base = getAllTransactionsUriFrom(address) diff --git a/src/logic/safe/transactions/incomingTxHistory.ts b/src/logic/safe/transactions/incomingTxHistory.ts index c7d78e5476..e4597eb067 100644 --- a/src/logic/safe/transactions/incomingTxHistory.ts +++ b/src/logic/safe/transactions/incomingTxHistory.ts @@ -1,8 +1,8 @@ -import { getIncomingTxServiceUriTo, getTxServiceHost } from 'src/config' +import { getIncomingTxServiceUriTo, getTxServiceUrl } from 'src/config' import { checksumAddress } from 'src/utils/checksumAddress' export const buildIncomingTxServiceUrl = (safeAddress: string): string => { - const host = getTxServiceHost() + const host = getTxServiceUrl() const address = checksumAddress(safeAddress) const base = getIncomingTxServiceUriTo(address) diff --git a/src/logic/safe/transactions/txHistory.ts b/src/logic/safe/transactions/txHistory.ts index eeb144364f..b12300d2eb 100644 --- a/src/logic/safe/transactions/txHistory.ts +++ b/src/logic/safe/transactions/txHistory.ts @@ -1,7 +1,7 @@ import axios from 'axios' import { GnosisSafe } from 'src/types/contracts/GnosisSafe.d' -import { getTxServiceHost, getTxServiceUriFrom } from 'src/config' +import { getTxServiceUrl, getTxServiceUriFrom } from 'src/config' import { checksumAddress } from 'src/utils/checksumAddress' const calculateBodyFrom = async ( @@ -45,7 +45,7 @@ const calculateBodyFrom = async ( } export const buildTxServiceUrl = (safeAddress: string): string => { - const host = getTxServiceHost() + const host = getTxServiceUrl() const address = checksumAddress(safeAddress) const base = getTxServiceUriFrom(address) return `${host}${base}?has_confirmations=True` diff --git a/src/logic/tokens/api/fetchTokenBalanceList.ts b/src/logic/tokens/api/fetchTokenBalanceList.ts index c446858c45..91bdc399df 100644 --- a/src/logic/tokens/api/fetchTokenBalanceList.ts +++ b/src/logic/tokens/api/fetchTokenBalanceList.ts @@ -1,9 +1,9 @@ import axios from 'axios' -import { getTxServiceHost } from 'src/config/index' +import { getTxServiceUrl } from 'src/config/index' const fetchTokenBalanceList = (safeAddress) => { - const apiUrl = getTxServiceHost() + const apiUrl = getTxServiceUrl() const url = `${apiUrl}safes/${safeAddress}/balances/` return axios.get(url, { diff --git a/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts b/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts index 5e297f01e0..b13eefb36b 100644 --- a/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts +++ b/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts @@ -12,7 +12,7 @@ import { } from '@gnosis.pm/safe-apps-sdk' import { useDispatch, useSelector } from 'react-redux' import { useEffect, useCallback, MutableRefObject } from 'react' -import { getTxServiceHost } from 'src/config/' +import { getTxServiceUrl } from 'src/config/' import { ETHEREUM_NETWORK } from 'src/config/networks/network' import { safeEthBalanceSelector, @@ -98,7 +98,7 @@ const useIframeMessageHandler = ( const envInfoMessage = { messageId: INTERFACE_MESSAGES.ENV_INFO, data: { - txServiceUrl: getTxServiceHost(), + txServiceUrl: getTxServiceUrl(), }, } From 3e7f28496ebe52ccda9b7d6bf07bda907e542f96 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 12:53:57 -0300 Subject: [PATCH 19/26] export all the network config information Co-authored-by: Matias Dastugue --- src/config/index.ts | 16 ++++++++++++++-- src/config/networks/network.d.ts | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/config/index.ts b/src/config/index.ts index 1c4ab91340..34aa8a3eeb 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -37,7 +37,19 @@ export const getRelayUrl = (): string | undefined => getConfig()?.relayApiUrl export const getGnosisSafeAppsUrl = (): string => getConfig()?.safeAppsUrl -export const getTxServiceUriFrom = (safeAddress) => `safes/${safeAddress}/transactions/` +export const getRpcServiceUrl = (): string => getConfig()?.rpcServiceUrl + +export const getNetworkExplorerInfo = (): { name: string; url: string; apiUrl: string } => ({ + name: getConfig()?.networkExplorerName, + url: getConfig()?.networkExplorerUrl, + apiUrl: getConfig()?.networkExplorerApiUrl, +}) + +export const getNetworkConfigFeatures = (): SafeFeatures => getConfig()?.features + +export const getNetworkInfo = (): NetworkSettings => getConfig()?.network + +export const getTxServiceUriFrom = (safeAddress: string) => `safes/${safeAddress}/transactions/` export const getIncomingTxServiceUriTo = (safeAddress: string) => `safes/${safeAddress}/incoming-transfers/` @@ -47,7 +59,7 @@ export const getSafeCreationTxUri = (safeAddress: string) => `safes/${safeAddres export const getGoogleAnalyticsTrackingID = (): string => GOOGLE_ANALYTICS_ID[getNetworkName()] -export const buildSafeCreationTxUrl = (safeAddress) => { +export const buildSafeCreationTxUrl = (safeAddress: string) => { const host = getTxServiceUrl() const address = checksumAddress(safeAddress) const base = getSafeCreationTxUri(address) diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index b5528eb87a..12b8631e9b 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -21,6 +21,7 @@ export enum ETHEREUM_NETWORK { } export type NetworkSettings = { + // TODO: id now seems to be unnecessary id: ETHEREUM_NETWORK, color: string, label: string, From b7155a538e2eaca5c9322abddc99a1fc266aa9d6 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 13:59:59 -0300 Subject: [PATCH 20/26] return proper config based on network and environment variables - also added 'local' as a network for testing purposes --- src/config/index.ts | 47 ++++++++++++++++++++++++++++++------ src/config/networks/index.ts | 2 ++ src/config/networks/local.ts | 35 +++++++++++++++++++++++++++ src/utils/constants.ts | 2 ++ 4 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 src/config/networks/local.ts diff --git a/src/config/index.ts b/src/config/index.ts index 34aa8a3eeb..746cf71e86 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -2,28 +2,59 @@ import networks from 'src/config/networks' import { EnvironmentSettings, ETHEREUM_NETWORK, - NetworkConfig, NetworkSettings, SafeFeatures, } from 'src/config/networks/network' import { checksumAddress } from 'src/utils/checksumAddress' -import { GOOGLE_ANALYTICS_ID, NETWORK } from 'src/utils/constants' +import { GOOGLE_ANALYTICS_ID, NETWORK, APP_ENV, NODE_ENV } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' -export const getNetworkId = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] ?? ETHEREUM_NETWORK.RINKEBY +export const getNetworkId = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] export const getNetworkName = (): string => ETHEREUM_NETWORK[getNetworkId()] +const getCurrentEnvironment = (): string => { + if (NODE_ENV === 'test') { + return 'test' + } + + if (NODE_ENV === 'production') { + if (APP_ENV === 'production') { + return 'production' + } else { + return 'staging' + } + } + + return 'dev' +} + type NetworkSpecificConfiguration = EnvironmentSettings & { network: NetworkSettings, - features: SafeFeatures, + features?: SafeFeatures, } -const configuration = (): Promise => { - const configFile: NetworkConfig = networks[getNetworkName().toLowerCase()] +const configuration = (): NetworkSpecificConfiguration => { + const currentEnvironment = getCurrentEnvironment() + + // special case for test environment + if (currentEnvironment === 'test') { + const configFile = networks.local + + return { + ...configFile.environment.production, + network: configFile.network, + features: configFile.features, + } + } + + // lookup the config file based on the network specified in the NETWORK variable + const configFile = networks[getNetworkName().toLowerCase()] + // defaults to 'production' as it's the only environment that is required for the network configs + const networkBaseConfig = configFile.environment[currentEnvironment] ?? configFile.environment.production return { - ...configFile.environment[process.env.REACT_APP_ENV ?? 'production'], + ...networkBaseConfig, network: configFile.network, features: configFile.features, } @@ -45,7 +76,7 @@ export const getNetworkExplorerInfo = (): { name: string; url: string; apiUrl: s apiUrl: getConfig()?.networkExplorerApiUrl, }) -export const getNetworkConfigFeatures = (): SafeFeatures => getConfig()?.features +export const getNetworkConfigFeatures = (): SafeFeatures | undefined => getConfig()?.features export const getNetworkInfo = (): NetworkSettings => getConfig()?.network diff --git a/src/config/networks/index.ts b/src/config/networks/index.ts index 1c165b0ca9..8944d16d91 100644 --- a/src/config/networks/index.ts +++ b/src/config/networks/index.ts @@ -1,8 +1,10 @@ +import local from './local' import mainnet from './mainnet' import rinkeby from './rinkeby' import xdai from './xdai' export default { + local, mainnet, rinkeby, xdai, diff --git a/src/config/networks/local.ts b/src/config/networks/local.ts new file mode 100644 index 0000000000..f69cb8c577 --- /dev/null +++ b/src/config/networks/local.ts @@ -0,0 +1,35 @@ +import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' +import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d' + +const baseConfig: EnvironmentSettings = { + txServiceUrl: 'http://localhost:8000/api/v1/', + relayApiUrl: 'https://safe-relay.staging.gnosisdev.com/api/v1', + safeAppsUrl: 'http://localhost:3002/', + gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', + rpcServiceUrl: 'https://rinkeby.infura.io:443/v3/', + networkExplorerName: 'Etherscan', + networkExplorerUrl: 'https://rinkeby.etherscan.io/', + networkExplorerApiUrl: 'https://api-rinkeby.etherscan.io/api', +} + +const local: NetworkConfig = { + environment: { + production: { + ...baseConfig, + }, + }, + network: { + id: ETHEREUM_NETWORK.RINKEBY, + color: '#E8673C', + label: 'Rinkeby', + nativeCoin: { + address: '0x000', + name: 'Ether', + symbol: 'ETH', + decimals: 18, + logoUri: EtherLogo, + }, + }, +} + +export default local diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 2cd50d1057..5e2d2c720e 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1,3 +1,5 @@ +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 || 'RINKEBY' export const GOOGLE_ANALYTICS_ID = { RINKEBY: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY, From cf2930214eb7bc1549a0fdf9fea9bea6166b121d Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 14:19:27 -0300 Subject: [PATCH 21/26] changed environment discovery to a switch/case statement --- src/config/index.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/config/index.ts b/src/config/index.ts index 746cf71e86..5c62b29726 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -14,19 +14,17 @@ export const getNetworkId = (): ETHEREUM_NETWORK => ETHEREUM_NETWORK[NETWORK] export const getNetworkName = (): string => ETHEREUM_NETWORK[getNetworkId()] const getCurrentEnvironment = (): string => { - if (NODE_ENV === 'test') { - return 'test' - } - - if (NODE_ENV === 'production') { - if (APP_ENV === 'production') { - return 'production' - } else { - return 'staging' + switch (NODE_ENV) { + case 'test': { + return 'test' + } + case 'production': { + return APP_ENV === 'production' ? 'production' : 'staging' + } + default: { + return 'dev' } } - - return 'dev' } type NetworkSpecificConfiguration = EnvironmentSettings & { From e35343430710771425f39b3eeae522e617dd8006 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 14:49:29 -0300 Subject: [PATCH 22/26] specify the declaration file on importing from 'src/config/networks/network' --- src/components/App/index.tsx | 2 +- src/components/AppLayout/Header/components/NetworkLabel.tsx | 2 +- .../AppLayout/Header/components/ProviderDetails/UserDetails.tsx | 2 +- .../Header/components/ProviderInfo/ProviderAccessible.tsx | 2 +- src/config/index.ts | 2 +- src/config/networks/__tests__/networks.test.ts | 2 +- src/logic/collectibles/sources/OpenSea.ts | 2 +- src/logic/contractInteraction/sources/EtherscanService.ts | 2 +- src/logic/wallets/getWeb3.ts | 2 +- src/logic/wallets/store/actions/fetchProvider.ts | 2 +- src/logic/wallets/store/model/provider.ts | 2 +- src/logic/wallets/store/selectors/index.ts | 2 +- src/routes/load/container/Load.tsx | 2 +- .../safe/components/Apps/hooks/useIframeMessageHandler.ts | 2 +- src/routes/safe/components/Apps/index.tsx | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/components/App/index.tsx b/src/components/App/index.tsx index 466fabb987..eda52cb2ee 100644 --- a/src/components/App/index.tsx +++ b/src/components/App/index.tsx @@ -17,7 +17,7 @@ import Notifier from 'src/components/Notifier' import Backdrop from 'src/components/layout/Backdrop' import Img from 'src/components/layout/Img' import { getNetworkId } from 'src/config' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { networkSelector } from 'src/logic/wallets/store/selectors' import { SAFELIST_ADDRESS, WELCOME_ADDRESS } from 'src/routes/routes' import { safeNameSelector, safeParamAddressFromStateSelector } from 'src/logic/safe/store/selectors' diff --git a/src/components/AppLayout/Header/components/NetworkLabel.tsx b/src/components/AppLayout/Header/components/NetworkLabel.tsx index 88cb71fccc..d68da3fb65 100644 --- a/src/components/AppLayout/Header/components/NetworkLabel.tsx +++ b/src/components/AppLayout/Header/components/NetworkLabel.tsx @@ -4,7 +4,7 @@ import * as React from 'react' import Col from 'src/components/layout/Col' import Paragraph from 'src/components/layout/Paragraph' import { getNetworkId } from 'src/config' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { border, md, screenSm, sm, xs } from 'src/theme/variables' const interfaceNetwork = getNetworkId() diff --git a/src/components/AppLayout/Header/components/ProviderDetails/UserDetails.tsx b/src/components/AppLayout/Header/components/ProviderDetails/UserDetails.tsx index 5255e48b11..8540335b64 100644 --- a/src/components/AppLayout/Header/components/ProviderDetails/UserDetails.tsx +++ b/src/components/AppLayout/Header/components/ProviderDetails/UserDetails.tsx @@ -14,7 +14,7 @@ import Paragraph from 'src/components/layout/Paragraph' import Row from 'src/components/layout/Row' import { background, connected as connectedBg, lg, md, sm, warning, xs } from 'src/theme/variables' import { upperFirst } from 'src/utils/css' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' const dot = require('../../assets/dotRinkeby.svg') const walletIcon = require('../../assets/wallet.svg') diff --git a/src/components/AppLayout/Header/components/ProviderInfo/ProviderAccessible.tsx b/src/components/AppLayout/Header/components/ProviderInfo/ProviderAccessible.tsx index c4ba67588b..0ae85a2a15 100644 --- a/src/components/AppLayout/Header/components/ProviderInfo/ProviderAccessible.tsx +++ b/src/components/AppLayout/Header/components/ProviderInfo/ProviderAccessible.tsx @@ -2,7 +2,7 @@ import { makeStyles } from '@material-ui/core/styles' import * as React from 'react' import { EthHashInfo, Text } from '@gnosis.pm/safe-react-components' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import NetworkLabel from '../NetworkLabel' import CircleDot from 'src/components/AppLayout/Header/components/CircleDot' import Col from 'src/components/layout/Col' diff --git a/src/config/index.ts b/src/config/index.ts index 5c62b29726..ec5c367d34 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -4,7 +4,7 @@ import { ETHEREUM_NETWORK, NetworkSettings, SafeFeatures, -} from 'src/config/networks/network' +} from 'src/config/networks/network.d' import { checksumAddress } from 'src/utils/checksumAddress' import { GOOGLE_ANALYTICS_ID, NETWORK, APP_ENV, NODE_ENV } from 'src/utils/constants' import { ensureOnce } from 'src/utils/singleton' diff --git a/src/config/networks/__tests__/networks.test.ts b/src/config/networks/__tests__/networks.test.ts index ce39052959..c49514bf8e 100644 --- a/src/config/networks/__tests__/networks.test.ts +++ b/src/config/networks/__tests__/networks.test.ts @@ -1,7 +1,7 @@ import fs from 'fs' import networks from 'src/config/networks' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { isValidURL } from 'src/utils/url' describe('Networks config files test', () => { diff --git a/src/logic/collectibles/sources/OpenSea.ts b/src/logic/collectibles/sources/OpenSea.ts index a5db3ee5d5..9e2c1a5076 100644 --- a/src/logic/collectibles/sources/OpenSea.ts +++ b/src/logic/collectibles/sources/OpenSea.ts @@ -1,6 +1,6 @@ import { RateLimit } from 'async-sema' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import NFTIcon from 'src/routes/safe/components/Balances/assets/nft_icon.png' import { OPENSEA_API_KEY } from 'src/utils/constants' diff --git a/src/logic/contractInteraction/sources/EtherscanService.ts b/src/logic/contractInteraction/sources/EtherscanService.ts index 9741d1c203..0c60e4092b 100644 --- a/src/logic/contractInteraction/sources/EtherscanService.ts +++ b/src/logic/contractInteraction/sources/EtherscanService.ts @@ -1,7 +1,7 @@ import { RateLimit } from 'async-sema' import memoize from 'lodash.memoize' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { ETHERSCAN_API_KEY } from 'src/utils/constants' class EtherscanService { diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index 7e8c72c5e5..0b303d660e 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -3,7 +3,7 @@ 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' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { NETWORK } from 'src/utils/constants' import { sameAddress } from './ethAddresses' import { EMPTY_DATA } from './ethTransactions' diff --git a/src/logic/wallets/store/actions/fetchProvider.ts b/src/logic/wallets/store/actions/fetchProvider.ts index a02e04d1f7..c2907c67dc 100644 --- a/src/logic/wallets/store/actions/fetchProvider.ts +++ b/src/logic/wallets/store/actions/fetchProvider.ts @@ -5,7 +5,7 @@ import addProvider from './addProvider' 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' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' 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' diff --git a/src/logic/wallets/store/model/provider.ts b/src/logic/wallets/store/model/provider.ts index a329c9a416..146b2ddb70 100644 --- a/src/logic/wallets/store/model/provider.ts +++ b/src/logic/wallets/store/model/provider.ts @@ -1,6 +1,6 @@ import { Record, RecordOf } from 'immutable' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' export type ProviderProps = { name: string diff --git a/src/logic/wallets/store/selectors/index.ts b/src/logic/wallets/store/selectors/index.ts index dba317ce44..56e41f67c8 100644 --- a/src/logic/wallets/store/selectors/index.ts +++ b/src/logic/wallets/store/selectors/index.ts @@ -1,6 +1,6 @@ import { createSelector } from 'reselect' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { PROVIDER_REDUCER_ID, ProviderState } from 'src/logic/wallets/store/reducer/provider' import { AppReduxState } from 'src/store' diff --git a/src/routes/load/container/Load.tsx b/src/routes/load/container/Load.tsx index a1fb517993..6e4b530568 100644 --- a/src/routes/load/container/Load.tsx +++ b/src/routes/load/container/Load.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import { useDispatch, useSelector } from 'react-redux' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import Layout from 'src/routes/load/components/Layout' import { FIELD_LOAD_ADDRESS, FIELD_LOAD_NAME } from '../components/fields' diff --git a/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts b/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts index b13eefb36b..966c988bda 100644 --- a/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts +++ b/src/routes/safe/components/Apps/hooks/useIframeMessageHandler.ts @@ -13,7 +13,7 @@ import { import { useDispatch, useSelector } from 'react-redux' import { useEffect, useCallback, MutableRefObject } from 'react' import { getTxServiceUrl } from 'src/config/' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import { safeEthBalanceSelector, safeNameSelector, diff --git a/src/routes/safe/components/Apps/index.tsx b/src/routes/safe/components/Apps/index.tsx index 66405683eb..bc72ec224e 100644 --- a/src/routes/safe/components/Apps/index.tsx +++ b/src/routes/safe/components/Apps/index.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useRef, useState, useMemo } from 'react' import { INTERFACE_MESSAGES, Transaction, RequestId, LowercaseNetworks } from '@gnosis.pm/safe-apps-sdk' import { Card, IconText, Loader, Menu, Title } from '@gnosis.pm/safe-react-components' import { useSelector } from 'react-redux' -import { ETHEREUM_NETWORK } from 'src/config/networks/network' +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' import styled, { css } from 'styled-components' import ManageApps from './components/ManageApps' From b2fed3278264097509e8fbdd35d4c59e12e60c47 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 15:19:18 -0300 Subject: [PATCH 23/26] force uppercase for the `NETWORK` const --- src/utils/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 5e2d2c720e..44fb98ee27 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1,6 +1,6 @@ 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 || 'RINKEBY' +export const NETWORK = process.env.REACT_APP_NETWORK?.toUpperCase() || 'RINKEBY' export const GOOGLE_ANALYTICS_ID = { RINKEBY: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_RINKEBY, MAINNET: process.env.REACT_APP_GOOGLE_ANALYTICS_ID_MAINNET, From feea7290d056f4159b0ca83b8a7098b3eca77967 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 17:01:39 -0300 Subject: [PATCH 24/26] add tests Co-authored-by: Matias Dastugue --- src/config/__tesst__/config.test.ts | 133 ++++++++++++++++++++++++++++ src/config/networks/local.ts | 6 +- src/config/networks/mainnet.ts | 2 +- src/config/networks/network.d.ts | 1 + 4 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 src/config/__tesst__/config.test.ts diff --git a/src/config/__tesst__/config.test.ts b/src/config/__tesst__/config.test.ts new file mode 100644 index 0000000000..ea65da280a --- /dev/null +++ b/src/config/__tesst__/config.test.ts @@ -0,0 +1,133 @@ +import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' + +describe('Config Services', () => { + beforeEach(() => { + jest.resetModules() + }) + + it(`should load 'test' network config`, () => { + // Given + jest.mock('src/utils/constants', () => ({ + NODE_ENV: 'test', + })) + const { getNetworkInfo } = require('src/config') + + // When + const networkInfo = getNetworkInfo() + + // Then + expect(networkInfo.id).toBe(ETHEREUM_NETWORK.LOCAL) + }) + + it(`should load 'mainnet' network config`, () => { + // Given + jest.mock('src/utils/constants', () => ({ + NODE_ENV: '', + NETWORK: 'MAINNET', + })) + const { getNetworkInfo } = require('src/config') + + // When + const networkInfo = getNetworkInfo() + + // Then + expect(networkInfo.id).toBe(ETHEREUM_NETWORK.MAINNET) + }) + + it(`should load 'mainnet.dev' network config`, () => { + // Given + jest.mock('src/utils/constants', () => ({ + NODE_ENV: '', + NETWORK: 'MAINNET', + })) + const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') + const TX_SERVICE_URL = 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/' + const SAFE_APPS_URL = 'https://safe-apps.dev.gnosisdev.com/' + + // When + const txServiceUrl = getTxServiceUrl() + const safeAppsUrl = getGnosisSafeAppsUrl() + + // Then + expect(TX_SERVICE_URL).toBe(txServiceUrl) + expect(SAFE_APPS_URL).toBe(safeAppsUrl) + }) + + it(`should load 'mainnet.staging' network config`, () => { + // Given + jest.mock('src/utils/constants', () => ({ + NODE_ENV: 'production', + NETWORK: 'MAINNET', + })) + const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') + const TX_SERVICE_URL = 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/' + const SAFE_APPS_URL = 'https://safe-apps.staging.gnosisdev.com/' + + // When + const txServiceUrl = getTxServiceUrl() + const safeAppsUrl = getGnosisSafeAppsUrl() + + // Then + expect(TX_SERVICE_URL).toBe(txServiceUrl) + expect(SAFE_APPS_URL).toBe(safeAppsUrl) + }) + + it(`should load 'mainnet.production' network config`, () => { + // Given + jest.mock('src/utils/constants', () => ({ + NODE_ENV: 'production', + NETWORK: 'MAINNET', + APP_ENV: 'production' + })) + const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') + const TX_SERVICE_URL = 'https://safe-transaction.mainnet.gnosis.io/api/v1/' + const SAFE_APPS_URL = 'https://apps.gnosis-safe.io/' + + // When + const txServiceUrl = getTxServiceUrl() + const safeAppsUrl = getGnosisSafeAppsUrl() + + // Then + expect(TX_SERVICE_URL).toBe(txServiceUrl) + expect(SAFE_APPS_URL).toBe(safeAppsUrl) + }) + + it(`should load 'xdai.production' network config`, () => { + // Given + jest.mock('src/utils/constants', () => ({ + NODE_ENV: 'production', + NETWORK: 'XDAI', + APP_ENV: 'production' + })) + const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') + const TX_SERVICE_URL = 'https://safe-transaction.xdai.gnosis.io/api/v1/' + const SAFE_APPS_URL = 'https://apps.gnosis-safe.io/' + + // When + const txServiceUrl = getTxServiceUrl() + const safeAppsUrl = getGnosisSafeAppsUrl() + + // Then + expect(TX_SERVICE_URL).toBe(txServiceUrl) + expect(SAFE_APPS_URL).toBe(safeAppsUrl) + }) + + it(`should default to 'xdai.production' network config if no environment is found`, () => { + // Given + jest.mock('src/utils/constants', () => ({ + NODE_ENV: '', + NETWORK: 'XDAI', + })) + const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') + const TX_SERVICE_URL = 'https://safe-transaction.xdai.gnosis.io/api/v1/' + const SAFE_APPS_URL = 'https://apps.gnosis-safe.io/' + + // When + const txServiceUrl = getTxServiceUrl() + const safeAppsUrl = getGnosisSafeAppsUrl() + + // Then + expect(TX_SERVICE_URL).toBe(txServiceUrl) + expect(SAFE_APPS_URL).toBe(safeAppsUrl) + }) +}) diff --git a/src/config/networks/local.ts b/src/config/networks/local.ts index f69cb8c577..195e315e38 100644 --- a/src/config/networks/local.ts +++ b/src/config/networks/local.ts @@ -6,7 +6,7 @@ const baseConfig: EnvironmentSettings = { relayApiUrl: 'https://safe-relay.staging.gnosisdev.com/api/v1', safeAppsUrl: 'http://localhost:3002/', gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', - rpcServiceUrl: 'https://rinkeby.infura.io:443/v3/', + rpcServiceUrl: 'http://localhost:4447/', networkExplorerName: 'Etherscan', networkExplorerUrl: 'https://rinkeby.etherscan.io/', networkExplorerApiUrl: 'https://api-rinkeby.etherscan.io/api', @@ -19,9 +19,9 @@ const local: NetworkConfig = { }, }, network: { - id: ETHEREUM_NETWORK.RINKEBY, + id: ETHEREUM_NETWORK.LOCAL, color: '#E8673C', - label: 'Rinkeby', + label: 'LocalRPC', nativeCoin: { address: '0x000', name: 'Ether', diff --git a/src/config/networks/mainnet.ts b/src/config/networks/mainnet.ts index 5ff483db08..7635ada83e 100644 --- a/src/config/networks/mainnet.ts +++ b/src/config/networks/mainnet.ts @@ -18,7 +18,7 @@ const mainnet: NetworkConfig = { }, staging: { ...baseConfig, - safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com', + safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com/', }, production: { ...baseConfig, diff --git a/src/config/networks/network.d.ts b/src/config/networks/network.d.ts index 12b8631e9b..fd632d035b 100644 --- a/src/config/networks/network.d.ts +++ b/src/config/networks/network.d.ts @@ -18,6 +18,7 @@ export enum ETHEREUM_NETWORK { ENERGY_WEB_CHAIN = 246, VOLTA = 73799, UNKNOWN = 0, + LOCAL = 4447, } export type NetworkSettings = { From c871d2620e1ce7712e14dd3f19ea4b4f177fe5f4 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Fri, 2 Oct 2020 17:16:32 -0300 Subject: [PATCH 25/26] fix typo in dir name --- src/config/{__tesst__ => __tests__}/config.test.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/config/{__tesst__ => __tests__}/config.test.ts (100%) diff --git a/src/config/__tesst__/config.test.ts b/src/config/__tests__/config.test.ts similarity index 100% rename from src/config/__tesst__/config.test.ts rename to src/config/__tests__/config.test.ts From 6c61d9768e45659f69cf37bc1b68d57d9b3ac2a3 Mon Sep 17 00:00:00 2001 From: fernandomg Date: Mon, 5 Oct 2020 14:07:19 -0300 Subject: [PATCH 26/26] update tests to use dynamic environment values --- src/config/__tests__/config.test.ts | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/config/__tests__/config.test.ts b/src/config/__tests__/config.test.ts index ea65da280a..021a4a20e7 100644 --- a/src/config/__tests__/config.test.ts +++ b/src/config/__tests__/config.test.ts @@ -1,4 +1,7 @@ import { ETHEREUM_NETWORK } from 'src/config/networks/network.d' +import { default as networks } from 'src/config/networks' + +const { mainnet, xdai } = networks describe('Config Services', () => { beforeEach(() => { @@ -41,8 +44,8 @@ describe('Config Services', () => { NETWORK: 'MAINNET', })) const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') - const TX_SERVICE_URL = 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/' - const SAFE_APPS_URL = 'https://safe-apps.dev.gnosisdev.com/' + const TX_SERVICE_URL = mainnet.environment.dev?.txServiceUrl + const SAFE_APPS_URL = mainnet.environment.dev?.safeAppsUrl // When const txServiceUrl = getTxServiceUrl() @@ -60,8 +63,8 @@ describe('Config Services', () => { NETWORK: 'MAINNET', })) const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') - const TX_SERVICE_URL = 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/' - const SAFE_APPS_URL = 'https://safe-apps.staging.gnosisdev.com/' + const TX_SERVICE_URL = mainnet.environment.staging?.txServiceUrl + const SAFE_APPS_URL = mainnet.environment.staging?.safeAppsUrl // When const txServiceUrl = getTxServiceUrl() @@ -80,8 +83,8 @@ describe('Config Services', () => { APP_ENV: 'production' })) const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') - const TX_SERVICE_URL = 'https://safe-transaction.mainnet.gnosis.io/api/v1/' - const SAFE_APPS_URL = 'https://apps.gnosis-safe.io/' + const TX_SERVICE_URL = mainnet.environment.production.txServiceUrl + const SAFE_APPS_URL = mainnet.environment.production.safeAppsUrl // When const txServiceUrl = getTxServiceUrl() @@ -100,8 +103,8 @@ describe('Config Services', () => { APP_ENV: 'production' })) const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') - const TX_SERVICE_URL = 'https://safe-transaction.xdai.gnosis.io/api/v1/' - const SAFE_APPS_URL = 'https://apps.gnosis-safe.io/' + const TX_SERVICE_URL = xdai.environment.production.txServiceUrl + const SAFE_APPS_URL = xdai.environment.production.safeAppsUrl // When const txServiceUrl = getTxServiceUrl() @@ -119,8 +122,8 @@ describe('Config Services', () => { NETWORK: 'XDAI', })) const { getTxServiceUrl, getGnosisSafeAppsUrl } = require('src/config') - const TX_SERVICE_URL = 'https://safe-transaction.xdai.gnosis.io/api/v1/' - const SAFE_APPS_URL = 'https://apps.gnosis-safe.io/' + const TX_SERVICE_URL = xdai.environment.production.txServiceUrl + const SAFE_APPS_URL = xdai.environment.production.safeAppsUrl // When const txServiceUrl = getTxServiceUrl()