mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Refactor provider config selector (#18905)
The provider configuration selector has been renamed from `getProvider` to `getProviderConfig`, and it has been moved from the selectors module into the MetaMask slice. A JSDoc description has been added as well. This refactor was done to make a future PR simpler, and to make this selector better aligned with best practices. This relates to #18902
This commit is contained in:
parent
4bad30c94d
commit
f765b8c9b9
@ -18,9 +18,9 @@ import { TOKEN_API_METASWAP_CODEFI_URL } from '../../../../shared/constants/toke
|
|||||||
import fetchWithCache from '../../../../shared/lib/fetch-with-cache';
|
import fetchWithCache from '../../../../shared/lib/fetch-with-cache';
|
||||||
import {
|
import {
|
||||||
getNativeCurrencyImage,
|
getNativeCurrencyImage,
|
||||||
getProvider,
|
|
||||||
getUseTokenDetection,
|
getUseTokenDetection,
|
||||||
} from '../../../selectors';
|
} from '../../../selectors';
|
||||||
|
import { getProviderConfig } from '../../../ducks/metamask/metamask';
|
||||||
import { IMPORT_TOKEN_ROUTE } from '../../../helpers/constants/routes';
|
import { IMPORT_TOKEN_ROUTE } from '../../../helpers/constants/routes';
|
||||||
import Chip from '../chip/chip';
|
import Chip from '../chip/chip';
|
||||||
import { setFirstTimeUsedNetwork } from '../../../store/actions';
|
import { setFirstTimeUsedNetwork } from '../../../store/actions';
|
||||||
@ -34,22 +34,22 @@ const NewNetworkInfo = () => {
|
|||||||
const [showPopup, setShowPopup] = useState(true);
|
const [showPopup, setShowPopup] = useState(true);
|
||||||
const autoDetectToken = useSelector(getUseTokenDetection);
|
const autoDetectToken = useSelector(getUseTokenDetection);
|
||||||
const primaryTokenImage = useSelector(getNativeCurrencyImage);
|
const primaryTokenImage = useSelector(getNativeCurrencyImage);
|
||||||
const currentProvider = useSelector(getProvider);
|
const providerConfig = useSelector(getProviderConfig);
|
||||||
|
|
||||||
const onCloseClick = () => {
|
const onCloseClick = () => {
|
||||||
setShowPopup(false);
|
setShowPopup(false);
|
||||||
setFirstTimeUsedNetwork(currentProvider.chainId);
|
setFirstTimeUsedNetwork(providerConfig.chainId);
|
||||||
};
|
};
|
||||||
|
|
||||||
const addTokenManually = () => {
|
const addTokenManually = () => {
|
||||||
history.push(IMPORT_TOKEN_ROUTE);
|
history.push(IMPORT_TOKEN_ROUTE);
|
||||||
setShowPopup(false);
|
setShowPopup(false);
|
||||||
setFirstTimeUsedNetwork(currentProvider.chainId);
|
setFirstTimeUsedNetwork(providerConfig.chainId);
|
||||||
};
|
};
|
||||||
|
|
||||||
const getIsTokenDetectionSupported = async () => {
|
const getIsTokenDetectionSupported = async () => {
|
||||||
const fetchedTokenData = await fetchWithCache(
|
const fetchedTokenData = await fetchWithCache(
|
||||||
`${TOKEN_API_METASWAP_CODEFI_URL}${currentProvider.chainId}`,
|
`${TOKEN_API_METASWAP_CODEFI_URL}${providerConfig.chainId}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
return !fetchedTokenData.error;
|
return !fetchedTokenData.error;
|
||||||
@ -93,9 +93,9 @@ const NewNetworkInfo = () => {
|
|||||||
backgroundColor={Color.backgroundAlternative}
|
backgroundColor={Color.backgroundAlternative}
|
||||||
maxContent={false}
|
maxContent={false}
|
||||||
label={
|
label={
|
||||||
currentProvider.type === NETWORK_TYPES.RPC
|
providerConfig.type === NETWORK_TYPES.RPC
|
||||||
? currentProvider.nickname ?? t('privateNetwork')
|
? providerConfig.nickname ?? t('privateNetwork')
|
||||||
: t(currentProvider.type)
|
: t(providerConfig.type)
|
||||||
}
|
}
|
||||||
labelProps={{
|
labelProps={{
|
||||||
color: Color.textDefault,
|
color: Color.textDefault,
|
||||||
@ -122,7 +122,7 @@ const NewNetworkInfo = () => {
|
|||||||
{t('thingsToKeep')}
|
{t('thingsToKeep')}
|
||||||
</Text>
|
</Text>
|
||||||
<Box marginRight={4} marginLeft={5} marginTop={6}>
|
<Box marginRight={4} marginLeft={5} marginTop={6}>
|
||||||
{currentProvider.ticker ? (
|
{providerConfig.ticker ? (
|
||||||
<Box
|
<Box
|
||||||
display={DISPLAY.FLEX}
|
display={DISPLAY.FLEX}
|
||||||
alignItems={AlignItems.center}
|
alignItems={AlignItems.center}
|
||||||
@ -147,7 +147,7 @@ const NewNetworkInfo = () => {
|
|||||||
display={DISPLAY.INLINE_BLOCK}
|
display={DISPLAY.INLINE_BLOCK}
|
||||||
key="ticker"
|
key="ticker"
|
||||||
>
|
>
|
||||||
{currentProvider.ticker}
|
{providerConfig.ticker}
|
||||||
</Text>,
|
</Text>,
|
||||||
])}
|
])}
|
||||||
</Text>
|
</Text>
|
||||||
|
@ -230,6 +230,16 @@ export function updateGasFees({
|
|||||||
|
|
||||||
export const getAlertEnabledness = (state) => state.metamask.alertEnabledness;
|
export const getAlertEnabledness = (state) => state.metamask.alertEnabledness;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the provider configuration for the current selected network.
|
||||||
|
*
|
||||||
|
* @param {object} state - Redux state object.
|
||||||
|
* @returns {object} The provider configuration for the current selected network.
|
||||||
|
*/
|
||||||
|
export function getProviderConfig(state) {
|
||||||
|
return state.metamask.provider;
|
||||||
|
}
|
||||||
|
|
||||||
export const getUnconnectedAccountAlertEnabledness = (state) =>
|
export const getUnconnectedAccountAlertEnabledness = (state) =>
|
||||||
getAlertEnabledness(state)[AlertTypes.unconnectedAccount];
|
getAlertEnabledness(state)[AlertTypes.unconnectedAccount];
|
||||||
|
|
||||||
|
@ -40,7 +40,8 @@ import {
|
|||||||
CUSTODY_ACCOUNT_DONE_ROUTE,
|
CUSTODY_ACCOUNT_DONE_ROUTE,
|
||||||
DEFAULT_ROUTE,
|
DEFAULT_ROUTE,
|
||||||
} from '../../../helpers/constants/routes';
|
} from '../../../helpers/constants/routes';
|
||||||
import { getCurrentChainId, getProvider } from '../../../selectors';
|
import { getCurrentChainId } from '../../../selectors';
|
||||||
|
import { getProviderConfig } from '../../../ducks/metamask/metamask';
|
||||||
import { getMMIConfiguration } from '../../../selectors/institutional/selectors';
|
import { getMMIConfiguration } from '../../../selectors/institutional/selectors';
|
||||||
import CustodyAccountList from '../connect-custody/account-list';
|
import CustodyAccountList from '../connect-custody/account-list';
|
||||||
import JwtUrlForm from '../../../components/institutional/jwt-url-form';
|
import JwtUrlForm from '../../../components/institutional/jwt-url-form';
|
||||||
@ -53,7 +54,7 @@ const CustodyPage = () => {
|
|||||||
|
|
||||||
const mmiActions = mmiActionsFactory();
|
const mmiActions = mmiActionsFactory();
|
||||||
const currentChainId = useSelector(getCurrentChainId);
|
const currentChainId = useSelector(getCurrentChainId);
|
||||||
const provider = useSelector(getProvider);
|
const providerConfig = useSelector(getProviderConfig);
|
||||||
const { custodians } = useSelector(getMMIConfiguration);
|
const { custodians } = useSelector(getMMIConfiguration);
|
||||||
|
|
||||||
const [selectedAccounts, setSelectedAccounts] = useState({});
|
const [selectedAccounts, setSelectedAccounts] = useState({});
|
||||||
@ -493,7 +494,7 @@ const CustodyPage = () => {
|
|||||||
|
|
||||||
setSelectedAccounts(selectedAccounts);
|
setSelectedAccounts(selectedAccounts);
|
||||||
}}
|
}}
|
||||||
provider={provider}
|
provider={providerConfig}
|
||||||
selectedAccounts={selectedAccounts}
|
selectedAccounts={selectedAccounts}
|
||||||
onAddAccounts={async () => {
|
onAddAccounts={async () => {
|
||||||
try {
|
try {
|
||||||
|
@ -22,7 +22,6 @@ import { NETWORK_TO_NAME_MAP } from '../../../../shared/constants/network';
|
|||||||
import TransactionDetail from '../../../components/app/transaction-detail';
|
import TransactionDetail from '../../../components/app/transaction-detail';
|
||||||
import ActionableMessage from '../../../components/ui/actionable-message';
|
import ActionableMessage from '../../../components/ui/actionable-message';
|
||||||
import {
|
import {
|
||||||
getProvider,
|
|
||||||
getPreferences,
|
getPreferences,
|
||||||
getIsBuyableChain,
|
getIsBuyableChain,
|
||||||
transactionFeeSelector,
|
transactionFeeSelector,
|
||||||
@ -32,7 +31,10 @@ import {
|
|||||||
|
|
||||||
import { INSUFFICIENT_TOKENS_ERROR } from '../send.constants';
|
import { INSUFFICIENT_TOKENS_ERROR } from '../send.constants';
|
||||||
import { getCurrentDraftTransaction } from '../../../ducks/send';
|
import { getCurrentDraftTransaction } from '../../../ducks/send';
|
||||||
import { getNativeCurrency } from '../../../ducks/metamask/metamask';
|
import {
|
||||||
|
getNativeCurrency,
|
||||||
|
getProviderConfig,
|
||||||
|
} from '../../../ducks/metamask/metamask';
|
||||||
import { showModal } from '../../../store/actions';
|
import { showModal } from '../../../store/actions';
|
||||||
import {
|
import {
|
||||||
addHexes,
|
addHexes,
|
||||||
@ -53,21 +55,21 @@ export default function GasDisplay({ gasError }) {
|
|||||||
|
|
||||||
const { openBuyCryptoInPdapp } = useRamps();
|
const { openBuyCryptoInPdapp } = useRamps();
|
||||||
|
|
||||||
const currentProvider = useSelector(getProvider);
|
const providerConfig = useSelector(getProviderConfig);
|
||||||
const isTestnet = useSelector(getIsTestnet);
|
const isTestnet = useSelector(getIsTestnet);
|
||||||
const isBuyableChain = useSelector(getIsBuyableChain);
|
const isBuyableChain = useSelector(getIsBuyableChain);
|
||||||
const draftTransaction = useSelector(getCurrentDraftTransaction);
|
const draftTransaction = useSelector(getCurrentDraftTransaction);
|
||||||
const useCurrencyRateCheck = useSelector(getUseCurrencyRateCheck);
|
const useCurrencyRateCheck = useSelector(getUseCurrencyRateCheck);
|
||||||
const { showFiatInTestnets, useNativeCurrencyAsPrimaryCurrency } =
|
const { showFiatInTestnets, useNativeCurrencyAsPrimaryCurrency } =
|
||||||
useSelector(getPreferences);
|
useSelector(getPreferences);
|
||||||
const { provider, unapprovedTxs } = useSelector((state) => state.metamask);
|
const { unapprovedTxs } = useSelector((state) => state.metamask);
|
||||||
const nativeCurrency = useSelector(getNativeCurrency);
|
const nativeCurrency = useSelector(getNativeCurrency);
|
||||||
const { chainId } = provider;
|
const { chainId } = providerConfig;
|
||||||
const networkName = NETWORK_TO_NAME_MAP[chainId];
|
const networkName = NETWORK_TO_NAME_MAP[chainId];
|
||||||
const isInsufficientTokenError =
|
const isInsufficientTokenError =
|
||||||
draftTransaction?.amount.error === INSUFFICIENT_TOKENS_ERROR;
|
draftTransaction?.amount.error === INSUFFICIENT_TOKENS_ERROR;
|
||||||
const editingTransaction = unapprovedTxs[draftTransaction.id];
|
const editingTransaction = unapprovedTxs[draftTransaction.id];
|
||||||
const currentNetworkName = networkName || currentProvider.nickname;
|
const currentNetworkName = networkName || providerConfig.nickname;
|
||||||
|
|
||||||
const transactionData = {
|
const transactionData = {
|
||||||
txParams: {
|
txParams: {
|
||||||
|
@ -11,7 +11,7 @@ import { NETWORKS_ROUTE } from '../../../../helpers/constants/routes';
|
|||||||
import { setSelectedNetworkConfigurationId } from '../../../../store/actions';
|
import { setSelectedNetworkConfigurationId } from '../../../../store/actions';
|
||||||
import { getEnvironmentType } from '../../../../../app/scripts/lib/util';
|
import { getEnvironmentType } from '../../../../../app/scripts/lib/util';
|
||||||
import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../../shared/constants/app';
|
import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../../shared/constants/app';
|
||||||
import { getProvider } from '../../../../selectors';
|
import { getProviderConfig } from '../../../../ducks/metamask/metamask';
|
||||||
import Identicon from '../../../../components/ui/identicon';
|
import Identicon from '../../../../components/ui/identicon';
|
||||||
import UrlIcon from '../../../../components/ui/url-icon';
|
import UrlIcon from '../../../../components/ui/url-icon';
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ const NetworksListItem = ({
|
|||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const environmentType = getEnvironmentType();
|
const environmentType = getEnvironmentType();
|
||||||
const isFullScreen = environmentType === ENVIRONMENT_TYPE_FULLSCREEN;
|
const isFullScreen = environmentType === ENVIRONMENT_TYPE_FULLSCREEN;
|
||||||
const provider = useSelector(getProvider);
|
const providerConfig = useSelector(getProviderConfig);
|
||||||
const {
|
const {
|
||||||
label,
|
label,
|
||||||
labelKey,
|
labelKey,
|
||||||
@ -46,10 +46,10 @@ const NetworksListItem = ({
|
|||||||
const listItemNetworkIsSelected =
|
const listItemNetworkIsSelected =
|
||||||
selectedNetworkConfigurationId &&
|
selectedNetworkConfigurationId &&
|
||||||
selectedNetworkConfigurationId === networkConfigurationId;
|
selectedNetworkConfigurationId === networkConfigurationId;
|
||||||
const listItemUrlIsProviderUrl = rpcUrl === provider.rpcUrl;
|
const listItemUrlIsProviderUrl = rpcUrl === providerConfig.rpcUrl;
|
||||||
const listItemTypeIsProviderNonRpcType =
|
const listItemTypeIsProviderNonRpcType =
|
||||||
provider.type !== NETWORK_TYPES.RPC &&
|
providerConfig.type !== NETWORK_TYPES.RPC &&
|
||||||
currentProviderType === provider.type;
|
currentProviderType === providerConfig.type;
|
||||||
const listItemNetworkIsCurrentProvider =
|
const listItemNetworkIsCurrentProvider =
|
||||||
!networkIsSelected &&
|
!networkIsSelected &&
|
||||||
(listItemUrlIsProviderUrl || listItemTypeIsProviderNonRpcType);
|
(listItemUrlIsProviderUrl || listItemTypeIsProviderNonRpcType);
|
||||||
|
@ -4,7 +4,7 @@ import { useSelector } from 'react-redux';
|
|||||||
import { useHistory } from 'react-router-dom';
|
import { useHistory } from 'react-router-dom';
|
||||||
import NetworksForm from '../networks-form';
|
import NetworksForm from '../networks-form';
|
||||||
import NetworksList from '../networks-list';
|
import NetworksList from '../networks-list';
|
||||||
import { getProvider } from '../../../../selectors';
|
import { getProviderConfig } from '../../../../ducks/metamask/metamask';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
DEFAULT_ROUTE,
|
DEFAULT_ROUTE,
|
||||||
@ -18,7 +18,7 @@ const NetworksTabContent = ({
|
|||||||
selectedNetwork,
|
selectedNetwork,
|
||||||
shouldRenderNetworkForm,
|
shouldRenderNetworkForm,
|
||||||
}) => {
|
}) => {
|
||||||
const provider = useSelector(getProvider);
|
const providerConfig = useSelector(getProviderConfig);
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -31,7 +31,7 @@ const NetworksTabContent = ({
|
|||||||
/>
|
/>
|
||||||
{shouldRenderNetworkForm ? (
|
{shouldRenderNetworkForm ? (
|
||||||
<NetworksForm
|
<NetworksForm
|
||||||
isCurrentRpcTarget={provider.rpcUrl === selectedNetwork.rpcUrl}
|
isCurrentRpcTarget={providerConfig.rpcUrl === selectedNetwork.rpcUrl}
|
||||||
networksToRender={networksToRender}
|
networksToRender={networksToRender}
|
||||||
selectedNetwork={selectedNetwork}
|
selectedNetwork={selectedNetwork}
|
||||||
submitCallback={() => history.push(DEFAULT_ROUTE)}
|
submitCallback={() => history.push(DEFAULT_ROUTE)}
|
||||||
|
@ -17,8 +17,8 @@ import { ENVIRONMENT_TYPE_FULLSCREEN } from '../../../../shared/constants/app';
|
|||||||
import {
|
import {
|
||||||
getNetworkConfigurations,
|
getNetworkConfigurations,
|
||||||
getNetworksTabSelectedNetworkConfigurationId,
|
getNetworksTabSelectedNetworkConfigurationId,
|
||||||
getProvider,
|
|
||||||
} from '../../../selectors';
|
} from '../../../selectors';
|
||||||
|
import { getProviderConfig } from '../../../ducks/metamask/metamask';
|
||||||
import {
|
import {
|
||||||
CHAIN_IDS,
|
CHAIN_IDS,
|
||||||
NETWORK_TYPES,
|
NETWORK_TYPES,
|
||||||
@ -52,7 +52,7 @@ const NetworksTab = ({ addNewNetwork }) => {
|
|||||||
window.location.hash.split('#')[2] === 'blockExplorerUrl';
|
window.location.hash.split('#')[2] === 'blockExplorerUrl';
|
||||||
|
|
||||||
const networkConfigurations = useSelector(getNetworkConfigurations);
|
const networkConfigurations = useSelector(getNetworkConfigurations);
|
||||||
const provider = useSelector(getProvider);
|
const providerConfig = useSelector(getProviderConfig);
|
||||||
const networksTabSelectedNetworkConfigurationId = useSelector(
|
const networksTabSelectedNetworkConfigurationId = useSelector(
|
||||||
getNetworksTabSelectedNetworkConfigurationId,
|
getNetworksTabSelectedNetworkConfigurationId,
|
||||||
);
|
);
|
||||||
@ -92,9 +92,9 @@ const NetworksTab = ({ addNewNetwork }) => {
|
|||||||
selectedNetwork =
|
selectedNetwork =
|
||||||
networksToRender.find((network) => {
|
networksToRender.find((network) => {
|
||||||
return (
|
return (
|
||||||
network.rpcUrl === provider.rpcUrl ||
|
network.rpcUrl === providerConfig.rpcUrl ||
|
||||||
(network.providerType !== NETWORK_TYPES.RPC &&
|
(network.providerType !== NETWORK_TYPES.RPC &&
|
||||||
network.providerType === provider.type)
|
network.providerType === providerConfig.type)
|
||||||
);
|
);
|
||||||
}) || {};
|
}) || {};
|
||||||
networkDefaultedToProvider = true;
|
networkDefaultedToProvider = true;
|
||||||
@ -130,7 +130,7 @@ const NetworksTab = ({ addNewNetwork }) => {
|
|||||||
networkDefaultedToProvider={networkDefaultedToProvider}
|
networkDefaultedToProvider={networkDefaultedToProvider}
|
||||||
networkIsSelected={networkIsSelected}
|
networkIsSelected={networkIsSelected}
|
||||||
networksToRender={networksToRender}
|
networksToRender={networksToRender}
|
||||||
providerUrl={provider.rpcUrl}
|
providerUrl={providerConfig.rpcUrl}
|
||||||
selectedNetwork={selectedNetwork}
|
selectedNetwork={selectedNetwork}
|
||||||
shouldRenderNetworkForm={shouldRenderNetworkForm}
|
shouldRenderNetworkForm={shouldRenderNetworkForm}
|
||||||
/>
|
/>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { toChecksumAddress } from 'ethereumjs-util';
|
import { toChecksumAddress } from 'ethereumjs-util';
|
||||||
import { getSelectedIdentity, getAccountType, getProvider } from '../selectors';
|
import { getSelectedIdentity, getAccountType } from '../selectors';
|
||||||
|
import { getProviderConfig } from '../../ducks/metamask/metamask';
|
||||||
|
|
||||||
export function getWaitForConfirmDeepLinkDialog(state) {
|
export function getWaitForConfirmDeepLinkDialog(state) {
|
||||||
return state.metamask.waitForConfirmDeepLinkDialog;
|
return state.metamask.waitForConfirmDeepLinkDialog;
|
||||||
@ -49,7 +50,7 @@ export function getCustodianIconForAddress(state, address) {
|
|||||||
export function getIsCustodianSupportedChain(state) {
|
export function getIsCustodianSupportedChain(state) {
|
||||||
const selectedIdentity = getSelectedIdentity(state);
|
const selectedIdentity = getSelectedIdentity(state);
|
||||||
const accountType = getAccountType(state);
|
const accountType = getAccountType(state);
|
||||||
const provider = getProvider(state);
|
const providerConfig = getProviderConfig(state);
|
||||||
|
|
||||||
const supportedChains =
|
const supportedChains =
|
||||||
accountType === 'custody'
|
accountType === 'custody'
|
||||||
@ -58,7 +59,7 @@ export function getIsCustodianSupportedChain(state) {
|
|||||||
|
|
||||||
return supportedChains?.supportedChains
|
return supportedChains?.supportedChains
|
||||||
? supportedChains.supportedChains.includes(
|
? supportedChains.supportedChains.includes(
|
||||||
Number(provider.chainId).toString(),
|
Number(providerConfig.chainId).toString(),
|
||||||
)
|
)
|
||||||
: true;
|
: true;
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,7 @@ import { DAY } from '../../shared/constants/time';
|
|||||||
import { TERMS_OF_USE_LAST_UPDATED } from '../../shared/constants/terms';
|
import { TERMS_OF_USE_LAST_UPDATED } from '../../shared/constants/terms';
|
||||||
import {
|
import {
|
||||||
getNativeCurrency,
|
getNativeCurrency,
|
||||||
|
getProviderConfig,
|
||||||
getConversionRate,
|
getConversionRate,
|
||||||
isNotEIP1559Network,
|
isNotEIP1559Network,
|
||||||
isEIP1559Network,
|
isEIP1559Network,
|
||||||
@ -125,7 +126,7 @@ export function getMetaMetricsId(state) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function isCurrentProviderCustom(state) {
|
export function isCurrentProviderCustom(state) {
|
||||||
const provider = getProvider(state);
|
const provider = getProviderConfig(state);
|
||||||
return (
|
return (
|
||||||
provider.type === NETWORK_TYPES.RPC &&
|
provider.type === NETWORK_TYPES.RPC &&
|
||||||
!Object.values(CHAIN_IDS).includes(provider.chainId)
|
!Object.values(CHAIN_IDS).includes(provider.chainId)
|
||||||
@ -1152,10 +1153,6 @@ export function getNetworksTabSelectedNetworkConfigurationId(state) {
|
|||||||
return state.appState.selectedNetworkConfigurationId;
|
return state.appState.selectedNetworkConfigurationId;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getProvider(state) {
|
|
||||||
return state.metamask.provider;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getNetworkConfigurations(state) {
|
export function getNetworkConfigurations(state) {
|
||||||
return state.metamask.networkConfigurations;
|
return state.metamask.networkConfigurations;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user