Platform onboarding

Integrate Monad RNG

Start with the product boundary, choose who the contract records as requester, freeze the platform configuration, then build finalization and permanent settlement as one operated lifecycle.

Live Testnet V1

Start from the attested contracts.

Both contracts are live on Monad Testnet chain 10143, ownerless, frozen, source-verified with an exact match, and tested through real Tx1 and Tx2 flows. The public canary is free; the Factory creates a separately configured instance for each platform.

Free public canary

PlatformRandomness

0x22A5Ed6bA91661cd06D68FBa5aae5015EDbF7DA1

Use this address for the fastest Testnet experiment. Tx1 creates one request; Tx2 authenticates the three future headers and permanently stores its result.

View Platform on explorer
Isolated deployment path

RandomnessFactory

0x75E6458DaA0c6152419e4617dcf4D459149C1530

Call deployPlatform with the recipient, name, price, and pending limit that your platform wants to freeze forever. The Factory retains no ownership.

View Factory on explorer

The complete path

Design past the request transaction.

A request is unfinished until its authenticated result is stored and the application has settled the original business action exactly once.

  1. 01 · Tx1

    Lock the request

    Atomically bind payment, eligibility, or inventory to one request. Persist its ID, requester, request block, and three fixed targets.

  2. 02 · Wait

    Wait for the targets

    Use block height—not a wall-clock timer. The targets are R+8, R+24, and R+40; requester finalization opens at R+42.

  3. 03 · Tx2

    Authenticate and finalize

    Fetch the three exact RLP headers from a checked Monad RPC. Submit them through the stored requester path and preserve the transaction.

  4. 04 · Settle

    Settle from stored result

    Wait for finalized confirmation, verify the event against on-chain storage, then settle once from the permanent result.

Start with your role

Four guides, one operating model.

These public Markdown files are generated byte-for-byte from the repository's canonical onboarding documents.

01

Product leads + technical owners

Decide whether the primitive fits

Set the value ceiling, expiry policy, operating roles, gas budget, and Go/No-Go criteria before implementation.

production-readiness.md
02

Application + smart-contract engineers

Build Tx1, Tx2, and settlement

Choose direct EOA or wrapper mode, bind the business action, persist request identity, and settle exactly once.

integration-guide.md
03

Release + deployment engineers

Deploy and verify every boundary

Verify chain, approved address, runtime code, frozen settings, source, manifest, and a full canary flow separately.

deployment-and-verification.md
04

Operators + support teams

Keep requests moving safely

Run finalization, rescue, RPC failover, nonce reconciliation, expiry, monitoring, and incident procedures.

operations-runbook.md

Requester architecture

Choose direct EOA or wrapper deliberately.

Whoever calls PlatformRandomness in Tx1 becomes the stored requester and controls the requester-only Tx2 window.

Direct EOA

The Tx1 wallet stays the requester.

  • An EOA calls the platform contract directly.
  • That same EOA must finalize directly from R+42 through R+103.
  • Use only when the business action can safely remain outside the request transaction.
Application wrapper

The wrapper—not the player—becomes requester.

  • One wrapper call can lock payment, eligibility, inventory, and Tx1 atomically.
  • A reviewed finalizeEntry function must forward requester-window Tx2 through the wrapper.
  • Prefer this mode for paid entries, prizes, mints, assignments, and other value-bearing actions.

From R+104, permissionless rescue may finalize the underlying request directly. The application still has to reconcile and settle the wrapper entry exactly once.

Authoritative lifecycle

Block height is the source of truth.

R is the block containing Tx1. Internal warnings may start earlier, but they never change these contract boundaries.

Monad RNG request lifecycle by block number
BlockWhat becomes true
RTx1 locks the business action, stores the requester, and creates one pending request.
R+8 · R+24 · R+40The three fixed target blocks contribute authenticated proposer entropy.
R+42Requester-window Tx2 opens. Only the stored requester may finalize through R+103.
R+104Permissionless rescue opens. Anyone may submit the same proof, but execution is still not automatic.
R+8199Last contract-valid proof block. Tx2 must be included successfully by this block.
R+8200Expiry starts. Tx2 is no longer valid; anyone may expire the request, and no result is created.

Production boundary

Know what your platform must supply.

The primitive authenticates and stores entropy. Product safety, transaction operations, and customer outcomes remain integration responsibilities.

Ready to evaluate the flow?

Run the reference path, then build from the guides.

The demo makes Tx1, the target wait, Tx2, stored reads, rescue, and expiry visible. The public artifact supplies the exact ABI and bytecode. Production teams must also verify a raw-header RPC with debug_getRawHeader.