diff --git a/app/components/UI/AccountFromToInfoCard/AccountFromToInfoCard.tsx b/app/components/UI/AccountFromToInfoCard/AccountFromToInfoCard.tsx
index 7fcfb3dc9e04..360fc554c742 100644
--- a/app/components/UI/AccountFromToInfoCard/AccountFromToInfoCard.tsx
+++ b/app/components/UI/AccountFromToInfoCard/AccountFromToInfoCard.tsx
@@ -169,7 +169,12 @@ const AccountFromToInfoCard = (props: AccountFromToInfoCardProps) => {
return (
{fromAddress && (
-
+
)}
{existingToAddress === undefined && confusableCollection.length ? (
setShowWarningModal(true)}>
diff --git a/app/components/UI/AccountFromToInfoCard/AccountFromToInfoCard.types.tsx b/app/components/UI/AccountFromToInfoCard/AccountFromToInfoCard.types.tsx
index b6ba4f949321..17deaa4ec8e9 100644
--- a/app/components/UI/AccountFromToInfoCard/AccountFromToInfoCard.types.tsx
+++ b/app/components/UI/AccountFromToInfoCard/AccountFromToInfoCard.types.tsx
@@ -18,6 +18,7 @@ export interface Transaction {
transactionFromName: string;
selectedAsset: SelectedAsset;
ensRecipient?: string;
+ chainId?: string;
}
export interface AccountFromToInfoCardProps {
diff --git a/app/components/UI/AccountFromToInfoCard/AddressFrom.tsx b/app/components/UI/AccountFromToInfoCard/AddressFrom.tsx
index 8efc38182137..b40af010ea84 100644
--- a/app/components/UI/AccountFromToInfoCard/AddressFrom.tsx
+++ b/app/components/UI/AccountFromToInfoCard/AddressFrom.tsx
@@ -9,10 +9,6 @@ import { BadgeVariant } from '../../../component-library/components/Badges/Badge
import Text from '../../../component-library/components/Texts/Text';
import { useStyles } from '../../../component-library/hooks';
import { selectAccountsByChainId } from '../../../selectors/accountTrackerController';
-import {
- selectNetworkImageSource,
- selectNetworkName,
-} from '../../../selectors/networkInfos';
import {
getLabelTextByAddress,
renderAccountName,
@@ -20,6 +16,7 @@ import {
import useAddressBalance from '../../hooks/useAddressBalance/useAddressBalance';
import stylesheet from './AddressFrom.styles';
import { selectInternalAccounts } from '../../../selectors/accountsController';
+import { useNetworkInfo } from '../../../selectors/selectedNetworkController';
interface Asset {
isETH?: boolean;
@@ -37,10 +34,12 @@ interface AddressFromProps {
dontWatchAsset?: boolean;
from: string;
origin?: string;
+ chainId?: string;
}
const AddressFrom = ({
asset,
+ chainId,
dontWatchAsset,
from,
origin,
@@ -48,14 +47,16 @@ const AddressFrom = ({
const [accountName, setAccountName] = useState('');
const { styles } = useStyles(stylesheet, {});
- const { addressBalance } = useAddressBalance(asset, from, dontWatchAsset);
+ const { addressBalance } = useAddressBalance(asset, from, dontWatchAsset, chainId);
const accountsByChainId = useSelector(selectAccountsByChainId);
const internalAccounts = useSelector(selectInternalAccounts);
const activeAddress = toChecksumAddress(from);
- const networkName = useSelector(selectNetworkName);
+ // FIXME: this could be the wrong selector, probably needs to be per dapp (per origin)
+ // console.log('>>> AddressFrom origin', origin);
+ const { networkName, networkImageSource } = useNetworkInfo(origin);
const useBlockieIcon = useSelector(
// TODO: Replace "any" with type
@@ -74,7 +75,7 @@ const AddressFrom = ({
}
}, [accountsByChainId, internalAccounts, activeAddress, origin]);
- const networkImage = useSelector(selectNetworkImageSource);
+ // const networkImage = useSelector(selectNetworkImageSource);
const accountTypeLabel = getLabelTextByAddress(activeAddress);
@@ -95,7 +96,7 @@ const AddressFrom = ({
badgeProps={{
variant: BadgeVariant.Network,
name: networkName,
- imageSource: networkImage,
+ imageSource: networkImageSource,
}}
useBlockieIcon={useBlockieIcon}
/>
diff --git a/app/components/UI/PermissionsSummary/PermissionsSummary.tsx b/app/components/UI/PermissionsSummary/PermissionsSummary.tsx
index aa177bf84e7a..b5d0c0c5bbaa 100644
--- a/app/components/UI/PermissionsSummary/PermissionsSummary.tsx
+++ b/app/components/UI/PermissionsSummary/PermissionsSummary.tsx
@@ -39,7 +39,10 @@ import Routes from '../../../constants/navigation/Routes';
import ButtonIcon, {
ButtonIconSizes,
} from '../../../component-library/components/Buttons/ButtonIcon';
-import { getNetworkImageSource } from '../../../util/networks';
+import {
+ getNetworkImageSource,
+ isPerDappSelectedNetworkEnabled,
+} from '../../../util/networks';
import Engine from '../../../core/Engine';
import { SDKSelectorsIDs } from '../../../../e2e/selectors/Settings/SDK.selectors';
import { useSelector } from 'react-redux';
@@ -48,6 +51,12 @@ import { useNetworkInfo } from '../../../selectors/selectedNetworkController';
import { ConnectedAccountsSelectorsIDs } from '../../../../e2e/selectors/Browser/ConnectedAccountModal.selectors';
import { PermissionSummaryBottomSheetSelectorsIDs } from '../../../../e2e/selectors/Browser/PermissionSummaryBottomSheet.selectors';
import { NetworkNonPemittedBottomSheetSelectorsIDs } from '../../../../e2e/selectors/Network/NetworkNonPemittedBottomSheet.selectors';
+import BadgeWrapper from '../../../component-library/components/Badges/BadgeWrapper';
+import Badge, {
+ BadgeVariant,
+} from '../../../component-library/components/Badges/Badge';
+import AvatarFavicon from '../../../component-library/components/Avatars/Avatar/variants/AvatarFavicon';
+import AvatarToken from '../../../component-library/components/Avatars/Avatar/variants/AvatarToken';
const PermissionsSummary = ({
currentPageInformation,
@@ -80,7 +89,7 @@ const PermissionsSummary = ({
() => new URL(currentPageInformation.url).hostname,
[currentPageInformation.url],
);
- const networkInfo = useNetworkInfo(hostname);
+ const { networkName, networkImageSource } = useNetworkInfo(hostname);
// if network switch, we get the chain name from the customNetworkInformation
let chainName = '';
@@ -111,12 +120,62 @@ const PermissionsSummary = ({
onEditNetworks?.();
};
+ const switchNetwork = useCallback(() => {
+ navigate(Routes.MODAL.ROOT_MODAL_FLOW, {
+ screen: Routes.SHEET.NETWORK_SELECTOR,
+ });
+ }, [navigate]);
+
const renderTopIcon = () => {
const { currentEnsName, icon } = currentPageInformation;
const url = currentPageInformation.url;
const iconTitle = getHost(currentEnsName || url);
- return (
+ if (!isAlreadyConnected) {
+ return (
+
+ );
+ }
+
+ return isPerDappSelectedNetworkEnabled() ? (
+
+
+
+ }
+ >
+ {icon ? (
+
+ ) : (
+
+ )}
+
+
+
+ ) : (
{isNonDappNetworkSwitch
- ? networkInfo?.networkName || providerConfig.nickname
+ ? networkName || providerConfig.nickname
: chainName}
@@ -371,7 +430,7 @@ const PermissionsSummary = ({
size={AvatarSize.Xs}
name={
isNonDappNetworkSwitch
- ? networkInfo?.networkName || providerConfig.nickname
+ ? networkName || providerConfig.nickname
: chainName
}
imageSource={
diff --git a/app/components/UI/PermissionsSummary/PermissionsSummary.types.ts b/app/components/UI/PermissionsSummary/PermissionsSummary.types.ts
index a0abf555430e..5c2a3abce1bb 100644
--- a/app/components/UI/PermissionsSummary/PermissionsSummary.types.ts
+++ b/app/components/UI/PermissionsSummary/PermissionsSummary.types.ts
@@ -26,6 +26,7 @@ export interface PermissionsSummaryProps {
accounts?: Account[];
accountAddresses?: string[];
networkAvatars?: ({ name: string; imageSource: string } | null)[];
+ // TODO: remove isNonDappNetworkSwitch prop once the per-dapp network switch is implemented
isNonDappNetworkSwitch?: boolean;
onChooseFromPermittedNetworks?: () => void;
}
diff --git a/app/components/UI/Tabs/TabThumbnail/TabThumbnail.tsx b/app/components/UI/Tabs/TabThumbnail/TabThumbnail.tsx
index e7a0d49aeb24..5bbda8eb7301 100644
--- a/app/components/UI/Tabs/TabThumbnail/TabThumbnail.tsx
+++ b/app/components/UI/Tabs/TabThumbnail/TabThumbnail.tsx
@@ -57,6 +57,7 @@ const TabThumbnail = ({
(account) => account.address.toLowerCase() === activeAddress?.toLowerCase(),
);
const { networkName, networkImageSource } = useNetworkInfo(tabTitle);
+
const faviconSource = useFavicon(tab.url);
return (
diff --git a/app/components/Views/AccountPermissions/AccountPermissions.types.ts b/app/components/Views/AccountPermissions/AccountPermissions.types.ts
index fb536e2c5d41..f3c08b323ac6 100644
--- a/app/components/Views/AccountPermissions/AccountPermissions.types.ts
+++ b/app/components/Views/AccountPermissions/AccountPermissions.types.ts
@@ -25,6 +25,7 @@ export interface AccountPermissionsProps {
};
isRenderedAsBottomSheet?: boolean;
initialScreen?: AccountPermissionsScreens;
+ // TODO: remove isNonDappNetworkSwitch prop once the per-dapp network switch is implemented
isNonDappNetworkSwitch?: boolean;
};
};
diff --git a/app/components/Views/BrowserTab/BrowserTab.tsx b/app/components/Views/BrowserTab/BrowserTab.tsx
index 00a042002ffb..673735f83604 100644
--- a/app/components/Views/BrowserTab/BrowserTab.tsx
+++ b/app/components/Views/BrowserTab/BrowserTab.tsx
@@ -52,7 +52,6 @@ import downloadFile from '../../../util/browser/downloadFile';
import { MAX_MESSAGE_LENGTH } from '../../../constants/dapp';
import sanitizeUrlInput from '../../../util/url/sanitizeUrlInput';
import { getPermittedAccountsByHostname } from '../../../core/Permissions';
-import Routes from '../../../constants/navigation/Routes';
import {
selectIpfsGateway,
selectIsIpfsGatewayEnabled,
@@ -75,10 +74,7 @@ import trackErrorAsAnalytics from '../../../util/metrics/TrackError/trackErrorAs
import { selectPermissionControllerState } from '../../../selectors/snaps/permissionController';
import { isTest } from '../../../util/test/utils.js';
import { EXTERNAL_LINK_TYPE } from '../../../constants/browser';
-import { PermissionKeys } from '../../../core/Permissions/specifications';
-import { CaveatTypes } from '../../../core/Permissions/constants';
-import { AccountPermissionsScreens } from '../AccountPermissions/AccountPermissions.types';
-import { useIsFocused, useNavigation } from '@react-navigation/native';
+import { useNavigation } from '@react-navigation/native';
import { useStyles } from '../../hooks/useStyles';
import styleSheet from './styles';
import { type RootState } from '../../../reducers';
@@ -119,7 +115,6 @@ export const BrowserTab: React.FC = ({
addToWhitelist: triggerAddToWhitelist,
showTabs,
linkType,
- isInTabsView,
wizardStep,
updateTabInfo,
addToBrowserHistory,
@@ -204,8 +199,6 @@ export const BrowserTab: React.FC = ({
*/
const whitelist = useSelector((state: RootState) => state.browser.whitelist);
- const isFocused = useIsFocused();
-
/**
* Checks if a given url or the current url is the homepage
*/
@@ -607,57 +600,6 @@ export const BrowserTab: React.FC = ({
],
);
- const checkTabPermissions = useCallback(() => {
- if (!(isFocused && !isInTabsView && isTabActive)) {
- return;
- }
- if (!resolvedUrlRef.current) return;
- const hostname = new URLParse(resolvedUrlRef.current).hostname;
- const permissionsControllerState =
- Engine.context.PermissionController.state;
- const permittedAccounts = getPermittedAccountsByHostname(
- permissionsControllerState,
- hostname,
- );
-
- const isConnected = permittedAccounts.length > 0;
-
- if (isConnected) {
- let permittedChains = [];
- try {
- const caveat = Engine.context.PermissionController.getCaveat(
- hostname,
- PermissionKeys.permittedChains,
- CaveatTypes.restrictNetworkSwitching,
- );
- permittedChains = Array.isArray(caveat?.value) ? caveat.value : [];
-
- const currentChainId = activeChainId;
- const isCurrentChainIdAlreadyPermitted =
- permittedChains.includes(currentChainId);
-
- if (!isCurrentChainIdAlreadyPermitted) {
- navigation.navigate(Routes.MODAL.ROOT_MODAL_FLOW, {
- screen: Routes.SHEET.ACCOUNT_PERMISSIONS,
- params: {
- isNonDappNetworkSwitch: true,
- hostInfo: {
- metadata: {
- origin: hostname,
- },
- },
- isRenderedAsBottomSheet: true,
- initialScreen: AccountPermissionsScreens.Connected,
- },
- });
- }
- } catch (e) {
- const checkTabPermissionsError = e as Error;
- Logger.error(checkTabPermissionsError, 'Error in checkTabPermissions');
- }
- }
- }, [activeChainId, navigation, isFocused, isInTabsView, isTabActive]);
-
/**
* Handles state changes for when the url changes
*/
@@ -700,8 +642,6 @@ export const BrowserTab: React.FC = ({
name: siteInfo.title,
url: getMaskedUrl(siteInfo.url, sessionENSNamesRef.current),
});
-
- checkTabPermissions();
},
[
isUrlBarFocused,
@@ -711,7 +651,6 @@ export const BrowserTab: React.FC = ({
updateTabInfo,
addToBrowserHistory,
navigation,
- checkTabPermissions,
],
);
@@ -1019,10 +958,6 @@ export const BrowserTab: React.FC = ({
[linkType],
);
- useEffect(() => {
- checkTabPermissions();
- }, [checkTabPermissions, isFocused, isInTabsView, isTabActive]);
-
const handleEnsUrl = useCallback(
async (ens: string) => {
try {
diff --git a/app/components/Views/NetworkSelector/NetworkSelector.tsx b/app/components/Views/NetworkSelector/NetworkSelector.tsx
index ae55f07ccb32..8751b7c5cd41 100644
--- a/app/components/Views/NetworkSelector/NetworkSelector.tsx
+++ b/app/components/Views/NetworkSelector/NetworkSelector.tsx
@@ -146,6 +146,7 @@ const NetworkSelector = () => {
// origin is defined if network selector is opened from a dapp
const origin = route.params?.hostInfo?.metadata?.origin || '';
+
const parentSpan = trace({
name: TraceName.NetworkSwitch,
tags: getTraceTags(store.getState()),
@@ -245,12 +246,13 @@ const NetworkSelector = () => {
origin,
networkConfigurationId,
);
+ sheetRef.current?.dismissModal();
} else {
const { networkClientId } = rpcEndpoints[defaultRpcEndpointIndex];
try {
await MultichainNetworkController.setActiveNetwork(networkClientId);
} catch (error) {
- Logger.error(new Error(`Error in setActiveNetwork: ${error}`));
+ Logger.error(new Error(`Error i setActiveNetwork: ${error}`));
}
}
@@ -364,8 +366,10 @@ const NetworkSelector = () => {
AccountTrackerController,
SelectedNetworkController,
} = Engine.context;
+
if (domainIsConnectedDapp && isMultichainV1Enabled()) {
SelectedNetworkController.setNetworkClientIdForDomain(origin, type);
+ closeRpcModal();
} else {
const networkConfiguration =
networkConfigurations[BUILT_IN_NETWORKS[type].chainId];
diff --git a/app/components/Views/confirmations/SendFlow/Confirm/__snapshots__/index.test.tsx.snap b/app/components/Views/confirmations/SendFlow/Confirm/__snapshots__/index.test.tsx.snap
index a95c7c6447e9..20b7ba357a25 100644
--- a/app/components/Views/confirmations/SendFlow/Confirm/__snapshots__/index.test.tsx.snap
+++ b/app/components/Views/confirmations/SendFlow/Confirm/__snapshots__/index.test.tsx.snap
@@ -745,7 +745,7 @@ exports[`Confirm should render correctly 1`] = `
}
}
>
- Ethereum Main Network
+ Ethereum Network default RPC
)}
diff --git a/app/components/hooks/useAddressBalance/useAddressBalance.ts b/app/components/hooks/useAddressBalance/useAddressBalance.ts
index 140bf69f5926..61d6f3be9081 100644
--- a/app/components/hooks/useAddressBalance/useAddressBalance.ts
+++ b/app/components/hooks/useAddressBalance/useAddressBalance.ts
@@ -1,6 +1,7 @@
import { ERC1155, ERC721 } from '@metamask/controller-utils';
import { useEffect, useState } from 'react';
import { useSelector } from 'react-redux';
+import { Hex } from '@metamask/utils';
import Engine from '../../../core/Engine';
import { getTicker } from '../../../util/transactions';
@@ -9,25 +10,40 @@ import {
renderFromWei,
} from '../../../util/number';
import { safeToChecksumAddress } from '../../../util/address';
-import { selectTicker } from '../../../selectors/networkController';
-import { selectAccounts } from '../../../selectors/accountTrackerController';
+import { selectTicker, selectNetworkConfigurationByChainId } from '../../../selectors/networkController';
+import {
+ selectAccounts,
+ selectAccountsByChainId,
+} from '../../../selectors/accountTrackerController';
import { selectContractBalances } from '../../../selectors/tokenBalancesController';
import { selectSelectedInternalAccountFormattedAddress } from '../../../selectors/accountsController';
import { Asset } from './useAddressBalance.types';
+import { RootState } from '../../../reducers';
const useAddressBalance = (
asset?: Asset,
address?: string,
dontWatchAsset?: boolean,
+ chainId?: string,
) => {
const [addressBalance, setAddressBalance] = useState('0');
- const accounts = useSelector(selectAccounts);
+ let accounts = useSelector(selectAccounts);
+ let ticker = useSelector(selectTicker);
+ const accountsByChainId = useSelector(selectAccountsByChainId);
+ const networkConfigurationByChainId = useSelector((state: RootState) =>
+ selectNetworkConfigurationByChainId(state, chainId as Hex),
+ );
const contractBalances = useSelector(selectContractBalances);
const selectedAddress = useSelector(
selectSelectedInternalAccountFormattedAddress,
);
- const ticker = useSelector(selectTicker);
+
+ if (chainId) {
+ // If chainId is provided, use the accounts and ticker for that chain
+ accounts = accountsByChainId[chainId];
+ ticker = networkConfigurationByChainId?.nativeCurrency;
+ }
useEffect(() => {
if (asset && !asset.isETH && !asset.tokenId) {
diff --git a/app/core/Engine/Engine.ts b/app/core/Engine/Engine.ts
index 491e82f8f091..f1c5d77313af 100644
--- a/app/core/Engine/Engine.ts
+++ b/app/core/Engine/Engine.ts
@@ -97,6 +97,7 @@ import {
isMainnetByChainId,
isTestNet,
getDecimalChainId,
+ isMultichainV1Enabled,
} from '../../util/networks';
import {
fetchEstimatedMultiLayerL1Fee,
@@ -934,11 +935,11 @@ export class Engine {
],
}),
state: initialState.SelectedNetworkController || { domains: {} },
- useRequestQueuePreference: !!process.env.MULTICHAIN_V1,
+ useRequestQueuePreference: isMultichainV1Enabled(),
// TODO we need to modify core PreferencesController for better cross client support
onPreferencesStateChange: (
listener: ({ useRequestQueue }: { useRequestQueue: boolean }) => void,
- ) => listener({ useRequestQueue: !!process.env.MULTICHAIN_V1 }),
+ ) => listener({ useRequestQueue: isMultichainV1Enabled() }),
domainProxyMap: new DomainProxyMap(),
});
diff --git a/app/core/RPCMethods/lib/ethereum-chain-utils.js b/app/core/RPCMethods/lib/ethereum-chain-utils.js
index cfd155716de5..931cd4b30b15 100644
--- a/app/core/RPCMethods/lib/ethereum-chain-utils.js
+++ b/app/core/RPCMethods/lib/ethereum-chain-utils.js
@@ -6,6 +6,7 @@ import {
getDecimalChainId,
isPrefixedFormattedHexString,
isChainPermissionsFeatureEnabled,
+ isPerDappSelectedNetworkEnabled,
} from '../../../util/networks';
import {
CaveatFactories,
@@ -293,7 +294,7 @@ export async function switchToNetwork({
'eth_accounts',
);
- if (process.env.MM_PER_DAPP_SELECTED_NETWORK && originHasAccountsPermission) {
+ if (isPerDappSelectedNetworkEnabled() && originHasAccountsPermission) {
SelectedNetworkController.setNetworkClientIdForDomain(
origin,
networkConfigurationId || networkConfiguration.networkType,
diff --git a/app/selectors/selectedNetworkController.ts b/app/selectors/selectedNetworkController.ts
index 3cb73d681f5b..cc5427c6184a 100644
--- a/app/selectors/selectedNetworkController.ts
+++ b/app/selectors/selectedNetworkController.ts
@@ -3,7 +3,11 @@ import { useSelector } from 'react-redux';
import { createSelector } from 'reselect';
import { RootState } from '../reducers';
import { SelectedNetworkControllerState } from '@metamask/selected-network-controller';
-import { getNetworkImageSource, NetworkList } from '../util/networks';
+import {
+ getNetworkImageSource,
+ isPerDappSelectedNetworkEnabled,
+ NetworkList,
+} from '../util/networks';
import { strings } from '../../locales/i18n';
import {
selectProviderConfig,
@@ -15,6 +19,8 @@ import {
ProviderConfig,
selectChainId,
} from './networkController';
+import { NetworkConfiguration } from '@metamask/network-controller';
+import { Hex } from '@metamask/utils';
const selectSelectedNetworkControllerState = (state: RootState) =>
state?.engine?.backgroundState?.SelectedNetworkController;
@@ -77,6 +83,34 @@ const selectProviderNetworkImageSource = createSelector(
}),
);
+const selectChainIdToUse = createSelector(
+ [
+ selectNetworkConfigurations,
+ makeSelectDomainNetworkClientId(),
+ selectNetworkClientId,
+ ],
+ (networkConfigurations, domainNetworkClientId, globalNetworkClientId) => {
+ const relevantNetworkClientId =
+ domainNetworkClientId || globalNetworkClientId;
+
+ let chainIdToUse;
+
+ for (const networkConfig of Object.values(
+ networkConfigurations as Record,
+ )) {
+ const matchingRpcEndpoint = networkConfig.rpcEndpoints.find(
+ (endpoint) => endpoint.networkClientId === relevantNetworkClientId,
+ );
+
+ if (matchingRpcEndpoint) {
+ chainIdToUse = networkConfig.chainId;
+ }
+ }
+
+ return chainIdToUse;
+ },
+);
+
export const makeSelectNetworkName = () =>
createSelector(
[
@@ -86,6 +120,7 @@ export const makeSelectNetworkName = () =>
selectNetworkClientId,
selectChainId,
(_: RootState, hostname?: string) => hostname,
+ selectChainIdToUse,
],
(
networkConfigurations,
@@ -94,12 +129,17 @@ export const makeSelectNetworkName = () =>
globalNetworkClientId,
chainId,
hostname,
+ chainIdToUse,
) => {
- if (!hostname || !process.env.MM_PER_DAPP_SELECTED_NETWORK) return providerNetworkName;
+ if (!hostname || !isPerDappSelectedNetworkEnabled())
+ return providerNetworkName;
const relevantNetworkClientId =
domainNetworkClientId || globalNetworkClientId;
+
+ const relevantChainId = chainIdToUse || chainId;
+
return (
- networkConfigurations[chainId]?.rpcEndpoints.find(
+ networkConfigurations[relevantChainId]?.rpcEndpoints.find(
({ networkClientId }: { networkClientId: string }) =>
networkClientId === relevantNetworkClientId,
)?.name ||
@@ -118,6 +158,7 @@ export const makeSelectNetworkImageSource = () =>
selectNetworkClientId,
selectChainId,
(_: RootState, hostname?: string) => hostname,
+ selectChainIdToUse,
],
(
networkConfigurations,
@@ -126,13 +167,16 @@ export const makeSelectNetworkImageSource = () =>
globalNetworkClientId,
chainId,
hostname,
+ chainIdToUse,
) => {
- if (!hostname || !process.env.MM_PER_DAPP_SELECTED_NETWORK)
+ if (!hostname || !isPerDappSelectedNetworkEnabled())
return providerNetworkImageSource;
const relevantNetworkClientId =
domainNetworkClientId || globalNetworkClientId;
- const networkConfig = networkConfigurations[chainId];
+ const relevantChainId = chainIdToUse || chainId;
+
+ const networkConfig = networkConfigurations[relevantChainId];
if (networkConfig) {
// @ts-expect-error The utils/network file is still JS and this function expects a networkType, and should be optional
return getNetworkImageSource({ chainId: networkConfig.chainId });
@@ -154,6 +198,7 @@ export const makeSelectChainId = () =>
selectNetworkClientId,
selectChainId,
(_: RootState, hostname?: string) => hostname,
+ selectChainIdToUse,
],
(
providerChainId,
@@ -161,14 +206,18 @@ export const makeSelectChainId = () =>
globalNetworkClientId,
chainId,
hostname,
+ chainIdToUse,
) => {
- if (!hostname || !process.env.MM_PER_DAPP_SELECTED_NETWORK) {
+ if (!hostname || !isPerDappSelectedNetworkEnabled()) {
return providerChainId;
}
const relevantNetworkClientId =
domainNetworkClientId || globalNetworkClientId;
+
+ const relevantChainId = chainIdToUse || chainId;
+
return (
- chainId ||
+ relevantChainId ||
// @ts-expect-error The utils/network file is still JS
NetworkList[relevantNetworkClientId]?.chainId
);
@@ -193,7 +242,8 @@ export const makeSelectRpcUrl = () =>
chainId,
hostname,
) => {
- if (!hostname || !process.env.MM_PER_DAPP_SELECTED_NETWORK) return providerRpcUrl;
+ if (!hostname || !isPerDappSelectedNetworkEnabled())
+ return providerRpcUrl;
const relevantNetworkClientId =
domainNetworkClientId || globalNetworkClientId;
return networkConfigurations[chainId]?.rpcEndpoints.find(
diff --git a/app/util/networks/index.js b/app/util/networks/index.js
index 123d4a7c8393..4e743d9964e7 100644
--- a/app/util/networks/index.js
+++ b/app/util/networks/index.js
@@ -476,6 +476,9 @@ export const isChainPermissionsFeatureEnabled = true;
export const isPermissionsSettingsV1Enabled =
process.env.MM_PERMISSIONS_SETTINGS_V1_ENABLED === 'true';
+export const isPerDappSelectedNetworkEnabled = () =>
+ process.env.MM_PER_DAPP_SELECTED_NETWORK === 'true';
+
export const isPortfolioViewEnabled = () =>
process.env.PORTFOLIO_VIEW === 'true';