Deduped random value generation from salt generation
This commit is contained in:
		@@ -1,7 +1,9 @@
 | 
			
		||||
import { addHexPrefix, stripHexPrefix } from 'ethereumjs-util';
 | 
			
		||||
import { addHexPrefix, sha3, stripHexPrefix } from 'ethereumjs-util';
 | 
			
		||||
import * as jsSHA3 from 'js-sha3';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
import { generatePseudoRandom256BitNumber } from './random';
 | 
			
		||||
 | 
			
		||||
const BASIC_ADDRESS_REGEX = /^(0x)?[0-9a-f]{40}$/i;
 | 
			
		||||
const SAME_CASE_ADDRESS_REGEX = /^(0x)?([0-9a-f]{40}|[0-9A-F]{40})$/;
 | 
			
		||||
const ADDRESS_LENGTH = 40;
 | 
			
		||||
@@ -43,4 +45,11 @@ export const addressUtils = {
 | 
			
		||||
    padZeros(address: string): string {
 | 
			
		||||
        return addHexPrefix(_.padStart(stripHexPrefix(address), ADDRESS_LENGTH, '0'));
 | 
			
		||||
    },
 | 
			
		||||
    generatePseudoRandomAddress(): string {
 | 
			
		||||
        const randomBigNum = generatePseudoRandom256BitNumber();
 | 
			
		||||
        const randomBuff = sha3(randomBigNum.toString());
 | 
			
		||||
        const addressLengthInBytes = 20;
 | 
			
		||||
        const randomAddress = `0x${randomBuff.slice(0, addressLengthInBytes).toString('hex')}`;
 | 
			
		||||
        return randomAddress;
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -12,3 +12,4 @@ export { fetchAsync } from './fetch_async';
 | 
			
		||||
export { signTypedDataUtils } from './sign_typed_data_utils';
 | 
			
		||||
export import AbiEncoder = require('./abi_encoder');
 | 
			
		||||
export * from './types';
 | 
			
		||||
export { generatePseudoRandom256BitNumber } from './random';
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								packages/utils/src/random.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								packages/utils/src/random.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
import { BigNumber } from './configured_bignumber';
 | 
			
		||||
 | 
			
		||||
const MAX_DIGITS_IN_UNSIGNED_256_INT = 78;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Generates a pseudo-random 256-bit number.
 | 
			
		||||
 * @return  A pseudo-random 256-bit number.
 | 
			
		||||
 */
 | 
			
		||||
export function generatePseudoRandom256BitNumber(): BigNumber {
 | 
			
		||||
    // BigNumber.random returns a pseudo-random number between 0 & 1 with a passed in number of decimal places.
 | 
			
		||||
    // Source: https://mikemcl.github.io/bignumber.js/#random
 | 
			
		||||
    const randomNumber = BigNumber.random(MAX_DIGITS_IN_UNSIGNED_256_INT);
 | 
			
		||||
    const factor = new BigNumber(10).pow(MAX_DIGITS_IN_UNSIGNED_256_INT - 1);
 | 
			
		||||
    const randomNumberScaledTo256Bits = randomNumber.times(factor).integerValue();
 | 
			
		||||
    return randomNumberScaledTo256Bits;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user