Files

32 lines
1.2 KiB
TypeScript

import * as crypto from 'crypto';
import * as ethUtil from 'ethereumjs-util';
import { BigNumber } from '@0x/utils';
/**
* Generate a random integer between `min` and `max`, inclusive.
*/
export function getRandomInteger(min: BigNumber | string | number, max: BigNumber | string | number): BigNumber {
const range = new BigNumber(max).minus(min);
return getRandomPortion(range).plus(min);
}
/**
* Generate a random integer between `0` and `total`, inclusive.
*/
function getRandomPortion(total: BigNumber | string | number): BigNumber {
return new BigNumber(total).times(getRandomFloat(0, 1)).integerValue(BigNumber.ROUND_HALF_UP);
}
export function randomAddress(): string {
return ethUtil.bufferToHex(crypto.randomBytes(20));
}
/**
* Generate a random, high-precision decimal between `min` and `max`, inclusive.
*/
export function getRandomFloat(min: BigNumber | string | number, max: BigNumber | string | number): BigNumber {
// Generate a really high precision number between [0, 1]
const r = new BigNumber(crypto.randomBytes(32).toString('hex'), 16).dividedBy(new BigNumber(2).pow(256).minus(1));
return new BigNumber(max).minus(min).times(r).plus(min);
}