From c87980bbfec45f1863e02b2b7f559116d7395b32 Mon Sep 17 00:00:00 2001 From: Brad Decker Date: Wed, 14 Sep 2022 09:55:31 -0500 Subject: [PATCH] migrate network constants to typescript (#15610) --- .../controllers/cached-balances.test.js | 18 +- app/scripts/controllers/detect-tokens.js | 6 +- app/scripts/controllers/detect-tokens.test.js | 14 +- .../controllers/incoming-transactions.js | 28 +- .../controllers/incoming-transactions.test.js | 178 +++-- app/scripts/controllers/metametrics.test.js | 49 +- .../controllers/network/createInfuraClient.js | 6 +- app/scripts/controllers/network/network.js | 36 +- app/scripts/controllers/preferences.js | 8 +- app/scripts/controllers/preferences.test.js | 4 +- app/scripts/controllers/swaps.test.js | 18 +- app/scripts/controllers/transactions/index.js | 11 +- .../transactions/tx-state-manager.test.js | 17 +- app/scripts/lib/account-tracker.js | 36 +- app/scripts/lib/buy-url.js | 16 +- app/scripts/lib/buy-url.test.js | 27 +- .../handlers/switch-ethereum-chain.js | 4 +- app/scripts/lib/util.js | 7 +- app/scripts/metamask-controller.js | 8 +- app/scripts/metamask-controller.test.js | 4 +- app/scripts/migrations/051.js | 4 +- app/scripts/migrations/051.test.js | 6 +- app/scripts/migrations/052.js | 82 +-- app/scripts/migrations/052.test.js | 124 ++-- app/scripts/migrations/054.test.js | 37 +- app/scripts/migrations/055.js | 5 +- app/scripts/migrations/055.test.js | 33 +- app/scripts/migrations/059.test.js | 35 +- app/scripts/migrations/064.test.js | 10 +- shared/constants/network.js | 426 ----------- shared/constants/network.ts | 675 ++++++++++++++++++ shared/constants/swaps.js | 108 ++- shared/modules/network.utils.js | 16 +- test/jest/mock-store.js | 8 +- .../unconnected-account-alert.test.js | 6 +- .../collectible-details.js | 21 +- .../app/dropdowns/network-dropdown.js | 4 +- .../gas-details-item-title.test.js | 4 +- .../loading-network-screen.container.js | 4 +- ui/components/app/menu-bar/menu-bar.test.js | 4 +- .../app/network-display/network-display.js | 16 +- .../network-display.stories.js | 14 +- .../transaction-activity-log.util.test.js | 57 +- .../ui/new-network-info/new-network-info.js | 4 +- .../confirm-transaction.duck.test.js | 13 +- ui/ducks/ens.js | 4 +- ui/ducks/metamask/metamask.js | 4 +- ui/ducks/send/send.test.js | 41 +- ui/ducks/swaps/swaps.test.js | 15 +- ui/helpers/utils/tx-helper.test.js | 9 +- ui/helpers/utils/util.js | 21 +- ui/hooks/useTokensToSearch.js | 24 +- ui/hooks/useTransactionDisplayData.test.js | 4 +- .../confirm-approve-content.component.js | 7 +- ui/pages/send/send.test.js | 8 +- .../networks-form/networks-form.test.js | 10 +- .../networks-list-item/networks-list-item.js | 9 +- .../networks-tab/networks-tab.constants.js | 79 +- .../settings/networks-tab/networks-tab.js | 6 +- ui/pages/swaps/fee-card/fee-card.js | 21 +- ui/pages/swaps/fee-card/fee-card.stories.js | 4 +- ui/pages/swaps/fee-card/fee-card.test.js | 4 +- ui/pages/swaps/swaps.util.js | 34 +- ui/pages/swaps/swaps.util.test.js | 137 ++-- .../view-quote-price-difference.test.js | 4 +- ui/pages/token-details/token-details-page.js | 4 +- ui/selectors/confirm-transaction.test.js | 14 +- ...nonce-sorted-transactions-selector.test.js | 4 +- ui/selectors/permissions.test.js | 4 +- ui/selectors/selectors.js | 33 +- ui/selectors/transactions.test.js | 17 +- ui/store/actionConstants.test.js | 4 +- 72 files changed, 1412 insertions(+), 1324 deletions(-) delete mode 100644 shared/constants/network.js create mode 100644 shared/constants/network.ts diff --git a/app/scripts/controllers/cached-balances.test.js b/app/scripts/controllers/cached-balances.test.js index 5ef473110..5f507f076 100644 --- a/app/scripts/controllers/cached-balances.test.js +++ b/app/scripts/controllers/cached-balances.test.js @@ -1,13 +1,13 @@ import { strict as assert } from 'assert'; import sinon from 'sinon'; -import { KOVAN_CHAIN_ID } from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import CachedBalancesController from './cached-balances'; describe('CachedBalancesController', function () { describe('updateCachedBalances', function () { it('should update the cached balances', async function () { const controller = new CachedBalancesController({ - getCurrentChainId: () => KOVAN_CHAIN_ID, + getCurrentChainId: () => CHAIN_IDS.KOVAN, accountTracker: { store: { subscribe: () => undefined, @@ -27,7 +27,7 @@ describe('CachedBalancesController', function () { assert.equal(controller._generateBalancesToCache.callCount, 1); assert.deepEqual(controller._generateBalancesToCache.args[0], [ 'mockAccounts', - KOVAN_CHAIN_ID, + CHAIN_IDS.KOVAN, ]); assert.equal( controller.store.getState().cachedBalances, @@ -46,7 +46,7 @@ describe('CachedBalancesController', function () { }, initState: { cachedBalances: { - [KOVAN_CHAIN_ID]: { + [CHAIN_IDS.KOVAN]: { a: '0x1', b: '0x2', c: '0x3', @@ -66,11 +66,11 @@ describe('CachedBalancesController', function () { b: { balance: null }, c: { balance: '0x5' }, }, - KOVAN_CHAIN_ID, + CHAIN_IDS.KOVAN, ); assert.deepEqual(result, { - [KOVAN_CHAIN_ID]: { + [CHAIN_IDS.KOVAN]: { a: '0x4', b: '0x2', c: '0x5', @@ -92,7 +92,7 @@ describe('CachedBalancesController', function () { }, initState: { cachedBalances: { - [KOVAN_CHAIN_ID]: { + [CHAIN_IDS.KOVAN]: { a: '0x1', b: '0x2', c: '0x3', @@ -111,7 +111,7 @@ describe('CachedBalancesController', function () { ); assert.deepEqual(result, { - [KOVAN_CHAIN_ID]: { + [CHAIN_IDS.KOVAN]: { a: '0x1', b: '0x2', c: '0x3', @@ -128,7 +128,7 @@ describe('CachedBalancesController', function () { it('should subscribe to the account tracker with the updateCachedBalances method', async function () { const subscribeSpy = sinon.spy(); const controller = new CachedBalancesController({ - getCurrentChainId: () => KOVAN_CHAIN_ID, + getCurrentChainId: () => CHAIN_IDS.KOVAN, accountTracker: { store: { subscribe: subscribeSpy, diff --git a/app/scripts/controllers/detect-tokens.js b/app/scripts/controllers/detect-tokens.js index 9c28e708c..c4b8f7b70 100644 --- a/app/scripts/controllers/detect-tokens.js +++ b/app/scripts/controllers/detect-tokens.js @@ -1,6 +1,6 @@ import { warn } from 'loglevel'; import { MINUTE } from '../../../shared/constants/time'; -import { MAINNET_CHAIN_ID } from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import { STATIC_MAINNET_TOKEN_LIST } from '../../../shared/constants/tokens'; import { isTokenDetectionEnabledForNetwork } from '../../../shared/modules/network.utils'; import { isEqualCaseInsensitive } from '../../../shared/modules/string-utils'; @@ -96,14 +96,14 @@ export default class DetectTokensController { } if ( !this.useTokenDetection && - this.getChainIdFromNetworkStore(this._network) !== MAINNET_CHAIN_ID + this.getChainIdFromNetworkStore(this._network) !== CHAIN_IDS.MAINNET ) { return; } const isTokenDetectionInactiveInMainnet = !this.useTokenDetection && - this.getChainIdFromNetworkStore(this._network) === MAINNET_CHAIN_ID; + this.getChainIdFromNetworkStore(this._network) === CHAIN_IDS.MAINNET; const { tokenList } = this._tokenList.state; const tokenListUsed = isTokenDetectionInactiveInMainnet diff --git a/app/scripts/controllers/detect-tokens.test.js b/app/scripts/controllers/detect-tokens.test.js index 4f1e0334a..102891abd 100644 --- a/app/scripts/controllers/detect-tokens.test.js +++ b/app/scripts/controllers/detect-tokens.test.js @@ -9,7 +9,7 @@ import { TokensController, AssetsContractController, } from '@metamask/controllers'; -import { MAINNET, ROPSTEN } from '../../../shared/constants/network'; +import { NETWORK_TYPES } from '../../../shared/constants/network'; import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils'; import DetectTokensController from './detect-tokens'; import NetworkController from './network'; @@ -169,7 +169,7 @@ describe('DetectTokensController', function () { it('should be called on every polling period', async function () { const clock = sandbox.useFakeTimers(); - network.setProviderType(MAINNET); + network.setProviderType(NETWORK_TYPES.MAINNET); const controller = new DetectTokensController({ preferences, network, @@ -195,7 +195,7 @@ describe('DetectTokensController', function () { it('should not check and add tokens while on unsupported networks', async function () { sandbox.useFakeTimers(); - network.setProviderType(ROPSTEN); + network.setProviderType(NETWORK_TYPES.ROPSTEN); const tokenListMessengerRopsten = new ControllerMessenger().getRestricted({ name: 'TokenListController', }); @@ -228,7 +228,7 @@ describe('DetectTokensController', function () { it('should skip adding tokens listed in ignoredTokens array', async function () { sandbox.useFakeTimers(); - network.setProviderType(MAINNET); + network.setProviderType(NETWORK_TYPES.MAINNET); const controller = new DetectTokensController({ preferences, network, @@ -279,7 +279,7 @@ describe('DetectTokensController', function () { it('should check and add tokens while on supported networks', async function () { sandbox.useFakeTimers(); - network.setProviderType(MAINNET); + network.setProviderType(NETWORK_TYPES.MAINNET); const controller = new DetectTokensController({ preferences, network, @@ -374,7 +374,7 @@ describe('DetectTokensController', function () { it('should not trigger detect new tokens when not unlocked', async function () { const clock = sandbox.useFakeTimers(); - network.setProviderType(MAINNET); + network.setProviderType(NETWORK_TYPES.MAINNET); const controller = new DetectTokensController({ preferences, network, @@ -395,7 +395,7 @@ describe('DetectTokensController', function () { it('should not trigger detect new tokens when not open', async function () { const clock = sandbox.useFakeTimers(); - network.setProviderType(MAINNET); + network.setProviderType(NETWORK_TYPES.MAINNET); const controller = new DetectTokensController({ preferences, network, diff --git a/app/scripts/controllers/incoming-transactions.js b/app/scripts/controllers/incoming-transactions.js index 1c264b97d..4cccc136a 100644 --- a/app/scripts/controllers/incoming-transactions.js +++ b/app/scripts/controllers/incoming-transactions.js @@ -10,13 +10,9 @@ import { TRANSACTION_STATUSES, } from '../../../shared/constants/transaction'; import { + CHAIN_IDS, CHAIN_ID_TO_NETWORK_ID_MAP, CHAIN_ID_TO_TYPE_MAP, - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, } from '../../../shared/constants/network'; const fetchWithTimeout = getFetchWithTimeout(); @@ -53,11 +49,11 @@ const fetchWithTimeout = getFetchWithTimeout(); * attempt to retrieve incoming transactions on any custom RPC endpoints. */ const etherscanSupportedNetworks = [ - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, + CHAIN_IDS.GOERLI, + CHAIN_IDS.KOVAN, + CHAIN_IDS.MAINNET, + CHAIN_IDS.RINKEBY, + CHAIN_IDS.ROPSTEN, ]; export default class IncomingTransactionsController { @@ -81,11 +77,11 @@ export default class IncomingTransactionsController { const initState = { incomingTransactions: {}, incomingTxLastFetchedBlockByChainId: { - [GOERLI_CHAIN_ID]: null, - [KOVAN_CHAIN_ID]: null, - [MAINNET_CHAIN_ID]: null, - [RINKEBY_CHAIN_ID]: null, - [ROPSTEN_CHAIN_ID]: null, + [CHAIN_IDS.GOERLI]: null, + [CHAIN_IDS.KOVAN]: null, + [CHAIN_IDS.MAINNET]: null, + [CHAIN_IDS.RINKEBY]: null, + [CHAIN_IDS.ROPSTEN]: null, }, ...opts.initState, }; @@ -225,7 +221,7 @@ export default class IncomingTransactionsController { */ async _getNewIncomingTransactions(address, fromBlock, chainId) { const etherscanSubdomain = - chainId === MAINNET_CHAIN_ID + chainId === CHAIN_IDS.MAINNET ? 'api' : `api-${CHAIN_ID_TO_TYPE_MAP[chainId]}`; diff --git a/app/scripts/controllers/incoming-transactions.test.js b/app/scripts/controllers/incoming-transactions.test.js index ee6f559e9..abcd59e55 100644 --- a/app/scripts/controllers/incoming-transactions.test.js +++ b/app/scripts/controllers/incoming-transactions.test.js @@ -7,13 +7,9 @@ import { cloneDeep } from 'lodash'; import waitUntilCalled from '../../../test/lib/wait-until-called'; import { CHAIN_ID_TO_TYPE_MAP, - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, - ROPSTEN_NETWORK_ID, - ROPSTEN, + CHAIN_IDS, + NETWORK_TYPES, + NETWORK_IDS, } from '../../../shared/constants/network'; import { TRANSACTION_TYPES, @@ -34,18 +30,18 @@ const PREPOPULATED_INCOMING_TXS_BY_HASH = { [EXISTING_INCOMING_TX.hash]: EXISTING_INCOMING_TX, }; const PREPOPULATED_BLOCKS_BY_NETWORK = { - [GOERLI_CHAIN_ID]: 1, - [KOVAN_CHAIN_ID]: 2, - [MAINNET_CHAIN_ID]: 3, - [RINKEBY_CHAIN_ID]: 5, - [ROPSTEN_CHAIN_ID]: 4, + [CHAIN_IDS.GOERLI]: 1, + [CHAIN_IDS.KOVAN]: 2, + [CHAIN_IDS.MAINNET]: 3, + [CHAIN_IDS.RINKEBY]: 5, + [CHAIN_IDS.ROPSTEN]: 4, }; const EMPTY_BLOCKS_BY_NETWORK = { - [GOERLI_CHAIN_ID]: null, - [KOVAN_CHAIN_ID]: null, - [MAINNET_CHAIN_ID]: null, - [RINKEBY_CHAIN_ID]: null, - [ROPSTEN_CHAIN_ID]: null, + [CHAIN_IDS.GOERLI]: null, + [CHAIN_IDS.KOVAN]: null, + [CHAIN_IDS.MAINNET]: null, + [CHAIN_IDS.RINKEBY]: null, + [CHAIN_IDS.ROPSTEN]: null, }; function getEmptyInitState() { @@ -148,16 +144,16 @@ const getFakeEtherscanTransaction = ({ function nockEtherscanApiForAllChains(mockResponse) { for (const chainId of [ - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, + CHAIN_IDS.GOERLI, + CHAIN_IDS.KOVAN, + CHAIN_IDS.MAINNET, + CHAIN_IDS.RINKEBY, + CHAIN_IDS.ROPSTEN, 'undefined', ]) { nock( `https://api${ - chainId === MAINNET_CHAIN_ID ? '' : `-${CHAIN_ID_TO_TYPE_MAP[chainId]}` + chainId === CHAIN_IDS.MAINNET ? '' : `-${CHAIN_ID_TO_TYPE_MAP[chainId]}` }.etherscan.io`, ) .get(/api.+/u) @@ -247,14 +243,14 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, ); const startBlock = getNonEmptyInitState().incomingTxLastFetchedBlockByChainId[ - ROPSTEN_CHAIN_ID + CHAIN_IDS.ROPSTEN ]; nock('https://api-ropsten.etherscan.io') .get( @@ -306,8 +302,8 @@ describe('IncomingTransactionsController', function () { '0xfake': { blockNumber: '10', hash: '0xfake', - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.CONFIRMED, time: 16000000000000000, type: TRANSACTION_TYPES.INCOMING, @@ -323,8 +319,8 @@ describe('IncomingTransactionsController', function () { '0xfakeeip1559': { blockNumber: '10', hash: '0xfakeeip1559', - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.CONFIRMED, time: 16000000000000000, type: TRANSACTION_TYPES.INCOMING, @@ -341,7 +337,7 @@ describe('IncomingTransactionsController', function () { }, incomingTxLastFetchedBlockByChainId: { ...getNonEmptyInitState().incomingTxLastFetchedBlockByChainId, - [ROPSTEN_CHAIN_ID]: 11, + [CHAIN_IDS.ROPSTEN]: 11, }, }, 'State should have been updated after first block was received', @@ -449,7 +445,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -494,7 +490,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -541,7 +537,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -549,7 +545,7 @@ describe('IncomingTransactionsController', function () { const NEW_MOCK_SELECTED_ADDRESS = `${MOCK_SELECTED_ADDRESS}9`; const startBlock = getNonEmptyInitState().incomingTxLastFetchedBlockByChainId[ - ROPSTEN_CHAIN_ID + CHAIN_IDS.ROPSTEN ]; nock('https://api-ropsten.etherscan.io') .get( @@ -604,8 +600,8 @@ describe('IncomingTransactionsController', function () { '0xfake': { blockNumber: '10', hash: '0xfake', - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.CONFIRMED, time: 16000000000000000, type: TRANSACTION_TYPES.INCOMING, @@ -621,7 +617,7 @@ describe('IncomingTransactionsController', function () { }, incomingTxLastFetchedBlockByChainId: { ...getNonEmptyInitState().incomingTxLastFetchedBlockByChainId, - [ROPSTEN_CHAIN_ID]: 11, + [CHAIN_IDS.ROPSTEN]: 11, }, }, 'State should have been updated after first block was received', @@ -687,8 +683,9 @@ describe('IncomingTransactionsController', function () { }); it('should update when switching to a supported network', async function () { - const mockedNetworkMethods = - getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID); + const mockedNetworkMethods = getMockNetworkControllerMethods( + CHAIN_IDS.ROPSTEN, + ); const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), @@ -699,7 +696,7 @@ describe('IncomingTransactionsController', function () { ); const startBlock = getNonEmptyInitState().incomingTxLastFetchedBlockByChainId[ - ROPSTEN_CHAIN_ID + CHAIN_IDS.ROPSTEN ]; nock('https://api-ropsten.etherscan.io') .get( @@ -723,7 +720,7 @@ describe('IncomingTransactionsController', function () { const subscription = mockedNetworkMethods.onNetworkDidChange.getCall(0).args[0]; - await subscription(ROPSTEN_CHAIN_ID); + await subscription(CHAIN_IDS.ROPSTEN); await updateStateCalled(); const actualState = incomingTransactionsController.store.getState(); @@ -744,8 +741,8 @@ describe('IncomingTransactionsController', function () { '0xfake': { blockNumber: '10', hash: '0xfake', - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.CONFIRMED, time: 16000000000000000, type: TRANSACTION_TYPES.INCOMING, @@ -761,7 +758,7 @@ describe('IncomingTransactionsController', function () { }, incomingTxLastFetchedBlockByChainId: { ...getNonEmptyInitState().incomingTxLastFetchedBlockByChainId, - [ROPSTEN_CHAIN_ID]: 11, + [CHAIN_IDS.ROPSTEN]: 11, }, }, 'State should have been updated after first block was received', @@ -769,8 +766,9 @@ describe('IncomingTransactionsController', function () { }); it('should not update when switching to an unsupported network', async function () { - const mockedNetworkMethods = - getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID); + const mockedNetworkMethods = getMockNetworkControllerMethods( + CHAIN_IDS.ROPSTEN, + ); const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), @@ -828,10 +826,10 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController({ blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getEmptyInitState(), - getCurrentChainId: () => ROPSTEN_CHAIN_ID, + getCurrentChainId: () => CHAIN_IDS.ROPSTEN, }); sinon.spy(incomingTransactionsController.store, 'updateState'); @@ -846,14 +844,14 @@ describe('IncomingTransactionsController', function () { assert.deepStrictEqual( incomingTransactionsController._getNewIncomingTransactions.getCall(0) .args, - ['fakeAddress', 999, ROPSTEN_CHAIN_ID], + ['fakeAddress', 999, CHAIN_IDS.ROPSTEN], ); assert.deepStrictEqual( incomingTransactionsController.store.updateState.getCall(0).args[0], { incomingTxLastFetchedBlockByChainId: { ...EMPTY_BLOCKS_BY_NETWORK, - [ROPSTEN_CHAIN_ID]: 1000, + [CHAIN_IDS.ROPSTEN]: 1000, }, incomingTransactions: {}, }, @@ -864,10 +862,10 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController({ blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getEmptyInitState(), - getCurrentChainId: () => ROPSTEN_CHAIN_ID, + getCurrentChainId: () => CHAIN_IDS.ROPSTEN, }); const NEW_TRANSACTION_ONE = { @@ -893,7 +891,7 @@ describe('IncomingTransactionsController', function () { assert.deepStrictEqual( incomingTransactionsController._getNewIncomingTransactions.getCall(0) .args, - ['fakeAddress', 10, ROPSTEN_CHAIN_ID], + ['fakeAddress', 10, CHAIN_IDS.ROPSTEN], ); assert.deepStrictEqual( @@ -901,7 +899,7 @@ describe('IncomingTransactionsController', function () { { incomingTxLastFetchedBlockByChainId: { ...EMPTY_BLOCKS_BY_NETWORK, - [ROPSTEN_CHAIN_ID]: 445, + [CHAIN_IDS.ROPSTEN]: 445, }, incomingTransactions: { [NEW_TRANSACTION_ONE.hash]: NEW_TRANSACTION_ONE, @@ -917,10 +915,10 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController({ blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), - getCurrentChainId: () => ROPSTEN_CHAIN_ID, + getCurrentChainId: () => CHAIN_IDS.ROPSTEN, }); sinon.spy(incomingTransactionsController.store, 'updateState'); incomingTransactionsController._getNewIncomingTransactions = sinon @@ -936,7 +934,7 @@ describe('IncomingTransactionsController', function () { assert.deepStrictEqual( incomingTransactionsController._getNewIncomingTransactions.getCall(0) .args, - ['fakeAddress', 4, ROPSTEN_CHAIN_ID], + ['fakeAddress', 4, CHAIN_IDS.ROPSTEN], ); assert.deepStrictEqual( @@ -944,8 +942,8 @@ describe('IncomingTransactionsController', function () { { incomingTxLastFetchedBlockByChainId: { ...PREPOPULATED_BLOCKS_BY_NETWORK, - [ROPSTEN_CHAIN_ID]: - PREPOPULATED_BLOCKS_BY_NETWORK[ROPSTEN_CHAIN_ID] + 1, + [CHAIN_IDS.ROPSTEN]: + PREPOPULATED_BLOCKS_BY_NETWORK[CHAIN_IDS.ROPSTEN] + 1, }, incomingTransactions: PREPOPULATED_INCOMING_TXS_BY_HASH, }, @@ -957,10 +955,10 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), - getCurrentChainId: () => ROPSTEN_CHAIN_ID, + getCurrentChainId: () => CHAIN_IDS.ROPSTEN, }, ); @@ -987,7 +985,7 @@ describe('IncomingTransactionsController', function () { assert.deepStrictEqual( incomingTransactionsController._getNewIncomingTransactions.getCall(0) .args, - ['fakeAddress', 4, ROPSTEN_CHAIN_ID], + ['fakeAddress', 4, CHAIN_IDS.ROPSTEN], ); assert.deepStrictEqual( @@ -995,7 +993,7 @@ describe('IncomingTransactionsController', function () { { incomingTxLastFetchedBlockByChainId: { ...PREPOPULATED_BLOCKS_BY_NETWORK, - [ROPSTEN_CHAIN_ID]: 445, + [CHAIN_IDS.ROPSTEN]: 445, }, incomingTransactions: { ...PREPOPULATED_INCOMING_TXS_BY_HASH, @@ -1032,7 +1030,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1041,13 +1039,13 @@ describe('IncomingTransactionsController', function () { await incomingTransactionsController._getNewIncomingTransactions( ADDRESS_TO_FETCH_FOR, '789', - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ); assert(mockFetch.calledOnce); assert.strictEqual( mockFetch.getCall(0).args[0], - `https://api-${ROPSTEN}.etherscan.io/api?module=account&action=txlist&address=0xfakeaddress&tag=latest&page=1&startBlock=789`, + `https://api-${NETWORK_TYPES.ROPSTEN}.etherscan.io/api?module=account&action=txlist&address=0xfakeaddress&tag=latest&page=1&startBlock=789`, ); }); @@ -1055,7 +1053,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(MAINNET_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.MAINNET), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1064,7 +1062,7 @@ describe('IncomingTransactionsController', function () { await incomingTransactionsController._getNewIncomingTransactions( ADDRESS_TO_FETCH_FOR, '789', - MAINNET_CHAIN_ID, + CHAIN_IDS.MAINNET, ); assert(mockFetch.calledOnce); @@ -1078,7 +1076,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1087,13 +1085,13 @@ describe('IncomingTransactionsController', function () { await incomingTransactionsController._getNewIncomingTransactions( ADDRESS_TO_FETCH_FOR, null, - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ); assert(mockFetch.calledOnce); assert.strictEqual( mockFetch.getCall(0).args[0], - `https://api-${ROPSTEN}.etherscan.io/api?module=account&action=txlist&address=0xfakeaddress&tag=latest&page=1`, + `https://api-${NETWORK_TYPES.ROPSTEN}.etherscan.io/api?module=account&action=txlist&address=0xfakeaddress&tag=latest&page=1`, ); }); @@ -1101,7 +1099,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1111,14 +1109,14 @@ describe('IncomingTransactionsController', function () { await incomingTransactionsController._getNewIncomingTransactions( ADDRESS_TO_FETCH_FOR, '789', - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ); assert(mockFetch.calledOnce); assert.deepStrictEqual(result, [ incomingTransactionsController._normalizeTxFromEtherscan( FETCHED_TX, - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ), ]); }); @@ -1134,7 +1132,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1144,7 +1142,7 @@ describe('IncomingTransactionsController', function () { await incomingTransactionsController._getNewIncomingTransactions( ADDRESS_TO_FETCH_FOR, '789', - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ); assert.deepStrictEqual(result, []); window.fetch = tempFetchStatusZero; @@ -1162,7 +1160,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1172,7 +1170,7 @@ describe('IncomingTransactionsController', function () { await incomingTransactionsController._getNewIncomingTransactions( ADDRESS_TO_FETCH_FOR, '789', - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ); assert.deepStrictEqual(result, []); window.fetch = tempFetchEmptyResult; @@ -1185,7 +1183,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1204,14 +1202,14 @@ describe('IncomingTransactionsController', function () { value: '15', hash: '0xg', }, - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ); assert.deepStrictEqual(result, { blockNumber: 333, id: 54321, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.FAILED, time: 4444000, txParams: { @@ -1231,7 +1229,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1250,14 +1248,14 @@ describe('IncomingTransactionsController', function () { value: '15', hash: '0xg', }, - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ); assert.deepStrictEqual(result, { blockNumber: 333, id: 54321, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.CONFIRMED, time: 4444000, txParams: { @@ -1277,7 +1275,7 @@ describe('IncomingTransactionsController', function () { const incomingTransactionsController = new IncomingTransactionsController( { blockTracker: getMockBlockTracker(), - ...getMockNetworkControllerMethods(ROPSTEN_CHAIN_ID), + ...getMockNetworkControllerMethods(CHAIN_IDS.ROPSTEN), preferencesController: getMockPreferencesController(), initState: getNonEmptyInitState(), }, @@ -1297,14 +1295,14 @@ describe('IncomingTransactionsController', function () { value: '15', hash: '0xg', }, - ROPSTEN_CHAIN_ID, + CHAIN_IDS.ROPSTEN, ); assert.deepStrictEqual(result, { blockNumber: 333, id: 54321, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.CONFIRMED, time: 4444000, txParams: { diff --git a/app/scripts/controllers/metametrics.test.js b/app/scripts/controllers/metametrics.test.js index c5449b90e..1ad4e18d6 100644 --- a/app/scripts/controllers/metametrics.test.js +++ b/app/scripts/controllers/metametrics.test.js @@ -8,12 +8,7 @@ import { TRAITS, } from '../../../shared/constants/metametrics'; import waitUntilCalled from '../../../test/lib/wait-until-called'; -import { - ETH_SYMBOL, - MAINNET_CHAIN_ID, - ROPSTEN_CHAIN_ID, - TEST_ETH_SYMBOL, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, CURRENCY_SYMBOLS } from '../../../shared/constants/network'; import MetaMetricsController from './metametrics'; import { NETWORK_EVENTS } from './network'; @@ -642,8 +637,8 @@ describe('MetaMetricsController', function () { const metaMetricsController = getMetaMetricsController(); const traits = metaMetricsController._buildUserTraitsObject({ addressBook: { - [MAINNET_CHAIN_ID]: [{ address: '0x' }], - [ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }], + [CHAIN_IDS.MAINNET]: [{ address: '0x' }], + [CHAIN_IDS.ROPSTEN]: [{ address: '0x' }, { address: '0x0' }], }, allCollectibles: { '0xac706cE8A9BF27Afecf080fB298d0ee13cfb978A': { @@ -673,8 +668,8 @@ describe('MetaMetricsController', function () { }, allTokens: MOCK_ALL_TOKENS, frequentRpcListDetail: [ - { chainId: MAINNET_CHAIN_ID, ticker: ETH_SYMBOL }, - { chainId: ROPSTEN_CHAIN_ID, ticker: TEST_ETH_SYMBOL }, + { chainId: CHAIN_IDS.MAINNET, ticker: CURRENCY_SYMBOLS.ETH }, + { chainId: CHAIN_IDS.ROPSTEN, ticker: CURRENCY_SYMBOLS.TEST_ETH }, { chainId: '0xaf' }, ], identities: [{}, {}], @@ -690,7 +685,7 @@ describe('MetaMetricsController', function () { [TRAITS.ADDRESS_BOOK_ENTRIES]: 3, [TRAITS.INSTALL_DATE_EXT]: '', [TRAITS.LEDGER_CONNECTION_TYPE]: 'web-hid', - [TRAITS.NETWORKS_ADDED]: [MAINNET_CHAIN_ID, ROPSTEN_CHAIN_ID, '0xaf'], + [TRAITS.NETWORKS_ADDED]: [CHAIN_IDS.MAINNET, CHAIN_IDS.ROPSTEN, '0xaf'], [TRAITS.NETWORKS_WITHOUT_TICKER]: ['0xaf'], [TRAITS.NFT_AUTODETECTION_ENABLED]: false, [TRAITS.NUMBER_OF_ACCOUNTS]: 2, @@ -708,13 +703,13 @@ describe('MetaMetricsController', function () { const metaMetricsController = getMetaMetricsController(); metaMetricsController._buildUserTraitsObject({ addressBook: { - [MAINNET_CHAIN_ID]: [{ address: '0x' }], - [ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }], + [CHAIN_IDS.MAINNET]: [{ address: '0x' }], + [CHAIN_IDS.ROPSTEN]: [{ address: '0x' }, { address: '0x0' }], }, allTokens: {}, frequentRpcListDetail: [ - { chainId: MAINNET_CHAIN_ID }, - { chainId: ROPSTEN_CHAIN_ID }, + { chainId: CHAIN_IDS.MAINNET }, + { chainId: CHAIN_IDS.ROPSTEN }, ], ledgerTransportType: 'web-hid', openSeaEnabled: true, @@ -727,15 +722,15 @@ describe('MetaMetricsController', function () { const updatedTraits = metaMetricsController._buildUserTraitsObject({ addressBook: { - [MAINNET_CHAIN_ID]: [{ address: '0x' }, { address: '0x1' }], - [ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }], + [CHAIN_IDS.MAINNET]: [{ address: '0x' }, { address: '0x1' }], + [CHAIN_IDS.ROPSTEN]: [{ address: '0x' }, { address: '0x0' }], }, allTokens: { '0x1': { '0xabcde': [{ '0x12345': { address: '0xtestAddress' } }] }, }, frequentRpcListDetail: [ - { chainId: MAINNET_CHAIN_ID }, - { chainId: ROPSTEN_CHAIN_ID }, + { chainId: CHAIN_IDS.MAINNET }, + { chainId: CHAIN_IDS.ROPSTEN }, ], ledgerTransportType: 'web-hid', openSeaEnabled: false, @@ -758,13 +753,13 @@ describe('MetaMetricsController', function () { const metaMetricsController = getMetaMetricsController(); metaMetricsController._buildUserTraitsObject({ addressBook: { - [MAINNET_CHAIN_ID]: [{ address: '0x' }], - [ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }], + [CHAIN_IDS.MAINNET]: [{ address: '0x' }], + [CHAIN_IDS.ROPSTEN]: [{ address: '0x' }, { address: '0x0' }], }, allTokens: {}, frequentRpcListDetail: [ - { chainId: MAINNET_CHAIN_ID }, - { chainId: ROPSTEN_CHAIN_ID }, + { chainId: CHAIN_IDS.MAINNET }, + { chainId: CHAIN_IDS.ROPSTEN }, ], ledgerTransportType: 'web-hid', openSeaEnabled: true, @@ -777,13 +772,13 @@ describe('MetaMetricsController', function () { const updatedTraits = metaMetricsController._buildUserTraitsObject({ addressBook: { - [MAINNET_CHAIN_ID]: [{ address: '0x' }], - [ROPSTEN_CHAIN_ID]: [{ address: '0x' }, { address: '0x0' }], + [CHAIN_IDS.MAINNET]: [{ address: '0x' }], + [CHAIN_IDS.ROPSTEN]: [{ address: '0x' }, { address: '0x0' }], }, allTokens: {}, frequentRpcListDetail: [ - { chainId: MAINNET_CHAIN_ID }, - { chainId: ROPSTEN_CHAIN_ID }, + { chainId: CHAIN_IDS.MAINNET }, + { chainId: CHAIN_IDS.ROPSTEN }, ], ledgerTransportType: 'web-hid', openSeaEnabled: true, diff --git a/app/scripts/controllers/network/createInfuraClient.js b/app/scripts/controllers/network/createInfuraClient.js index ff143bff8..358392672 100644 --- a/app/scripts/controllers/network/createInfuraClient.js +++ b/app/scripts/controllers/network/createInfuraClient.js @@ -11,7 +11,7 @@ import { import createInfuraMiddleware from 'eth-json-rpc-infura'; import { PollingBlockTracker } from 'eth-block-tracker'; -import { NETWORK_TYPE_TO_ID_MAP } from '../../../../shared/constants/network'; +import { BUILT_IN_NETWORKS } from '../../../../shared/constants/network'; export default function createInfuraClient({ network, projectId }) { const infuraMiddleware = createInfuraMiddleware({ @@ -36,11 +36,11 @@ export default function createInfuraClient({ network, projectId }) { } function createNetworkAndChainIdMiddleware({ network }) { - if (!NETWORK_TYPE_TO_ID_MAP[network]) { + if (!BUILT_IN_NETWORKS[network]) { throw new Error(`createInfuraClient - unknown network "${network}"`); } - const { chainId, networkId } = NETWORK_TYPE_TO_ID_MAP[network]; + const { chainId, networkId } = BUILT_IN_NETWORKS[network]; return createScaffoldMiddleware({ eth_chainId: chainId, diff --git a/app/scripts/controllers/network/network.js b/app/scripts/controllers/network/network.js index a079307ab..8214da894 100644 --- a/app/scripts/controllers/network/network.js +++ b/app/scripts/controllers/network/network.js @@ -10,15 +10,12 @@ import { } from 'swappable-obj-proxy'; import EthQuery from 'eth-query'; import { - RINKEBY, - MAINNET, INFURA_PROVIDER_TYPES, - NETWORK_TYPE_RPC, - NETWORK_TYPE_TO_ID_MAP, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, + BUILT_IN_NETWORKS, INFURA_BLOCKED_KEY, TEST_NETWORK_TICKER_MAP, + CHAIN_IDS, + NETWORK_TYPES, } from '../../../../shared/constants/network'; import { isPrefixedFormattedHexString, @@ -35,19 +32,22 @@ const fetchWithTimeout = getFetchWithTimeout(); let defaultProviderConfigOpts; if (process.env.IN_TEST) { defaultProviderConfigOpts = { - type: NETWORK_TYPE_RPC, + type: NETWORK_TYPES.RPC, rpcUrl: 'http://localhost:8545', chainId: '0x539', nickname: 'Localhost 8545', }; } else if (process.env.METAMASK_DEBUG || env === 'test') { defaultProviderConfigOpts = { - type: RINKEBY, - chainId: RINKEBY_CHAIN_ID, + type: NETWORK_TYPES.RINKEBY, + chainId: CHAIN_IDS.RINKEBY, ticker: TEST_NETWORK_TICKER_MAP.rinkeby, }; } else { - defaultProviderConfigOpts = { type: MAINNET, chainId: MAINNET_CHAIN_ID }; + defaultProviderConfigOpts = { + type: NETWORK_TYPES.MAINNET, + chainId: CHAIN_IDS.MAINNET, + }; } const defaultProviderConfig = { @@ -268,7 +268,7 @@ export default class NetworkController extends EventEmitter { getCurrentChainId() { const { type, chainId: configChainId } = this.getProviderConfig(); - return NETWORK_TYPE_TO_ID_MAP[type]?.chainId || configChainId; + return BUILT_IN_NETWORKS[type]?.chainId || configChainId; } getCurrentRpcUrl() { @@ -286,7 +286,7 @@ export default class NetworkController extends EventEmitter { `Invalid chain ID "${chainId}": numerical value greater than max safe value.`, ); this.setProviderConfig({ - type: NETWORK_TYPE_RPC, + type: NETWORK_TYPES.RPC, rpcUrl, chainId, ticker, @@ -298,14 +298,14 @@ export default class NetworkController extends EventEmitter { async setProviderType(type) { assert.notStrictEqual( type, - NETWORK_TYPE_RPC, - `NetworkController - cannot call "setProviderType" with type "${NETWORK_TYPE_RPC}". Use "setRpcTarget"`, + NETWORK_TYPES.RPC, + `NetworkController - cannot call "setProviderType" with type "${NETWORK_TYPES.RPC}". Use "setRpcTarget"`, ); assert.ok( INFURA_PROVIDER_TYPES.includes(type), `Unknown Infura provider type "${type}".`, ); - const { chainId, ticker } = NETWORK_TYPE_TO_ID_MAP[type]; + const { chainId, ticker } = BUILT_IN_NETWORKS[type]; this.setProviderConfig({ type, rpcUrl: '', @@ -342,7 +342,9 @@ export default class NetworkController extends EventEmitter { getNetworkIdentifier() { const provider = this.providerStore.getState(); - return provider.type === NETWORK_TYPE_RPC ? provider.rpcUrl : provider.type; + return provider.type === NETWORK_TYPES.RPC + ? provider.rpcUrl + : provider.type; } // @@ -407,7 +409,7 @@ export default class NetworkController extends EventEmitter { if (isInfura) { this._configureInfuraProvider(type, this._infuraProjectId); // url-based rpc endpoints - } else if (type === NETWORK_TYPE_RPC) { + } else if (type === NETWORK_TYPES.RPC) { this._configureStandardProvider(rpcUrl, chainId); } else { throw new Error( diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index 18ac909a7..949c8de8d 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -5,7 +5,7 @@ import { ethers } from 'ethers'; import log from 'loglevel'; import { IPFS_DEFAULT_GATEWAY_URL, - NETWORK_TYPE_TO_ID_MAP, + BUILT_IN_NETWORKS, } from '../../../shared/constants/network'; import { isPrefixedFormattedHexString } from '../../../shared/modules/network.utils'; import { LEDGER_TRANSPORT_TYPES } from '../../../shared/constants/hardware-wallets'; @@ -424,9 +424,9 @@ export default class PreferencesController { // on both networks, since we don't know which network each contact is intended for. let duplicate = false; - const builtInProviderNetworkIds = Object.values( - NETWORK_TYPE_TO_ID_MAP, - ).map((ids) => ids.networkId); + const builtInProviderNetworkIds = Object.values(BUILT_IN_NETWORKS).map( + (ids) => ids.networkId, + ); const otherRpcEntries = rpcList.filter( (entry) => entry.rpcUrl !== newRpcDetails.rpcUrl, ); diff --git a/app/scripts/controllers/preferences.test.js b/app/scripts/controllers/preferences.test.js index 8696f7997..ee19e216f 100644 --- a/app/scripts/controllers/preferences.test.js +++ b/app/scripts/controllers/preferences.test.js @@ -4,7 +4,7 @@ import { ControllerMessenger, TokenListController, } from '@metamask/controllers'; -import { MAINNET_CHAIN_ID } from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import PreferencesController from './preferences'; import NetworkController from './network'; @@ -18,7 +18,7 @@ describe('preferences controller', function () { beforeEach(function () { const sandbox = sinon.createSandbox(); - currentChainId = MAINNET_CHAIN_ID; + currentChainId = CHAIN_IDS.MAINNET; const networkControllerProviderConfig = { getAccounts: () => undefined, }; diff --git a/app/scripts/controllers/swaps.test.js b/app/scripts/controllers/swaps.test.js index e34dff016..ea3be085a 100644 --- a/app/scripts/controllers/swaps.test.js +++ b/app/scripts/controllers/swaps.test.js @@ -4,11 +4,7 @@ import sinon from 'sinon'; import { ethers } from 'ethers'; import { mapValues } from 'lodash'; import BigNumber from 'bignumber.js'; -import { - ROPSTEN_NETWORK_ID, - MAINNET_NETWORK_ID, - MAINNET_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_IDS } from '../../../shared/constants/network'; import { ETH_SWAPS_TOKEN_OBJECT } from '../../../shared/constants/swaps'; import { createTestProviderTools } from '../../../test/stub/provider'; import { SECOND } from '../../../shared/constants/time'; @@ -82,7 +78,7 @@ const MOCK_FETCH_METADATA = { symbol: 'FOO', decimals: 18, }, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, }; const MOCK_TOKEN_RATES_STORE = () => ({ @@ -104,7 +100,7 @@ function getMockNetworkController() { store: { getState: () => { return { - network: ROPSTEN_NETWORK_ID, + network: NETWORK_IDS.ROPSTEN, }; }, }, @@ -149,7 +145,7 @@ const EMPTY_INIT_STATE = { const sandbox = sinon.createSandbox(); const fetchTradesInfoStub = sandbox.stub(); const getCurrentChainIdStub = sandbox.stub(); -getCurrentChainIdStub.returns(MAINNET_CHAIN_ID); +getCurrentChainIdStub.returns(CHAIN_IDS.MAINNET); const getEIP1559GasFeeEstimatesStub = sandbox.stub(() => { return { gasFeeEstimates: { @@ -225,7 +221,7 @@ describe('SwapsController', function () { const currentEthersInstance = swapsController.ethersProvider; const onNetworkDidChange = networkController.on.getCall(0).args[1]; - onNetworkDidChange(MAINNET_NETWORK_ID); + onNetworkDidChange(NETWORK_IDS.MAINNET); const newEthersInstance = swapsController.ethersProvider; assert.notStrictEqual( @@ -273,7 +269,7 @@ describe('SwapsController', function () { const currentEthersInstance = swapsController.ethersProvider; const onNetworkDidChange = networkController.on.getCall(0).args[1]; - onNetworkDidChange(ROPSTEN_NETWORK_ID); + onNetworkDidChange(NETWORK_IDS.ROPSTEN); const newEthersInstance = swapsController.ethersProvider; assert.strictEqual( @@ -726,7 +722,7 @@ describe('SwapsController', function () { allowanceStub.calledOnceWithExactly( MOCK_FETCH_PARAMS.sourceToken, MOCK_FETCH_PARAMS.fromAddress, - MAINNET_CHAIN_ID, + CHAIN_IDS.MAINNET, ), true, ); diff --git a/app/scripts/controllers/transactions/index.js b/app/scripts/controllers/transactions/index.js index a6a00064d..60c331cb5 100644 --- a/app/scripts/controllers/transactions/index.js +++ b/app/scripts/controllers/transactions/index.js @@ -46,9 +46,8 @@ import { isSwapsDefaultTokenAddress } from '../../../../shared/modules/swaps.uti import { EVENT } from '../../../../shared/constants/metametrics'; import { HARDFORKS, - MAINNET, - NETWORK_TYPE_RPC, CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP, + NETWORK_TYPES, } from '../../../../shared/constants/network'; import { determineTransactionAssetType, @@ -257,7 +256,7 @@ export default class TransactionController extends EventEmitter { // type will be one of our default network names or 'rpc'. the default // network names are sufficient configuration, simply pass the name as the // chain argument in the constructor. - if (type !== NETWORK_TYPE_RPC) { + if (type !== NETWORK_TYPES.RPC) { return new Common({ chain: type, hardfork, @@ -286,7 +285,11 @@ export default class TransactionController extends EventEmitter { networkId: networkId === 'loading' ? 0 : parseInt(networkId, 10), }; - return Common.forCustomChain(MAINNET, customChainParams, hardfork); + return Common.forCustomChain( + NETWORK_TYPES.MAINNET, + customChainParams, + hardfork, + ); } /** diff --git a/app/scripts/controllers/transactions/tx-state-manager.test.js b/app/scripts/controllers/transactions/tx-state-manager.test.js index 7fbe6ec1e..2e5646a14 100644 --- a/app/scripts/controllers/transactions/tx-state-manager.test.js +++ b/app/scripts/controllers/transactions/tx-state-manager.test.js @@ -4,12 +4,7 @@ import { TRANSACTION_STATUSES, TRANSACTION_TYPES, } from '../../../../shared/constants/transaction'; -import { - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - KOVAN_NETWORK_ID, -} from '../../../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_IDS } from '../../../../shared/constants/network'; import { GAS_LIMITS } from '../../../../shared/constants/gas'; import { ORIGIN_METAMASK } from '../../../../shared/constants/app'; import TxStateManager, { ERROR_SUBMITTING } from './tx-state-manager'; @@ -49,8 +44,8 @@ function generateTransactions( } describe('TransactionStateManager', function () { let txStateManager; - const currentNetworkId = KOVAN_NETWORK_ID; - const currentChainId = KOVAN_CHAIN_ID; + const currentNetworkId = NETWORK_IDS.KOVAN; + const currentChainId = CHAIN_IDS.MAINNET; const otherNetworkId = '2'; beforeEach(function () { @@ -681,9 +676,9 @@ describe('TransactionStateManager', function () { const txs = generateTransactions(limit + 5, { chainId: (i) => { if (i === 0 || i === 1) { - return MAINNET_CHAIN_ID; + return CHAIN_IDS.MAINNET; } else if (i === 4 || i === 5) { - return RINKEBY_CHAIN_ID; + return CHAIN_IDS.RINKEBY; } return currentChainId; }, @@ -713,7 +708,7 @@ describe('TransactionStateManager', function () { assert.equal( result.some( (tx) => - tx.chainId === MAINNET_CHAIN_ID && tx.txParams.nonce === '0x0', + tx.chainId === CHAIN_IDS.MAINNET && tx.txParams.nonce === '0x0', ), false, 'the mainnet transactions with nonce 0x0 should not be present in the result', diff --git a/app/scripts/lib/account-tracker.js b/app/scripts/lib/account-tracker.js index 768da310b..137c4b80b 100644 --- a/app/scripts/lib/account-tracker.js +++ b/app/scripts/lib/account-tracker.js @@ -14,19 +14,7 @@ import log from 'loglevel'; import pify from 'pify'; import { ethers } from 'ethers'; import SINGLE_CALL_BALANCES_ABI from 'single-call-balance-checker-abi'; -import { - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, - KOVAN_CHAIN_ID, - GOERLI_CHAIN_ID, - BSC_CHAIN_ID, - OPTIMISM_CHAIN_ID, - POLYGON_CHAIN_ID, - AVALANCHE_CHAIN_ID, - FANTOM_CHAIN_ID, - ARBITRUM_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import { SINGLE_CALL_BALANCES_ADDRESS, @@ -215,77 +203,77 @@ export default class AccountTracker { const chainId = this.getCurrentChainId(); switch (chainId) { - case MAINNET_CHAIN_ID: + case CHAIN_IDS.MAINNET: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS, ); break; - case RINKEBY_CHAIN_ID: + case CHAIN_IDS.RINKEBY: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_RINKEBY, ); break; - case ROPSTEN_CHAIN_ID: + case CHAIN_IDS.ROPSTEN: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_ROPSTEN, ); break; - case KOVAN_CHAIN_ID: + case CHAIN_IDS.KOVAN: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_KOVAN, ); break; - case GOERLI_CHAIN_ID: + case CHAIN_IDS.GOERLI: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_GOERLI, ); break; - case BSC_CHAIN_ID: + case CHAIN_IDS.BSC: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_BSC, ); break; - case OPTIMISM_CHAIN_ID: + case CHAIN_IDS.OPTIMISM: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_OPTIMISM, ); break; - case POLYGON_CHAIN_ID: + case CHAIN_IDS.POLYGON: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_POLYGON, ); break; - case AVALANCHE_CHAIN_ID: + case CHAIN_IDS.AVALANCHE: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_AVALANCHE, ); break; - case FANTOM_CHAIN_ID: + case CHAIN_IDS.FANTOM: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_FANTOM, ); break; - case ARBITRUM_CHAIN_ID: + case CHAIN_IDS.ARBITRUM: await this._updateAccountsViaBalanceChecker( addresses, SINGLE_CALL_BALANCES_ADDRESS_ARBITRUM, diff --git a/app/scripts/lib/buy-url.js b/app/scripts/lib/buy-url.js index 579e0c51c..ebe13786e 100644 --- a/app/scripts/lib/buy-url.js +++ b/app/scripts/lib/buy-url.js @@ -2,12 +2,8 @@ import log from 'loglevel'; import { SWAPS_API_V2_BASE_URL } from '../../../shared/constants/swaps'; import { - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, BUYABLE_CHAINS_MAP, + CHAIN_IDS, } from '../../../shared/constants/network'; import getFetchWithTimeout from '../../../shared/modules/fetch-with-timeout'; import { @@ -179,15 +175,15 @@ export default async function getBuyUrl({ chainId, address, service }) { function getDefaultServiceForChain(chainId) { switch (chainId) { - case MAINNET_CHAIN_ID: + case CHAIN_IDS.MAINNET: return 'wyre'; - case ROPSTEN_CHAIN_ID: + case CHAIN_IDS.ROPSTEN: return 'metamask-faucet'; - case RINKEBY_CHAIN_ID: + case CHAIN_IDS.RINKEBY: return 'rinkeby-faucet'; - case KOVAN_CHAIN_ID: + case CHAIN_IDS.KOVAN: return 'kovan-faucet'; - case GOERLI_CHAIN_ID: + case CHAIN_IDS.GOERLI: return 'goerli-faucet'; default: throw new Error( diff --git a/app/scripts/lib/buy-url.test.js b/app/scripts/lib/buy-url.test.js index 21c3a3498..813bb193c 100644 --- a/app/scripts/lib/buy-url.test.js +++ b/app/scripts/lib/buy-url.test.js @@ -1,13 +1,8 @@ import nock from 'nock'; import { - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - ETH_SYMBOL, BUYABLE_CHAINS_MAP, + CHAIN_IDS, + CURRENCY_SYMBOLS, } from '../../../shared/constants/network'; import { TRANSAK_API_KEY, MOONPAY_API_KEY } from '../constants/on-ramp'; import { SWAPS_API_V2_BASE_URL } from '../../../shared/constants/swaps'; @@ -16,26 +11,26 @@ import getBuyUrl from './buy-url'; const WYRE_ACCOUNT_ID = 'AC-7AG3W4XH4N2'; const ETH_ADDRESS = '0x0dcd5d886577d5581b0c524242ef2ee70be3e7bc'; const MAINNET = { - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, amount: 5, address: ETH_ADDRESS, }; const ROPSTEN = { - chainId: ROPSTEN_CHAIN_ID, + chainId: CHAIN_IDS.ROPSTEN, }; const RINKEBY = { - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, }; const KOVAN = { - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS.KOVAN, }; const BSC = { - chainId: BSC_CHAIN_ID, + chainId: CHAIN_IDS.BSC, amount: 5, address: ETH_ADDRESS, }; const POLYGON = { - chainId: POLYGON_CHAIN_ID, + chainId: CHAIN_IDS.POLYGON, amount: 5, address: ETH_ADDRESS, }; @@ -47,11 +42,11 @@ describe('buy-url', () => { `/networks/1/fiatOnRampUrl?serviceName=wyre&destinationAddress=${ETH_ADDRESS}`, ) .reply(200, { - url: `https://pay.sendwyre.com/purchase?accountId=${WYRE_ACCOUNT_ID}&utm_campaign=${WYRE_ACCOUNT_ID}&destCurrency=${ETH_SYMBOL}&utm_medium=widget&paymentMethod=debit-card&reservation=MLZVUF8FMXZUMARJC23B&dest=ethereum%3A${ETH_ADDRESS}&utm_source=checkout`, + url: `https://pay.sendwyre.com/purchase?accountId=${WYRE_ACCOUNT_ID}&utm_campaign=${WYRE_ACCOUNT_ID}&destCurrency=${CURRENCY_SYMBOLS.ETH}&utm_medium=widget&paymentMethod=debit-card&reservation=MLZVUF8FMXZUMARJC23B&dest=ethereum%3A${ETH_ADDRESS}&utm_source=checkout`, }); const wyreUrl = await getBuyUrl(MAINNET); expect(wyreUrl).toStrictEqual( - `https://pay.sendwyre.com/purchase?accountId=${WYRE_ACCOUNT_ID}&utm_campaign=${WYRE_ACCOUNT_ID}&destCurrency=${ETH_SYMBOL}&utm_medium=widget&paymentMethod=debit-card&reservation=MLZVUF8FMXZUMARJC23B&dest=ethereum%3A${ETH_ADDRESS}&utm_source=checkout`, + `https://pay.sendwyre.com/purchase?accountId=${WYRE_ACCOUNT_ID}&utm_campaign=${WYRE_ACCOUNT_ID}&destCurrency=${CURRENCY_SYMBOLS.ETH}&utm_medium=widget&paymentMethod=debit-card&reservation=MLZVUF8FMXZUMARJC23B&dest=ethereum%3A${ETH_ADDRESS}&utm_source=checkout`, ); nock.cleanAll(); }); @@ -60,7 +55,7 @@ describe('buy-url', () => { const wyreUrl = await getBuyUrl(MAINNET); expect(wyreUrl).toStrictEqual( - `https://pay.sendwyre.com/purchase?dest=ethereum:${ETH_ADDRESS}&destCurrency=${ETH_SYMBOL}&accountId=${WYRE_ACCOUNT_ID}&paymentMethod=debit-card`, + `https://pay.sendwyre.com/purchase?dest=ethereum:${ETH_ADDRESS}&destCurrency=${CURRENCY_SYMBOLS.ETH}&accountId=${WYRE_ACCOUNT_ID}&paymentMethod=debit-card`, ); }); diff --git a/app/scripts/lib/rpc-method-middleware/handlers/switch-ethereum-chain.js b/app/scripts/lib/rpc-method-middleware/handlers/switch-ethereum-chain.js index c2d73f16b..c32dc4620 100644 --- a/app/scripts/lib/rpc-method-middleware/handlers/switch-ethereum-chain.js +++ b/app/scripts/lib/rpc-method-middleware/handlers/switch-ethereum-chain.js @@ -2,10 +2,10 @@ import { ethErrors } from 'eth-rpc-errors'; import { omit } from 'lodash'; import { MESSAGE_TYPE } from '../../../../../shared/constants/app'; import { - ETH_SYMBOL, CHAIN_ID_TO_TYPE_MAP, NETWORK_TO_NAME_MAP, CHAIN_ID_TO_RPC_URL_MAP, + CURRENCY_SYMBOLS, } from '../../../../../shared/constants/network'; import { isPrefixedFormattedHexString, @@ -29,7 +29,7 @@ function findExistingNetwork(chainId, findCustomRpcBy) { if (chainId in CHAIN_ID_TO_TYPE_MAP) { return { chainId, - ticker: ETH_SYMBOL, + ticker: CURRENCY_SYMBOLS.ETH, nickname: NETWORK_TO_NAME_MAP[chainId], rpcUrl: CHAIN_ID_TO_RPC_URL_MAP[chainId], type: CHAIN_ID_TO_TYPE_MAP[chainId], diff --git a/app/scripts/lib/util.js b/app/scripts/lib/util.js index edb1aca70..11027123d 100644 --- a/app/scripts/lib/util.js +++ b/app/scripts/lib/util.js @@ -3,10 +3,7 @@ import browser from 'webextension-polyfill'; import { stripHexPrefix } from 'ethereumjs-util'; import BN from 'bn.js'; import { memoize } from 'lodash'; -import { - MAINNET_CHAIN_ID, - TEST_CHAINS, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, TEST_CHAINS } from '../../../shared/constants/network'; import { ENVIRONMENT_TYPE_POPUP, @@ -148,7 +145,7 @@ function bnToHex(inputBn) { } function getChainType(chainId) { - if (chainId === MAINNET_CHAIN_ID) { + if (chainId === CHAIN_IDS.MAINNET) { return 'mainnet'; } else if (TEST_CHAINS.includes(chainId)) { return 'testnet'; diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 163907f3a..fac7e14ad 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -65,7 +65,7 @@ import { GAS_DEV_API_BASE_URL, SWAPS_CLIENT_ID, } from '../../shared/constants/swaps'; -import { MAINNET_CHAIN_ID } from '../../shared/constants/network'; +import { CHAIN_IDS } from '../../shared/constants/network'; import { DEVICE_NAMES, KEYRING_TYPES, @@ -431,11 +431,11 @@ export default class MetamaskController extends EventEmitter { EIP1559APIEndpoint: `${gasApiBaseUrl}/networks//suggestedGasFees`, getCurrentNetworkLegacyGasAPICompatibility: () => { const chainId = this.networkController.getCurrentChainId(); - return process.env.IN_TEST || chainId === MAINNET_CHAIN_ID; + return process.env.IN_TEST || chainId === CHAIN_IDS.MAINNET; }, getChainId: () => { return process.env.IN_TEST - ? MAINNET_CHAIN_ID + ? CHAIN_IDS.MAINNET : this.networkController.getCurrentChainId(); }, }); @@ -2262,7 +2262,7 @@ export default class MetamaskController extends EventEmitter { const isTokenDetectionInactiveInMainnet = !useTokenDetection && this.networkController.store.getState().provider.chainId === - MAINNET_CHAIN_ID; + CHAIN_IDS.MAINNET; const { tokenList } = this.tokenListController.state; const caseInSensitiveTokenList = isTokenDetectionInactiveInMainnet ? STATIC_MAINNET_TOKEN_LIST diff --git a/app/scripts/metamask-controller.test.js b/app/scripts/metamask-controller.test.js index 21b697fd2..51bfdc77c 100644 --- a/app/scripts/metamask-controller.test.js +++ b/app/scripts/metamask-controller.test.js @@ -9,7 +9,7 @@ import proxyquire from 'proxyquire'; import browser from 'webextension-polyfill'; import { TRANSACTION_STATUSES } from '../../shared/constants/transaction'; import createTxMeta from '../../test/lib/createTxMeta'; -import { NETWORK_TYPE_RPC } from '../../shared/constants/network'; +import { NETWORK_TYPES } from '../../shared/constants/network'; import { KEYRING_TYPES, DEVICE_NAMES, @@ -24,7 +24,7 @@ const firstTimeState = { config: {}, NetworkController: { provider: { - type: NETWORK_TYPE_RPC, + type: NETWORK_TYPES.RPC, rpcUrl: 'http://localhost:8545', chainId: '0x539', }, diff --git a/app/scripts/migrations/051.js b/app/scripts/migrations/051.js index c429fa635..c2d975e47 100644 --- a/app/scripts/migrations/051.js +++ b/app/scripts/migrations/051.js @@ -1,5 +1,5 @@ import { cloneDeep } from 'lodash'; -import { NETWORK_TYPE_TO_ID_MAP } from '../../../shared/constants/network'; +import { BUILT_IN_NETWORKS } from '../../../shared/constants/network'; const version = 51; @@ -19,7 +19,7 @@ export default { function transformState(state) { const { chainId, type } = state?.NetworkController?.provider || {}; - const enumChainId = NETWORK_TYPE_TO_ID_MAP[type]?.chainId; + const enumChainId = BUILT_IN_NETWORKS[type]?.chainId; if (enumChainId && chainId !== enumChainId) { state.NetworkController.provider.chainId = enumChainId; diff --git a/app/scripts/migrations/051.test.js b/app/scripts/migrations/051.test.js index 6dab2c0e3..407a3eae6 100644 --- a/app/scripts/migrations/051.test.js +++ b/app/scripts/migrations/051.test.js @@ -1,6 +1,6 @@ import { INFURA_PROVIDER_TYPES, - NETWORK_TYPE_TO_ID_MAP, + BUILT_IN_NETWORKS, } from '../../../shared/constants/network'; import migration51 from './051'; @@ -44,7 +44,7 @@ describe('migration #51', () => { }, provider: { type, - chainId: NETWORK_TYPE_TO_ID_MAP[type].chainId, + chainId: BUILT_IN_NETWORKS[type].chainId, }, }, foo: 'bar', @@ -75,7 +75,7 @@ describe('migration #51', () => { }, provider: { type, - chainId: NETWORK_TYPE_TO_ID_MAP[type].chainId, + chainId: BUILT_IN_NETWORKS[type].chainId, }, }, foo: 'bar', diff --git a/app/scripts/migrations/052.js b/app/scripts/migrations/052.js index f2469106e..e18040e47 100644 --- a/app/scripts/migrations/052.js +++ b/app/scripts/migrations/052.js @@ -1,17 +1,5 @@ import { cloneDeep } from 'lodash'; -import { - GOERLI, - GOERLI_CHAIN_ID, - KOVAN, - KOVAN_CHAIN_ID, - MAINNET, - MAINNET_CHAIN_ID, - NETWORK_TYPE_RPC, - RINKEBY, - RINKEBY_CHAIN_ID, - ROPSTEN, - ROPSTEN_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_TYPES } from '../../../shared/constants/network'; const version = 52; @@ -43,33 +31,33 @@ function transformState(state = {}) { if (accountTokens && Object.keys(accountTokens).length > 0) { for (const address of Object.keys(accountTokens)) { newAccountTokens[address] = {}; - if (accountTokens[address][NETWORK_TYPE_RPC]) { + if (accountTokens[address][NETWORK_TYPES.RPC]) { frequentRpcListDetail.forEach((detail) => { newAccountTokens[address][detail.chainId] = - accountTokens[address][NETWORK_TYPE_RPC]; + accountTokens[address][NETWORK_TYPES.RPC]; }); } for (const providerType of Object.keys(accountTokens[address])) { switch (providerType) { - case MAINNET: - newAccountTokens[address][MAINNET_CHAIN_ID] = - accountTokens[address][MAINNET]; + case NETWORK_TYPES.MAINNET: + newAccountTokens[address][CHAIN_IDS.MAINNET] = + accountTokens[address][NETWORK_TYPES.MAINNET]; break; - case ROPSTEN: - newAccountTokens[address][ROPSTEN_CHAIN_ID] = - accountTokens[address][ROPSTEN]; + case NETWORK_TYPES.ROPSTEN: + newAccountTokens[address][CHAIN_IDS.ROPSTEN] = + accountTokens[address][NETWORK_TYPES.ROPSTEN]; break; - case RINKEBY: - newAccountTokens[address][RINKEBY_CHAIN_ID] = - accountTokens[address][RINKEBY]; + case NETWORK_TYPES.RINKEBY: + newAccountTokens[address][CHAIN_IDS.RINKEBY] = + accountTokens[address][NETWORK_TYPES.RINKEBY]; break; - case GOERLI: - newAccountTokens[address][GOERLI_CHAIN_ID] = - accountTokens[address][GOERLI]; + case NETWORK_TYPES.GOERLI: + newAccountTokens[address][CHAIN_IDS.GOERLI] = + accountTokens[address][NETWORK_TYPES.GOERLI]; break; - case KOVAN: - newAccountTokens[address][KOVAN_CHAIN_ID] = - accountTokens[address][KOVAN]; + case NETWORK_TYPES.KOVAN: + newAccountTokens[address][CHAIN_IDS.KOVAN] = + accountTokens[address][NETWORK_TYPES.KOVAN]; break; default: break; @@ -82,33 +70,33 @@ function transformState(state = {}) { if (accountHiddenTokens && Object.keys(accountHiddenTokens).length > 0) { for (const address of Object.keys(accountHiddenTokens)) { newAccountHiddenTokens[address] = {}; - if (accountHiddenTokens[address][NETWORK_TYPE_RPC]) { + if (accountHiddenTokens[address][NETWORK_TYPES.RPC]) { frequentRpcListDetail.forEach((detail) => { newAccountHiddenTokens[address][detail.chainId] = - accountHiddenTokens[address][NETWORK_TYPE_RPC]; + accountHiddenTokens[address][NETWORK_TYPES.RPC]; }); } for (const providerType of Object.keys(accountHiddenTokens[address])) { switch (providerType) { - case MAINNET: - newAccountHiddenTokens[address][MAINNET_CHAIN_ID] = - accountHiddenTokens[address][MAINNET]; + case NETWORK_TYPES.MAINNET: + newAccountHiddenTokens[address][CHAIN_IDS.MAINNET] = + accountHiddenTokens[address][NETWORK_TYPES.MAINNET]; break; - case ROPSTEN: - newAccountHiddenTokens[address][ROPSTEN_CHAIN_ID] = - accountHiddenTokens[address][ROPSTEN]; + case NETWORK_TYPES.ROPSTEN: + newAccountHiddenTokens[address][CHAIN_IDS.ROPSTEN] = + accountHiddenTokens[address][NETWORK_TYPES.ROPSTEN]; break; - case RINKEBY: - newAccountHiddenTokens[address][RINKEBY_CHAIN_ID] = - accountHiddenTokens[address][RINKEBY]; + case NETWORK_TYPES.RINKEBY: + newAccountHiddenTokens[address][CHAIN_IDS.RINKEBY] = + accountHiddenTokens[address][NETWORK_TYPES.RINKEBY]; break; - case GOERLI: - newAccountHiddenTokens[address][GOERLI_CHAIN_ID] = - accountHiddenTokens[address][GOERLI]; + case NETWORK_TYPES.GOERLI: + newAccountHiddenTokens[address][CHAIN_IDS.GOERLI] = + accountHiddenTokens[address][NETWORK_TYPES.GOERLI]; break; - case KOVAN: - newAccountHiddenTokens[address][KOVAN_CHAIN_ID] = - accountHiddenTokens[address][KOVAN]; + case NETWORK_TYPES.KOVAN: + newAccountHiddenTokens[address][CHAIN_IDS.KOVAN] = + accountHiddenTokens[address][NETWORK_TYPES.KOVAN]; break; default: break; diff --git a/app/scripts/migrations/052.test.js b/app/scripts/migrations/052.test.js index 1a78374cb..37c325066 100644 --- a/app/scripts/migrations/052.test.js +++ b/app/scripts/migrations/052.test.js @@ -1,16 +1,4 @@ -import { - GOERLI, - GOERLI_CHAIN_ID, - KOVAN, - KOVAN_CHAIN_ID, - MAINNET, - MAINNET_CHAIN_ID, - NETWORK_TYPE_RPC, - RINKEBY, - RINKEBY_CHAIN_ID, - ROPSTEN, - ROPSTEN_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_TYPES } from '../../../shared/constants/network'; import migration52 from './052'; const TOKEN1 = { symbol: 'TST', address: '0x10', decimals: 18 }; @@ -33,25 +21,25 @@ describe('migration #52', () => { }); }); - it(`should move ${MAINNET} tokens and hidden tokens to be keyed by ${MAINNET_CHAIN_ID} for each address`, async () => { + it(`should move ${NETWORK_TYPES.MAINNET} tokens and hidden tokens to be keyed by ${CHAIN_IDS.MAINNET} for each address`, async () => { const oldStorage = { meta: {}, data: { PreferencesController: { accountHiddenTokens: { '0x1111': { - [MAINNET]: [TOKEN1], + [NETWORK_TYPES.MAINNET]: [TOKEN1], }, '0x1112': { - [MAINNET]: [TOKEN3], + [NETWORK_TYPES.MAINNET]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [MAINNET]: [TOKEN1, TOKEN2], + [NETWORK_TYPES.MAINNET]: [TOKEN1, TOKEN2], }, '0x1112': { - [MAINNET]: [TOKEN1, TOKEN3], + [NETWORK_TYPES.MAINNET]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -65,18 +53,18 @@ describe('migration #52', () => { PreferencesController: { accountHiddenTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [TOKEN1], + [CHAIN_IDS.MAINNET]: [TOKEN1], }, '0x1112': { - [MAINNET_CHAIN_ID]: [TOKEN3], + [CHAIN_IDS.MAINNET]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [TOKEN1, TOKEN2], + [CHAIN_IDS.MAINNET]: [TOKEN1, TOKEN2], }, '0x1112': { - [MAINNET_CHAIN_ID]: [TOKEN1, TOKEN3], + [CHAIN_IDS.MAINNET]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -85,25 +73,25 @@ describe('migration #52', () => { }); }); - it(`should move ${RINKEBY} tokens and hidden tokens to be keyed by ${RINKEBY_CHAIN_ID} for each address`, async () => { + it(`should move ${NETWORK_TYPES.RINKEBY} tokens and hidden tokens to be keyed by ${CHAIN_IDS.RINKEBY} for each address`, async () => { const oldStorage = { meta: {}, data: { PreferencesController: { accountHiddenTokens: { '0x1111': { - [RINKEBY]: [TOKEN1], + [NETWORK_TYPES.RINKEBY]: [TOKEN1], }, '0x1112': { - [RINKEBY]: [TOKEN3], + [NETWORK_TYPES.RINKEBY]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [RINKEBY]: [TOKEN1, TOKEN2], + [NETWORK_TYPES.RINKEBY]: [TOKEN1, TOKEN2], }, '0x1112': { - [RINKEBY]: [TOKEN1, TOKEN3], + [NETWORK_TYPES.RINKEBY]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -117,18 +105,18 @@ describe('migration #52', () => { PreferencesController: { accountHiddenTokens: { '0x1111': { - [RINKEBY_CHAIN_ID]: [TOKEN1], + [CHAIN_IDS.RINKEBY]: [TOKEN1], }, '0x1112': { - [RINKEBY_CHAIN_ID]: [TOKEN3], + [CHAIN_IDS.RINKEBY]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [RINKEBY_CHAIN_ID]: [TOKEN1, TOKEN2], + [CHAIN_IDS.RINKEBY]: [TOKEN1, TOKEN2], }, '0x1112': { - [RINKEBY_CHAIN_ID]: [TOKEN1, TOKEN3], + [CHAIN_IDS.RINKEBY]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -137,25 +125,25 @@ describe('migration #52', () => { }); }); - it(`should move ${KOVAN} tokens and hidden tokens to be keyed by ${KOVAN_CHAIN_ID} for each address`, async () => { + it(`should move ${NETWORK_TYPES.KOVAN} tokens and hidden tokens to be keyed by ${CHAIN_IDS.KOVAN} for each address`, async () => { const oldStorage = { meta: {}, data: { PreferencesController: { accountHiddenTokens: { '0x1111': { - [KOVAN]: [TOKEN1], + [NETWORK_TYPES.KOVAN]: [TOKEN1], }, '0x1112': { - [KOVAN]: [TOKEN3], + [NETWORK_TYPES.KOVAN]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [KOVAN]: [TOKEN1, TOKEN2], + [NETWORK_TYPES.KOVAN]: [TOKEN1, TOKEN2], }, '0x1112': { - [KOVAN]: [TOKEN1, TOKEN3], + [NETWORK_TYPES.KOVAN]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -169,18 +157,18 @@ describe('migration #52', () => { PreferencesController: { accountHiddenTokens: { '0x1111': { - [KOVAN_CHAIN_ID]: [TOKEN1], + [CHAIN_IDS.KOVAN]: [TOKEN1], }, '0x1112': { - [KOVAN_CHAIN_ID]: [TOKEN3], + [CHAIN_IDS.KOVAN]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [KOVAN_CHAIN_ID]: [TOKEN1, TOKEN2], + [CHAIN_IDS.KOVAN]: [TOKEN1, TOKEN2], }, '0x1112': { - [KOVAN_CHAIN_ID]: [TOKEN1, TOKEN3], + [CHAIN_IDS.KOVAN]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -189,25 +177,25 @@ describe('migration #52', () => { }); }); - it(`should move ${GOERLI} tokens and hidden tokens to be keyed by ${GOERLI_CHAIN_ID} for each address`, async () => { + it(`should move ${NETWORK_TYPES.GOERLI} tokens and hidden tokens to be keyed by ${CHAIN_IDS.GOERLI} for each address`, async () => { const oldStorage = { meta: {}, data: { PreferencesController: { accountHiddenTokens: { '0x1111': { - [GOERLI]: [TOKEN1], + [NETWORK_TYPES.GOERLI]: [TOKEN1], }, '0x1112': { - [GOERLI]: [TOKEN3], + [NETWORK_TYPES.GOERLI]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [GOERLI]: [TOKEN1, TOKEN2], + [NETWORK_TYPES.GOERLI]: [TOKEN1, TOKEN2], }, '0x1112': { - [GOERLI]: [TOKEN1, TOKEN3], + [NETWORK_TYPES.GOERLI]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -221,18 +209,18 @@ describe('migration #52', () => { PreferencesController: { accountHiddenTokens: { '0x1111': { - [GOERLI_CHAIN_ID]: [TOKEN1], + [CHAIN_IDS.GOERLI]: [TOKEN1], }, '0x1112': { - [GOERLI_CHAIN_ID]: [TOKEN3], + [CHAIN_IDS.GOERLI]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [GOERLI_CHAIN_ID]: [TOKEN1, TOKEN2], + [CHAIN_IDS.GOERLI]: [TOKEN1, TOKEN2], }, '0x1112': { - [GOERLI_CHAIN_ID]: [TOKEN1, TOKEN3], + [CHAIN_IDS.GOERLI]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -241,25 +229,25 @@ describe('migration #52', () => { }); }); - it(`should move ${ROPSTEN} tokens and hidden tokens to be keyed by ${ROPSTEN_CHAIN_ID} for each address`, async () => { + it(`should move ${NETWORK_TYPES.ROPSTEN} tokens and hidden tokens to be keyed by ${CHAIN_IDS.ROPSTEN} for each address`, async () => { const oldStorage = { meta: {}, data: { PreferencesController: { accountHiddenTokens: { '0x1111': { - [ROPSTEN]: [TOKEN1], + [NETWORK_TYPES.ROPSTEN]: [TOKEN1], }, '0x1112': { - [ROPSTEN]: [TOKEN3], + [NETWORK_TYPES.ROPSTEN]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [ROPSTEN]: [TOKEN1, TOKEN2], + [NETWORK_TYPES.ROPSTEN]: [TOKEN1, TOKEN2], }, '0x1112': { - [ROPSTEN]: [TOKEN1, TOKEN3], + [NETWORK_TYPES.ROPSTEN]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -273,18 +261,18 @@ describe('migration #52', () => { PreferencesController: { accountHiddenTokens: { '0x1111': { - [ROPSTEN_CHAIN_ID]: [TOKEN1], + [CHAIN_IDS.ROPSTEN]: [TOKEN1], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [TOKEN3], + [CHAIN_IDS.ROPSTEN]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [ROPSTEN_CHAIN_ID]: [TOKEN1, TOKEN2], + [CHAIN_IDS.ROPSTEN]: [TOKEN1, TOKEN2], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [TOKEN1, TOKEN3], + [CHAIN_IDS.ROPSTEN]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -293,7 +281,7 @@ describe('migration #52', () => { }); }); - it(`should duplicate ${NETWORK_TYPE_RPC} tokens and hidden tokens to all custom networks for each address`, async () => { + it(`should duplicate ${NETWORK_TYPES.RPC} tokens and hidden tokens to all custom networks for each address`, async () => { const oldStorage = { meta: {}, data: { @@ -305,18 +293,18 @@ describe('migration #52', () => { ], accountHiddenTokens: { '0x1111': { - [NETWORK_TYPE_RPC]: [TOKEN1], + [NETWORK_TYPES.RPC]: [TOKEN1], }, '0x1112': { - [NETWORK_TYPE_RPC]: [TOKEN3], + [NETWORK_TYPES.RPC]: [TOKEN3], }, }, accountTokens: { '0x1111': { - [NETWORK_TYPE_RPC]: [TOKEN1, TOKEN2], + [NETWORK_TYPES.RPC]: [TOKEN1, TOKEN2], }, '0x1112': { - [NETWORK_TYPE_RPC]: [TOKEN1, TOKEN3], + [NETWORK_TYPES.RPC]: [TOKEN1, TOKEN3], }, }, bar: 'baz', @@ -363,7 +351,7 @@ describe('migration #52', () => { }); }); - it(`should overwrite ${NETWORK_TYPE_RPC} tokens with built in networks if chainIds match`, async () => { + it(`should overwrite ${NETWORK_TYPES.RPC} tokens with built in networks if chainIds match`, async () => { const oldStorage = { meta: {}, data: { @@ -371,14 +359,14 @@ describe('migration #52', () => { frequentRpcListDetail: [{ chainId: '0x1' }], accountHiddenTokens: { '0x1111': { - [NETWORK_TYPE_RPC]: [TOKEN3], - [MAINNET]: [TOKEN1], + [NETWORK_TYPES.RPC]: [TOKEN3], + [NETWORK_TYPES.MAINNET]: [TOKEN1], }, }, accountTokens: { '0x1111': { - [NETWORK_TYPE_RPC]: [TOKEN1, TOKEN2], - [MAINNET]: [TOKEN3, TOKEN4], + [NETWORK_TYPES.RPC]: [TOKEN1, TOKEN2], + [NETWORK_TYPES.MAINNET]: [TOKEN3, TOKEN4], }, }, bar: 'baz', diff --git a/app/scripts/migrations/054.test.js b/app/scripts/migrations/054.test.js index 0e7cde9ae..8ac809b3f 100644 --- a/app/scripts/migrations/054.test.js +++ b/app/scripts/migrations/054.test.js @@ -1,7 +1,4 @@ -import { - MAINNET_CHAIN_ID, - ROPSTEN_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import migration54 from './054'; describe('migration #54', () => { @@ -150,7 +147,7 @@ describe('migration #54', () => { PreferencesController: { accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: '0', @@ -174,7 +171,7 @@ describe('migration #54', () => { ], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [ + [CHAIN_IDS.ROPSTEN]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: '0', @@ -208,7 +205,7 @@ describe('migration #54', () => { PreferencesController: { accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, @@ -232,7 +229,7 @@ describe('migration #54', () => { ], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [ + [CHAIN_IDS.ROPSTEN]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, @@ -268,7 +265,7 @@ describe('migration #54', () => { PreferencesController: { accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, @@ -292,7 +289,7 @@ describe('migration #54', () => { ], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [ + [CHAIN_IDS.ROPSTEN]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, @@ -326,7 +323,7 @@ describe('migration #54', () => { PreferencesController: { accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, @@ -350,7 +347,7 @@ describe('migration #54', () => { ], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [ + [CHAIN_IDS.ROPSTEN]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, @@ -386,7 +383,7 @@ describe('migration #54', () => { PreferencesController: { accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: '0', @@ -410,7 +407,7 @@ describe('migration #54', () => { ], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [ + [CHAIN_IDS.ROPSTEN]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: '0', @@ -465,7 +462,7 @@ describe('migration #54', () => { PreferencesController: { accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, @@ -489,7 +486,7 @@ describe('migration #54', () => { ], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [ + [CHAIN_IDS.ROPSTEN]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, @@ -546,7 +543,7 @@ describe('migration #54', () => { PreferencesController: { accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: '', @@ -570,7 +567,7 @@ describe('migration #54', () => { ], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [ + [CHAIN_IDS.ROPSTEN]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: '0', @@ -625,7 +622,7 @@ describe('migration #54', () => { PreferencesController: { accountTokens: { '0x1111': { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { address: '0x0d8775f648430679a709e98d2b0cb6250d2887ef', decimals: 18, @@ -644,7 +641,7 @@ describe('migration #54', () => { ], }, '0x1112': { - [ROPSTEN_CHAIN_ID]: [ + [CHAIN_IDS.ROPSTEN]: [ { address: '0x06012c8cf97bead5deae237070f9587f8e7a266d', decimals: 0, diff --git a/app/scripts/migrations/055.js b/app/scripts/migrations/055.js index b0ab2a844..ca79f447e 100644 --- a/app/scripts/migrations/055.js +++ b/app/scripts/migrations/055.js @@ -1,5 +1,5 @@ import { cloneDeep, mapKeys } from 'lodash'; -import { NETWORK_TYPE_TO_ID_MAP } from '../../../shared/constants/network'; +import { BUILT_IN_NETWORKS } from '../../../shared/constants/network'; const version = 55; @@ -30,8 +30,7 @@ function transformState(state) { // using optional chaining in case user's state has fetched blocks for // RPC network types (which don't map to a single chainId). This should // not be possible, but it's safer - (_, key) => - NETWORK_TYPE_TO_ID_MAP[key]?.chainId ?? UNKNOWN_CHAIN_ID_KEY, + (_, key) => BUILT_IN_NETWORKS[key]?.chainId ?? UNKNOWN_CHAIN_ID_KEY, ); // Now that mainnet and test net last fetched blocks are keyed by their // respective chainIds, we can safely delete anything we had for custom diff --git a/app/scripts/migrations/055.test.js b/app/scripts/migrations/055.test.js index a481579b4..faff99bdd 100644 --- a/app/scripts/migrations/055.test.js +++ b/app/scripts/migrations/055.test.js @@ -1,15 +1,4 @@ -import { - GOERLI, - GOERLI_CHAIN_ID, - KOVAN, - KOVAN_CHAIN_ID, - MAINNET, - MAINNET_CHAIN_ID, - RINKEBY, - RINKEBY_CHAIN_ID, - ROPSTEN, - ROPSTEN_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_TYPES } from '../../../shared/constants/network'; import migration55 from './055'; describe('migration #55', () => { @@ -41,11 +30,11 @@ describe('migration #55', () => { }, }, incomingTxLastFetchedBlocksByNetwork: { - [MAINNET]: 1, - [ROPSTEN]: 2, - [RINKEBY]: 3, - [GOERLI]: 4, - [KOVAN]: 5, + [NETWORK_TYPES.MAINNET]: 1, + [NETWORK_TYPES.ROPSTEN]: 2, + [NETWORK_TYPES.RINKEBY]: 3, + [NETWORK_TYPES.GOERLI]: 4, + [NETWORK_TYPES.KOVAN]: 5, }, }, foo: 'bar', @@ -58,11 +47,11 @@ describe('migration #55', () => { incomingTransactions: oldStorage.data.IncomingTransactionsController.incomingTransactions, incomingTxLastFetchedBlockByChainId: { - [MAINNET_CHAIN_ID]: 1, - [ROPSTEN_CHAIN_ID]: 2, - [RINKEBY_CHAIN_ID]: 3, - [GOERLI_CHAIN_ID]: 4, - [KOVAN_CHAIN_ID]: 5, + [CHAIN_IDS.MAINNET]: 1, + [CHAIN_IDS.ROPSTEN]: 2, + [CHAIN_IDS.RINKEBY]: 3, + [CHAIN_IDS.GOERLI]: 4, + [CHAIN_IDS.KOVAN]: 5, }, }, foo: 'bar', diff --git a/app/scripts/migrations/059.test.js b/app/scripts/migrations/059.test.js index dff53fcd1..271a37b9e 100644 --- a/app/scripts/migrations/059.test.js +++ b/app/scripts/migrations/059.test.js @@ -1,10 +1,5 @@ import { cloneDeep } from 'lodash'; -import { - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - GOERLI_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import { TRANSACTION_TYPES, TRANSACTION_STATUSES, @@ -17,7 +12,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 0: { type: TRANSACTION_TYPES.CANCEL, id: 0, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0x0', }, @@ -25,7 +20,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 1: { type: SENT_ETHER, id: 1, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0x1', }, @@ -33,7 +28,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 2: { type: SENT_ETHER, id: 2, - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS.KOVAN, txParams: { nonce: '0x2', }, @@ -41,7 +36,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 3: { type: SENT_ETHER, id: 3, - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, txParams: { nonce: '0x3', }, @@ -49,7 +44,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 4: { type: SENT_ETHER, id: 4, - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, txParams: { nonce: '0x4', }, @@ -57,7 +52,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 5: { type: SENT_ETHER, id: 5, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0x5', }, @@ -65,7 +60,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 6: { type: SENT_ETHER, id: 6, - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS.KOVAN, txParams: { nonce: '0x6', }, @@ -73,7 +68,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 7: { type: SENT_ETHER, id: 7, - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, txParams: { nonce: '0x7', }, @@ -81,7 +76,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 8: { type: SENT_ETHER, id: 8, - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, txParams: { nonce: '0x8', }, @@ -89,7 +84,7 @@ const ERRONEOUS_TRANSACTION_STATE = { 9: { type: SENT_ETHER, id: 9, - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, status: TRANSACTION_STATUSES.UNAPPROVED, }, }; @@ -107,7 +102,7 @@ const ERRONEOUS_TRANSACTION_STATE_MIXED = { 10: { type: TRANSACTION_TYPES.RETRY, id: 10, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0xa', }, @@ -115,7 +110,7 @@ const ERRONEOUS_TRANSACTION_STATE_MIXED = { 11: { type: TRANSACTION_TYPES.RETRY, id: 11, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0xb', }, @@ -169,7 +164,7 @@ describe('migration #59', () => { 11: { ...ERRONEOUS_TRANSACTION_STATE['0'], id: 11, - chainId: GOERLI_CHAIN_ID, + chainId: CHAIN_IDS.GOERLI, type: SENT_ETHER, }, }, @@ -250,7 +245,7 @@ describe('migration #59', () => { 11: { ...ERRONEOUS_TRANSACTION_STATE_RETRY['0'], id: 11, - chainId: GOERLI_CHAIN_ID, + chainId: CHAIN_IDS.GOERLI, type: SENT_ETHER, }, }, diff --git a/app/scripts/migrations/064.test.js b/app/scripts/migrations/064.test.js index 227d4d11d..ec8360695 100644 --- a/app/scripts/migrations/064.test.js +++ b/app/scripts/migrations/064.test.js @@ -1,5 +1,5 @@ +import { CHAIN_IDS } from '../../../shared/constants/network'; import { TRANSACTION_TYPES } from '../../../shared/constants/transaction'; -import { MAINNET_CHAIN_ID } from '../../../shared/constants/network'; import migration64 from './064'; const SENT_ETHER = 'sentEther'; // the legacy transaction type being replaced in this migration with TRANSACTION_TYPES.SIMPLE_SEND @@ -84,7 +84,7 @@ describe('migration #64', () => { 1462177651588364: { type: TRANSACTION_TYPES.CANCEL, id: 0, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0x0', }, @@ -100,7 +100,7 @@ describe('migration #64', () => { 1: { type: SENT_ETHER, id: 1, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0x1', }, @@ -263,7 +263,7 @@ describe('migration #64', () => { 1462177651588364: { type: TRANSACTION_TYPES.CANCEL, id: 0, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0x0', }, @@ -279,7 +279,7 @@ describe('migration #64', () => { 1: { type: TRANSACTION_TYPES.SIMPLE_SEND, id: 1, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, txParams: { nonce: '0x1', }, diff --git a/shared/constants/network.js b/shared/constants/network.js deleted file mode 100644 index e72f56832..000000000 --- a/shared/constants/network.js +++ /dev/null @@ -1,426 +0,0 @@ -import { capitalize } from 'lodash'; - -export const ROPSTEN = 'ropsten'; -export const RINKEBY = 'rinkeby'; -export const KOVAN = 'kovan'; -export const MAINNET = 'mainnet'; -export const GOERLI = 'goerli'; -export const LOCALHOST = 'localhost'; -export const NETWORK_TYPE_RPC = 'rpc'; -export const HOMESTEAD = 'homestead'; - -export const MAINNET_NETWORK_ID = '1'; -export const ROPSTEN_NETWORK_ID = '3'; -export const RINKEBY_NETWORK_ID = '4'; -export const GOERLI_NETWORK_ID = '5'; -export const KOVAN_NETWORK_ID = '42'; -export const LOCALHOST_NETWORK_ID = '1337'; - -export const MAINNET_CHAIN_ID = '0x1'; -export const ROPSTEN_CHAIN_ID = '0x3'; -export const RINKEBY_CHAIN_ID = '0x4'; -export const GOERLI_CHAIN_ID = '0x5'; -export const KOVAN_CHAIN_ID = '0x2a'; -export const LOCALHOST_CHAIN_ID = '0x539'; -export const BSC_CHAIN_ID = '0x38'; -export const OPTIMISM_CHAIN_ID = '0xa'; -export const OPTIMISM_TESTNET_CHAIN_ID = '0x1a4'; -export const POLYGON_CHAIN_ID = '0x89'; -export const AVALANCHE_CHAIN_ID = '0xa86a'; -export const FANTOM_CHAIN_ID = '0xfa'; -export const CELO_CHAIN_ID = '0xa4ec'; -export const ARBITRUM_CHAIN_ID = '0xa4b1'; -export const HARMONY_CHAIN_ID = '0x63564c40'; -export const PALM_CHAIN_ID = '0x2a15c308d'; - -/** - * The largest possible chain ID we can handle. - * Explanation: https://gist.github.com/rekmarks/a47bd5f2525936c4b8eee31a16345553 - */ -export const MAX_SAFE_CHAIN_ID = 4503599627370476; - -export const ROPSTEN_DISPLAY_NAME = 'Ropsten'; -export const RINKEBY_DISPLAY_NAME = 'Rinkeby'; -export const KOVAN_DISPLAY_NAME = 'Kovan'; -export const MAINNET_DISPLAY_NAME = 'Ethereum Mainnet'; -export const GOERLI_DISPLAY_NAME = 'Goerli'; -export const LOCALHOST_DISPLAY_NAME = 'Localhost 8545'; -export const BSC_DISPLAY_NAME = 'Binance Smart Chain'; -export const POLYGON_DISPLAY_NAME = 'Polygon'; -export const AVALANCHE_DISPLAY_NAME = 'Avalanche Network C-Chain'; -export const ARBITRUM_DISPLAY_NAME = 'Arbitrum One'; -export const BNB_DISPLAY_NAME = - 'BNB Smart Chain (previously Binance Smart Chain Mainnet)'; -export const OPTIMISM_DISPLAY_NAME = 'Optimism'; -export const FANTOM_DISPLAY_NAME = 'Fantom Opera'; -export const HARMONY_DISPLAY_NAME = 'Harmony Mainnet Shard 0'; -export const PALM_DISPLAY_NAME = 'Palm'; - -export const infuraProjectId = process.env.INFURA_PROJECT_ID; -export const getRpcUrl = ({ network, excludeProjectId = false }) => - `https://${network}.infura.io/v3/${excludeProjectId ? '' : infuraProjectId}`; - -export const ROPSTEN_RPC_URL = getRpcUrl({ network: ROPSTEN }); -export const RINKEBY_RPC_URL = getRpcUrl({ network: RINKEBY }); -export const KOVAN_RPC_URL = getRpcUrl({ network: KOVAN }); -export const MAINNET_RPC_URL = getRpcUrl({ network: MAINNET }); -export const GOERLI_RPC_URL = getRpcUrl({ network: GOERLI }); -export const LOCALHOST_RPC_URL = 'http://localhost:8545'; - -export const ETH_SYMBOL = 'ETH'; -export const WETH_SYMBOL = 'WETH'; -export const TEST_ETH_SYMBOL = 'TESTETH'; -export const BNB_SYMBOL = 'BNB'; -export const MATIC_SYMBOL = 'MATIC'; -export const AVALANCHE_SYMBOL = 'AVAX'; -export const FANTOM_SYMBOL = 'FTM'; -export const CELO_SYMBOL = 'CELO'; -export const ARBITRUM_SYMBOL = 'ETH'; -export const HARMONY_SYMBOL = 'ONE'; -export const PALM_SYMBOL = 'PALM'; - -export const ETH_TOKEN_IMAGE_URL = './images/eth_logo.svg'; -export const TEST_ETH_TOKEN_IMAGE_URL = './images/black-eth-logo.svg'; -export const BNB_TOKEN_IMAGE_URL = './images/bnb.png'; -export const MATIC_TOKEN_IMAGE_URL = './images/matic-token.png'; -export const AVAX_TOKEN_IMAGE_URL = './images/avax-token.png'; -export const AETH_TOKEN_IMAGE_URL = './images/arbitrum.svg'; -export const FTM_TOKEN_IMAGE_URL = './images/fantom-opera.svg'; -export const HARMONY_ONE_TOKEN_IMAGE_URL = './images/harmony-one.svg'; -export const OPTIMISM_TOKEN_IMAGE_URL = './images/optimism.svg'; -export const PALM_TOKEN_IMAGE_URL = './images/palm.svg'; - -export const INFURA_PROVIDER_TYPES = [ROPSTEN, RINKEBY, KOVAN, MAINNET, GOERLI]; - -export const TEST_CHAINS = [ - ROPSTEN_CHAIN_ID, - RINKEBY_CHAIN_ID, - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - LOCALHOST_CHAIN_ID, -]; - -export const TEST_NETWORK_TICKER_MAP = { - [ROPSTEN]: `${capitalize(ROPSTEN)}${ETH_SYMBOL}`, - [RINKEBY]: `${capitalize(RINKEBY)}${ETH_SYMBOL}`, - [KOVAN]: `${capitalize(KOVAN)}${ETH_SYMBOL}`, - [GOERLI]: `${capitalize(GOERLI)}${ETH_SYMBOL}`, -}; - -/** - * Map of all build-in Infura networks to their network, ticker and chain IDs. - */ -export const NETWORK_TYPE_TO_ID_MAP = { - [ROPSTEN]: { - networkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, - ticker: TEST_NETWORK_TICKER_MAP[ROPSTEN], - }, - [RINKEBY]: { - networkId: RINKEBY_NETWORK_ID, - chainId: RINKEBY_CHAIN_ID, - ticker: TEST_NETWORK_TICKER_MAP[RINKEBY], - }, - [KOVAN]: { - networkId: KOVAN_NETWORK_ID, - chainId: KOVAN_CHAIN_ID, - ticker: TEST_NETWORK_TICKER_MAP[KOVAN], - }, - [GOERLI]: { - networkId: GOERLI_NETWORK_ID, - chainId: GOERLI_CHAIN_ID, - ticker: TEST_NETWORK_TICKER_MAP[GOERLI], - }, - [MAINNET]: { - networkId: MAINNET_NETWORK_ID, - chainId: MAINNET_CHAIN_ID, - }, - [LOCALHOST]: { - networkId: LOCALHOST_NETWORK_ID, - chainId: LOCALHOST_CHAIN_ID, - }, -}; - -export const NETWORK_TO_NAME_MAP = { - [ROPSTEN]: ROPSTEN_DISPLAY_NAME, - [RINKEBY]: RINKEBY_DISPLAY_NAME, - [KOVAN]: KOVAN_DISPLAY_NAME, - [MAINNET]: MAINNET_DISPLAY_NAME, - [GOERLI]: GOERLI_DISPLAY_NAME, - [LOCALHOST]: LOCALHOST_DISPLAY_NAME, - - [ROPSTEN_NETWORK_ID]: ROPSTEN_DISPLAY_NAME, - [RINKEBY_NETWORK_ID]: RINKEBY_DISPLAY_NAME, - [KOVAN_NETWORK_ID]: KOVAN_DISPLAY_NAME, - [GOERLI_NETWORK_ID]: GOERLI_DISPLAY_NAME, - [MAINNET_NETWORK_ID]: MAINNET_DISPLAY_NAME, - [LOCALHOST_NETWORK_ID]: LOCALHOST_DISPLAY_NAME, - - [ROPSTEN_CHAIN_ID]: ROPSTEN_DISPLAY_NAME, - [RINKEBY_CHAIN_ID]: RINKEBY_DISPLAY_NAME, - [KOVAN_CHAIN_ID]: KOVAN_DISPLAY_NAME, - [GOERLI_CHAIN_ID]: GOERLI_DISPLAY_NAME, - [MAINNET_CHAIN_ID]: MAINNET_DISPLAY_NAME, - [LOCALHOST_CHAIN_ID]: LOCALHOST_DISPLAY_NAME, -}; - -export const CHAIN_ID_TO_TYPE_MAP = Object.entries( - NETWORK_TYPE_TO_ID_MAP, -).reduce((chainIdToTypeMap, [networkType, { chainId }]) => { - chainIdToTypeMap[chainId] = networkType; - return chainIdToTypeMap; -}, {}); - -export const CHAIN_ID_TO_RPC_URL_MAP = { - [ROPSTEN_CHAIN_ID]: ROPSTEN_RPC_URL, - [RINKEBY_CHAIN_ID]: RINKEBY_RPC_URL, - [KOVAN_CHAIN_ID]: KOVAN_RPC_URL, - [GOERLI_CHAIN_ID]: GOERLI_RPC_URL, - [MAINNET_CHAIN_ID]: MAINNET_RPC_URL, - [LOCALHOST_CHAIN_ID]: LOCALHOST_RPC_URL, -}; - -export const CHAIN_ID_TO_NETWORK_IMAGE_URL_MAP = { - [MAINNET_CHAIN_ID]: ETH_TOKEN_IMAGE_URL, - [AVALANCHE_CHAIN_ID]: AVAX_TOKEN_IMAGE_URL, - [BSC_CHAIN_ID]: BNB_TOKEN_IMAGE_URL, - [POLYGON_CHAIN_ID]: MATIC_TOKEN_IMAGE_URL, - [ARBITRUM_CHAIN_ID]: AETH_TOKEN_IMAGE_URL, - [BSC_CHAIN_ID]: BNB_TOKEN_IMAGE_URL, - [FANTOM_CHAIN_ID]: FTM_TOKEN_IMAGE_URL, - [HARMONY_CHAIN_ID]: HARMONY_ONE_TOKEN_IMAGE_URL, - [OPTIMISM_CHAIN_ID]: OPTIMISM_TOKEN_IMAGE_URL, - [PALM_CHAIN_ID]: PALM_TOKEN_IMAGE_URL, -}; - -export const NETWORK_ID_TO_ETHERS_NETWORK_NAME_MAP = { - [ROPSTEN_NETWORK_ID]: ROPSTEN, - [RINKEBY_NETWORK_ID]: RINKEBY, - [GOERLI_NETWORK_ID]: GOERLI, - [MAINNET_NETWORK_ID]: HOMESTEAD, -}; - -export const CHAIN_ID_TO_NETWORK_ID_MAP = Object.values( - NETWORK_TYPE_TO_ID_MAP, -).reduce((chainIdToNetworkIdMap, { chainId, networkId }) => { - chainIdToNetworkIdMap[chainId] = networkId; - return chainIdToNetworkIdMap; -}, {}); - -export const NATIVE_CURRENCY_TOKEN_IMAGE_MAP = { - [ETH_SYMBOL]: ETH_TOKEN_IMAGE_URL, - [TEST_ETH_SYMBOL]: TEST_ETH_TOKEN_IMAGE_URL, - [BNB_SYMBOL]: BNB_TOKEN_IMAGE_URL, - [MATIC_SYMBOL]: MATIC_TOKEN_IMAGE_URL, - [AVALANCHE_SYMBOL]: AVAX_TOKEN_IMAGE_URL, -}; - -export const INFURA_BLOCKED_KEY = 'countryBlocked'; - -/** - * Hardforks are points in the chain where logic is changed significantly - * enough where there is a fork and the new fork becomes the active chain. - * These constants are presented in chronological order starting with BERLIN - * because when we first needed to track the hardfork we had launched support - * for EIP-2718 (where transactions can have types and different shapes) and - * EIP-2930 (optional access lists), which were included in BERLIN. - * - * BERLIN - forked at block number 12,244,000, included typed transactions and - * optional access lists - * LONDON - future, upcoming fork that introduces the baseFeePerGas, an amount - * of the ETH transaction fees that will be burned instead of given to the - * miner. This change necessitated the third type of transaction envelope to - * specify maxFeePerGas and maxPriorityFeePerGas moving the fee bidding system - * to a second price auction model. - */ -export const HARDFORKS = { - BERLIN: 'berlin', - LONDON: 'london', -}; - -export const CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP = { - [OPTIMISM_CHAIN_ID]: 1, - [OPTIMISM_TESTNET_CHAIN_ID]: 1, -}; - -/** - * Ethereum JSON-RPC methods that are known to exist but that we intentionally - * do not support. - */ -export const UNSUPPORTED_RPC_METHODS = new Set([ - // This is implemented later in our middleware stack – specifically, in - // eth-json-rpc-middleware – but our UI does not support it. - 'eth_signTransaction', -]); - -export const IPFS_DEFAULT_GATEWAY_URL = 'dweb.link'; - -// The first item in transakCurrencies must be the -// default crypto currency for the network -const BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME = 'ethereum'; - -export const BUYABLE_CHAINS_MAP = { - [MAINNET_CHAIN_ID]: { - nativeCurrency: ETH_SYMBOL, - network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, - transakCurrencies: [ETH_SYMBOL, 'USDT', 'USDC', 'DAI'], - moonPay: { - defaultCurrencyCode: 'eth', - showOnlyCurrencies: 'eth,usdt,usdc,dai', - }, - wyre: { - srn: 'ethereum', - currencyCode: ETH_SYMBOL, - }, - coinbasePayCurrencies: [ETH_SYMBOL, 'USDC', 'DAI'], - }, - [ROPSTEN_CHAIN_ID]: { - nativeCurrency: TEST_NETWORK_TICKER_MAP[ROPSTEN], - network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, - }, - [RINKEBY_CHAIN_ID]: { - nativeCurrency: TEST_NETWORK_TICKER_MAP[RINKEBY], - network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, - }, - [GOERLI_CHAIN_ID]: { - nativeCurrency: TEST_NETWORK_TICKER_MAP[GOERLI], - network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, - }, - [KOVAN_CHAIN_ID]: { - nativeCurrency: TEST_NETWORK_TICKER_MAP[KOVAN], - network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, - }, - [BSC_CHAIN_ID]: { - nativeCurrency: BNB_SYMBOL, - network: 'bsc', - transakCurrencies: [BNB_SYMBOL, 'BUSD'], - moonPay: { - defaultCurrencyCode: 'bnb_bsc', - showOnlyCurrencies: 'bnb_bsc,busd_bsc', - }, - }, - [POLYGON_CHAIN_ID]: { - nativeCurrency: MATIC_SYMBOL, - network: 'polygon', - transakCurrencies: [MATIC_SYMBOL, 'USDT', 'USDC', 'DAI'], - moonPay: { - defaultCurrencyCode: 'matic_polygon', - showOnlyCurrencies: 'matic_polygon,usdc_polygon', - }, - wyre: { - srn: 'matic', - currencyCode: MATIC_SYMBOL, - }, - }, - [AVALANCHE_CHAIN_ID]: { - nativeCurrency: AVALANCHE_SYMBOL, - network: 'avaxcchain', - transakCurrencies: [AVALANCHE_SYMBOL], - moonPay: { - defaultCurrencyCode: 'avax_cchain', - showOnlyCurrencies: 'avax_cchain', - }, - wyre: { - srn: 'avalanche', - currencyCode: AVALANCHE_SYMBOL, - }, - coinbasePayCurrencies: [AVALANCHE_SYMBOL], - }, - [FANTOM_CHAIN_ID]: { - nativeCurrency: FANTOM_SYMBOL, - network: 'fantom', - transakCurrencies: [FANTOM_SYMBOL], - }, - [CELO_CHAIN_ID]: { - nativeCurrency: CELO_SYMBOL, - network: 'celo', - transakCurrencies: [CELO_SYMBOL], - moonPay: { - defaultCurrencyCode: 'celo', - showOnlyCurrencies: 'celo', - }, - }, -}; - -export const FEATURED_RPCS = [ - { - chainId: ARBITRUM_CHAIN_ID, - nickname: ARBITRUM_DISPLAY_NAME, - rpcUrl: `https://arbitrum-mainnet.infura.io/v3/${infuraProjectId}`, - ticker: ARBITRUM_SYMBOL, - rpcPrefs: { - blockExplorerUrl: 'https://explorer.arbitrum.io', - imageUrl: AETH_TOKEN_IMAGE_URL, - }, - }, - { - chainId: AVALANCHE_CHAIN_ID, - nickname: AVALANCHE_DISPLAY_NAME, - rpcUrl: `https://avalanche-mainnet.infura.io/v3/${infuraProjectId}`, - ticker: AVALANCHE_SYMBOL, - rpcPrefs: { - blockExplorerUrl: 'https://snowtrace.io/', - imageUrl: AVAX_TOKEN_IMAGE_URL, - }, - }, - { - chainId: BSC_CHAIN_ID, - nickname: BNB_DISPLAY_NAME, - rpcUrl: 'https://bsc-dataseed.binance.org/', - ticker: BNB_SYMBOL, - rpcPrefs: { - blockExplorerUrl: 'https://bscscan.com/', - imageUrl: BNB_TOKEN_IMAGE_URL, - }, - }, - { - chainId: FANTOM_CHAIN_ID, - nickname: FANTOM_DISPLAY_NAME, - rpcUrl: 'https://rpc.ftm.tools/', - ticker: FANTOM_SYMBOL, - rpcPrefs: { - blockExplorerUrl: 'https://ftmscan.com/', - imageUrl: FTM_TOKEN_IMAGE_URL, - }, - }, - { - chainId: HARMONY_CHAIN_ID, - nickname: HARMONY_DISPLAY_NAME, - rpcUrl: 'https://api.harmony.one/', - ticker: HARMONY_SYMBOL, - rpcPrefs: { - blockExplorerUrl: 'https://explorer.harmony.one/', - imageUrl: HARMONY_ONE_TOKEN_IMAGE_URL, - }, - }, - { - chainId: OPTIMISM_CHAIN_ID, - nickname: OPTIMISM_DISPLAY_NAME, - rpcUrl: `https://optimism-mainnet.infura.io/v3/${infuraProjectId}`, - ticker: ETH_SYMBOL, - rpcPrefs: { - blockExplorerUrl: 'https://optimistic.etherscan.io/', - imageUrl: OPTIMISM_TOKEN_IMAGE_URL, - }, - }, - { - chainId: PALM_CHAIN_ID, - nickname: PALM_DISPLAY_NAME, - rpcUrl: `https://palm-mainnet.infura.io/v3/${infuraProjectId}`, - ticker: PALM_SYMBOL, - rpcPrefs: { - blockExplorerUrl: 'https://explorer.palm.io/', - imageUrl: PALM_TOKEN_IMAGE_URL, - }, - }, - { - chainId: POLYGON_CHAIN_ID, - nickname: `${POLYGON_DISPLAY_NAME} ${capitalize(MAINNET)}`, - rpcUrl: `https://polygon-mainnet.infura.io/v3/${infuraProjectId}`, - ticker: MATIC_SYMBOL, - rpcPrefs: { - blockExplorerUrl: 'https://polygonscan.com/', - imageUrl: MATIC_TOKEN_IMAGE_URL, - }, - }, -]; diff --git a/shared/constants/network.ts b/shared/constants/network.ts new file mode 100644 index 000000000..4553e0d6e --- /dev/null +++ b/shared/constants/network.ts @@ -0,0 +1,675 @@ +import { capitalize } from 'lodash'; +/** + * A type representing any valid value for 'type' for setProviderType and other + * methods that add or manipulate networks in MetaMask state. + */ +export type NetworkType = typeof NETWORK_TYPES[keyof typeof NETWORK_TYPES]; + +/** + * A union type of all possible hard-coded chain ids. This type is not + * exhaustive and cannot be used for typing chainId in areas where the user or + * dapp may specify any chainId. + */ +export type ChainId = typeof CHAIN_IDS[keyof typeof CHAIN_IDS]; + +/** + * A type that is a union type of all possible hardcoded currency symbols. + * This type is non-exhaustive, and cannot be used for areas where the user + * or dapp may supply their own symbol. + */ +type CurrencySymbol = typeof CURRENCY_SYMBOLS[keyof typeof CURRENCY_SYMBOLS]; +/** + * For certain specific situations we need the above type, but with all symbols + * in lowercase format. + */ +type LowercaseCurrencySymbol = Lowercase; +/** + * Test networks have special symbols that combine the network name and 'ETH' + * so that they are distinct from mainnet and other networks that use 'ETH'. + */ +export type TestNetworkCurrencySymbol = + typeof TEST_NETWORK_TICKER_MAP[keyof typeof TEST_NETWORK_TICKER_MAP]; + +/** + * MoonPay is a fiat onramp provider, and there are some special strings that + * inform the MoonPay API which network the user is attempting to onramp into. + * This type reflects those possible values. + */ +type MoonPayNetworkAbbreviation = 'bsc' | 'cchain' | 'polygon'; + +/** + * MoonPay requires some settings that are configured per network that it is + * enabled on. This type describes those settings. + */ +type MoonPayChainSettings = { + /** + * What should the default onramp currency be, for example 'eth' on 'mainnet' + * This type matches a single LowercaseCurrencySymbol or a + * LowercaseCurrencySymbol and a MoonPayNetworkAbbreviation joined by a '_'. + */ + defaultCurrencyCode: + | LowercaseCurrencySymbol + | `${LowercaseCurrencySymbol}_${MoonPayNetworkAbbreviation}`; + /** + * We must also configure all possible onramp currencies we wish to support. + * This type matches 1 to 3 LowercaseCurrencySymbols, joined by ','. It also + * matches 1 or 2 LowercaseCurrencySymbols with a + * MoonPayNetworkAbbreviation joined by a '_', and concatenated with ','. + */ + showOnlyCurrencies: + | `${LowercaseCurrencySymbol}` + | `${LowercaseCurrencySymbol},${LowercaseCurrencySymbol}` + | `${LowercaseCurrencySymbol},${LowercaseCurrencySymbol},${LowercaseCurrencySymbol}` + | `${LowercaseCurrencySymbol},${LowercaseCurrencySymbol},${LowercaseCurrencySymbol},${LowercaseCurrencySymbol}` + | `${LowercaseCurrencySymbol}_${MoonPayNetworkAbbreviation}` + | `${LowercaseCurrencySymbol}_${MoonPayNetworkAbbreviation},${LowercaseCurrencySymbol}_${MoonPayNetworkAbbreviation}`; +}; + +/** + * An object containing preferences for an RPC definition + */ +type RPCPreferences = { + /** + * A URL for the block explorer for the RPC's network + */ + blockExplorerUrl: `https://${string}`; + /** + * A image reflecting the asset symbol for the network + */ + imageUrl: string; +}; + +/** + * An object that describes a network to be used inside of MetaMask + */ +type RPCDefinition = { + /** + * The hex encoded ChainId for the network + */ + chainId: ChainId; + /** + * The nickname for the network + */ + nickname: string; + /** + * The URL for the client to send network requests to + */ + rpcUrl: `https://${string}`; + /** + * The Currency Symbol for the network + */ + ticker: string; + /** + * Additional preferences for the network, such as blockExplorerUrl + */ + rpcPrefs: RPCPreferences; +}; + +/** + * Wyre is a fiat onramp provider. We must provide some settings for networks + * that support Wyre. + */ +type WyreChainSettings = { + /** + * The network name + */ + srn: string; + /** + * The native currency for the network + */ + currencyCode: CurrencySymbol; +}; + +/** + * For each chain that we support fiat onramps for, we provide a set of + * configuration options that help for initializing the connectiong to the + * onramp providers. + */ +type BuyableChainSettings = { + /** + * The native currency for the given chain + */ + nativeCurrency: CurrencySymbol | TestNetworkCurrencySymbol; + /** + * The network name or identifier + */ + network: string; + /** + * The list of supported currencies for the Transak onramp provider + */ + transakCurrencies?: CurrencySymbol[]; + /** + * A configuration object for the MoonPay onramp provider + */ + moonPay?: MoonPayChainSettings; + /** + * A configuration object for the Wyre onramp provider + */ + wyre?: WyreChainSettings; + /** + * The list of supported currencies for the CoinbasePay onramp provider + */ + coinbasePayCurrencies?: CurrencySymbol[]; +}; + +/** + * Throughout the extension we set the current provider by referencing its + * "type", which can be any of the values in the below object. These values + * represent the built-in networks of MetaMask, including test nets, as well + * as "rpc" which is the "type" of a custom network added by the user or via + * wallet_addEthereumChain. + */ +export const NETWORK_TYPES = { + GOERLI: 'goerli', + KOVAN: 'kovan', + LOCALHOST: 'localhost', + MAINNET: 'mainnet', + RINKEBY: 'rinkeby', + ROPSTEN: 'ropsten', + RPC: 'rpc', +} as const; + +/** + * An object containing shortcut names for any non-builtin network. We need + * this to be able to differentiate between networks that require custom + * sections of code for our various features, such as swaps or token lists. + */ +export const NETWORK_NAMES = { + HOMESTEAD: 'homestead', +}; + +/** + * The Network ID for our builtin networks. This is the decimal equivalent of + * the chain id for the network, but is expresssed as a string. Many moons ago + * the decision was made on the extension team to expressly use chainId with + * hex encoding over network id. Consider that when accessing this object. Note + * for cross product purposes: alignment with mobile on this matter has not + * been fully achieved, thus it is possible for some dependencies to still + * ask for or require network id. + */ +export const NETWORK_IDS = { + MAINNET: '1', + ROPSTEN: '3', + RINKEBY: '4', + GOERLI: '5', + KOVAN: '42', + LOCALHOST: '1337', +} as const; + +/** + * An object containing all of the chain ids for networks both built in and + * those that we have added custom code to support our feature set. + */ +export const CHAIN_IDS = { + MAINNET: '0x1', + ROPSTEN: '0x3', + RINKEBY: '0x4', + GOERLI: '0x5', + KOVAN: '0x2a', + LOCALHOST: '0x539', + BSC: '0x38', + OPTIMISM: '0xa', + OPTIMISM_TESTNET: '0x1a4', + POLYGON: '0x89', + AVALANCHE: '0xa86a', + FANTOM: '0xfa', + CELO: '0xa4ec', + ARBITRUM: '0xa4b1', + HARMONY: '0x63564c40', + PALM: '0x2a15c308d', +} as const; + +/** + * The largest possible chain ID we can handle. + * Explanation: https://gist.github.com/rekmarks/a47bd5f2525936c4b8eee31a16345553 + */ +export const MAX_SAFE_CHAIN_ID = 4503599627370476; + +export const ROPSTEN_DISPLAY_NAME = 'Ropsten'; +export const RINKEBY_DISPLAY_NAME = 'Rinkeby'; +export const KOVAN_DISPLAY_NAME = 'Kovan'; +export const MAINNET_DISPLAY_NAME = 'Ethereum Mainnet'; +export const GOERLI_DISPLAY_NAME = 'Goerli'; +export const LOCALHOST_DISPLAY_NAME = 'Localhost 8545'; +export const BSC_DISPLAY_NAME = 'Binance Smart Chain'; +export const POLYGON_DISPLAY_NAME = 'Polygon'; +export const AVALANCHE_DISPLAY_NAME = 'Avalanche Network C-Chain'; +export const ARBITRUM_DISPLAY_NAME = 'Arbitrum One'; +export const BNB_DISPLAY_NAME = + 'BNB Smart Chain (previously Binance Smart Chain Mainnet)'; +export const OPTIMISM_DISPLAY_NAME = 'Optimism'; +export const FANTOM_DISPLAY_NAME = 'Fantom Opera'; +export const HARMONY_DISPLAY_NAME = 'Harmony Mainnet Shard 0'; +export const PALM_DISPLAY_NAME = 'Palm'; + +export const infuraProjectId = process.env.INFURA_PROJECT_ID; +export const getRpcUrl = ({ + network, + excludeProjectId = false, +}: { + network: NetworkType; + excludeProjectId?: boolean; +}) => + `https://${network}.infura.io/v3/${excludeProjectId ? '' : infuraProjectId}`; + +export const ROPSTEN_RPC_URL = getRpcUrl({ + network: NETWORK_TYPES.ROPSTEN, +}); +export const RINKEBY_RPC_URL = getRpcUrl({ + network: NETWORK_TYPES.RINKEBY, +}); +export const KOVAN_RPC_URL = getRpcUrl({ network: NETWORK_TYPES.KOVAN }); +export const MAINNET_RPC_URL = getRpcUrl({ + network: NETWORK_TYPES.MAINNET, +}); +export const GOERLI_RPC_URL = getRpcUrl({ network: NETWORK_TYPES.GOERLI }); +export const LOCALHOST_RPC_URL = 'http://localhost:8545'; + +/** + * An object containing the token symbols for various tokens that are either + * native currencies or those that have been special cased by the extension + * for supporting our feature set. + */ +export const CURRENCY_SYMBOLS = { + ARBITRUM: 'ETH', + AVALANCHE: 'AVAX', + BNB: 'BNB', + BUSD: 'BUSD', + CELO: 'CELO', + DAI: 'DAI', + ETH: 'ETH', + FANTOM: 'FTM', + HARMONY: 'ONE', + PALM: 'PALM', + MATIC: 'MATIC', + TEST_ETH: 'TESTETH', + USDC: 'USDC', + USDT: 'USDT', + WETH: 'WETH', +} as const; + +export const ETH_TOKEN_IMAGE_URL = './images/eth_logo.svg'; +export const TEST_ETH_TOKEN_IMAGE_URL = './images/black-eth-logo.svg'; +export const BNB_TOKEN_IMAGE_URL = './images/bnb.png'; +export const MATIC_TOKEN_IMAGE_URL = './images/matic-token.png'; +export const AVAX_TOKEN_IMAGE_URL = './images/avax-token.png'; +export const AETH_TOKEN_IMAGE_URL = './images/arbitrum.svg'; +export const FTM_TOKEN_IMAGE_URL = './images/fantom-opera.svg'; +export const HARMONY_ONE_TOKEN_IMAGE_URL = './images/harmony-one.svg'; +export const OPTIMISM_TOKEN_IMAGE_URL = './images/optimism.svg'; +export const PALM_TOKEN_IMAGE_URL = './images/palm.svg'; + +export const INFURA_PROVIDER_TYPES = [ + NETWORK_TYPES.ROPSTEN, + NETWORK_TYPES.RINKEBY, + NETWORK_TYPES.KOVAN, + NETWORK_TYPES.MAINNET, + NETWORK_TYPES.GOERLI, +]; + +export const TEST_CHAINS = [ + CHAIN_IDS.ROPSTEN, + CHAIN_IDS.RINKEBY, + CHAIN_IDS.GOERLI, + CHAIN_IDS.KOVAN, + CHAIN_IDS.LOCALHOST, +]; + +const typedCapitalize = (k: K): Capitalize => + capitalize(k) as Capitalize; + +export const TEST_NETWORK_TICKER_MAP: { + [K in Exclude< + NetworkType, + 'localhost' | 'mainnet' | 'rpc' + >]: `${Capitalize}${typeof CURRENCY_SYMBOLS.ETH}`; +} = { + [NETWORK_TYPES.ROPSTEN]: `${typedCapitalize(NETWORK_TYPES.ROPSTEN)}${ + CURRENCY_SYMBOLS.ETH + }`, + [NETWORK_TYPES.RINKEBY]: `${typedCapitalize(NETWORK_TYPES.RINKEBY)}${ + CURRENCY_SYMBOLS.ETH + }`, + [NETWORK_TYPES.KOVAN]: `${typedCapitalize(NETWORK_TYPES.KOVAN)}${ + CURRENCY_SYMBOLS.ETH + }`, + [NETWORK_TYPES.GOERLI]: `${typedCapitalize(NETWORK_TYPES.GOERLI)}${ + CURRENCY_SYMBOLS.ETH + }`, +}; + +/** + * Map of all build-in Infura networks to their network, ticker and chain IDs. + */ +export const BUILT_IN_NETWORKS = { + [NETWORK_TYPES.ROPSTEN]: { + networkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, + ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.ROPSTEN], + }, + [NETWORK_TYPES.RINKEBY]: { + networkId: NETWORK_IDS.RINKEBY, + chainId: CHAIN_IDS.RINKEBY, + ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.RINKEBY], + }, + [NETWORK_TYPES.KOVAN]: { + networkId: NETWORK_IDS.KOVAN, + chainId: CHAIN_IDS.KOVAN, + ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.KOVAN], + }, + [NETWORK_TYPES.GOERLI]: { + networkId: NETWORK_IDS.GOERLI, + chainId: CHAIN_IDS.GOERLI, + ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.GOERLI], + }, + [NETWORK_TYPES.MAINNET]: { + networkId: NETWORK_IDS.MAINNET, + chainId: CHAIN_IDS.MAINNET, + }, + [NETWORK_TYPES.LOCALHOST]: { + networkId: NETWORK_IDS.LOCALHOST, + chainId: CHAIN_IDS.LOCALHOST, + }, +} as const; + +export const NETWORK_TO_NAME_MAP = { + [NETWORK_TYPES.ROPSTEN]: ROPSTEN_DISPLAY_NAME, + [NETWORK_TYPES.RINKEBY]: RINKEBY_DISPLAY_NAME, + [NETWORK_TYPES.KOVAN]: KOVAN_DISPLAY_NAME, + [NETWORK_TYPES.MAINNET]: MAINNET_DISPLAY_NAME, + [NETWORK_TYPES.GOERLI]: GOERLI_DISPLAY_NAME, + [NETWORK_TYPES.LOCALHOST]: LOCALHOST_DISPLAY_NAME, + + [NETWORK_IDS.ROPSTEN]: ROPSTEN_DISPLAY_NAME, + [NETWORK_IDS.RINKEBY]: RINKEBY_DISPLAY_NAME, + [NETWORK_IDS.KOVAN]: KOVAN_DISPLAY_NAME, + [NETWORK_IDS.GOERLI]: GOERLI_DISPLAY_NAME, + [NETWORK_IDS.MAINNET]: MAINNET_DISPLAY_NAME, + [NETWORK_IDS.LOCALHOST]: LOCALHOST_DISPLAY_NAME, + + [CHAIN_IDS.ROPSTEN]: ROPSTEN_DISPLAY_NAME, + [CHAIN_IDS.RINKEBY]: RINKEBY_DISPLAY_NAME, + [CHAIN_IDS.KOVAN]: KOVAN_DISPLAY_NAME, + [CHAIN_IDS.GOERLI]: GOERLI_DISPLAY_NAME, + [CHAIN_IDS.MAINNET]: MAINNET_DISPLAY_NAME, + [CHAIN_IDS.GOERLI]: LOCALHOST_DISPLAY_NAME, +} as const; + +export const CHAIN_ID_TO_TYPE_MAP = { + [CHAIN_IDS.MAINNET]: NETWORK_TYPES.MAINNET, + [CHAIN_IDS.GOERLI]: NETWORK_TYPES.GOERLI, + [CHAIN_IDS.KOVAN]: NETWORK_TYPES.KOVAN, + [CHAIN_IDS.LOCALHOST]: NETWORK_TYPES.LOCALHOST, + [CHAIN_IDS.RINKEBY]: NETWORK_TYPES.RINKEBY, + [CHAIN_IDS.ROPSTEN]: NETWORK_TYPES.ROPSTEN, +} as const; + +export const CHAIN_ID_TO_RPC_URL_MAP = { + [CHAIN_IDS.ROPSTEN]: ROPSTEN_RPC_URL, + [CHAIN_IDS.RINKEBY]: RINKEBY_RPC_URL, + [CHAIN_IDS.KOVAN]: KOVAN_RPC_URL, + [CHAIN_IDS.GOERLI]: GOERLI_RPC_URL, + [CHAIN_IDS.MAINNET]: MAINNET_RPC_URL, + [CHAIN_IDS.LOCALHOST]: LOCALHOST_RPC_URL, +} as const; + +export const CHAIN_ID_TO_NETWORK_IMAGE_URL_MAP = { + [CHAIN_IDS.MAINNET]: ETH_TOKEN_IMAGE_URL, + [CHAIN_IDS.AVALANCHE]: AVAX_TOKEN_IMAGE_URL, + [CHAIN_IDS.BSC]: BNB_TOKEN_IMAGE_URL, + [CHAIN_IDS.POLYGON]: MATIC_TOKEN_IMAGE_URL, + [CHAIN_IDS.ARBITRUM]: AETH_TOKEN_IMAGE_URL, + [CHAIN_IDS.FANTOM]: FTM_TOKEN_IMAGE_URL, + [CHAIN_IDS.HARMONY]: HARMONY_ONE_TOKEN_IMAGE_URL, + [CHAIN_IDS.OPTIMISM]: OPTIMISM_TOKEN_IMAGE_URL, + [CHAIN_IDS.PALM]: PALM_TOKEN_IMAGE_URL, +} as const; + +export const NETWORK_ID_TO_ETHERS_NETWORK_NAME_MAP = { + [NETWORK_IDS.ROPSTEN]: NETWORK_TYPES.ROPSTEN, + [NETWORK_IDS.RINKEBY]: NETWORK_TYPES.RINKEBY, + [NETWORK_IDS.GOERLI]: NETWORK_TYPES.GOERLI, + [NETWORK_IDS.MAINNET]: NETWORK_NAMES.HOMESTEAD, +} as const; + +export const CHAIN_ID_TO_NETWORK_ID_MAP = { + [CHAIN_IDS.MAINNET]: NETWORK_IDS.MAINNET, + [CHAIN_IDS.GOERLI]: NETWORK_IDS.GOERLI, + [CHAIN_IDS.KOVAN]: NETWORK_IDS.KOVAN, + [CHAIN_IDS.LOCALHOST]: NETWORK_IDS.LOCALHOST, + [CHAIN_IDS.RINKEBY]: NETWORK_IDS.RINKEBY, + [CHAIN_IDS.ROPSTEN]: NETWORK_IDS.ROPSTEN, +} as const; + +export const NATIVE_CURRENCY_TOKEN_IMAGE_MAP = { + [CURRENCY_SYMBOLS.ETH]: ETH_TOKEN_IMAGE_URL, + [CURRENCY_SYMBOLS.TEST_ETH]: TEST_ETH_TOKEN_IMAGE_URL, + [CURRENCY_SYMBOLS.BNB]: BNB_TOKEN_IMAGE_URL, + [CURRENCY_SYMBOLS.MATIC]: MATIC_TOKEN_IMAGE_URL, + [CURRENCY_SYMBOLS.AVALANCHE]: AVAX_TOKEN_IMAGE_URL, +} as const; + +export const INFURA_BLOCKED_KEY = 'countryBlocked'; + +/** + * Hardforks are points in the chain where logic is changed significantly + * enough where there is a fork and the new fork becomes the active chain. + * These constants are presented in chronological order starting with BERLIN + * because when we first needed to track the hardfork we had launched support + * for EIP-2718 (where transactions can have types and different shapes) and + * EIP-2930 (optional access lists), which were included in BERLIN. + * + * BERLIN - forked at block number 12,244,000, included typed transactions and + * optional access lists + * LONDON - future, upcoming fork that introduces the baseFeePerGas, an amount + * of the ETH transaction fees that will be burned instead of given to the + * miner. This change necessitated the third type of transaction envelope to + * specify maxFeePerGas and maxPriorityFeePerGas moving the fee bidding system + * to a second price auction model. + */ +export const HARDFORKS = { + BERLIN: 'berlin', + LONDON: 'london', +} as const; + +export const CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP = { + [CHAIN_IDS.OPTIMISM]: 1, + [CHAIN_IDS.OPTIMISM_TESTNET]: 1, +}; + +/** + * Ethereum JSON-RPC methods that are known to exist but that we intentionally + * do not support. + */ +export const UNSUPPORTED_RPC_METHODS = new Set([ + // This is implemented later in our middleware stack – specifically, in + // eth-json-rpc-middleware – but our UI does not support it. + 'eth_signTransaction' as const, +]); + +export const IPFS_DEFAULT_GATEWAY_URL = 'dweb.link'; + +// The first item in transakCurrencies must be the +// default crypto currency for the network +const BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME = 'ethereum'; + +export const BUYABLE_CHAINS_MAP: { + [K in Exclude< + ChainId, + | typeof CHAIN_IDS.LOCALHOST + | typeof CHAIN_IDS.PALM + | typeof CHAIN_IDS.HARMONY + | typeof CHAIN_IDS.OPTIMISM + | typeof CHAIN_IDS.OPTIMISM_TESTNET + | typeof CHAIN_IDS.ARBITRUM + >]: BuyableChainSettings; +} = { + [CHAIN_IDS.MAINNET]: { + nativeCurrency: CURRENCY_SYMBOLS.ETH, + network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, + transakCurrencies: [CURRENCY_SYMBOLS.ETH, 'USDT', 'USDC', 'DAI'], + moonPay: { + defaultCurrencyCode: 'eth', + showOnlyCurrencies: 'eth,usdt,usdc,dai', + }, + wyre: { + srn: 'ethereum', + currencyCode: CURRENCY_SYMBOLS.ETH, + }, + coinbasePayCurrencies: [CURRENCY_SYMBOLS.ETH, 'USDC', 'DAI'], + }, + [CHAIN_IDS.ROPSTEN]: { + nativeCurrency: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.ROPSTEN], + network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, + }, + [CHAIN_IDS.RINKEBY]: { + nativeCurrency: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.RINKEBY], + network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, + }, + [CHAIN_IDS.GOERLI]: { + nativeCurrency: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.GOERLI], + network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, + }, + [CHAIN_IDS.KOVAN]: { + nativeCurrency: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.KOVAN], + network: BUYABLE_CHAIN_ETHEREUM_NETWORK_NAME, + }, + [CHAIN_IDS.BSC]: { + nativeCurrency: CURRENCY_SYMBOLS.BNB, + network: 'bsc', + transakCurrencies: [CURRENCY_SYMBOLS.BNB, CURRENCY_SYMBOLS.BUSD], + moonPay: { + defaultCurrencyCode: 'bnb_bsc', + showOnlyCurrencies: 'bnb_bsc,busd_bsc', + }, + }, + [CHAIN_IDS.POLYGON]: { + nativeCurrency: CURRENCY_SYMBOLS.MATIC, + network: 'polygon', + transakCurrencies: [ + CURRENCY_SYMBOLS.MATIC, + CURRENCY_SYMBOLS.USDT, + CURRENCY_SYMBOLS.USDC, + CURRENCY_SYMBOLS.DAI, + ], + moonPay: { + defaultCurrencyCode: 'matic_polygon', + showOnlyCurrencies: 'matic_polygon,usdc_polygon', + }, + wyre: { + srn: 'matic', + currencyCode: CURRENCY_SYMBOLS.MATIC, + }, + }, + [CHAIN_IDS.AVALANCHE]: { + nativeCurrency: CURRENCY_SYMBOLS.AVALANCHE, + network: 'avaxcchain', + transakCurrencies: [CURRENCY_SYMBOLS.AVALANCHE], + moonPay: { + defaultCurrencyCode: 'avax_cchain', + showOnlyCurrencies: 'avax_cchain', + }, + wyre: { + srn: 'avalanche', + currencyCode: CURRENCY_SYMBOLS.AVALANCHE, + }, + coinbasePayCurrencies: [CURRENCY_SYMBOLS.AVALANCHE], + }, + [CHAIN_IDS.FANTOM]: { + nativeCurrency: CURRENCY_SYMBOLS.FANTOM, + network: 'fantom', + transakCurrencies: [CURRENCY_SYMBOLS.FANTOM], + }, + [CHAIN_IDS.CELO]: { + nativeCurrency: CURRENCY_SYMBOLS.CELO, + network: 'celo', + transakCurrencies: [CURRENCY_SYMBOLS.CELO], + moonPay: { + defaultCurrencyCode: 'celo', + showOnlyCurrencies: 'celo', + }, + }, +}; + +export const FEATURED_RPCS: RPCDefinition[] = [ + { + chainId: CHAIN_IDS.ARBITRUM, + nickname: ARBITRUM_DISPLAY_NAME, + rpcUrl: `https://arbitrum-mainnet.infura.io/v3/${infuraProjectId}`, + ticker: CURRENCY_SYMBOLS.ARBITRUM, + rpcPrefs: { + blockExplorerUrl: 'https://explorer.arbitrum.io', + imageUrl: AETH_TOKEN_IMAGE_URL, + }, + }, + { + chainId: CHAIN_IDS.AVALANCHE, + nickname: AVALANCHE_DISPLAY_NAME, + rpcUrl: `https://avalanche-mainnet.infura.io/v3/${infuraProjectId}`, + ticker: CURRENCY_SYMBOLS.AVALANCHE, + rpcPrefs: { + blockExplorerUrl: 'https://snowtrace.io/', + imageUrl: AVAX_TOKEN_IMAGE_URL, + }, + }, + { + chainId: CHAIN_IDS.BSC, + nickname: BNB_DISPLAY_NAME, + rpcUrl: 'https://bsc-dataseed.binance.org/', + ticker: CURRENCY_SYMBOLS.BNB, + rpcPrefs: { + blockExplorerUrl: 'https://bscscan.com/', + imageUrl: BNB_TOKEN_IMAGE_URL, + }, + }, + { + chainId: CHAIN_IDS.FANTOM, + nickname: FANTOM_DISPLAY_NAME, + rpcUrl: 'https://rpc.ftm.tools/', + ticker: CURRENCY_SYMBOLS.FANTOM, + rpcPrefs: { + blockExplorerUrl: 'https://ftmscan.com/', + imageUrl: FTM_TOKEN_IMAGE_URL, + }, + }, + { + chainId: CHAIN_IDS.HARMONY, + nickname: HARMONY_DISPLAY_NAME, + rpcUrl: 'https://api.harmony.one/', + ticker: CURRENCY_SYMBOLS.HARMONY, + rpcPrefs: { + blockExplorerUrl: 'https://explorer.harmony.one/', + imageUrl: HARMONY_ONE_TOKEN_IMAGE_URL, + }, + }, + { + chainId: CHAIN_IDS.OPTIMISM, + nickname: OPTIMISM_DISPLAY_NAME, + rpcUrl: `https://optimism-mainnet.infura.io/v3/${infuraProjectId}`, + ticker: CURRENCY_SYMBOLS.ETH, + rpcPrefs: { + blockExplorerUrl: 'https://optimistic.etherscan.io/', + imageUrl: OPTIMISM_TOKEN_IMAGE_URL, + }, + }, + { + chainId: CHAIN_IDS.PALM, + nickname: PALM_DISPLAY_NAME, + rpcUrl: `https://palm-mainnet.infura.io/v3/${infuraProjectId}`, + ticker: CURRENCY_SYMBOLS.PALM, + rpcPrefs: { + blockExplorerUrl: 'https://explorer.palm.io/', + imageUrl: PALM_TOKEN_IMAGE_URL, + }, + }, + { + chainId: CHAIN_IDS.POLYGON, + nickname: `${POLYGON_DISPLAY_NAME} ${capitalize(NETWORK_TYPES.MAINNET)}`, + rpcUrl: `https://polygon-mainnet.infura.io/v3/${infuraProjectId}`, + ticker: CURRENCY_SYMBOLS.MATIC, + rpcPrefs: { + blockExplorerUrl: 'https://polygonscan.com/', + imageUrl: MATIC_TOKEN_IMAGE_URL, + }, + }, +]; diff --git a/shared/constants/swaps.js b/shared/constants/swaps.js index 9bc14874e..22629bc1a 100644 --- a/shared/constants/swaps.js +++ b/shared/constants/swaps.js @@ -1,18 +1,10 @@ import { - MAINNET_CHAIN_ID, - ETH_SYMBOL, - TEST_ETH_SYMBOL, - BNB_SYMBOL, TEST_ETH_TOKEN_IMAGE_URL, BNB_TOKEN_IMAGE_URL, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - MATIC_SYMBOL, MATIC_TOKEN_IMAGE_URL, - GOERLI_CHAIN_ID, - AVALANCHE_CHAIN_ID, - AVALANCHE_SYMBOL, AVAX_TOKEN_IMAGE_URL, + CURRENCY_SYMBOLS, + CHAIN_IDS, } from './network'; export const QUOTES_EXPIRED_ERROR = 'quotes-expired'; @@ -27,7 +19,7 @@ export const SWAPS_FETCH_ORDER_CONFLICT = 'swaps-fetch-order-conflict'; const DEFAULT_TOKEN_ADDRESS = '0x0000000000000000000000000000000000000000'; export const ETH_SWAPS_TOKEN_OBJECT = { - symbol: ETH_SYMBOL, + symbol: CURRENCY_SYMBOLS.ETH, name: 'Ether', address: DEFAULT_TOKEN_ADDRESS, decimals: 18, @@ -35,7 +27,7 @@ export const ETH_SWAPS_TOKEN_OBJECT = { }; export const BNB_SWAPS_TOKEN_OBJECT = { - symbol: BNB_SYMBOL, + symbol: CURRENCY_SYMBOLS.BNB, name: 'Binance Coin', address: DEFAULT_TOKEN_ADDRESS, decimals: 18, @@ -43,7 +35,7 @@ export const BNB_SWAPS_TOKEN_OBJECT = { }; export const MATIC_SWAPS_TOKEN_OBJECT = { - symbol: MATIC_SYMBOL, + symbol: CURRENCY_SYMBOLS.MATIC, name: 'Matic', address: DEFAULT_TOKEN_ADDRESS, decimals: 18, @@ -51,7 +43,7 @@ export const MATIC_SWAPS_TOKEN_OBJECT = { }; export const AVAX_SWAPS_TOKEN_OBJECT = { - symbol: AVALANCHE_SYMBOL, + symbol: CURRENCY_SYMBOLS.AVALANCHE, name: 'Avalanche', address: DEFAULT_TOKEN_ADDRESS, decimals: 18, @@ -59,7 +51,7 @@ export const AVAX_SWAPS_TOKEN_OBJECT = { }; export const TEST_ETH_SWAPS_TOKEN_OBJECT = { - symbol: TEST_ETH_SYMBOL, + symbol: CURRENCY_SYMBOLS.TEST_ETH, name: 'Test Ether', address: DEFAULT_TOKEN_ADDRESS, decimals: 18, @@ -67,7 +59,7 @@ export const TEST_ETH_SWAPS_TOKEN_OBJECT = { }; export const GOERLI_SWAPS_TOKEN_OBJECT = { - symbol: ETH_SYMBOL, + symbol: CURRENCY_SYMBOLS.ETH, name: 'Ether', address: DEFAULT_TOKEN_ADDRESS, decimals: 18, @@ -115,83 +107,83 @@ const POLYGON_DEFAULT_BLOCK_EXPLORER_URL = 'https://polygonscan.com/'; const AVALANCHE_DEFAULT_BLOCK_EXPLORER_URL = 'https://snowtrace.io/'; export const ALLOWED_PROD_SWAPS_CHAIN_IDS = [ - MAINNET_CHAIN_ID, + CHAIN_IDS.MAINNET, SWAPS_TESTNET_CHAIN_ID, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - AVALANCHE_CHAIN_ID, + CHAIN_IDS.BSC, + CHAIN_IDS.POLYGON, + CHAIN_IDS.AVALANCHE, ]; export const ALLOWED_DEV_SWAPS_CHAIN_IDS = [ ...ALLOWED_PROD_SWAPS_CHAIN_IDS, - GOERLI_CHAIN_ID, + CHAIN_IDS.GOERLI, ]; export const ALLOWED_SMART_TRANSACTIONS_CHAIN_IDS = [ - MAINNET_CHAIN_ID, - GOERLI_CHAIN_ID, + CHAIN_IDS.MAINNET, + CHAIN_IDS.GOERLI, ]; export const SWAPS_CHAINID_CONTRACT_ADDRESS_MAP = { - [MAINNET_CHAIN_ID]: MAINNET_CONTRACT_ADDRESS, + [CHAIN_IDS.MAINNET]: MAINNET_CONTRACT_ADDRESS, [SWAPS_TESTNET_CHAIN_ID]: TESTNET_CONTRACT_ADDRESS, - [BSC_CHAIN_ID]: BSC_CONTRACT_ADDRESS, - [POLYGON_CHAIN_ID]: POLYGON_CONTRACT_ADDRESS, - [GOERLI_CHAIN_ID]: TESTNET_CONTRACT_ADDRESS, - [AVALANCHE_CHAIN_ID]: AVALANCHE_CONTRACT_ADDRESS, + [CHAIN_IDS.BSC]: BSC_CONTRACT_ADDRESS, + [CHAIN_IDS.POLYGON]: POLYGON_CONTRACT_ADDRESS, + [CHAIN_IDS.GOERLI]: TESTNET_CONTRACT_ADDRESS, + [CHAIN_IDS.AVALANCHE]: AVALANCHE_CONTRACT_ADDRESS, }; export const SWAPS_WRAPPED_TOKENS_ADDRESSES = { - [MAINNET_CHAIN_ID]: WETH_CONTRACT_ADDRESS, + [CHAIN_IDS.MAINNET]: WETH_CONTRACT_ADDRESS, [SWAPS_TESTNET_CHAIN_ID]: WETH_CONTRACT_ADDRESS, - [BSC_CHAIN_ID]: WBNB_CONTRACT_ADDRESS, - [POLYGON_CHAIN_ID]: WMATIC_CONTRACT_ADDRESS, - [GOERLI_CHAIN_ID]: WETH_GOERLI_CONTRACT_ADDRESS, - [AVALANCHE_CHAIN_ID]: WAVAX_CONTRACT_ADDRESS, + [CHAIN_IDS.BSC]: WBNB_CONTRACT_ADDRESS, + [CHAIN_IDS.POLYGON]: WMATIC_CONTRACT_ADDRESS, + [CHAIN_IDS.GOERLI]: WETH_GOERLI_CONTRACT_ADDRESS, + [CHAIN_IDS.AVALANCHE]: WAVAX_CONTRACT_ADDRESS, }; export const ALLOWED_CONTRACT_ADDRESSES = { - [MAINNET_CHAIN_ID]: [ - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[MAINNET_CHAIN_ID], - SWAPS_WRAPPED_TOKENS_ADDRESSES[MAINNET_CHAIN_ID], + [CHAIN_IDS.MAINNET]: [ + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.MAINNET], + SWAPS_WRAPPED_TOKENS_ADDRESSES[CHAIN_IDS.MAINNET], ], [SWAPS_TESTNET_CHAIN_ID]: [ SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[SWAPS_TESTNET_CHAIN_ID], SWAPS_WRAPPED_TOKENS_ADDRESSES[SWAPS_TESTNET_CHAIN_ID], ], - [GOERLI_CHAIN_ID]: [ - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[GOERLI_CHAIN_ID], - SWAPS_WRAPPED_TOKENS_ADDRESSES[GOERLI_CHAIN_ID], + [CHAIN_IDS.GOERLI]: [ + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.GOERLI], + SWAPS_WRAPPED_TOKENS_ADDRESSES[CHAIN_IDS.GOERLI], ], - [BSC_CHAIN_ID]: [ - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[BSC_CHAIN_ID], - SWAPS_WRAPPED_TOKENS_ADDRESSES[BSC_CHAIN_ID], + [CHAIN_IDS.BSC]: [ + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.BSC], + SWAPS_WRAPPED_TOKENS_ADDRESSES[CHAIN_IDS.BSC], ], - [POLYGON_CHAIN_ID]: [ - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[POLYGON_CHAIN_ID], - SWAPS_WRAPPED_TOKENS_ADDRESSES[POLYGON_CHAIN_ID], + [CHAIN_IDS.POLYGON]: [ + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.POLYGON], + SWAPS_WRAPPED_TOKENS_ADDRESSES[CHAIN_IDS.POLYGON], ], - [AVALANCHE_CHAIN_ID]: [ - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[AVALANCHE_CHAIN_ID], - SWAPS_WRAPPED_TOKENS_ADDRESSES[AVALANCHE_CHAIN_ID], + [CHAIN_IDS.AVALANCHE]: [ + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.AVALANCHE], + SWAPS_WRAPPED_TOKENS_ADDRESSES[CHAIN_IDS.AVALANCHE], ], }; export const SWAPS_CHAINID_DEFAULT_TOKEN_MAP = { - [MAINNET_CHAIN_ID]: ETH_SWAPS_TOKEN_OBJECT, + [CHAIN_IDS.MAINNET]: ETH_SWAPS_TOKEN_OBJECT, [SWAPS_TESTNET_CHAIN_ID]: TEST_ETH_SWAPS_TOKEN_OBJECT, - [BSC_CHAIN_ID]: BNB_SWAPS_TOKEN_OBJECT, - [POLYGON_CHAIN_ID]: MATIC_SWAPS_TOKEN_OBJECT, - [GOERLI_CHAIN_ID]: GOERLI_SWAPS_TOKEN_OBJECT, - [AVALANCHE_CHAIN_ID]: AVAX_SWAPS_TOKEN_OBJECT, + [CHAIN_IDS.BSC]: BNB_SWAPS_TOKEN_OBJECT, + [CHAIN_IDS.POLYGON]: MATIC_SWAPS_TOKEN_OBJECT, + [CHAIN_IDS.GOERLI]: GOERLI_SWAPS_TOKEN_OBJECT, + [CHAIN_IDS.AVALANCHE]: AVAX_SWAPS_TOKEN_OBJECT, }; export const SWAPS_CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP = { - [BSC_CHAIN_ID]: BSC_DEFAULT_BLOCK_EXPLORER_URL, - [MAINNET_CHAIN_ID]: MAINNET_DEFAULT_BLOCK_EXPLORER_URL, - [POLYGON_CHAIN_ID]: POLYGON_DEFAULT_BLOCK_EXPLORER_URL, - [GOERLI_CHAIN_ID]: GOERLI_DEFAULT_BLOCK_EXPLORER_URL, - [AVALANCHE_CHAIN_ID]: AVALANCHE_DEFAULT_BLOCK_EXPLORER_URL, + [CHAIN_IDS.BSC]: BSC_DEFAULT_BLOCK_EXPLORER_URL, + [CHAIN_IDS.MAINNET]: MAINNET_DEFAULT_BLOCK_EXPLORER_URL, + [CHAIN_IDS.POLYGON]: POLYGON_DEFAULT_BLOCK_EXPLORER_URL, + [CHAIN_IDS.GOERLI]: GOERLI_DEFAULT_BLOCK_EXPLORER_URL, + [CHAIN_IDS.AVALANCHE]: AVALANCHE_DEFAULT_BLOCK_EXPLORER_URL, }; export const ETHEREUM = 'ethereum'; diff --git a/shared/modules/network.utils.js b/shared/modules/network.utils.js index eaa7148a3..05723b3ac 100644 --- a/shared/modules/network.utils.js +++ b/shared/modules/network.utils.js @@ -1,10 +1,4 @@ -import { - MAX_SAFE_CHAIN_ID, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - AVALANCHE_CHAIN_ID, - MAINNET_CHAIN_ID, -} from '../constants/network'; +import { CHAIN_IDS, MAX_SAFE_CHAIN_ID } from '../constants/network'; /** * Checks whether the given number primitive chain ID is safe. @@ -43,10 +37,10 @@ export function isPrefixedFormattedHexString(value) { */ export function isTokenDetectionEnabledForNetwork(chainId) { switch (chainId) { - case MAINNET_CHAIN_ID: - case BSC_CHAIN_ID: - case POLYGON_CHAIN_ID: - case AVALANCHE_CHAIN_ID: + case CHAIN_IDS.MAINNET: + case CHAIN_IDS.BSC: + case CHAIN_IDS.POLYGON: + case CHAIN_IDS.AVALANCHE: return true; default: return false; diff --git a/test/jest/mock-store.js b/test/jest/mock-store.js index 2595746c0..54345e831 100644 --- a/test/jest/mock-store.js +++ b/test/jest/mock-store.js @@ -1,4 +1,4 @@ -import { MAINNET_CHAIN_ID } from '../../shared/constants/network'; +import { CHAIN_IDS } from '../../shared/constants/network'; const createGetSmartTransactionFeesApiResponse = () => { return { @@ -128,10 +128,10 @@ export const createSwapsMockStore = () => { }, }, provider: { - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, }, cachedBalances: { - [MAINNET_CHAIN_ID]: 5, + [CHAIN_IDS.MAINNET]: 5, }, preferences: { showFiatInTestnets: true, @@ -408,7 +408,7 @@ export const createSwapsMockStore = () => { liveness: true, fees: createGetSmartTransactionFeesApiResponse(), smartTransactions: { - [MAINNET_CHAIN_ID]: [ + [CHAIN_IDS.MAINNET]: [ { uuid: 'uuid2', status: 'success', diff --git a/ui/components/app/alerts/unconnected-account-alert/unconnected-account-alert.test.js b/ui/components/app/alerts/unconnected-account-alert/unconnected-account-alert.test.js index cc5f64a9f..00edd64a5 100644 --- a/ui/components/app/alerts/unconnected-account-alert/unconnected-account-alert.test.js +++ b/ui/components/app/alerts/unconnected-account-alert/unconnected-account-alert.test.js @@ -10,7 +10,7 @@ import { tick } from '../../../../../test/lib/tick'; import { renderWithProvider } from '../../../../../test/lib/render-helpers'; import * as actions from '../../../../store/actions'; -import { KOVAN_CHAIN_ID } from '../../../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../../../shared/constants/network'; import UnconnectedAccountAlert from '.'; describe('Unconnected Account Alert', () => { @@ -39,7 +39,7 @@ describe('Unconnected Account Alert', () => { }; const cachedBalances = { - [KOVAN_CHAIN_ID]: { + [CHAIN_IDS]: { '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': '0x0', '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': '0x0', }, @@ -63,7 +63,7 @@ describe('Unconnected Account Alert', () => { cachedBalances, keyrings, provider: { - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS, }, permissionHistory: { 'https://test.dapp': { diff --git a/ui/components/app/collectible-details/collectible-details.js b/ui/components/app/collectible-details/collectible-details.js index b50dd6062..d4670c15a 100644 --- a/ui/components/app/collectible-details/collectible-details.js +++ b/ui/components/app/collectible-details/collectible-details.js @@ -33,14 +33,7 @@ import { checkAndUpdateSingleCollectibleOwnershipStatus, removeAndIgnoreCollectible, } from '../../../store/actions'; -import { - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, - POLYGON_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, -} from '../../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../../shared/constants/network'; import { getEnvironmentType } from '../../../../app/scripts/lib/util'; import { ENVIRONMENT_TYPE_POPUP } from '../../../../shared/constants/app'; import CollectibleOptions from '../collectible-options/collectible-options'; @@ -99,14 +92,14 @@ export default function CollectibleDetails({ collectible }) { const getOpenSeaLink = () => { switch (currentNetwork) { - case MAINNET_CHAIN_ID: + case CHAIN_IDS.MAINNET: return `https://opensea.io/assets/${address}/${tokenId}`; - case POLYGON_CHAIN_ID: + case CHAIN_IDS.POLYGON: return `https://opensea.io/assets/matic/${address}/${tokenId}`; - case GOERLI_CHAIN_ID: - case KOVAN_CHAIN_ID: - case ROPSTEN_CHAIN_ID: - case RINKEBY_CHAIN_ID: + case CHAIN_IDS.GOERLI: + case CHAIN_IDS.KOVAN: + case CHAIN_IDS.ROPSTEN: + case CHAIN_IDS.RINKEBY: return `https://testnets.opensea.io/assets/${address}/${tokenId}`; default: return null; diff --git a/ui/components/app/dropdowns/network-dropdown.js b/ui/components/app/dropdowns/network-dropdown.js index c6b89fe5e..5eb0ae4b8 100644 --- a/ui/components/app/dropdowns/network-dropdown.js +++ b/ui/components/app/dropdowns/network-dropdown.js @@ -7,8 +7,8 @@ import Button from '../../ui/button'; import * as actions from '../../../store/actions'; import { openAlert as displayInvalidCustomNetworkAlert } from '../../../ducks/alerts/invalid-custom-network'; import { - NETWORK_TYPE_RPC, LOCALHOST_RPC_URL, + NETWORK_TYPES, } from '../../../../shared/constants/network'; import { isPrefixedFormattedHexString } from '../../../../shared/modules/network.utils'; @@ -152,7 +152,7 @@ class NetworkDropdown extends Component { return reversedRpcListDetail.map((entry) => { const { rpcUrl, chainId, ticker = 'ETH', nickname = '' } = entry; const isCurrentRpcTarget = - provider.type === NETWORK_TYPE_RPC && rpcUrl === provider.rpcUrl; + provider.type === NETWORK_TYPES.RPC && rpcUrl === provider.rpcUrl; return ( ({ const render = () => { const store = configureStore({ metamask: { - provider: { chainId: MAINNET_CHAIN_ID }, + provider: { chainId: CHAIN_IDS.MAINNET }, cachedBalances: {}, accounts: { '0xAddress': { diff --git a/ui/components/app/loading-network-screen/loading-network-screen.container.js b/ui/components/app/loading-network-screen/loading-network-screen.container.js index 2f1e711ce..e243c011e 100644 --- a/ui/components/app/loading-network-screen/loading-network-screen.container.js +++ b/ui/components/app/loading-network-screen/loading-network-screen.container.js @@ -1,5 +1,5 @@ import { connect } from 'react-redux'; -import { NETWORK_TYPE_RPC } from '../../../../shared/constants/network'; +import { NETWORK_TYPES } from '../../../../shared/constants/network'; import * as actions from '../../../store/actions'; import { getNetworkIdentifier, isNetworkLoading } from '../../../selectors'; import LoadingNetworkScreen from './loading-network-screen.component'; @@ -10,7 +10,7 @@ const mapStateToProps = (state) => { const { rpcUrl, chainId, ticker, nickname, type } = provider; const setProviderArgs = - type === NETWORK_TYPE_RPC + type === NETWORK_TYPES.RPC ? [rpcUrl, chainId, ticker, nickname] : [provider.type]; diff --git a/ui/components/app/menu-bar/menu-bar.test.js b/ui/components/app/menu-bar/menu-bar.test.js index 4a958407a..d3a5a39a1 100644 --- a/ui/components/app/menu-bar/menu-bar.test.js +++ b/ui/components/app/menu-bar/menu-bar.test.js @@ -2,14 +2,14 @@ import React from 'react'; import configureStore from 'redux-mock-store'; import { fireEvent, screen, waitFor } from '@testing-library/react'; import { renderWithProvider } from '../../../../test/lib/render-helpers'; -import { ROPSTEN_CHAIN_ID } from '../../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../../shared/constants/network'; import MenuBar from './menu-bar'; const initState = { activeTab: {}, metamask: { provider: { - chainId: ROPSTEN_CHAIN_ID, + chainId: CHAIN_IDS.ROPSTEN, }, selectedAddress: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', identities: { diff --git a/ui/components/app/network-display/network-display.js b/ui/components/app/network-display/network-display.js index 63af71f90..47e59e4a6 100644 --- a/ui/components/app/network-display/network-display.js +++ b/ui/components/app/network-display/network-display.js @@ -3,8 +3,8 @@ import PropTypes from 'prop-types'; import classnames from 'classnames'; import { useSelector } from 'react-redux'; import { - NETWORK_TYPE_RPC, - NETWORK_TYPE_TO_ID_MAP, + NETWORK_TYPES, + BUILT_IN_NETWORKS, } from '../../../../shared/constants/network'; import LoadingIndicator from '../../ui/loading-indicator'; @@ -48,12 +48,14 @@ export default function NetworkDisplay({ > { const targetNetworkArr = [ - ...Object.keys(NETWORK_TYPE_TO_ID_MAP), - NETWORK_TYPE_RPC, + ...Object.keys(BUILT_IN_NETWORKS), + NETWORK_TYPES.RPC, ]; return ( <> @@ -72,8 +72,8 @@ export const TargetNetwork = (args) => { export const DisplayOnly = (args) => { const targetNetworkArr = [ - ...Object.keys(NETWORK_TYPE_TO_ID_MAP), - NETWORK_TYPE_RPC, + ...Object.keys(BUILT_IN_NETWORKS), + NETWORK_TYPES.RPC, ]; return ( <> diff --git a/ui/components/app/transaction-activity-log/transaction-activity-log.util.test.js b/ui/components/app/transaction-activity-log/transaction-activity-log.util.test.js index 2cf586a0e..a6fd624b2 100644 --- a/ui/components/app/transaction-activity-log/transaction-activity-log.util.test.js +++ b/ui/components/app/transaction-activity-log/transaction-activity-log.util.test.js @@ -1,8 +1,5 @@ import { GAS_LIMITS } from '../../../../shared/constants/gas'; -import { - ROPSTEN_CHAIN_ID, - ROPSTEN_NETWORK_ID, -} from '../../../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_IDS } from '../../../../shared/constants/network'; import { TRANSACTION_STATUSES, TRANSACTION_TYPES, @@ -27,8 +24,8 @@ describe('TransactionActivityLog utils', () => { id: 6400627574331058, time: 1543958845581, status: TRANSACTION_STATUSES.UNAPPROVED, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, loadingDefaults: true, txParams: { from: '0x50a9d56c2b8ba9a5c7f2c08c3d26e0499f23a706', @@ -75,8 +72,8 @@ describe('TransactionActivityLog utils', () => { ], id: 6400627574331058, loadingDefaults: false, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.DROPPED, submittedTime: 1543958848135, time: 1543958845581, @@ -97,8 +94,8 @@ describe('TransactionActivityLog utils', () => { id: 6400627574331060, time: 1543958857697, status: TRANSACTION_STATUSES.UNAPPROVED, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, loadingDefaults: false, txParams: { from: '0x50a9d56c2b8ba9a5c7f2c08c3d26e0499f23a706', @@ -168,8 +165,8 @@ describe('TransactionActivityLog utils', () => { id: 6400627574331060, lastGasPrice: '0x4190ab00', loadingDefaults: false, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.CONFIRMED, submittedTime: 1543958860054, time: 1543958857697, @@ -191,8 +188,8 @@ describe('TransactionActivityLog utils', () => { const expected = [ { id: 6400627574331058, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, hash: '0xa14f13d36b3901e352ce3a7acb9b47b001e5a3370f06232a0953c6fc6fad91b3', eventKey: 'transactionCreated', timestamp: 1543958845581, @@ -200,8 +197,8 @@ describe('TransactionActivityLog utils', () => { }, { id: 6400627574331058, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, hash: '0xa14f13d36b3901e352ce3a7acb9b47b001e5a3370f06232a0953c6fc6fad91b3', eventKey: 'transactionSubmitted', timestamp: 1543958848147, @@ -209,8 +206,8 @@ describe('TransactionActivityLog utils', () => { }, { id: 6400627574331060, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, hash: '0xecbe181ee67c4291d04a7cb9ffbf1d5d831e4fbaa89994fd06bab5dd4cc79b33', eventKey: 'transactionResubmitted', timestamp: 1543958860061, @@ -218,8 +215,8 @@ describe('TransactionActivityLog utils', () => { }, { id: 6400627574331060, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, hash: '0xecbe181ee67c4291d04a7cb9ffbf1d5d831e4fbaa89994fd06bab5dd4cc79b33', eventKey: 'transactionConfirmed', timestamp: 1543958897165, @@ -256,8 +253,8 @@ describe('TransactionActivityLog utils', () => { { id: 5559712943815343, loadingDefaults: true, - metamaskNetworkId: ROPSTEN_NETWORK_ID, - chainId: ROPSTEN_CHAIN_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, + chainId: CHAIN_IDS.ROPSTEN, status: TRANSACTION_STATUSES.UNAPPROVED, time: 1535507561452, txParams: { @@ -397,8 +394,8 @@ describe('TransactionActivityLog utils', () => { value: '0x2386f26fc10000', }, hash: '0xabc', - chainId: ROPSTEN_CHAIN_ID, - metamaskNetworkId: ROPSTEN_NETWORK_ID, + chainId: CHAIN_IDS.ROPSTEN, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, }; const expectedResult = [ @@ -408,8 +405,8 @@ describe('TransactionActivityLog utils', () => { value: '0x2386f26fc10000', id: 1, hash: '0xabc', - chainId: ROPSTEN_CHAIN_ID, - metamaskNetworkId: ROPSTEN_NETWORK_ID, + chainId: CHAIN_IDS.ROPSTEN, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, }, { eventKey: 'transactionSubmitted', @@ -417,8 +414,8 @@ describe('TransactionActivityLog utils', () => { value: '0x2632e314a000', id: 1, hash: '0xabc', - chainId: ROPSTEN_CHAIN_ID, - metamaskNetworkId: ROPSTEN_NETWORK_ID, + chainId: CHAIN_IDS.ROPSTEN, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, }, { eventKey: 'transactionConfirmed', @@ -426,8 +423,8 @@ describe('TransactionActivityLog utils', () => { value: '0x2632e314a000', id: 1, hash: '0xabc', - chainId: ROPSTEN_CHAIN_ID, - metamaskNetworkId: ROPSTEN_NETWORK_ID, + chainId: CHAIN_IDS.ROPSTEN, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, }, ]; diff --git a/ui/components/ui/new-network-info/new-network-info.js b/ui/components/ui/new-network-info/new-network-info.js index e8817c775..79dcb8fe3 100644 --- a/ui/components/ui/new-network-info/new-network-info.js +++ b/ui/components/ui/new-network-info/new-network-info.js @@ -5,7 +5,6 @@ import { I18nContext } from '../../../contexts/i18n'; import Popover from '../popover'; import Button from '../button'; import Identicon from '../identicon/identicon.component'; -import { NETWORK_TYPE_RPC } from '../../../../shared/constants/network'; import Box from '../box'; import { ALIGN_ITEMS, @@ -26,6 +25,7 @@ import { import { IMPORT_TOKEN_ROUTE } from '../../../helpers/constants/routes'; import Chip from '../chip/chip'; import { setFirstTimeUsedNetwork } from '../../../store/actions'; +import { NETWORK_TYPES } from '../../../../shared/constants/network'; const NewNetworkInfo = () => { const t = useContext(I18nContext); @@ -92,7 +92,7 @@ const NewNetworkInfo = () => { backgroundColor={COLORS.BACKGROUND_ALTERNATIVE} maxContent={false} label={ - currentProvider.type === NETWORK_TYPE_RPC + currentProvider.type === NETWORK_TYPES.RPC ? currentProvider.nickname ?? t('privateNetwork') : t(currentProvider.type) } diff --git a/ui/ducks/confirm-transaction/confirm-transaction.duck.test.js b/ui/ducks/confirm-transaction/confirm-transaction.duck.test.js index f4ef16303..f25c9f3ab 100644 --- a/ui/ducks/confirm-transaction/confirm-transaction.duck.test.js +++ b/ui/ducks/confirm-transaction/confirm-transaction.duck.test.js @@ -1,10 +1,7 @@ import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; import sinon from 'sinon'; -import { - ROPSTEN_CHAIN_ID, - ROPSTEN_NETWORK_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_IDS } from '../../../shared/constants/network'; import { TRANSACTION_STATUSES } from '../../../shared/constants/transaction'; import ConfirmTransactionReducer, * as actions from './confirm-transaction.duck'; @@ -278,7 +275,7 @@ describe('Confirm Transaction Duck', () => { history: [], id: 2603411941761054, loadingDefaults: false, - metamaskNetworkId: ROPSTEN_NETWORK_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, origin: 'faucet.metamask.io', status: TRANSACTION_STATUSES.UNAPPROVED, time: 1530838113716, @@ -344,16 +341,16 @@ describe('Confirm Transaction Duck', () => { metamask: { conversionRate: 468.58, currentCurrency: 'usd', - network: ROPSTEN_NETWORK_ID, + network: NETWORK_IDS.ROPSTEN, provider: { - chainId: ROPSTEN_CHAIN_ID, + chainId: CHAIN_IDS.ROPSTEN, }, unapprovedTxs: { 2603411941761054: { history: [], id: 2603411941761054, loadingDefaults: false, - metamaskNetworkId: ROPSTEN_NETWORK_ID, + metamaskNetworkId: NETWORK_IDS.ROPSTEN, origin: 'faucet.metamask.io', status: TRANSACTION_STATUSES.UNAPPROVED, time: 1530838113716, diff --git a/ui/ducks/ens.js b/ui/ducks/ens.js index b2256d80b..3d8d3cc35 100644 --- a/ui/ducks/ens.js +++ b/ui/ducks/ens.js @@ -8,7 +8,7 @@ import { ethers } from 'ethers'; import { getCurrentChainId } from '../selectors'; import { CHAIN_ID_TO_NETWORK_ID_MAP, - MAINNET_NETWORK_ID, + NETWORK_IDS, NETWORK_ID_TO_ETHERS_NETWORK_NAME_MAP, } from '../../shared/constants/network'; import { @@ -62,7 +62,7 @@ const slice = createSlice({ error.message === 'ENS name not defined.' ) { state.error = - network === MAINNET_NETWORK_ID + network === NETWORK_IDS.MAINNET ? ENS_NO_ADDRESS_FOR_NAME : ENS_NOT_FOUND_ON_NETWORK; } else if (error.message === 'Illegal character for ENS.') { diff --git a/ui/ducks/metamask/metamask.js b/ui/ducks/metamask/metamask.js index a76ecddf2..22b3db44b 100644 --- a/ui/ducks/metamask/metamask.js +++ b/ui/ducks/metamask/metamask.js @@ -5,7 +5,7 @@ import { GAS_ESTIMATE_TYPES, NETWORK_CONGESTION_THRESHOLDS, } from '../../../shared/constants/gas'; -import { NETWORK_TYPE_RPC } from '../../../shared/constants/network'; +import { NETWORK_TYPES } from '../../../shared/constants/network'; import { accountsWithSendEtherInfoSelector, checkNetworkAndAccountSupports1559, @@ -65,7 +65,7 @@ export default function reduceMetamask(state = {}, action) { return { ...metamaskState, provider: { - type: NETWORK_TYPE_RPC, + type: NETWORK_TYPES.RPC, rpcUrl: action.value, }, }; diff --git a/ui/ducks/send/send.test.js b/ui/ducks/send/send.test.js index d6c1b428a..ce24e0f25 100644 --- a/ui/ducks/send/send.test.js +++ b/ui/ducks/send/send.test.js @@ -10,10 +10,7 @@ import { KNOWN_RECIPIENT_ADDRESS_WARNING, NEGATIVE_ETH_ERROR, } from '../../pages/send/send.constants'; -import { - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import { GAS_ESTIMATE_TYPES, GAS_LIMITS } from '../../../shared/constants/gas'; import { ASSET_TYPES, @@ -1577,10 +1574,10 @@ describe('Send Slice', () => { blockGasLimit: '', selectedAddress: '', provider: { - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, }, cachedBalances: { - [RINKEBY_CHAIN_ID]: { + [CHAIN_IDS.RINKEBY]: { '0xAddress': '0x0', }, }, @@ -2169,7 +2166,7 @@ describe('Send Slice', () => { }, metamask: { provider: { - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, }, }, }; @@ -2218,7 +2215,7 @@ describe('Send Slice', () => { }, metamask: { provider: { - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, }, }, }; @@ -2376,11 +2373,11 @@ describe('Send Slice', () => { gasEstimateType: GAS_ESTIMATE_TYPES.NONE, gasFeeEstimates: {}, provider: { - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, }, tokens: [], addressBook: { - [RINKEBY_CHAIN_ID]: {}, + [CHAIN_IDS.RINKEBY]: {}, }, identities: {}, accounts: { @@ -2390,7 +2387,7 @@ describe('Send Slice', () => { }, }, cachedBalances: { - [RINKEBY_CHAIN_ID]: { + [CHAIN_IDS.RINKEBY]: { '0xAddress': '0x0', }, }, @@ -2511,11 +2508,11 @@ describe('Send Slice', () => { blockGasLimit: '0x3a98', selectedAddress: '', provider: { - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, }, tokens: [], addressBook: { - [RINKEBY_CHAIN_ID]: {}, + [CHAIN_IDS.RINKEBY]: {}, }, identities: {}, accounts: { @@ -2525,7 +2522,7 @@ describe('Send Slice', () => { }, }, cachedBalances: { - [RINKEBY_CHAIN_ID]: { + [CHAIN_IDS.RINKEBY]: { '0xAddress': '0x0', }, }, @@ -2685,7 +2682,7 @@ describe('Send Slice', () => { blockGasLimit: '0x3a98', selectedAddress: '', provider: { - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, }, tokens: [ { @@ -2700,7 +2697,7 @@ describe('Send Slice', () => { }, }, addressBook: { - [RINKEBY_CHAIN_ID]: {}, + [CHAIN_IDS.RINKEBY]: {}, }, identities: {}, accounts: { @@ -2710,7 +2707,7 @@ describe('Send Slice', () => { }, }, cachedBalances: { - [RINKEBY_CHAIN_ID]: { + [CHAIN_IDS.RINKEBY]: { '0xAddress': '0x0', }, }, @@ -2915,7 +2912,7 @@ describe('Send Slice', () => { expect( getGasInputMode({ metamask: { - provider: { chainId: MAINNET_CHAIN_ID }, + provider: { chainId: CHAIN_IDS.MAINNET }, featureFlags: { advancedInlineGas: false }, }, send: initialState, @@ -2941,7 +2938,7 @@ describe('Send Slice', () => { expect( getGasInputMode({ metamask: { - provider: { chainId: MAINNET_CHAIN_ID }, + provider: { chainId: CHAIN_IDS.MAINNET }, featureFlags: { advancedInlineGas: true }, }, send: initialState, @@ -2953,7 +2950,7 @@ describe('Send Slice', () => { expect( getGasInputMode({ metamask: { - provider: { chainId: MAINNET_CHAIN_ID }, + provider: { chainId: CHAIN_IDS.MAINNET }, featureFlags: { advancedInlineGas: false }, gasEstimateType: GAS_ESTIMATE_TYPES.ETH_GASPRICE, }, @@ -2967,7 +2964,7 @@ describe('Send Slice', () => { expect( getGasInputMode({ metamask: { - provider: { chainId: MAINNET_CHAIN_ID }, + provider: { chainId: CHAIN_IDS.MAINNET }, featureFlags: { advancedInlineGas: false }, gasEstimateType: GAS_ESTIMATE_TYPES.ETH_GASPRICE, }, @@ -2981,7 +2978,7 @@ describe('Send Slice', () => { expect( getGasInputMode({ metamask: { - provider: { chainId: MAINNET_CHAIN_ID }, + provider: { chainId: CHAIN_IDS.MAINNET }, featureFlags: { advancedInlineGas: true }, }, send: { diff --git a/ui/ducks/swaps/swaps.test.js b/ui/ducks/swaps/swaps.test.js index 595782a2e..d7142d3ca 100644 --- a/ui/ducks/swaps/swaps.test.js +++ b/ui/ducks/swaps/swaps.test.js @@ -3,12 +3,7 @@ import nock from 'nock'; import { MOCKS, createSwapsMockStore } from '../../../test/jest'; import { setSwapsLiveness, setSwapsFeatureFlags } from '../../store/actions'; import { setStorageItem } from '../../helpers/utils/storage-helpers'; -import { - MAINNET_CHAIN_ID, - GOERLI_CHAIN_ID, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import * as swaps from './swaps'; jest.mock('../../store/actions.js', () => ({ @@ -270,19 +265,19 @@ describe('Ducks - Swaps', () => { it('returns false if feature flag is enabled, not a HW and is Polygon network', () => { const state = createSwapsMockStore(); - state.metamask.provider.chainId = POLYGON_CHAIN_ID; + state.metamask.provider.chainId = CHAIN_IDS.POLYGON; expect(swaps.getSmartTransactionsEnabled(state)).toBe(false); }); it('returns false if feature flag is enabled, not a HW and is BSC network', () => { const state = createSwapsMockStore(); - state.metamask.provider.chainId = BSC_CHAIN_ID; + state.metamask.provider.chainId = CHAIN_IDS.BSC; expect(swaps.getSmartTransactionsEnabled(state)).toBe(false); }); it('returns true if feature flag is enabled, not a HW and is Goerli network', () => { const state = createSwapsMockStore(); - state.metamask.provider.chainId = GOERLI_CHAIN_ID; + state.metamask.provider.chainId = CHAIN_IDS.GOERLI; expect(swaps.getSmartTransactionsEnabled(state)).toBe(true); }); @@ -305,7 +300,7 @@ describe('Ducks - Swaps', () => { const state = createSwapsMockStore(); expect(swaps.getCurrentSmartTransactions(state)).toMatchObject( state.metamask.smartTransactionsState.smartTransactions[ - MAINNET_CHAIN_ID + CHAIN_IDS.MAINNET ], ); }); diff --git a/ui/helpers/utils/tx-helper.test.js b/ui/helpers/utils/tx-helper.test.js index 75565a2d9..ba614a372 100644 --- a/ui/helpers/utils/tx-helper.test.js +++ b/ui/helpers/utils/tx-helper.test.js @@ -1,13 +1,10 @@ -import { - MAINNET_CHAIN_ID, - MAINNET_NETWORK_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_IDS } from '../../../shared/constants/network'; import txHelper from './tx-helper'; describe('txHelper', () => { it('always shows the oldest tx first', () => { - const metamaskNetworkId = MAINNET_NETWORK_ID; - const chainId = MAINNET_CHAIN_ID; + const metamaskNetworkId = NETWORK_IDS.MAINNET; + const chainId = CHAIN_IDS.MAINNET; const txs = { a: { metamaskNetworkId, time: 3 }, b: { metamaskNetworkId, time: 1 }, diff --git a/ui/helpers/utils/util.js b/ui/helpers/utils/util.js index 86aabc98f..8c22795af 100644 --- a/ui/helpers/utils/util.js +++ b/ui/helpers/utils/util.js @@ -6,14 +6,7 @@ import { DateTime } from 'luxon'; import { getFormattedIpfsUrl } from '@metamask/controllers/dist/util'; import slip44 from '@metamask/slip44'; import { addHexPrefix } from '../../../app/scripts/lib/util'; -import { - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - LOCALHOST_CHAIN_ID, - MAINNET_CHAIN_ID, - RINKEBY_CHAIN_ID, - ROPSTEN_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import { toChecksumHexAddress } from '../../../shared/modules/hexstring-utils'; import { TRUNCATED_ADDRESS_START_CHARS, @@ -52,12 +45,12 @@ export function formatDateWithYearContext( export function isDefaultMetaMaskChain(chainId) { if ( !chainId || - chainId === MAINNET_CHAIN_ID || - chainId === ROPSTEN_CHAIN_ID || - chainId === RINKEBY_CHAIN_ID || - chainId === KOVAN_CHAIN_ID || - chainId === GOERLI_CHAIN_ID || - chainId === LOCALHOST_CHAIN_ID + chainId === CHAIN_IDS.MAINNET || + chainId === CHAIN_IDS.ROPSTEN || + chainId === CHAIN_IDS.RINKEBY || + chainId === CHAIN_IDS.KOVAN || + chainId === CHAIN_IDS.GOERLI || + chainId === CHAIN_IDS.LOCALHOST ) { return true; } diff --git a/ui/hooks/useTokensToSearch.js b/ui/hooks/useTokensToSearch.js index 94434f309..4e98aaae9 100644 --- a/ui/hooks/useTokensToSearch.js +++ b/ui/hooks/useTokensToSearch.js @@ -17,17 +17,7 @@ import { getSwapsTokens } from '../ducks/swaps/swaps'; import { isSwapsDefaultTokenSymbol } from '../../shared/modules/swaps.utils'; import { toChecksumHexAddress } from '../../shared/modules/hexstring-utils'; import { TOKEN_BUCKET_PRIORITY } from '../../shared/constants/swaps'; -import { - ETH_SYMBOL, - MATIC_SYMBOL, - BNB_SYMBOL, - AVALANCHE_SYMBOL, - MAINNET_CHAIN_ID, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - AVALANCHE_CHAIN_ID, - GOERLI_CHAIN_ID, -} from '../../shared/constants/network'; +import { CHAIN_IDS, CURRENCY_SYMBOLS } from '../../shared/constants/network'; import { useEqualityCheck } from './useEqualityCheck'; export function getRenderableTokenData( @@ -68,14 +58,14 @@ export function getRenderableTokenData( : ''; const chainIdForTokenIcons = - chainId === GOERLI_CHAIN_ID ? MAINNET_CHAIN_ID : chainId; + chainId === CHAIN_IDS.GOERLI ? CHAIN_IDS.MAINNET : chainId; const tokenIconUrl = - (symbol === ETH_SYMBOL && chainId === MAINNET_CHAIN_ID) || - (symbol === ETH_SYMBOL && chainId === GOERLI_CHAIN_ID) || - (symbol === BNB_SYMBOL && chainId === BSC_CHAIN_ID) || - (symbol === MATIC_SYMBOL && chainId === POLYGON_CHAIN_ID) || - (symbol === AVALANCHE_SYMBOL && chainId === AVALANCHE_CHAIN_ID) + (symbol === CURRENCY_SYMBOLS.ETH && chainId === CHAIN_IDS.MAINNET) || + (symbol === CURRENCY_SYMBOLS.ETH && chainId === CHAIN_IDS.GOERLI) || + (symbol === CURRENCY_SYMBOLS.BNB && chainId === CHAIN_IDS.BSC) || + (symbol === CURRENCY_SYMBOLS.MATIC && chainId === CHAIN_IDS.POLYGON) || + (symbol === CURRENCY_SYMBOLS.AVALANCHE && chainId === CHAIN_IDS.AVALANCHE) ? iconUrl : formatIconUrlWithProxy({ chainId: chainIdForTokenIcons, diff --git a/ui/hooks/useTransactionDisplayData.test.js b/ui/hooks/useTransactionDisplayData.test.js index ec5d74d7d..8eb224e1b 100644 --- a/ui/hooks/useTransactionDisplayData.test.js +++ b/ui/hooks/useTransactionDisplayData.test.js @@ -14,7 +14,7 @@ import { getTokens, getNativeCurrency } from '../ducks/metamask/metamask'; import { getMessage } from '../helpers/utils/i18n-helper'; import messages from '../../app/_locales/en/messages.json'; import { ASSET_ROUTE, DEFAULT_ROUTE } from '../helpers/constants/routes'; -import { MAINNET_CHAIN_ID } from '../../shared/constants/network'; +import { CHAIN_IDS } from '../../shared/constants/network'; import { TRANSACTION_TYPES, TRANSACTION_GROUP_CATEGORIES, @@ -192,7 +192,7 @@ describe('useTransactionDisplayData', () => { } else if (selector === getCurrentCurrency) { return 'ETH'; } else if (selector === getCurrentChainId) { - return MAINNET_CHAIN_ID; + return CHAIN_IDS.MAINNET; } return null; }); diff --git a/ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.js b/ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.js index e7c2eb896..265920391 100644 --- a/ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.js +++ b/ui/pages/confirm-approve/confirm-approve-content/confirm-approve-content.component.js @@ -31,10 +31,7 @@ import { ERC20, ERC721, } from '../../../../shared/constants/transaction'; -import { - MAINNET_CHAIN_ID, - TEST_CHAINS, -} from '../../../../shared/constants/network'; +import { CHAIN_IDS, TEST_CHAINS } from '../../../../shared/constants/network'; export default class ConfirmApproveContent extends Component { static contextTypes = { @@ -466,7 +463,7 @@ export default class ConfirmApproveContent extends Component { const { t } = this.context; const useBlockExplorer = rpcPrefs?.blockExplorerUrl || - [...TEST_CHAINS, MAINNET_CHAIN_ID].includes(chainId); + [...TEST_CHAINS, CHAIN_IDS.MAINNET].includes(chainId); let titleTokenDescription = t('token'); const tokenIdWrapped = tokenId ? ` (#${tokenId})` : ''; diff --git a/ui/pages/send/send.test.js b/ui/pages/send/send.test.js index dc8a76628..2567604a8 100644 --- a/ui/pages/send/send.test.js +++ b/ui/pages/send/send.test.js @@ -5,7 +5,7 @@ import { useLocation } from 'react-router-dom'; import { SEND_STAGES, startNewDraftTransaction } from '../../ducks/send'; import { ensInitialState } from '../../ducks/ens'; import { renderWithProvider } from '../../../test/jest'; -import { RINKEBY_CHAIN_ID } from '../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../shared/constants/network'; import { GAS_ESTIMATE_TYPES } from '../../../shared/constants/gas'; import { INITIAL_SEND_STATE_FOR_EXISTING_DRAFT } from '../../../test/jest/mocks'; import Send from './send'; @@ -81,17 +81,17 @@ const baseStore = { }, currentCurrency: 'USD', provider: { - chainId: RINKEBY_CHAIN_ID, + chainId: CHAIN_IDS.RINKEBY, }, nativeCurrency: 'ETH', featureFlags: { sendHexData: false, }, addressBook: { - [RINKEBY_CHAIN_ID]: [], + [CHAIN_IDS.RINKEBY]: [], }, cachedBalances: { - [RINKEBY_CHAIN_ID]: {}, + [CHAIN_IDS.RINKEBY]: {}, }, accounts: { '0x0': { balance: '0x0', address: '0x0' }, diff --git a/ui/pages/settings/networks-tab/networks-form/networks-form.test.js b/ui/pages/settings/networks-tab/networks-form/networks-form.test.js index ebc2c8b02..43c92a83c 100644 --- a/ui/pages/settings/networks-tab/networks-form/networks-form.test.js +++ b/ui/pages/settings/networks-tab/networks-form/networks-form.test.js @@ -4,7 +4,10 @@ import { fireEvent, screen } from '@testing-library/react'; import nock from 'nock'; import { renderWithProvider } from '../../../../../test/jest/rendering'; import { defaultNetworksData } from '../networks-tab.constants'; -import { MAINNET, getRpcUrl } from '../../../../../shared/constants/network'; +import { + NETWORK_TYPES, + getRpcUrl, +} from '../../../../../shared/constants/network'; import NetworksForm from '.'; const renderComponent = (props) => { @@ -169,7 +172,10 @@ describe('NetworkForm Component', () => { await fireEvent.change(rpcUrlField, { target: { - value: getRpcUrl({ network: MAINNET, excludeProjectId: true }), + value: getRpcUrl({ + network: NETWORK_TYPES.MAINNET, + excludeProjectId: true, + }), }, }); diff --git a/ui/pages/settings/networks-tab/networks-list-item/networks-list-item.js b/ui/pages/settings/networks-tab/networks-list-item/networks-list-item.js index 243f594c5..acb067543 100644 --- a/ui/pages/settings/networks-tab/networks-list-item/networks-list-item.js +++ b/ui/pages/settings/networks-tab/networks-list-item/networks-list-item.js @@ -4,8 +4,8 @@ import classnames from 'classnames'; import { useDispatch, useSelector } from 'react-redux'; import { useI18nContext } from '../../../../hooks/useI18nContext'; import { - NETWORK_TYPE_RPC, CHAIN_ID_TO_NETWORK_IMAGE_URL_MAP, + NETWORK_TYPES, } from '../../../../../shared/constants/network'; import LockIcon from '../../../../components/ui/lock-icon'; import IconCheck from '../../../../components/ui/icon/icon-check'; @@ -41,7 +41,8 @@ const NetworksListItem = ({ const listItemNetworkIsSelected = selectedRpcUrl && selectedRpcUrl === rpcUrl; const listItemUrlIsProviderUrl = rpcUrl === provider.rpcUrl; const listItemTypeIsProviderNonRpcType = - provider.type !== NETWORK_TYPE_RPC && currentProviderType === provider.type; + provider.type !== NETWORK_TYPES.RPC && + currentProviderType === provider.type; const listItemNetworkIsCurrentProvider = !networkIsSelected && (listItemUrlIsProviderUrl || listItemTypeIsProviderNonRpcType); @@ -115,12 +116,12 @@ const NetworksListItem = ({ 'networks-tab__networks-list-name--selected': displayNetworkListItemAsSelected, 'networks-tab__networks-list-name--disabled': - currentProviderType !== NETWORK_TYPE_RPC && + currentProviderType !== NETWORK_TYPES.RPC && !displayNetworkListItemAsSelected, })} > {label || t(labelKey)} - {currentProviderType !== NETWORK_TYPE_RPC && ( + {currentProviderType !== NETWORK_TYPES.RPC && ( )} diff --git a/ui/pages/settings/networks-tab/networks-tab.constants.js b/ui/pages/settings/networks-tab/networks-tab.constants.js index 669a97839..7f2a078c2 100644 --- a/ui/pages/settings/networks-tab/networks-tab.constants.js +++ b/ui/pages/settings/networks-tab/networks-tab.constants.js @@ -1,63 +1,70 @@ import { - GOERLI, - GOERLI_CHAIN_ID, - KOVAN, - KOVAN_CHAIN_ID, - MAINNET, - MAINNET_CHAIN_ID, - RINKEBY, - RINKEBY_CHAIN_ID, - ROPSTEN, - ROPSTEN_CHAIN_ID, getRpcUrl, - ETH_SYMBOL, TEST_NETWORK_TICKER_MAP, + CURRENCY_SYMBOLS, + CHAIN_IDS, + NETWORK_TYPES, } from '../../../../shared/constants/network'; const defaultNetworksData = [ { - labelKey: MAINNET, + labelKey: NETWORK_TYPES.MAINNET, iconColor: '#29B6AF', - providerType: MAINNET, - rpcUrl: getRpcUrl({ network: MAINNET, excludeProjectId: true }), - chainId: MAINNET_CHAIN_ID, - ticker: ETH_SYMBOL, + providerType: NETWORK_TYPES.MAINNET, + rpcUrl: getRpcUrl({ + network: NETWORK_TYPES.MAINNET, + excludeProjectId: true, + }), + chainId: CHAIN_IDS.MAINNET, + ticker: CURRENCY_SYMBOLS.ETH, blockExplorerUrl: 'https://etherscan.io', }, { - labelKey: ROPSTEN, + labelKey: NETWORK_TYPES.ROPSTEN, iconColor: '#FF4A8D', - providerType: ROPSTEN, - rpcUrl: getRpcUrl({ network: ROPSTEN, excludeProjectId: true }), - chainId: ROPSTEN_CHAIN_ID, - ticker: TEST_NETWORK_TICKER_MAP[ROPSTEN], + providerType: NETWORK_TYPES.ROPSTEN, + rpcUrl: getRpcUrl({ + network: NETWORK_TYPES.ROPSTEN, + excludeProjectId: true, + }), + chainId: CHAIN_IDS.ROPSTEN, + ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.ROPSTEN], blockExplorerUrl: 'https://ropsten.etherscan.io', }, { - labelKey: RINKEBY, + labelKey: NETWORK_TYPES.RINKEBY, iconColor: '#F6C343', - providerType: RINKEBY, - rpcUrl: getRpcUrl({ network: RINKEBY, excludeProjectId: true }), - chainId: RINKEBY_CHAIN_ID, - ticker: TEST_NETWORK_TICKER_MAP[RINKEBY], + providerType: NETWORK_TYPES.RINKEBY, + rpcUrl: getRpcUrl({ + network: NETWORK_TYPES.RINKEBY, + excludeProjectId: true, + }), + chainId: CHAIN_IDS.RINKEBY, + ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.RINKEBY], blockExplorerUrl: 'https://rinkeby.etherscan.io', }, { - labelKey: GOERLI, + labelKey: NETWORK_TYPES.GOERLI, iconColor: '#3099f2', - providerType: GOERLI, - rpcUrl: getRpcUrl({ network: GOERLI, excludeProjectId: true }), - chainId: GOERLI_CHAIN_ID, - ticker: TEST_NETWORK_TICKER_MAP[GOERLI], + providerType: NETWORK_TYPES.GOERLI, + rpcUrl: getRpcUrl({ + network: NETWORK_TYPES.GOERLI, + excludeProjectId: true, + }), + chainId: CHAIN_IDS.GOERLI, + ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.GOERLI], blockExplorerUrl: 'https://goerli.etherscan.io', }, { - labelKey: KOVAN, + labelKey: NETWORK_TYPES.KOVAN, iconColor: '#9064FF', - providerType: KOVAN, - rpcUrl: getRpcUrl({ network: KOVAN, excludeProjectId: true }), - chainId: KOVAN_CHAIN_ID, - ticker: TEST_NETWORK_TICKER_MAP[KOVAN], + providerType: NETWORK_TYPES.KOVAN, + rpcUrl: getRpcUrl({ + network: NETWORK_TYPES.KOVAN, + excludeProjectId: true, + }), + chainId: CHAIN_IDS.KOVAN, + ticker: TEST_NETWORK_TICKER_MAP[NETWORK_TYPES.KOVAN], blockExplorerUrl: 'https://kovan.etherscan.io', }, ]; diff --git a/ui/pages/settings/networks-tab/networks-tab.js b/ui/pages/settings/networks-tab/networks-tab.js index 193684a20..a608139d6 100644 --- a/ui/pages/settings/networks-tab/networks-tab.js +++ b/ui/pages/settings/networks-tab/networks-tab.js @@ -20,7 +20,7 @@ import { getProvider, } from '../../../selectors'; import { - NETWORK_TYPE_RPC, + NETWORK_TYPES, TEST_CHAINS, } from '../../../../shared/constants/network'; import { defaultNetworksData } from './networks-tab.constants'; @@ -58,7 +58,7 @@ const NetworksTab = ({ addNewNetwork }) => { return { label: rpc.nickname, iconColor: 'var(--color-icon-alternative)', - providerType: NETWORK_TYPE_RPC, + providerType: NETWORK_TYPES.RPC, rpcUrl: rpc.rpcUrl, chainId: rpc.chainId, ticker: rpc.ticker, @@ -83,7 +83,7 @@ const NetworksTab = ({ addNewNetwork }) => { networksToRender.find((network) => { return ( network.rpcUrl === provider.rpcUrl || - (network.providerType !== NETWORK_TYPE_RPC && + (network.providerType !== NETWORK_TYPES.RPC && network.providerType === provider.type) ); }) || {}; diff --git a/ui/pages/swaps/fee-card/fee-card.js b/ui/pages/swaps/fee-card/fee-card.js index c2bb8c3b8..aeff7d89f 100644 --- a/ui/pages/swaps/fee-card/fee-card.js +++ b/ui/pages/swaps/fee-card/fee-card.js @@ -2,14 +2,7 @@ import React, { useContext } from 'react'; import PropTypes from 'prop-types'; import { I18nContext } from '../../../contexts/i18n'; import InfoTooltip from '../../../components/ui/info-tooltip'; -import { - MAINNET_CHAIN_ID, - BSC_CHAIN_ID, - LOCALHOST_CHAIN_ID, - POLYGON_CHAIN_ID, - GOERLI_CHAIN_ID, - AVALANCHE_CHAIN_ID, -} from '../../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../../shared/constants/network'; import TransactionDetail from '../../../components/app/transaction-detail/transaction-detail.component'; import TransactionDetailItem from '../../../components/app/transaction-detail-item/transaction-detail-item.component'; import Typography from '../../../components/ui/typography'; @@ -40,17 +33,17 @@ export default function FeeCard({ const getTranslatedNetworkName = () => { switch (chainId) { - case MAINNET_CHAIN_ID: + case CHAIN_IDS.MAINNET: return t('networkNameEthereum'); - case BSC_CHAIN_ID: + case CHAIN_IDS.BSC: return t('networkNameBSC'); - case POLYGON_CHAIN_ID: + case CHAIN_IDS.POLYGON: return t('networkNamePolygon'); - case LOCALHOST_CHAIN_ID: + case CHAIN_IDS.LOCALHOST: return t('networkNameTestnet'); - case GOERLI_CHAIN_ID: + case CHAIN_IDS.GOERLI: return t('networkNameGoerli'); - case AVALANCHE_CHAIN_ID: + case CHAIN_IDS.AVALANCHE: return t('networkNameAvalanche'); default: throw new Error('This network is not supported for token swaps'); diff --git a/ui/pages/swaps/fee-card/fee-card.stories.js b/ui/pages/swaps/fee-card/fee-card.stories.js index 45dfea10e..252eb233d 100644 --- a/ui/pages/swaps/fee-card/fee-card.stories.js +++ b/ui/pages/swaps/fee-card/fee-card.stories.js @@ -1,5 +1,5 @@ import React from 'react'; -import { MAINNET_CHAIN_ID } from '../../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../../shared/constants/network'; import FeeCard from './fee-card'; const containerStyle = { @@ -95,7 +95,7 @@ export default { tokenApprovalSourceTokenSymbol: 'ABC', metaMaskFee: '0.875', numberOfQuotes: 6, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, isBestQuote: true, }, }; diff --git a/ui/pages/swaps/fee-card/fee-card.test.js b/ui/pages/swaps/fee-card/fee-card.test.js index 0f571e8bd..364fd5a70 100644 --- a/ui/pages/swaps/fee-card/fee-card.test.js +++ b/ui/pages/swaps/fee-card/fee-card.test.js @@ -9,7 +9,7 @@ import { setBackgroundConnection, MOCKS, } from '../../../../test/jest'; -import { MAINNET_CHAIN_ID } from '../../../../shared/constants/network'; +import { CHAIN_IDS } from '../../../../shared/constants/network'; import { checkNetworkAndAccountSupports1559 } from '../../../selectors'; import { @@ -82,7 +82,7 @@ const createProps = (customProps = {}) => { numberOfQuotes: 6, onQuotesClick: jest.fn(), tokenConversionRate: 0.015, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, networkAndAccountSupports1559: false, supportsEIP1559V2: false, ...customProps, diff --git a/ui/pages/swaps/swaps.util.js b/ui/pages/swaps/swaps.util.js index 29ba98959..f2f7c5327 100644 --- a/ui/pages/swaps/swaps.util.js +++ b/ui/pages/swaps/swaps.util.js @@ -21,15 +21,7 @@ import { isSwapsDefaultTokenAddress, isSwapsDefaultTokenSymbol, } from '../../../shared/modules/swaps.utils'; -import { - MAINNET_CHAIN_ID, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - LOCALHOST_CHAIN_ID, - GOERLI_CHAIN_ID, - ETH_SYMBOL, - AVALANCHE_CHAIN_ID, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, CURRENCY_SYMBOLS } from '../../../shared/constants/network'; import { SECOND } from '../../../shared/constants/time'; import { calcTokenValue, @@ -82,11 +74,11 @@ const getBaseUrlForNewSwapsApi = (type, chainId) => { return `${v2ApiBaseUrl}/networks/${chainIdDecimal}`; }; -const TEST_CHAIN_IDS = [GOERLI_CHAIN_ID, LOCALHOST_CHAIN_ID]; +const TEST_CHAIN_IDS = [CHAIN_IDS.GOERLI, CHAIN_IDS.LOCALHOST]; -export const getBaseApi = function (type, chainId = MAINNET_CHAIN_ID) { +export const getBaseApi = function (type, chainId = CHAIN_IDS.MAINNET) { // eslint-disable-next-line no-param-reassign - chainId = TEST_CHAIN_IDS.includes(chainId) ? MAINNET_CHAIN_ID : chainId; + chainId = TEST_CHAIN_IDS.includes(chainId) ? CHAIN_IDS.MAINNET : chainId; const baseUrl = getBaseUrlForNewSwapsApi(type, chainId); const chainIdDecimal = chainId && parseInt(chainId, 16); if (!baseUrl) { @@ -509,7 +501,7 @@ export const getFeeForSmartTransaction = ({ const feeInWeiHex = decimalToHex(feeInWeiDec); const ethFee = getValueFromWeiHex({ value: feeInWeiHex, - toDenomination: ETH_SYMBOL, + toDenomination: CURRENCY_SYMBOLS.ETH, numberOfDecimals: 5, }); const rawNetworkFees = getValueFromWeiHex({ @@ -849,7 +841,7 @@ export function formatSwapsValueForDisplay(destinationAmount) { */ export const isContractAddressValid = ( contractAddress, - chainId = MAINNET_CHAIN_ID, + chainId = CHAIN_IDS.MAINNET, ) => { if (!contractAddress || !ALLOWED_CONTRACT_ADDRESSES[chainId]) { return false; @@ -868,15 +860,15 @@ export const isContractAddressValid = ( */ export const getNetworkNameByChainId = (chainId) => { switch (chainId) { - case MAINNET_CHAIN_ID: + case CHAIN_IDS.MAINNET: return ETHEREUM; - case BSC_CHAIN_ID: + case CHAIN_IDS.BSC: return BSC; - case POLYGON_CHAIN_ID: + case CHAIN_IDS.POLYGON: return POLYGON; - case GOERLI_CHAIN_ID: + case CHAIN_IDS.GOERLI: return GOERLI; - case AVALANCHE_CHAIN_ID: + case CHAIN_IDS.AVALANCHE: return AVALANCHE; default: return ''; @@ -892,8 +884,8 @@ export const getNetworkNameByChainId = (chainId) => { */ export const getSwapsLivenessForNetwork = (swapsFeatureFlags = {}, chainId) => { const networkName = getNetworkNameByChainId(chainId); - // Use old APIs for testnet and Goerli. - if ([LOCALHOST_CHAIN_ID, GOERLI_CHAIN_ID].includes(chainId)) { + // Use old APIs for testnet and Rinkeby. + if ([CHAIN_IDS.LOCALHOST, CHAIN_IDS.GOERLI].includes(chainId)) { return { swapsFeatureIsLive: true, }; diff --git a/ui/pages/swaps/swaps.util.test.js b/ui/pages/swaps/swaps.util.test.js index b99274b64..1f6e3c08b 100644 --- a/ui/pages/swaps/swaps.util.test.js +++ b/ui/pages/swaps/swaps.util.test.js @@ -1,15 +1,6 @@ import nock from 'nock'; import { MOCKS } from '../../../test/jest'; -import { - MAINNET_CHAIN_ID, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - LOCALHOST_CHAIN_ID, - GOERLI_CHAIN_ID, - KOVAN_CHAIN_ID, - AVALANCHE_CHAIN_ID, - ETH_SYMBOL, -} from '../../../shared/constants/network'; +import { CHAIN_IDS, CURRENCY_SYMBOLS } from '../../../shared/constants/network'; import { SWAPS_CHAINID_CONTRACT_ADDRESS_MAP, SWAPS_CHAINID_DEFAULT_TOKEN_MAP, @@ -112,7 +103,7 @@ describe('Swaps Util', () => { sourceTokenInfo: { ...TOKENS[0] }, destinationTokenInfo: { ...TOKENS[1] }, }, - { chainId: MAINNET_CHAIN_ID }, + { chainId: CHAIN_IDS.MAINNET }, ); expect(result).toStrictEqual(expectedResult2); }); @@ -127,12 +118,12 @@ describe('Swaps Util', () => { }); it('should fetch tokens', async () => { - const result = await fetchTokens(MAINNET_CHAIN_ID); + const result = await fetchTokens(CHAIN_IDS.MAINNET); expect(result).toStrictEqual(EXPECTED_TOKENS_RESULT); }); it('should fetch tokens on prod', async () => { - const result = await fetchTokens(MAINNET_CHAIN_ID); + const result = await fetchTokens(CHAIN_IDS.MAINNET); expect(result).toStrictEqual(EXPECTED_TOKENS_RESULT); }); }); @@ -146,12 +137,12 @@ describe('Swaps Util', () => { }); it('should fetch aggregator metadata', async () => { - const result = await fetchAggregatorMetadata(MAINNET_CHAIN_ID); + const result = await fetchAggregatorMetadata(CHAIN_IDS.MAINNET); expect(result).toStrictEqual(AGGREGATOR_METADATA); }); it('should fetch aggregator metadata on prod', async () => { - const result = await fetchAggregatorMetadata(MAINNET_CHAIN_ID); + const result = await fetchAggregatorMetadata(CHAIN_IDS.MAINNET); expect(result).toStrictEqual(AGGREGATOR_METADATA); }); }); @@ -182,12 +173,12 @@ describe('Swaps Util', () => { }, }; it('should fetch top assets', async () => { - const result = await fetchTopAssets(MAINNET_CHAIN_ID); + const result = await fetchTopAssets(CHAIN_IDS.MAINNET); expect(result).toStrictEqual(expectedResult); }); it('should fetch top assets on prod', async () => { - const result = await fetchTopAssets(MAINNET_CHAIN_ID); + const result = await fetchTopAssets(CHAIN_IDS.MAINNET); expect(result).toStrictEqual(expectedResult); }); }); @@ -208,28 +199,28 @@ describe('Swaps Util', () => { it('returns true if "to" is WETH contract address', () => { expect( - isContractAddressValid(usedTradeTxParams.to, MAINNET_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.MAINNET), ).toBe(true); }); it('returns true if "to" is WETH contract address with some uppercase chars', () => { usedTradeTxParams.to = '0xc02AAA39B223fe8d0a0e5c4f27ead9083c756cc2'; expect( - isContractAddressValid(usedTradeTxParams.to, MAINNET_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.MAINNET), ).toBe(true); }); it('returns true if "to" is ETH mainnet contract address on ETH mainnet', () => { usedTradeTxParams.to = - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[MAINNET_CHAIN_ID]; + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.MAINNET]; expect( - isContractAddressValid(usedTradeTxParams.to, MAINNET_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.MAINNET), ).toBe(true); }); it('returns true if "to" is WBNB contract address on BSC mainnet', () => { usedTradeTxParams.to = WBNB_CONTRACT_ADDRESS; - expect(isContractAddressValid(usedTradeTxParams.to, BSC_CHAIN_ID)).toBe( + expect(isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.BSC)).toBe( true, ); }); @@ -237,19 +228,19 @@ describe('Swaps Util', () => { it('returns true if "to" is WMATIC contract address on Polygon mainnet', () => { usedTradeTxParams.to = WMATIC_CONTRACT_ADDRESS; expect( - isContractAddressValid(usedTradeTxParams.to, POLYGON_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.POLYGON), ).toBe(true); }); it('returns false if "to" is BSC contract address on ETH mainnet', () => { - usedTradeTxParams.to = SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[BSC_CHAIN_ID]; + usedTradeTxParams.to = SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.BSC]; expect( - isContractAddressValid(usedTradeTxParams.to, MAINNET_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.MAINNET), ).toBe(false); }); it('returns false if contractAddress is null', () => { - expect(isContractAddressValid(null, LOCALHOST_CHAIN_ID)).toBe(false); + expect(isContractAddressValid(null, CHAIN_IDS.LOCALHOST)).toBe(false); }); it('returns false if chainId is incorrect', () => { @@ -259,74 +250,74 @@ describe('Swaps Util', () => { }); it('returns true if "to" is BSC contract address on BSC network', () => { - usedTradeTxParams.to = SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[BSC_CHAIN_ID]; - expect(isContractAddressValid(usedTradeTxParams.to, BSC_CHAIN_ID)).toBe( + usedTradeTxParams.to = SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.BSC]; + expect(isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.BSC)).toBe( true, ); }); it('returns true if "to" is Polygon contract address on Polygon network', () => { usedTradeTxParams.to = - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[POLYGON_CHAIN_ID]; + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.POLYGON]; expect( - isContractAddressValid(usedTradeTxParams.to, POLYGON_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.POLYGON), ).toBe(true); }); it('returns true if "to" is Goerli contract address on Goerli network', () => { usedTradeTxParams.to = - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[GOERLI_CHAIN_ID]; + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.GOERLI]; expect( - isContractAddressValid(usedTradeTxParams.to, GOERLI_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.GOERLI), ).toBe(true); }); it('returns true if "to" is testnet contract address', () => { usedTradeTxParams.to = - SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[LOCALHOST_CHAIN_ID]; + SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.LOCALHOST]; expect( - isContractAddressValid(usedTradeTxParams.to, LOCALHOST_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.LOCALHOST), ).toBe(true); }); it('returns true if "to" is testnet contract address with some uppercase chars', () => { usedTradeTxParams.to = '0x881D40237659C251811CEC9c364ef91dC08D300C'; expect( - isContractAddressValid(usedTradeTxParams.to, LOCALHOST_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.LOCALHOST), ).toBe(true); }); it('returns false if "to" has mismatch with current chainId', () => { - usedTradeTxParams.to = SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[BSC_CHAIN_ID]; + usedTradeTxParams.to = SWAPS_CHAINID_CONTRACT_ADDRESS_MAP[CHAIN_IDS.BSC]; expect( - isContractAddressValid(usedTradeTxParams.to, LOCALHOST_CHAIN_ID), + isContractAddressValid(usedTradeTxParams.to, CHAIN_IDS.LOCALHOST), ).toBe(false); }); }); describe('getNetworkNameByChainId', () => { it('returns "ethereum" for mainnet chain ID', () => { - expect(getNetworkNameByChainId(MAINNET_CHAIN_ID)).toBe(ETHEREUM); + expect(getNetworkNameByChainId(CHAIN_IDS.MAINNET)).toBe(ETHEREUM); }); it('returns "bsc" for mainnet chain ID', () => { - expect(getNetworkNameByChainId(BSC_CHAIN_ID)).toBe(BSC); + expect(getNetworkNameByChainId(CHAIN_IDS.BSC)).toBe(BSC); }); it('returns "polygon" for mainnet chain ID', () => { - expect(getNetworkNameByChainId(POLYGON_CHAIN_ID)).toBe(POLYGON); + expect(getNetworkNameByChainId(CHAIN_IDS.POLYGON)).toBe(POLYGON); }); it('returns "goerli" for Goerli chain ID', () => { - expect(getNetworkNameByChainId(GOERLI_CHAIN_ID)).toBe(GOERLI); + expect(getNetworkNameByChainId(CHAIN_IDS.GOERLI)).toBe(GOERLI); }); it('returns "avalanche" for Avalanche chain ID', () => { - expect(getNetworkNameByChainId(AVALANCHE_CHAIN_ID)).toBe(AVALANCHE); + expect(getNetworkNameByChainId(CHAIN_IDS.AVALANCHE)).toBe(AVALANCHE); }); it('returns an empty string for an unsupported network', () => { - expect(getNetworkNameByChainId(KOVAN_CHAIN_ID)).toBe(''); + expect(getNetworkNameByChainId(CHAIN_IDS.KOVAN)).toBe(''); }); }); @@ -338,7 +329,7 @@ describe('Swaps Util', () => { expect( getSwapsLivenessForNetwork( MOCKS.createFeatureFlagsResponse(), - LOCALHOST_CHAIN_ID, + CHAIN_IDS.LOCALHOST, ), ).toMatchObject(expectedSwapsLiveness); }); @@ -350,7 +341,7 @@ describe('Swaps Util', () => { expect( getSwapsLivenessForNetwork( MOCKS.createFeatureFlagsResponse(), - GOERLI_CHAIN_ID, + CHAIN_IDS.GOERLI, ), ).toMatchObject(expectedSwapsLiveness); }); @@ -362,7 +353,7 @@ describe('Swaps Util', () => { expect( getSwapsLivenessForNetwork( MOCKS.createFeatureFlagsResponse(), - KOVAN_CHAIN_ID, + CHAIN_IDS.KOVAN, ), ).toMatchObject(expectedSwapsLiveness); }); @@ -374,7 +365,7 @@ describe('Swaps Util', () => { expect( getSwapsLivenessForNetwork( MOCKS.createFeatureFlagsResponse(), - MAINNET_CHAIN_ID, + CHAIN_IDS.MAINNET, ), ).toMatchObject(expectedSwapsLiveness); }); @@ -386,7 +377,7 @@ describe('Swaps Util', () => { const swapsFeatureFlags = MOCKS.createFeatureFlagsResponse(); swapsFeatureFlags[ETHEREUM].extension_active = false; expect( - getSwapsLivenessForNetwork(swapsFeatureFlags, MAINNET_CHAIN_ID), + getSwapsLivenessForNetwork(swapsFeatureFlags, CHAIN_IDS.MAINNET), ).toMatchObject(expectedSwapsLiveness); }); }); @@ -419,8 +410,8 @@ describe('Swaps Util', () => { it('returns true if swapping from ETH to WETH', () => { expect( shouldEnableDirectWrapping( - MAINNET_CHAIN_ID, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[MAINNET_CHAIN_ID]?.address, + CHAIN_IDS.MAINNET, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.MAINNET]?.address, WETH_CONTRACT_ADDRESS, ), ).toBe(true); @@ -431,7 +422,7 @@ describe('Swaps Util', () => { '0X0000000000000000000000000000000000000000'; expect( shouldEnableDirectWrapping( - MAINNET_CHAIN_ID, + CHAIN_IDS.MAINNET, ethAddressWithUpperCaseChars, WETH_CONTRACT_ADDRESS, ), @@ -441,9 +432,9 @@ describe('Swaps Util', () => { it('returns true if swapping from WETH to ETH', () => { expect( shouldEnableDirectWrapping( - MAINNET_CHAIN_ID, + CHAIN_IDS.MAINNET, WETH_CONTRACT_ADDRESS, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[MAINNET_CHAIN_ID]?.address, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.MAINNET]?.address, ), ).toBe(true); }); @@ -453,9 +444,9 @@ describe('Swaps Util', () => { '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2'; expect( shouldEnableDirectWrapping( - MAINNET_CHAIN_ID, + CHAIN_IDS.MAINNET, wethContractAddressWithUpperCaseChars, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[MAINNET_CHAIN_ID]?.address, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.MAINNET]?.address, ), ).toBe(true); }); @@ -463,8 +454,8 @@ describe('Swaps Util', () => { it('returns false if swapping from ETH to a non-WETH token', () => { expect( shouldEnableDirectWrapping( - MAINNET_CHAIN_ID, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[MAINNET_CHAIN_ID]?.address, + CHAIN_IDS.MAINNET, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.MAINNET]?.address, randomTokenAddress, ), ).toBe(false); @@ -473,8 +464,8 @@ describe('Swaps Util', () => { it('returns true if swapping from BNB to WBNB', () => { expect( shouldEnableDirectWrapping( - BSC_CHAIN_ID, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[BSC_CHAIN_ID]?.address, + CHAIN_IDS.BSC, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.BSC]?.address, WBNB_CONTRACT_ADDRESS, ), ).toBe(true); @@ -483,9 +474,9 @@ describe('Swaps Util', () => { it('returns true if swapping from WBNB to BNB', () => { expect( shouldEnableDirectWrapping( - BSC_CHAIN_ID, + CHAIN_IDS.BSC, WBNB_CONTRACT_ADDRESS, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[BSC_CHAIN_ID]?.address, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.BSC]?.address, ), ).toBe(true); }); @@ -493,8 +484,8 @@ describe('Swaps Util', () => { it('returns false if swapping from BNB to a non-WBNB token', () => { expect( shouldEnableDirectWrapping( - BSC_CHAIN_ID, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[BSC_CHAIN_ID]?.address, + CHAIN_IDS.BSC, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.BSC]?.address, randomTokenAddress, ), ).toBe(false); @@ -503,8 +494,8 @@ describe('Swaps Util', () => { it('returns true if swapping from MATIC to WMATIC', () => { expect( shouldEnableDirectWrapping( - POLYGON_CHAIN_ID, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[POLYGON_CHAIN_ID]?.address, + CHAIN_IDS.POLYGON, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.POLYGON]?.address, WMATIC_CONTRACT_ADDRESS, ), ).toBe(true); @@ -513,9 +504,9 @@ describe('Swaps Util', () => { it('returns true if swapping from WMATIC to MATIC', () => { expect( shouldEnableDirectWrapping( - POLYGON_CHAIN_ID, + CHAIN_IDS.POLYGON, WMATIC_CONTRACT_ADDRESS, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[POLYGON_CHAIN_ID]?.address, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.POLYGON]?.address, ), ).toBe(true); }); @@ -523,8 +514,8 @@ describe('Swaps Util', () => { it('returns false if swapping from MATIC to a non-WMATIC token', () => { expect( shouldEnableDirectWrapping( - POLYGON_CHAIN_ID, - SWAPS_CHAINID_DEFAULT_TOKEN_MAP[POLYGON_CHAIN_ID]?.address, + CHAIN_IDS.POLYGON, + SWAPS_CHAINID_DEFAULT_TOKEN_MAP[CHAIN_IDS.POLYGON]?.address, randomTokenAddress, ), ).toBe(false); @@ -533,7 +524,7 @@ describe('Swaps Util', () => { it('returns false if a source token is undefined', () => { expect( shouldEnableDirectWrapping( - MAINNET_CHAIN_ID, + CHAIN_IDS.MAINNET, undefined, WETH_CONTRACT_ADDRESS, ), @@ -542,7 +533,7 @@ describe('Swaps Util', () => { it('returns false if a destination token is undefined', () => { expect( - shouldEnableDirectWrapping(MAINNET_CHAIN_ID, WETH_CONTRACT_ADDRESS), + shouldEnableDirectWrapping(CHAIN_IDS.MAINNET, WETH_CONTRACT_ADDRESS), ).toBe(false); }); }); @@ -571,7 +562,7 @@ describe('Swaps Util', () => { describe('getSwapsTokensReceivedFromTxMeta', () => { const createProps = () => { return { - tokenSymbol: ETH_SYMBOL, + tokenSymbol: CURRENCY_SYMBOLS.ETH, txMeta: { swapMetaData: { token_to_amount: 5, @@ -586,7 +577,7 @@ describe('Swaps Util', () => { accountAddress: '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f', tokenDecimals: 6, approvalTxMeta: null, - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, }; }; diff --git a/ui/pages/swaps/view-quote/view-quote-price-difference.test.js b/ui/pages/swaps/view-quote/view-quote-price-difference.test.js index 3053f5fbe..08aef036b 100644 --- a/ui/pages/swaps/view-quote/view-quote-price-difference.test.js +++ b/ui/pages/swaps/view-quote/view-quote-price-difference.test.js @@ -2,7 +2,7 @@ import React from 'react'; import { shallow } from 'enzyme'; import { Provider } from 'react-redux'; import configureMockStore from 'redux-mock-store'; -import { NETWORK_TYPE_RPC } from '../../../../shared/constants/network'; +import { NETWORK_TYPES } from '../../../../shared/constants/network'; import { GAS_RECOMMENDATIONS } from '../../../../shared/constants/gas'; import ViewQuotePriceDifference from './view-quote-price-difference'; @@ -12,7 +12,7 @@ describe('View Price Quote Difference', () => { const state = { metamask: { tokens: [], - provider: { type: NETWORK_TYPE_RPC, nickname: '', rpcUrl: '' }, + provider: { type: NETWORK_TYPES.RPC, nickname: '', rpcUrl: '' }, preferences: { showFiatInTestnets: true }, currentCurrency: 'usd', conversionRate: 600.0, diff --git a/ui/pages/token-details/token-details-page.js b/ui/pages/token-details/token-details-page.js index b34f35f59..279fc1e47 100644 --- a/ui/pages/token-details/token-details-page.js +++ b/ui/pages/token-details/token-details-page.js @@ -9,7 +9,7 @@ import { I18nContext } from '../../contexts/i18n'; import { useTokenTracker } from '../../hooks/useTokenTracker'; import { useTokenFiatAmount } from '../../hooks/useTokenFiatAmount'; import { showModal } from '../../store/actions'; -import { NETWORK_TYPE_RPC } from '../../../shared/constants/network'; +import { NETWORK_TYPES } from '../../../shared/constants/network'; import { ASSET_ROUTE, DEFAULT_ROUTE } from '../../helpers/constants/routes'; import Tooltip from '../../components/ui/tooltip'; import Button from '../../components/ui/button'; @@ -175,7 +175,7 @@ export default function TokenDetailsPage() { marginTop={0} color={COLORS.TEXT_DEFAULT} > - {networkType === NETWORK_TYPE_RPC + {networkType === NETWORK_TYPES.RPC ? networkNickname ?? t('privateNetwork') : t(networkType)} diff --git a/ui/selectors/confirm-transaction.test.js b/ui/selectors/confirm-transaction.test.js index 8ea9b28dd..5e8da334a 100644 --- a/ui/selectors/confirm-transaction.test.js +++ b/ui/selectors/confirm-transaction.test.js @@ -1,8 +1,4 @@ -import { - KOVAN_CHAIN_ID, - KOVAN_NETWORK_ID, - MAINNET_CHAIN_ID, -} from '../../shared/constants/network'; +import { CHAIN_IDS, NETWORK_IDS } from '../../shared/constants/network'; import { TRANSACTION_TYPES } from '../../shared/constants/transaction'; import { unconfirmedTransactionsCountSelector, @@ -26,18 +22,18 @@ describe('Confirm Transaction Selector', () => { metamask: { unapprovedTxs: { 1: { - metamaskNetworkId: KOVAN_NETWORK_ID, + metamaskNetworkId: NETWORK_IDS.KOVAN, }, 2: { - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, }, }, unapprovedMsgCount: 1, unapprovedPersonalMsgCount: 1, unapprovedTypedMessagesCount: 1, - network: KOVAN_NETWORK_ID, + network: NETWORK_IDS.KOVAN, provider: { - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS.KOVAN, }, }, }; diff --git a/ui/selectors/nonce-sorted-transactions-selector.test.js b/ui/selectors/nonce-sorted-transactions-selector.test.js index 12a22fc08..09509a201 100644 --- a/ui/selectors/nonce-sorted-transactions-selector.test.js +++ b/ui/selectors/nonce-sorted-transactions-selector.test.js @@ -1,5 +1,5 @@ import { head, last } from 'lodash'; -import { MAINNET_CHAIN_ID } from '../../shared/constants/network'; +import { CHAIN_IDS } from '../../shared/constants/network'; import { TRANSACTION_STATUSES, TRANSACTION_TYPES, @@ -76,7 +76,7 @@ const getStateTree = ({ metamask: { provider: { nickname: 'mainnet', - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, }, unapprovedMsgs, selectedAddress: SENDERS.ONE, diff --git a/ui/selectors/permissions.test.js b/ui/selectors/permissions.test.js index 108c73fdd..d8ecaf9ce 100644 --- a/ui/selectors/permissions.test.js +++ b/ui/selectors/permissions.test.js @@ -1,4 +1,4 @@ -import { KOVAN_CHAIN_ID } from '../../shared/constants/network'; +import { CHAIN_IDS } from '../../shared/constants/network'; import { getConnectedSubjectsForSelectedAddress, getLastConnectedInfo, @@ -150,7 +150,7 @@ describe('selectors', () => { }, metamask: { provider: { - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS.KOVAN, }, accounts: { '0x7250739de134d33ec7ab1ee592711e15098c9d2d': { diff --git a/ui/selectors/selectors.js b/ui/selectors/selectors.js index c04475956..3f46b332c 100644 --- a/ui/selectors/selectors.js +++ b/ui/selectors/selectors.js @@ -4,21 +4,16 @@ import { memoize } from 'lodash'; ///: END:ONLY_INCLUDE_IN import { addHexPrefix } from '../../app/scripts/lib/util'; import { - MAINNET_CHAIN_ID, TEST_CHAINS, - NETWORK_TYPE_RPC, NATIVE_CURRENCY_TOKEN_IMAGE_MAP, - OPTIMISM_CHAIN_ID, - OPTIMISM_TESTNET_CHAIN_ID, BUYABLE_CHAINS_MAP, MAINNET_DISPLAY_NAME, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - AVALANCHE_CHAIN_ID, BSC_DISPLAY_NAME, POLYGON_DISPLAY_NAME, AVALANCHE_DISPLAY_NAME, CHAIN_ID_TO_RPC_URL_MAP, + CHAIN_IDS, + NETWORK_TYPES, } from '../../shared/constants/network'; import { KEYRING_TYPES, @@ -99,7 +94,7 @@ export function getNetworkIdentifier(state) { export function getMetricsNetworkIdentifier(state) { const { provider } = state.metamask; - return provider.type === NETWORK_TYPE_RPC ? provider.rpcUrl : provider.type; + return provider.type === NETWORK_TYPES.RPC ? provider.rpcUrl : provider.type; } export function getCurrentChainId(state) { @@ -525,7 +520,7 @@ export function getSuggestedAssets(state) { export function getIsMainnet(state) { const chainId = getCurrentChainId(state); - return chainId === MAINNET_CHAIN_ID; + return chainId === CHAIN_IDS.MAINNET; } export function getIsTestnet(state) { @@ -986,8 +981,8 @@ export function getFrequentRpcListDetail(state) { export function getIsOptimism(state) { return ( - getCurrentChainId(state) === OPTIMISM_CHAIN_ID || - getCurrentChainId(state) === OPTIMISM_TESTNET_CHAIN_ID + getCurrentChainId(state) === CHAIN_IDS.OPTIMISM || + getCurrentChainId(state) === CHAIN_IDS.OPTIMISM_TESTNET ); } @@ -1034,13 +1029,13 @@ export function getIsAdvancedGasFeeDefault(state) { export const getTokenDetectionSupportNetworkByChainId = (state) => { const chainId = getCurrentChainId(state); switch (chainId) { - case MAINNET_CHAIN_ID: + case CHAIN_IDS.MAINNET: return MAINNET_DISPLAY_NAME; - case BSC_CHAIN_ID: + case CHAIN_IDS.BSC: return BSC_DISPLAY_NAME; - case POLYGON_CHAIN_ID: + case CHAIN_IDS.POLYGON: return POLYGON_DISPLAY_NAME; - case AVALANCHE_CHAIN_ID: + case CHAIN_IDS.AVALANCHE: return AVALANCHE_DISPLAY_NAME; default: return ''; @@ -1056,10 +1051,10 @@ export const getTokenDetectionSupportNetworkByChainId = (state) => { export function getIsDynamicTokenListAvailable(state) { const chainId = getCurrentChainId(state); return [ - MAINNET_CHAIN_ID, - BSC_CHAIN_ID, - POLYGON_CHAIN_ID, - AVALANCHE_CHAIN_ID, + CHAIN_IDS.MAINNET, + CHAIN_IDS.BSC, + CHAIN_IDS.POLYGON, + CHAIN_IDS.AVALANCHE, ].includes(chainId); } diff --git a/ui/selectors/transactions.test.js b/ui/selectors/transactions.test.js index 4f538e232..f77dd17b4 100644 --- a/ui/selectors/transactions.test.js +++ b/ui/selectors/transactions.test.js @@ -1,7 +1,4 @@ -import { - KOVAN_CHAIN_ID, - MAINNET_CHAIN_ID, -} from '../../shared/constants/network'; +import { CHAIN_IDS } from '../../shared/constants/network'; import { TRANSACTION_STATUSES } from '../../shared/constants/transaction'; import { unapprovedMessagesSelector, @@ -33,7 +30,7 @@ describe('Transaction Selectors', () => { 1: msg, }, provider: { - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS.KOVAN, }, }, }; @@ -63,7 +60,7 @@ describe('Transaction Selectors', () => { 1: msg, }, provider: { - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS.KOVAN, }, }, }; @@ -94,7 +91,7 @@ describe('Transaction Selectors', () => { 1: msg, }, provider: { - chainId: KOVAN_CHAIN_ID, + chainId: CHAIN_IDS.KOVAN, }, }, }; @@ -112,7 +109,7 @@ describe('Transaction Selectors', () => { metamask: { provider: { nickname: 'mainnet', - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, }, featureFlags: { showIncomingTransactions: false, @@ -176,7 +173,7 @@ describe('Transaction Selectors', () => { metamask: { provider: { nickname: 'mainnet', - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, }, selectedAddress: '0xAddress', featureFlags: { @@ -260,7 +257,7 @@ describe('Transaction Selectors', () => { metamask: { provider: { nickname: 'mainnet', - chainId: MAINNET_CHAIN_ID, + chainId: CHAIN_IDS.MAINNET, }, selectedAddress: '0xAddress', featureFlags: { diff --git a/ui/store/actionConstants.test.js b/ui/store/actionConstants.test.js index eba555a51..9d227bb54 100644 --- a/ui/store/actionConstants.test.js +++ b/ui/store/actionConstants.test.js @@ -1,6 +1,6 @@ import freeze from 'deep-freeze-strict'; import reducers from '../ducks'; -import { NETWORK_TYPE_RPC } from '../../shared/constants/network'; +import { NETWORK_TYPES } from '../../shared/constants/network'; import * as actionConstants from './actionConstants'; describe('Redux actionConstants', () => { @@ -26,7 +26,7 @@ describe('Redux actionConstants', () => { }; const result = reducers(initialState, action); - expect(result.metamask.provider.type).toStrictEqual(NETWORK_TYPE_RPC); + expect(result.metamask.provider.type).toStrictEqual(NETWORK_TYPES.RPC); expect(result.metamask.provider.rpcUrl).toStrictEqual('foo'); }); });