First VRF / RNG provider on Robinhood Chain

Randomness
no one can
bend or bias.

Quiver brings verifiable on-chain randomness to Robinhood Chain — a two-party commit–reveal protocol where a fair outcome holds as long as either party is honest. Request randomness and get a result your users can verify on-chain.

1keccak per reveal
2committed secrets
Liveon testnet 46630
quiver · verifiable randomness live
userRandom0x9f2a4c7e…8d3059
providerReveal0x4d1e0a77…b95e21
blockHash0x00e2f1ab63c8d4
keccak256( userRandom ‖ providerReveal ‖ blockHash )
randomNumber0x7a3f9c1e5b2d8046a1f4
sequence #1043
Deployed & verified on
Robinhood Testnet · 46630 Robinhood Chain · 4663Arbitrum Orbit · ETH gasFoundry · viem · pnpm
The commit–reveal in three moves

Two secrets, committed before
either is ever seen.

A naïve blockhash is chosen by the block producer. Quiver instead binds two independent contributions so no single actor can steer the outcome.

01 / COMMIT

Provider publishes a commitment

The provider posts the tip of a keccak hash chain, chain[N] = keccak²⁵⁶ᴺ(seed). Every value behind it is fixed — and hidden — the moment the commitment is on-chain.

02 / REQUEST

Your contract requests randomness

It submits its own committed value and calls request, reserving a sequence number — without either side seeing the other's value yet.

03 / FULFILL

The keeper fulfills it

The keeper reveals the provider's value; the coordinator verifies it against the commitment and combines both into a randomNumber, delivered to your callback.

Why Quiver

Built for outcomes people can trust.

Neither party can bias it

Two values, each committed before either is revealed. The result is a fixed function of both — fair as long as one side is honest.

Bounded-gas verification

A moving anchor makes each sequential reveal cost exactly one keccak hash, no matter how many requests the provider has served.

Callbacks can't be stuck

State advances before your callback runs. If it reverts, randomness is buffered and anyone can retry — the provider is still paid.

Tamper-proof results

Every reveal is checked on-chain against the provider's published commitment. A wrong value fails the hash check and is rejected.

Push and pull flows

Get a callback in your contract, or request and self-reveal. Fold in blockhash when you need provider-unpredictability too.

SDK, keeper, examples

A TypeScript client, the Fletcher keeper service, and reference consumers (CoinFlip, DiceGame) ship in the box.

Integrate in minutes

Extend one base contract.
Get a callback.

  • Inherit QuiverConsumer and call _requestRandomness.
  • Receive verifiable randomness in _fulfillRandomness.
  • Or drive it from TypeScript with @quiver/sdk and viem.
Read the integration guide →
contracts/CoinFlip.sol
import {QuiverConsumer} from "quiver/QuiverConsumer.sol";

contract CoinFlip is QuiverConsumer {
    mapping(uint64 => address) public player;

    constructor(address quiver, address provider)
        QuiverConsumer(quiver, provider) {}

    // Request randomness — pays the fee, reserves a sequence number.
    function flip(bytes32 userRandom) external returns (uint64 seq) {
        seq = _requestRandomness(userRandom);
        player[seq] = msg.sender;
    }

    // The keeper reveals; the coordinator calls your contract back.
    function _fulfillRandomness(uint64 seq, address, bytes32 rnd)
        internal override
    {
        bool heads = uint256(rnd) & 1 == 0;   // verifiable randomness
        // ... settle the bet ...
    }
}
Core concepts

The moving parts, in plain terms.

CoordinatorThe on-chain contract (QuiverCoordinator) that escrows fees, stores requests, verifies reveals, and delivers callbacks.
ProviderRegisters a commitment and serves the random values behind it. Earns a per-request fee.
KeeperThe provider's off-chain service (Fletcher) that watches for requests and submits reveals.
Sequence numberThe id assigned to each request — how you track it from request through fulfillment.

Bring provable fairness
to your Robinhood Chain app.

Games, lotteries, mints, fair ordering, committee selection — anything that needs randomness no one can predict or manipulate.