1
0
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:
Alexander Tseung 2018-07-27 18:02:21 -07:00 committed by GitHub
commit fa4423bab2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 6 deletions

View File

@ -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 {

View File

@ -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)
} }
} }

View File

@ -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
}

View File

@ -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 {