text: import * as ethUtil from 'cfx-util'
  import { ETH, GWEI, WEI } from '../constants/common'
  import {
    conversionUtil,
    addCurrencies,
    subtractCurrencies,
  } from './conversion-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: 'CFX',
      toCurrency: convertedCurrency,
      numberOfDecimals: 2,
      conversionRate,
    })
  }
  
  export function decGWEIToHexWEI (decGWEI) {
    return conversionUtil(decGWEI, {
      fromNumericBase: 'dec',
      toNumericBase: 'hex',
      fromDenomination: 'GWEI',
      toDenomination: 'WEI',
    })
  }
  
  export function decWEIToHexWEI (decWEI) {
    return conversionUtil(decWEI, {
      fromNumericBase: 'dec',
      toNumericBase: 'hex',
      fromDenomination: 'WEI',
      toDenomination: 'WEI',
    })
  }
  
  export function hexWEIToDecGWEI (hexWEI) {
    return conversionUtil(hexWEI, {
      fromNumericBase: 'hex',
      toNumericBase: 'dec',
      fromDenomination: 'WEI',
      toDenomination: 'GWEI',
    })
  }
  
  export function hexWEIToDecWEI (hexWEI) {
    return conversionUtil(hexWEI, {
      fromNumericBase: 'hex',
      toNumericBase: 'dec',
      fromDenomination: 'WEI',
      toDenomination: 'WEI',
    })
  }
  
  export function hexWEIToDecEth (hexWei) {
    return conversionUtil(hexWei, {
      fromNumericBase: 'hex',
      toNumericBase: 'dec',
      fromDenomination: 'WEI',
      toDenomination: 'ETH',
    })
  }
  