# Contracts

Source lives in the repo under `contracts/`. Foundry script `Deploy.s.sol` targets Saigon then mainnet. Fulfillment verifies a Chainlink-format VRF proof with the audited, vendored Chainlink `VRF.sol` (the same verifier native Ronin VRF uses). The proof seed binds the request blockhash, request id, consumer and the oracle key hash; the oracle set is snapshotted per request, so neither the oracle nor the owner can produce a second valid output for the same request.

| Network | Chain ID | Coordinator | Status |
| --- | --- | --- | --- |
| Ronin mainnet | 2020 | `0xC66eB2e7EE91145875000Ad46B55600000000001` | live |
| Saigon | 202601 | `0xC66eB2e7EE91145875000Ad46B55600000000001` | live |

One CREATE3 address on both chains. Consumers always point at the coordinator address above; it is a proxy and the only address you use.

- RandooVRFCoordinator: Ronin pay-per-request. Subscriptions frozen.
- Drop-in for the standard `VRFConsumer` base: keep inheriting it and swap the coordinator address at deploy.
- Payment is computed on-chain from gasleft × declared gasPrice.
- Same consumer interface as native Ronin VRF, not a semantic clone: seed derivation, events, and errors differ, and the coordinator is not the native proxy.
- VRF proving key and gas wallet are separate keys; oracles rotate in turn and misses are counted on-chain per key hash.
- DualVrfRace: playground harness that fires both coordinators in one transaction so the head-to-head shares a request block.

_Last verified 2026-08-25._
