Live on Base
Base

Base

Flagship deployment; first chain live.

KeeperCoordinatorV8ETH feeschainId 8453
Deployment

Live and proven.

Contract
KeeperCoordinatorV8
Deployed
2026-09-28
Committee
12 keepers — the same committee on every chain
Threshold
4-of-12 signatures (BFT-safe)
Fee token
ETH
chainId
8453
Shared Security

Same committee. Same proof.

Base runs the same KeeperCoordinator as every other deployment — the seed derives from the drand Quicknet anchor verified on-chain via EIP-2537, and fulfillment requires 4-of-12 committee signatures bound to this chain's chainId.

Same contract everywhere

One audited bytecode, chainId-bound signatures — a proof on one chain can never replay on another.

Native fees

Requests priced in ETH, the chain's native gas token — no oracle token.

Shared committee

The same 12 keepers secure every chain — adding a chain doesn't dilute security.

No admin key on fulfill()

The fulfillment path is immutable — no privileged call can alter, delay, or redirect an outcome.

For Developers

Integrate on Base.

Same interface on every chain — point your contract at the Base deployment and pay fees in ETH. Nothing else changes.

RandProofRNG

Verifiable randomness — one payable call, a permanent on-chain proof.

// KeeperCoordinatorV8 on Base
IKeeperCoordinator coordinator =
    IKeeperCoordinator(0x4D7Ca11c363Ad5ADce9F5C9F48F65c26fdE4D006);

// fee in ETH
bytes32 eventId =
    coordinator.requestRandomness{value: fee}(userSeed);

// receive the result — enforced by the coordinator
function fulfillRandomness(bytes32 eventId, bytes32 seed)
    external
{
    require(msg.sender == address(coordinator));
    // settle your draw
}

// audit any past draw — permanent, public
coordinator.getRandProof(eventId);

0.00003 ETH per request — 4-of-12 committee fulfillment, no oracle token.

RandProofAutomation

Decentralized upkeep — Chainlink-compatible or deadline-native, executed by the same keeper network.

// RandProofAutomation on Base
// Chainlink-compatible — zero logic changes
function checkUpkeep(bytes calldata) external view
    returns (bool upkeepNeeded, bytes memory performData);

function performUpkeep(bytes calldata performData)
    external
{
    // your own guards re-verified here
}

// or the native path — deadline-shaped conditions
function nextDeadline() external view
    returns (uint256);

Registry: 0xb19F…3b69 · 0.00005 ETH per execution — fund a balance, pay per upkeep.