Game outcomes
Reveal deterministic candidates through an authenticated callback, then let the player choose or mint in a separate transaction.
Verifiable randomness for Arc Chain.
D20DAO combines signed AirnodeHub data
with a verifiable random function (VRF).
≈8 blocksEstimated average completion
01 / THE ENTROPY PATH
D20DAO prepares signed API data locally for each 200-block epoch. A paid request triggers publication, then a future block hash binds the fixed input for a verifiable result.
The current epoch, catalog and start-minus-one anchor select a fixed recipe. Idle epochs stay local.
A paid request escrows its fee. The keeper publishes the first valid packet for live demand.
A block strictly after publication supplies the target hash. The fixed-key proof is verified and the result delivered.
Signed API response
Request-bound VRF
Proof and result
02 / SOURCES THROUGH AIRNODEHUB
From market activity to quantum numbers, D20DAO brings signed data from AirnodeHub into a shared, verifiable randomness process.
The source supplies an input; your application decides how to use the verified result. Build game outcomes, community selections or automated decisions from the same random word.
Hyperliquid
ANU
TickerLayer
TickerLayer
Each published source record is preserved onchain, so anyone can check its signature as part of replaying a result.
03 / INSIDE THE KEEPER
From local preparation to on-demand publication and a future-block proof. Explore an illustrative request trace.
Read the keeper architectureRequest #1 / epoch 1 / on-demand publication / 60s deadline
Illustrative data and output; no API signature or VRF proof is generated.
04 / INDEPENDENT VERIFICATION
Follow a result back to its signed source data and onchain proof. Public evidence lets your application and its users check how the outcome was produced.
Verify the source signature, replay the randomness proof and reproduce the final selection using public chain records.
Explore the evidence formatKeeper Prepares epochs and submits request proofs.
Coordinator Verifies evidence and settles requests.
Public replay Reconstructs results from chain evidence.
Change a value, then check the signature.
0xa27c0925fba523a83a8ad7682effc979b23cb4a47b40abce5a1186b2d56d93bbCalculated when you check the signature.The query, timestamp and response are bound by one signature.
05 / BUILD ON THE SAME WORD
Turn a verified word into a selection, sequence or number. Public mappings make each outcome reproducible across applications.
Read the integration interfaceReveal deterministic candidates through an authenticated callback, then let the player choose or mint in a separate transaction.
Select entries from a list fixed before the request. Public mappings reproduce the selected indices and their order.
Bring verifiable selections into agent workflows. Each decision carries a result and the evidence behind it.
FOR DEVELOPERS / SOLIDITY
Request a word. Receive an authenticated callback. Build your application around a result you can verify.
Use the consumer base to authenticate every callback.
Read the fee from the contract and pin the refund address.
Keep delivery small. Apply your application rules separately.
// SPDX-License-Identifier: MITpragma solidity 0.8.28;import {D20VRFConsumer} from "./protocol/D20VRFConsumer.sol";import {ID20VRF} from "./protocol/interfaces/ID20VRF.sol";contract RandomApp is D20VRFConsumer { ID20VRF public immutable rng; mapping(uint256 => bytes32) public results; mapping(uint256 => bool) private requested; constructor(address coordinator) D20VRFConsumer(coordinator) { rng = ID20VRF(coordinator); } function request(bytes32 input) external payable returns (uint256 id) { require(msg.value == rng.requestFee(), "Exact fee required"); id = rng.requestRandomness{value: msg.value}(input, 100_000, msg.sender); requested[id] = true; } function _fulfillRandomness(uint256 id, bytes32 word) internal override { require(requested[id], "Unknown request"); delete requested[id]; results[id] = word; }}06 / SPEED + PROOF
From request to a result your application can use. Follow the proof, then build on the outcome.
BLOCKSEstimated average completion
The application receives the authenticated result and its evidence remains available for replay.
Map the verified word into a range, selection or shuffle with repeatable built-in functions.
Follow the request, epoch and proof in the Explorer. Replay the evidence and check the outcome independently.
07 / YOUR QUESTIONS
How to integrate, verify results and handle delivery.
Read the documentationBUILD WITH THE EVIDENCE