@pooltogether/uniform-random-number

1.0.0-beta.2 • Public • Published

Uniform Random Number

CircleCI

This Solidity library eliminates module bias when using a large number to select from a limited range of numbers.

For example:

  • Assume the max unsigned integer is 5
  • random() selects an integer between 0 and 5

We want to use the random number to select a value between 0 and 3.

selection = random() % 4

The above might do, until we realize that:

random() selection
0 0
1 1
2 2
3 3
4 0
5 1

Notice that 0 and 1 are overrepresented. This is modulo bias, and is problematic when making fair selection algorithms.

This library mitigates modulo bias using an algorithm described in this article.

Installation

Add to your package.json:

{
  "dependencies": {
    "@pooltogether/uniform-random-number": "pooltogether/uniform-random-number#master"
  }
}

Usage

import "pooltogether/uniform-random-number/contracts/UniformRandomNumber.sol";

// ...

uint256 randomNumber = uint256(keccak('Hello'));
uint256 upperLimit = 10;
UniformRandomNumber.uniform(randomNumber, upperLimit);

Audit

This code has been audited by OpenZeppelin and Quantstamp as part of the PoolTogether codebase.

Readme

Keywords

none

Package Sidebar

Install

npm i @pooltogether/uniform-random-number

Weekly Downloads

413

Version

1.0.0-beta.2

License

SEE LICENSE IN LICENSE

Unpacked Size

178 kB

Total Files

21

Last publish

Collaborators

  • asselstine