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