Verifiable Randomness Documentation

Verifiable Randomness Systems

View the Project on GitHub blockrand-api/blockrand-js

Why One Seed Is Not Enough: Deterministic Counters and Canonical Randomness

Developers often assume that once they have a single random seed, everything else becomes simple.

This is a dangerous assumption.

In systems that require fairness, replayability, or verification, a seed alone is not sufficient. You also need a deterministic and canonical way to derive multiple outcomes from that seed.

This document explains why.

The Common Misconception

A typical belief looks like this:

“I have a seed. If my algorithm is deterministic, I can always regenerate the same random values.”

This is only partially true.

A seed guarantees determinism, but it does NOT guarantee:

The Core Problem: Multiple Random Calls

Real systems never generate just one random value. They generate many:

  1. A coin flip
  2. Then a dice roll
  3. Then a card
  4. Then a shuffle
  5. Then another roll

If all of these are derived from the same seed without structure, you immediately face ambiguity. Questions arise:

Without strict rules, verification becomes impossible.

Why Order Matters

Consider two systems using the same seed.

Even with the same seed and same algorithm, the results differ. A verifier has no way to know which order was “correct”. This destroys auditability.

The Solution: Explicit Counters

To make randomness verifiable, each derived value must be tied to an explicit, immutable counter.

Instead of:

“Give me the next random number”

You must say:

“Give me the random number at index 3

The index is part of the input. Not implicit state. Not execution order. Not call count.

What a Counter Actually Does

A counter:

With counters, any value can be recomputed in isolation.

One Seed, Many Outcomes — Done Correctly

The correct model looks like this:

FinalSeed + CounterIndex → One specific outcome

Examples:

Each counter index has a fixed meaning. This mapping must never change.

Why This Must Be Canonical

If counter meanings are flexible, verification breaks.

A canonical mapping means:

Once published, counter allocation becomes part of the protocol. Changing it later breaks backward verification.

Why “Just Iterate the RNG” Is Not Safe

Some systems simply advance the RNG state repeatedly. This creates hidden dependencies:

Counters remove all of this fragility.

Counters Also Prevent Cheating

Without counters, a malicious server can:

  1. Generate multiple sequences
  2. Choose the favorable one
  3. Claim it was “the” result

With counters:

We use deterministic published counters in BlockRand, so that we achieve the above