mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-30 08:09:15 +01:00
173 lines
4.5 KiB
TypeScript
173 lines
4.5 KiB
TypeScript
|
import { BigNumber } from 'bignumber.js';
|
||
|
|
||
|
import { addHexPrefix, BN } from 'ethereumjs-util';
|
||
|
import { EtherDenomination } from '../constants/common';
|
||
|
import { Numeric, NumericValue } from './Numeric';
|
||
|
|
||
|
export function decGWEIToHexWEI(decGWEI: number) {
|
||
|
return new Numeric(decGWEI, 10, EtherDenomination.GWEI)
|
||
|
.toBase(16)
|
||
|
.toDenomination(EtherDenomination.WEI)
|
||
|
.toString();
|
||
|
}
|
||
|
|
||
|
export function subtractHexes(aHexWEI: string, bHexWEI: string) {
|
||
|
return new Numeric(aHexWEI, 16)
|
||
|
.minus(new Numeric(bHexWEI, 16))
|
||
|
.round(6, BigNumber.ROUND_HALF_DOWN)
|
||
|
.toString();
|
||
|
}
|
||
|
|
||
|
export function addHexes(aHexWEI: string, bHexWEI: string) {
|
||
|
return new Numeric(aHexWEI, 16)
|
||
|
.add(new Numeric(bHexWEI, 16))
|
||
|
.round(6, BigNumber.ROUND_HALF_DOWN)
|
||
|
.toString();
|
||
|
}
|
||
|
|
||
|
export function decWEIToDecETH(decWEI: string) {
|
||
|
return new Numeric(decWEI, 10, EtherDenomination.WEI)
|
||
|
.toDenomination(EtherDenomination.ETH)
|
||
|
.toString();
|
||
|
}
|
||
|
|
||
|
export function hexWEIToDecETH(hexWEI: string) {
|
||
|
return new Numeric(hexWEI, 16, EtherDenomination.WEI)
|
||
|
.toDenomination(EtherDenomination.ETH)
|
||
|
.toBase(10)
|
||
|
.toString();
|
||
|
}
|
||
|
|
||
|
export function decEthToConvertedCurrency(
|
||
|
ethTotal: NumericValue,
|
||
|
convertedCurrency?: string,
|
||
|
conversionRate?: number,
|
||
|
) {
|
||
|
let numeric = new Numeric(ethTotal, 10, EtherDenomination.ETH);
|
||
|
|
||
|
if (convertedCurrency !== EtherDenomination.ETH) {
|
||
|
numeric = numeric.applyConversionRate(conversionRate);
|
||
|
}
|
||
|
|
||
|
return numeric.round(2);
|
||
|
}
|
||
|
|
||
|
export function getWeiHexFromDecimalValue({
|
||
|
value,
|
||
|
conversionRate = 1,
|
||
|
fromDenomination,
|
||
|
fromCurrency,
|
||
|
invertConversionRate = false,
|
||
|
}: {
|
||
|
value: NumericValue;
|
||
|
conversionRate?: number;
|
||
|
fromDenomination?: EtherDenomination;
|
||
|
fromCurrency?: string;
|
||
|
invertConversionRate?: boolean;
|
||
|
}) {
|
||
|
let numeric = new Numeric(value, 10, fromDenomination);
|
||
|
if (fromCurrency !== EtherDenomination.ETH) {
|
||
|
numeric = numeric.applyConversionRate(conversionRate, invertConversionRate);
|
||
|
}
|
||
|
return numeric.toBase(16).toDenomination(EtherDenomination.WEI).toString();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts a BN object to a hex string with a '0x' prefix
|
||
|
*
|
||
|
* @param inputBn - The BN to convert to a hex string
|
||
|
* @returns A '0x' prefixed hex string
|
||
|
*/
|
||
|
export function bnToHex(inputBn: BN) {
|
||
|
return addHexPrefix(inputBn.toString(16));
|
||
|
}
|
||
|
|
||
|
export function getEthConversionFromWeiHex({
|
||
|
value,
|
||
|
fromCurrency = EtherDenomination.ETH,
|
||
|
conversionRate,
|
||
|
numberOfDecimals = 6,
|
||
|
}: {
|
||
|
value: NumericValue;
|
||
|
conversionRate?: number;
|
||
|
fromCurrency?: EtherDenomination | string;
|
||
|
numberOfDecimals?: number;
|
||
|
}) {
|
||
|
const denominations = [
|
||
|
EtherDenomination.ETH,
|
||
|
EtherDenomination.GWEI,
|
||
|
EtherDenomination.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 = EtherDenomination.ETH,
|
||
|
toCurrency,
|
||
|
conversionRate,
|
||
|
numberOfDecimals,
|
||
|
toDenomination = EtherDenomination.ETH,
|
||
|
}: {
|
||
|
value: NumericValue;
|
||
|
fromCurrency?: EtherDenomination | string;
|
||
|
toCurrency?: EtherDenomination | string;
|
||
|
conversionRate?: number;
|
||
|
numberOfDecimals?: number;
|
||
|
toDenomination?: EtherDenomination;
|
||
|
}) {
|
||
|
let numeric = new Numeric(value, 16, EtherDenomination.WEI);
|
||
|
if (fromCurrency !== toCurrency) {
|
||
|
numeric = numeric.applyConversionRate(conversionRate);
|
||
|
}
|
||
|
return numeric
|
||
|
.toBase(10)
|
||
|
.toDenomination(toDenomination)
|
||
|
.round(numberOfDecimals, BigNumber.ROUND_HALF_DOWN)
|
||
|
.toString();
|
||
|
}
|
||
|
|
||
|
export function sumHexes(first: string, ...args: string[]) {
|
||
|
const firstValue = new Numeric(first, 16);
|
||
|
const total = args.reduce(
|
||
|
(acc, hexAmount) => acc.add(new Numeric(hexAmount, 16)),
|
||
|
firstValue,
|
||
|
);
|
||
|
|
||
|
return total.toPrefixedHexString();
|
||
|
}
|
||
|
|
||
|
export function hexWEIToDecGWEI(value: number | string | BigNumber | BN) {
|
||
|
return new Numeric(value, 16, EtherDenomination.WEI)
|
||
|
.toBase(10)
|
||
|
.toDenomination(EtherDenomination.GWEI)
|
||
|
.toString();
|
||
|
}
|
||
|
|
||
|
export function decimalToHex(decimal: number | string | BigNumber | BN) {
|
||
|
return new Numeric(decimal, 10).toBase(16).toString();
|
||
|
}
|
||
|
|
||
|
export function hexToDecimal(hexValue: number | string | BigNumber | BN) {
|
||
|
return new Numeric(hexValue, 16).toBase(10).toString();
|
||
|
}
|