mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
185 lines
4.2 KiB
JavaScript
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)
|
|
}
|