mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge pull request #4895 from MetaMask/fix-confirm
Add rounding to large exponential numbers. Fix overflows
This commit is contained in:
commit
fa4423bab2
@ -15,14 +15,21 @@
|
|||||||
&__details {
|
&__details {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
text-align: end;
|
text-align: end;
|
||||||
|
min-width: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__fiat {
|
&__fiat {
|
||||||
font-size: 1.5rem;
|
font-size: 1.5rem;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__eth {
|
&__eth {
|
||||||
color: $oslo-gray;
|
color: $oslo-gray;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__header-text {
|
&__header-text {
|
||||||
|
@ -5,6 +5,7 @@ import {
|
|||||||
formatCurrency,
|
formatCurrency,
|
||||||
convertTokenToFiat,
|
convertTokenToFiat,
|
||||||
addFiat,
|
addFiat,
|
||||||
|
roundExponential,
|
||||||
} from '../../../helpers/confirm-transaction/util'
|
} from '../../../helpers/confirm-transaction/util'
|
||||||
|
|
||||||
export default class ConfirmTokenTransactionBase extends Component {
|
export default class ConfirmTokenTransactionBase extends Component {
|
||||||
@ -42,7 +43,8 @@ export default class ConfirmTokenTransactionBase extends Component {
|
|||||||
return this.context.t('noConversionRateAvailable')
|
return this.context.t('noConversionRateAvailable')
|
||||||
} else {
|
} else {
|
||||||
const fiatTransactionAmount = this.getFiatTransactionAmount()
|
const fiatTransactionAmount = this.getFiatTransactionAmount()
|
||||||
return formatCurrency(fiatTransactionAmount, currentCurrency)
|
const roundedFiatTransactionAmount = roundExponential(fiatTransactionAmount)
|
||||||
|
return formatCurrency(roundedFiatTransactionAmount, currentCurrency)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +56,8 @@ export default class ConfirmTokenTransactionBase extends Component {
|
|||||||
} else {
|
} else {
|
||||||
const fiatTransactionAmount = this.getFiatTransactionAmount()
|
const fiatTransactionAmount = this.getFiatTransactionAmount()
|
||||||
const fiatTotal = addFiat(fiatTransactionAmount, fiatTransactionTotal)
|
const fiatTotal = addFiat(fiatTransactionAmount, fiatTransactionTotal)
|
||||||
return formatCurrency(fiatTotal, currentCurrency)
|
const roundedFiatTotal = roundExponential(fiatTotal)
|
||||||
|
return formatCurrency(roundedFiatTotal, currentCurrency)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ import currencies from 'currency-formatter/currencies'
|
|||||||
import abi from 'human-standard-token-abi'
|
import abi from 'human-standard-token-abi'
|
||||||
import abiDecoder from 'abi-decoder'
|
import abiDecoder from 'abi-decoder'
|
||||||
import ethUtil from 'ethereumjs-util'
|
import ethUtil from 'ethereumjs-util'
|
||||||
|
import BigNumber from 'bignumber.js'
|
||||||
|
|
||||||
abiDecoder.addABI(abi)
|
abiDecoder.addABI(abi)
|
||||||
|
|
||||||
@ -137,3 +138,11 @@ export function convertTokenToFiat ({
|
|||||||
export function hasUnconfirmedTransactions (state) {
|
export function hasUnconfirmedTransactions (state) {
|
||||||
return unconfirmedTransactionsCountSelector(state) > 0
|
return unconfirmedTransactionsCountSelector(state) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function roundExponential (value) {
|
||||||
|
const PRECISION = 4
|
||||||
|
const bigNumberValue = new BigNumber(value)
|
||||||
|
|
||||||
|
// In JS, numbers with exponentials greater than 20 get displayed as an exponential.
|
||||||
|
return bigNumberValue.e > 20 ? Number(bigNumberValue.toPrecision(PRECISION)) : value
|
||||||
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { createSelector } from 'reselect'
|
import { createSelector } from 'reselect'
|
||||||
import txHelper from '../../lib/tx-helper'
|
import txHelper from '../../lib/tx-helper'
|
||||||
import { calcTokenAmount } from '../token-util'
|
import { calcTokenAmount } from '../token-util'
|
||||||
|
import { roundExponential } from '../helpers/confirm-transaction/util'
|
||||||
|
|
||||||
const unapprovedTxsSelector = state => state.metamask.unapprovedTxs
|
const unapprovedTxsSelector = state => state.metamask.unapprovedTxs
|
||||||
const unapprovedMsgsSelector = state => state.metamask.unapprovedMsgs
|
const unapprovedMsgsSelector = state => state.metamask.unapprovedMsgs
|
||||||
@ -133,7 +134,8 @@ export const tokenAmountAndToAddressSelector = createSelector(
|
|||||||
const toParam = params.find(param => param.name === TOKEN_PARAM_TO)
|
const toParam = params.find(param => param.name === TOKEN_PARAM_TO)
|
||||||
const valueParam = params.find(param => param.name === TOKEN_PARAM_VALUE)
|
const valueParam = params.find(param => param.name === TOKEN_PARAM_VALUE)
|
||||||
toAddress = toParam ? toParam.value : params[0].value
|
toAddress = toParam ? toParam.value : params[0].value
|
||||||
tokenAmount = valueParam ? Number(valueParam.value) : Number(params[1].value)
|
const value = valueParam ? Number(valueParam.value) : Number(params[1].value)
|
||||||
|
tokenAmount = roundExponential(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -151,7 +153,8 @@ export const approveTokenAmountAndToAddressSelector = createSelector(
|
|||||||
|
|
||||||
if (params && params.length) {
|
if (params && params.length) {
|
||||||
toAddress = params.find(param => param.name === TOKEN_PARAM_SPENDER).value
|
toAddress = params.find(param => param.name === TOKEN_PARAM_SPENDER).value
|
||||||
tokenAmount = Number(params.find(param => param.name === TOKEN_PARAM_VALUE).value)
|
const value = Number(params.find(param => param.name === TOKEN_PARAM_VALUE).value)
|
||||||
|
tokenAmount = roundExponential(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -170,11 +173,13 @@ export const sendTokenTokenAmountAndToAddressSelector = createSelector(
|
|||||||
|
|
||||||
if (params && params.length) {
|
if (params && params.length) {
|
||||||
toAddress = params.find(param => param.name === TOKEN_PARAM_TO).value
|
toAddress = params.find(param => param.name === TOKEN_PARAM_TO).value
|
||||||
tokenAmount = Number(params.find(param => param.name === TOKEN_PARAM_VALUE).value)
|
let value = Number(params.find(param => param.name === TOKEN_PARAM_VALUE).value)
|
||||||
|
|
||||||
if (tokenDecimals) {
|
if (tokenDecimals) {
|
||||||
tokenAmount = calcTokenAmount(tokenAmount, tokenDecimals)
|
value = calcTokenAmount(value, tokenDecimals)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tokenAmount = roundExponential(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
Loading…
Reference in New Issue
Block a user