1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-24 19:10:22 +01:00

migrate network constants to typescript (#15610)

This commit is contained in:
Brad Decker 2022-09-14 09:55:31 -05:00 committed by GitHub
parent 506d1e74e5
commit c87980bbfe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
72 changed files with 1412 additions and 1324 deletions

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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]}`;

View File

@ -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: {

View File

@ -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,

View File

@ -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,

View File

@ -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(

View File

@ -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,
);

View File

@ -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,
};

View File

@ -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,
);

View File

@ -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,
);
}
/**

View File

@ -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',

View File

@ -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,

View File

@ -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(

View File

@ -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`,
);
});

View File

@ -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],

View File

@ -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';

View File

@ -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/<chain_id>/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

View File

@ -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',
},

View File

@ -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;

View File

@ -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',

View File

@ -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;

View File

@ -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',

View File

@ -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,

View File

@ -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

View File

@ -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',

View File

@ -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,
},
},

View File

@ -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',
},

View File

@ -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,
},
},
];

675
shared/constants/network.ts Normal file
View File

@ -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<CurrencySymbol>;
/**
* 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 extends string>(k: K): Capitalize<K> =>
capitalize(k) as Capitalize<typeof k>;
export const TEST_NETWORK_TICKER_MAP: {
[K in Exclude<
NetworkType,
'localhost' | 'mainnet' | 'rpc'
>]: `${Capitalize<K>}${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,
},
},
];

View File

@ -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';

View File

@ -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;

View File

@ -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',

View File

@ -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': {

View File

@ -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;

View File

@ -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 (
<DropdownMenuItem

View File

@ -1,7 +1,7 @@
import React from 'react';
import { screen, waitFor } from '@testing-library/react';
import { MAINNET_CHAIN_ID } from '../../../../../shared/constants/network';
import { CHAIN_IDS } from '../../../../../shared/constants/network';
import { GasFeeContextProvider } from '../../../../contexts/gasFee';
import { renderWithProvider } from '../../../../../test/jest';
import configureStore from '../../../../store/store';
@ -20,7 +20,7 @@ jest.mock('../../../../store/actions', () => ({
const render = () => {
const store = configureStore({
metamask: {
provider: { chainId: MAINNET_CHAIN_ID },
provider: { chainId: CHAIN_IDS.MAINNET },
cachedBalances: {},
accounts: {
'0xAddress': {

View File

@ -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];

View File

@ -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: {

View File

@ -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({
>
<ColorIndicator
color={
networkType === NETWORK_TYPE_RPC ? COLORS.ICON_MUTED : networkType
networkType === NETWORK_TYPES.RPC
? COLORS.ICON_MUTED
: networkType
}
size={indicatorSize}
type={ColorIndicator.TYPES.FILLED}
iconClassName={
networkType === NETWORK_TYPE_RPC && indicatorSize !== SIZES.XS
networkType === NETWORK_TYPES.RPC && indicatorSize !== SIZES.XS
? 'fa fa-question'
: undefined
}
@ -66,7 +68,7 @@ export default function NetworkDisplay({
) : null
}
label={
networkType === NETWORK_TYPE_RPC
networkType === NETWORK_TYPES.RPC
? networkNickname ?? t('privateNetwork')
: t(networkType)
}
@ -95,8 +97,8 @@ NetworkDisplay.propTypes = {
*/
targetNetwork: PropTypes.shape({
type: PropTypes.oneOf([
...Object.keys(NETWORK_TYPE_TO_ID_MAP),
NETWORK_TYPE_RPC,
...Object.keys(BUILT_IN_NETWORKS),
NETWORK_TYPES.RPC,
]),
nickname: PropTypes.string,
}),

View File

@ -1,8 +1,8 @@
import React from 'react';
import {
NETWORK_TYPE_TO_ID_MAP,
NETWORK_TYPE_RPC,
BUILT_IN_NETWORKS,
NETWORK_TYPES,
} from '../../../../shared/constants/network';
import { SIZES } from '../../../helpers/constants/design-system';
@ -21,7 +21,7 @@ export default {
},
targetNetwork: {
control: 'select',
options: [...Object.keys(NETWORK_TYPE_TO_ID_MAP), NETWORK_TYPE_RPC],
options: [...Object.keys(BUILT_IN_NETWORKS), NETWORK_TYPES.RPC],
},
disabled: {
control: 'boolean',
@ -51,8 +51,8 @@ DefaultStory.storyName = 'Default';
export const TargetNetwork = (args) => {
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 (
<>

View File

@ -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,
},
];

View File

@ -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)
}

View File

@ -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,

View File

@ -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.') {

View File

@ -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,
},
};

View File

@ -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: {

View File

@ -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
],
);
});

View File

@ -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 },

View File

@ -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;
}

View File

@ -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,

View File

@ -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;
});

View File

@ -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})` : '';

View File

@ -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' },

View File

@ -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,
}),
},
});

View File

@ -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 && (
<LockIcon width="14px" height="17px" fill="var(--color-icon-muted)" />
)}
</div>

View File

@ -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',
},
];

View File

@ -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)
);
}) || {};

View File

@ -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');

View File

@ -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,
},
};

View File

@ -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,

View File

@ -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,
};

View File

@ -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,
};
};

View File

@ -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,

View File

@ -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)}
</Typography>

View File

@ -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,
},
},
};

View File

@ -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,

View File

@ -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': {

View File

@ -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);
}

View File

@ -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: {

View File

@ -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');
});
});