The 30-second summary

Chainlink VRF delivers a random number to a smart contract along with an on-chain cryptographic proof. The proof is verified inside the EVM, so any contract that consumes VRF gets an unforgeable, on-chain-checkable randomness primitive. The cost is real: gas for the request, gas for the callback, LINK for the oracle, and a few blocks of latency.

Provable.io delivers the same "publish-a-hash, then reveal" guarantee — but off-chain, over HTTP, in tens of milliseconds, for free at the volumes most apps care about. You get a serverHash committed in advance and a deterministic outcome anyone can re-derive from the seeds.

If your randomness consumer is a smart contract that has to settle on-chain in the same transaction, use VRF. If your consumer is a web app, a game server, a backend service, or anything that just needs to publish proof of the draw, an HTTP API is dramatically simpler and cheaper.

Feature matrix

CapabilityProvable.ioChainlink VRF
Where the result landsHTTP response (JSON)Smart contract callback (on-chain)
Verification surfaceAnyone with the seeds + hash, off-chainAnyone on-chain via the VRF coordinator
Cost per drawFree up to per-account daily quotaGas + LINK fee (varies by chain & gas price)
Latency~tens of msA few blocks (seconds to ~minute)
Pre-commitment to seedYes — /api/commit publishes serverHash before the callVRF public key is fixed per subscription
Game primitivesdice, shuffle, weighted pick, bytes, distributionsraw uint256 — you implement the rest
Streaming / batchYes — SSE + batch endpointOne callback per request
Open-source verifierYes (npm package)Yes (Solidity verifier in Chainlink contracts)
Best forWeb apps, game servers, raffles, A/B tests, off-chain mintsSmart contracts that consume randomness on-chain

When Chainlink VRF is the right answer

VRF is purpose-built for one job and does it extremely well: getting trustworthy randomness into a smart contract in a way the EVM itself can verify. Reach for it when:

When Provable.io is the right answer

The vast majority of "I need fair randomness" use cases don't actually need an on-chain settlement — they need a result the public can check. For those, an off-chain provably fair API is the right shape:

Try a provably fair draw with no wallet

This is the off-chain equivalent of requestRandomWords — except the result is back in milliseconds and the proof is a tiny JSON payload anyone can verify.

curl "https://api.provable.io/api/ints?clientSeed=vrf-alternative-demo&count=1&min=1&max=1000000"

Hybrid patterns

Off-chain doesn't have to mean "not anchored on-chain." Two common patterns:

  1. On-chain commit, off-chain reveal. Anchor the serverHash in a cheap on-chain transaction before the event. Run the draw via Provable.io. Anchor the revealed serverSeed after. You get on-chain provability without paying LINK per draw.
  2. Client seed from a block hash. Use a future block hash as the clientSeed. Neither side controls it, and the timing is unambiguous.

FAQ

Is Provable.io a drop-in replacement for VRF?

If your consumer lives off-chain — yes, with a simpler API and zero per-call cost. If your consumer is a smart contract that must verify randomness inside its own execution, no — VRF is the right tool for that job and we don't try to be it.

What's the worst-case trust assumption?

That Provable.io published an honest serverHash before learning the clientSeed. The commit-reveal flow (/api/commit + /api/reveal) eliminates the rest of the surface: the server hash is published before any client input, so the server can't grind.

What about VRF v2.5 subscriptions / native LINK billing?

Those make VRF cheaper, but the structural cost — gas for two on-chain transactions per draw — remains. For high-frequency off-chain consumers (think: a card game dealing thousands of hands an hour), an HTTP API at zero marginal cost is still the right shape.

Next steps