import { ETH, GWEI, WEI } from '../constants/common'; import { addHexPrefix } from '../../../app/scripts/lib/util'; import { conversionUtil, addCurrencies, subtractCurrencies, } from '../../../shared/modules/conversion.utils'; import { formatCurrency } from './confirm-tx.util'; export function bnToHex(inputBn) { return 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 addHexes(aHexWEI, bHexWEI) { return addCurrencies(aHexWEI, bHexWEI, { aBase: 16, bBase: 16, toNumericBase: 'hex', numberOfDecimals: 6, }); } export function subtractHexes(aHexWEI, bHexWEI) { return subtractCurrencies(aHexWEI, bHexWEI, { aBase: 16, bBase: 16, toNumericBase: 'hex', numberOfDecimals: 6, }); } export function sumHexWEIs(hexWEIs) { return hexWEIs.filter(Boolean).reduce(addHexes); } export function sumHexWEIsToUnformattedFiat( hexWEIs, convertedCurrency, conversionRate, ) { const hexWEIsSum = sumHexWEIs(hexWEIs); const convertedTotal = decEthToConvertedCurrency( getValueFromWeiHex({ value: hexWEIsSum, toCurrency: 'ETH', numberOfDecimals: 4, }), convertedCurrency, conversionRate, ); return convertedTotal; } export function sumHexWEIsToRenderableFiat( hexWEIs, convertedCurrency, conversionRate, ) { const convertedTotal = sumHexWEIsToUnformattedFiat( hexWEIs, convertedCurrency, conversionRate, ); return formatCurrency(convertedTotal, convertedCurrency); }