Show and Tell

Agreed Randomness

This page describes an implementation of the agreed randomness algorithm. You can see its status on the pool page.

If you would like become a participant, please email

Implementation Details

This implementation uses 1024-bit random values and SHA3-512 hashes.

Every UTC hour, it goes through one round of this algorithm. Every round is named after the UTC time in ISO 8601 format, e.g. 20200523T220000Z.

1. Commit

At top of every UTC hour, a new random value and a new hash is generated.

The random value is generated using the command openssl rand --hex 128.

The hash of that value is generated using the command openssl sha3-512 --hex.

The hash value is then revealed at the following path: /random/participant/<round_time>/hash, e.g. random/participant/20200523T220000Z/hash.

2. Record

At 15 minutes past every UTC hour, a collector would collect all of the hashes from the participants.

Each URL is attempted at most three times with a 60 second timeout between the attempts. Each attempt has a 30 second timeout. Errors are also recorded for debugging purposes.

Normally a participant would not need to collect its own hash value, however since this implementation is designed for demonstration purposes, it also collects its own hash value.

3. Reveal

At 30 minutes past every UTC hour, the random value generated earlier is revealed at the following URL path: /random/participant/<round_time>/value, e.g. random/participant/20200523T220000Z/hash.

4. Verify

At 45 minutes past every UTC hour, a collector would collect all of the values from the participants.

The process is similar to the record stage, with the addition of verifying the collected value against the generated hash.

5. Combine

Immediately after all of the value are verified, they are combined using XOR and published as the result for the round.