aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package.json2
-rw-r--r--ui/app/components/pending-tx.js30
-rw-r--r--ui/app/conversion-util.js141
3 files changed, 51 insertions, 122 deletions
diff --git a/package.json b/package.json
index 771e73108..82f464986 100644
--- a/package.json
+++ b/package.json
@@ -52,7 +52,6 @@
"async": "^2.5.0",
"await-semaphore": "^0.1.1",
"babel-runtime": "^6.23.0",
- "bignumber.js": "^4.0.4",
"bip39": "^2.2.0",
"bluebird": "^3.5.0",
"bn.js": "^4.11.7",
@@ -116,7 +115,6 @@
"pump": "^1.0.2",
"pumpify": "^1.3.4",
"qrcode-npm": "0.0.3",
- "ramda": "^0.24.1",
"react": "^15.0.2",
"react-addons-css-transition-group": "^15.6.0",
"react-dom": "^15.5.4",
diff --git a/ui/app/components/pending-tx.js b/ui/app/components/pending-tx.js
index a0d59207d..ab425abf5 100644
--- a/ui/app/components/pending-tx.js
+++ b/ui/app/components/pending-tx.js
@@ -85,6 +85,8 @@ PendingTx.prototype.render = function () {
const txFeeBn = gasBn.mul(gasPriceBn)
+ const amountBn = hexToBn(txParams.value)
+
// TODO: insufficient balance should be handled on send screen
// const maxCost = txFeeBn.add(amountBn)
// const balanceBn = hexToBn(balance)
@@ -97,39 +99,27 @@ PendingTx.prototype.render = function () {
const endOfToAddress = txParams.to.slice(txParams.to.length - 4)
const gasFeeInUSD = conversionUtil(txFeeBn, {
- fromNumericBase: 'BN',
- toNumericBase: 'dec',
- fromDenomination: 'WEI',
- fromCurrency: 'ETH',
+ fromFormat: 'BN',
+ fromCurrency: 'GWEI',
toCurrency: 'USD',
- numberOfDecimals: 2,
conversionRate,
})
const gasFeeInETH = conversionUtil(txFeeBn, {
- fromNumericBase: 'BN',
- toNumericBase: 'dec',
- fromDenomination: 'WEI',
- fromCurrency: 'ETH',
+ fromFormat: 'BN',
+ fromCurrency: 'GWEI',
toCurrency: 'ETH',
- numberOfDecimals: 6,
conversionRate,
})
- const totalInUSD = conversionUtil(txParams.value, {
- fromNumericBase: 'hex',
- toNumericBase: 'dec',
- fromCurrency: 'ETH',
+ const totalInUSD = conversionUtil(amountBn, {
+ fromFormat: 'BN',
toCurrency: 'USD',
- numberOfDecimals: 2,
conversionRate,
})
- const totalInETH = conversionUtil(txParams.value, {
- fromNumericBase: 'hex',
- toNumericBase: 'dec',
- fromCurrency: 'ETH',
+ const totalInETH = conversionUtil(amountBn, {
+ fromFormat: 'BN',
toCurrency: 'ETH',
conversionRate,
- numberOfDecimals: 6,
})
this.inputs = []
diff --git a/ui/app/conversion-util.js b/ui/app/conversion-util.js
index 5e1125194..8f2214500 100644
--- a/ui/app/conversion-util.js
+++ b/ui/app/conversion-util.js
@@ -1,108 +1,49 @@
-/* Currency Conversion Utility
-* This utility function can be used for converting currency related values within metamask.
-* The caller should be able to pass it a value, along with information about the value's
-* numeric base, denomination and currency, and the desired numeric base, denomination and
-* currency. It should return a single value.
-*
-* @param {(number | string | BN)} value The value to convert.
-* @param {Object} [options] Options to specify details of the conversion
-* @param {string} [options.fromCurrency = 'ETH' | 'USD'] The currency of the passed value
-* @param {string} [options.toCurrency = 'ETH' | 'USD'] The desired currency of the result
-* @param {string} [options.fromNumericBase = 'hex' | 'dec' | 'BN'] The numeric basic of the passed value.
-* @param {string} [options.toNumericBase = 'hex' | 'dec' | 'BN'] The desired numeric basic of the result.
-* @param {string} [options.fromDenomination = 'WEI'] The denomination of the passed value
-* @param {number} [options.numberOfDecimals] The desired number of in the result
-* @param {number} [options.conversionRate] The rate to use to make the fromCurrency -> toCurrency conversion
-* @returns {(number | string | BN)}
-*
-* The utility passes value along with the options as a single object to the `converter` function.
-* `converter` uses Ramda.js to apply a composition of conditional setters to the `value` property, depending
-* on the accompanying options. Some of these conditional setters are selected via key-value maps, where
-* the keys are specified in the options parameters and the values are setter functions.
-*/
-
-const BigNumber = require('bignumber.js')
-const R = require('ramda')
-const { stripHexPrefix } = require('ethereumjs-util')
-
-BigNumber.config({
- ROUNDING_MODE: BigNumber.ROUND_HALF_DOWN,
-})
-
-// Big Number Constants
-const BIG_NUMBER_WEI_MULTIPLIER = new BigNumber('1000000000000000000')
-
-// Individual Setters
-const convert = R.invoker(1, 'times')
-const round = R.invoker(2, 'toFormat')(R.__, BigNumber.ROUND_DOWN)
-
-// Setter Maps
-const toBigNumber = {
- hex: n => new BigNumber(stripHexPrefix(n), 16),
- dec: n => new BigNumber(n, 10),
- BN: n => new BigNumber(n.toString(16), 16),
-}
-const toNormalizedDenomination = {
- WEI: bigNumber => bigNumber.div(BIG_NUMBER_WEI_MULTIPLIER)
-}
-const baseChange = {
- hex: n => n.toString(16),
- dec: n => n.toString(10),
- BN: n => new BN(n.toString(16)),
-}
-
-// Predicates
-const fromAndToCurrencyPropsNotEqual = R.compose(
- R.not,
- R.eqBy(R.__, 'fromCurrency', 'toCurrency'),
- R.flip(R.prop)
-)
-
-// Lens
-const valuePropertyLense = R.over(R.lensProp('value'))
-
-// conditional 'value' setting wrappers
-const whenPredSetWithPropAndSetter = (pred, prop, setter) => R.when(
- pred,
- R.converge(
- valuePropertyLense,
- [R.pipe(R.prop(prop), setter), R.identity]
- )
-)
-const whenPropApplySetterMap = (prop, setterMap) => whenPredSetWithPropAndSetter(
- R.prop(prop),
- prop,
- R.prop(R.__, setterMap)
-)
-
-// Conversion utility function
-const converter = R.pipe(
- whenPropApplySetterMap('fromNumericBase', toBigNumber),
- whenPropApplySetterMap('fromDenomination', toNormalizedDenomination),
- whenPredSetWithPropAndSetter(fromAndToCurrencyPropsNotEqual, 'conversionRate', convert),
- whenPredSetWithPropAndSetter(R.prop('numberOfDecimals'), 'numberOfDecimals', round),
- whenPropApplySetterMap('toNumericBase', baseChange),
- R.view(R.lensProp('value'))
-);
+const {
+ numericBalance,
+ parseBalance,
+ formatBalance,
+ normalizeToWei,
+ valueTable,
+} = require('./util')
+const hexToBn = require('../../app/scripts/lib/hex-to-bn')
+const { BN } = require('ethereumjs-util')
+const GWEI_MULTIPLIER = normalizeToWei(hexToBn(valueTable.gwei.toString(16)), 'gwei');
const conversionUtil = (value, {
- fromCurrency = null,
- toCurrency = fromCurrency,
- fromNumericBase,
- toNumericBase,
- fromDenomination,
- numberOfDecimals,
- conversionRate,
-}) => converter({
fromCurrency,
toCurrency,
- fromNumericBase,
- toNumericBase,
- fromDenomination,
- numberOfDecimals,
+ fromFormat,
+ toFormat,
+ precision = 2,
conversionRate,
- value,
-});
+}) => {
+ let result;
+
+ if (fromFormat === 'BN') {
+ if (fromCurrency !== 'GWEI') {
+ result = normalizeToWei(value, 'gwei')
+ }
+ else {
+ result = value
+ }
+
+ result = result.toString(16)
+ result = formatBalance(result, 9)
+ result = result.split(' ')
+ result = Number(result[0]) * 1000000000
+ }
+
+ if (fromCurrency === 'GWEI') {
+ result = result / 1000000000
+ }
+
+ if (toCurrency === 'USD') {
+ result = result * conversionRate
+ result = result.toFixed(precision)
+ }
+
+ return result
+};
module.exports = {
conversionUtil,