-
Notifications
You must be signed in to change notification settings - Fork 5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use network provider state, instead of CurrencyRateController state, to select 'nativeCurrency' #17450
Use network provider state, instead of CurrencyRateController state, to select 'nativeCurrency' #17450
Changes from 3 commits
ed09bcb
cddca59
8d80a46
49b65ad
f8c4120
c07ef73
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -307,7 +307,7 @@ export function getConversionRate(state) { | |
} | ||
|
||
export function getNativeCurrency(state) { | ||
return state.metamask.nativeCurrency; | ||
return state.metamask.provider.ticker; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should not do this when the currencyratecontroller is being used (i.e. the toggle is on). Because it could make the conversion rate and the native currency be out of sync. |
||
} | ||
|
||
export function getSendHexDataFeatureFlagState(state) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -60,9 +60,8 @@ export default function GasDisplay({ gasError }) { | |
const useCurrencyRateCheck = useSelector(getUseCurrencyRateCheck); | ||
const { showFiatInTestnets, useNativeCurrencyAsPrimaryCurrency } = | ||
useSelector(getPreferences); | ||
const { nativeCurrency, provider, unapprovedTxs } = useSelector( | ||
(state) => state.metamask, | ||
); | ||
const { provider, unapprovedTxs } = useSelector((state) => state.metamask); | ||
const nativeCurrency = provider.ticker; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These selectors can be used here: getUnapprovedTransactions, getProvider. |
||
const { chainId } = provider; | ||
const networkName = NETWORK_TO_NAME_MAP[chainId]; | ||
const isInsufficientTokenError = | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jpuri @NiranjanaBinoy I updated this since your last review. The problem was pointed out to me by Mark.
state.metamask.nativeCurrency
is always set after the conversionRate updates. So if we stopped using it, thenativeCurrency
andconversionRate
could get out of sync, showing the user incorrect data.I have changed the code so that we still use the
nativeCurrency
, but only when the useCurrencyRateCheck setting is on. When it is off, which is required for the bug we are trying to fix, we don't show converted values, so the concern aboutnativeCurrency
andconversionRate
being out of sync does not matterThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just wondering if it is ok to use
state.metamask.provider.ticker
alwaysThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To add more detail:
currentlylast I checked, we were showing the old network currency and currency rate after switching, until the new rate has been loaded. This is pretty confusing, but we're using the CurrencyRateControllernativeCurrency
state in this situation so we can at least be confident the symbol we're showing next to the rate matches the rate.Ideally we would show no fiat value while currency rates are loading. That would be less confusing. Once we do that, I think it would be safe to always use
state.metamask.provider.ticker
for the current currency.But until we make that improvement, there is this tradeoff to consider.