diff --git a/src/constants.ts b/src/constants.ts index 1e6c8af01c..74938c9e50 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,3 +1,5 @@ +import { NetworkType } from './network/NetworkController'; + export const MAINNET = 'mainnet'; export const RPC = 'rpc'; export const FALL_BACK_VS_CURRENCY = 'ETH'; @@ -39,6 +41,21 @@ export const TESTNET_TICKER_SYMBOLS = { KOVAN: 'KovanETH', }; +// TYPED NetworkType TICKER SYMBOLS +export const TESTNET_NETWORK_TYPE_TO_TICKER_SYMBOL: { + [K in NetworkType]: string; +} = { + rinkeby: 'RinkebyETH', + goerli: 'GoerliETH', + ropsten: 'RopstenETH', + kovan: 'KovanETH', + mainnet: '', + rpc: '', + localhost: '', + optimism: '', + optimismTest: '', +}; + // APIs export const OPENSEA_PROXY_URL = 'https://proxy.metaswap.codefi.network/opensea/v1/api/v1'; diff --git a/src/network/NetworkController.test.ts b/src/network/NetworkController.test.ts index 5a36db6184..fe376988ee 100644 --- a/src/network/NetworkController.test.ts +++ b/src/network/NetworkController.test.ts @@ -147,6 +147,24 @@ describe('NetworkController', () => { expect(controller.state.isCustomNetwork).toBe(false); }); + it('should set new testnet provider type', () => { + const controller = new NetworkController(); + controller.config.infuraProjectId = '0x0000'; + controller.setProviderType('rinkeby' as NetworkType); + expect(controller.state.provider.type).toBe('rinkeby'); + expect(controller.state.provider.ticker).toBe('RinkebyETH'); + expect(controller.state.isCustomNetwork).toBe(false); + }); + + it('should set mainnet provider type', () => { + const controller = new NetworkController(); + controller.config.infuraProjectId = '0x0000'; + controller.setProviderType('mainnet' as NetworkType); + expect(controller.state.provider.type).toBe('mainnet'); + expect(controller.state.provider.ticker).toBe('ETH'); + expect(controller.state.isCustomNetwork).toBe(false); + }); + it('should throw when setting an unrecognized provider type', () => { const controller = new NetworkController(); expect(() => controller.setProviderType('junk' as NetworkType)).toThrow( diff --git a/src/network/NetworkController.ts b/src/network/NetworkController.ts index 82053826c0..f7db81af17 100644 --- a/src/network/NetworkController.ts +++ b/src/network/NetworkController.ts @@ -4,7 +4,11 @@ import createInfuraProvider from 'eth-json-rpc-infura/src/createProvider'; import createMetamaskProvider from 'web3-provider-engine/zero'; import { Mutex } from 'async-mutex'; import { BaseController, BaseConfig, BaseState } from '../BaseController'; -import { MAINNET, RPC } from '../constants'; +import { + MAINNET, + RPC, + TESTNET_NETWORK_TYPE_TO_TICKER_SYMBOL, +} from '../constants'; /** * Human-readable network name @@ -282,10 +286,22 @@ export class NetworkController extends BaseController< setProviderType(type: NetworkType) { const { rpcTarget, chainId, nickname, ...providerState } = this.state.provider; + + // If testnet the ticker symbol should use a testnet prefix + const ticker = + type in TESTNET_NETWORK_TYPE_TO_TICKER_SYMBOL && + TESTNET_NETWORK_TYPE_TO_TICKER_SYMBOL[type].length > 0 + ? TESTNET_NETWORK_TYPE_TO_TICKER_SYMBOL[type] + : 'ETH'; + this.update({ provider: { ...providerState, - ...{ type, ticker: 'ETH', chainId: NetworksChainId[type] }, + ...{ + type, + ticker, + chainId: NetworksChainId[type], + }, }, }); this.refreshNetwork();