1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/app/helpers/utils/conversions.util.js
2020-10-06 15:58:38 -02:30

185 lines
4.2 KiB
JavaScript

import ethUtil from 'ethereumjs-util'
import BigNumber from 'bignumber.js'
import { ETH, GWEI, WEI } from '../constants/common'
import { conversionUtil, addCurrencies, subtractCurrencies } from './conversion-util'
import {
formatCurrency,
} from './confirm-tx.util'
export function bnToHex (inputBn) {
return ethUtil.addHexPrefix(inputBn.toString(16))
}
export function hexToDecimal (hexValue) {
return conversionUtil(hexValue, {
fromNumericBase: 'hex',
toNumericBase: 'dec',
})
}
export function decimalToHex (decimal) {
return conversionUtil(decimal, {
fromNumericBase: 'dec',
toNumericBase: 'hex',
})
}
export function getEthConversionFromWeiHex ({ value, fromCurrency = ETH, conversionRate, numberOfDecimals = 6 }) {
const denominations = [fromCurrency, GWEI, WEI]
let nonZeroDenomination
for (let i = 0; i < denominations.length; i++) {
const convertedValue = getValueFromWeiHex({
value,
conversionRate,
fromCurrency,
toCurrency: fromCurrency,
numberOfDecimals,
toDenomination: denominations[i],
})
if (convertedValue !== '0' || i === denominations.length - 1) {
nonZeroDenomination = `${convertedValue} ${denominations[i]}`
break
}
}
return nonZeroDenomination
}
export function getValueFromWeiHex ({
value,
fromCurrency = ETH,
toCurrency,
conversionRate,
numberOfDecimals,
toDenomination,
}) {
return conversionUtil(value, {
fromNumericBase: 'hex',
toNumericBase: 'dec',
fromCurrency,
toCurrency,
numberOfDecimals,
fromDenomination: WEI,
toDenomination,
conversionRate,
})
}
export function getWeiHexFromDecimalValue ({
value,
fromCurrency,
conversionRate,
fromDenomination,
invertConversionRate,
}) {
return conversionUtil(value, {
fromNumericBase: 'dec',
toNumericBase: 'hex',
toCurrency: ETH,
fromCurrency,
conversionRate,
invertConversionRate,
fromDenomination,
toDenomination: WEI,
})
}
export function addHexWEIsToDec (aHexWEI, bHexWEI) {
return addCurrencies(aHexWEI, bHexWEI, {
aBase: 16,
bBase: 16,
fromDenomination: 'WEI',
numberOfDecimals: 6,
})
}
export function subtractHexWEIsToDec (aHexWEI, bHexWEI) {
return subtractCurrencies(aHexWEI, bHexWEI, {
aBase: 16,
bBase: 16,
fromDenomination: 'WEI',
numberOfDecimals: 6,
})
}
export function decEthToConvertedCurrency (ethTotal, convertedCurrency, conversionRate) {
return conversionUtil(ethTotal, {
fromNumericBase: 'dec',
toNumericBase: 'dec',
fromCurrency: 'ETH',
toCurrency: convertedCurrency,
numberOfDecimals: 2,
conversionRate,
})
}
export function decGWEIToHexWEI (decGWEI) {
return conversionUtil(decGWEI, {
fromNumericBase: 'dec',
toNumericBase: 'hex',
fromDenomination: 'GWEI',
toDenomination: 'WEI',
})
}
export function hexWEIToDecGWEI (decGWEI) {
return conversionUtil(decGWEI, {
fromNumericBase: 'hex',
toNumericBase: 'dec',
fromDenomination: 'WEI',
toDenomination: 'GWEI',
})
}
export function decETHToDecWEI (decEth) {
return conversionUtil(decEth, {
fromNumericBase: 'dec',
toNumericBase: 'dec',
fromDenomination: 'ETH',
toDenomination: 'WEI',
})
}
export function hexWEIToDecETH (hexWEI) {
return conversionUtil(hexWEI, {
fromNumericBase: 'hex',
toNumericBase: 'dec',
fromDenomination: 'WEI',
toDenomination: 'ETH',
})
}
export function hexMax (...hexNumbers) {
let max = hexNumbers[0]
hexNumbers.slice(1).forEach((hexNumber) => {
if ((new BigNumber(hexNumber, 16)).gt(max, 16)) {
max = hexNumber
}
})
return max
}
export function addHexes (aHexWEI, bHexWEI) {
return addCurrencies(aHexWEI, bHexWEI, {
aBase: 16,
bBase: 16,
toNumericBase: 'hex',
numberOfDecimals: 6,
})
}
export function sumHexWEIsToRenderableFiat (hexWEIs, convertedCurrency, conversionRate) {
const hexWEIsSum = hexWEIs.filter((n) => n).reduce(addHexes)
const ethTotal = decEthToConvertedCurrency(
getValueFromWeiHex({
value: hexWEIsSum, toCurrency: 'ETH', numberOfDecimals: 4,
}),
convertedCurrency,
conversionRate,
)
return formatCurrency(ethTotal, convertedCurrency)
}