Live on Base Mainnet

RandProofAutomation

General-purpose decentralized upkeep: watch any contract's own condition — a deadline, a threshold, a state — and let the keeper network call it the moment it's due. Chainlink-compatible or native. Same keepers, same network.

Deployment

Live and proven.

Contract
RandProofAutomation
Deployed
2026-09-30 — same address as Sepolia (identical deployer nonce)
Fee
0.00005 ETH per execution — flat, immutable
Keeper network — ten chains, one committee

The RandProofAutomation registry is live on Base mainnet; the same 12-keeper committee operates the KeeperCoordinator deployment on every chain. View per-chain deployments.

Integration

Two interfaces, one keeper network.

Implement the existing standard so current contracts and tooling work unchanged — while offering a better primitive alongside it.

IRandProofUpkeepCompatible
Drop-in migration

Identical signatures to Chainlink's AutomationCompatibleInterface — checkUpkeep(bytes) and performUpkeep(bytes). A contract already integrated with Chainlink Automation registers here with zero logic changes; only the registration target changes.

IRandProofUpkeepNative
Deadline-shaped conditions

A simpler primitive — nextDeadline() and performUpkeep(bytes) — for raffles, auctions, epochs, and anything with a natural deadline. Keepers read every registered client’s nextDeadline() in one batched view call and know exactly when to come back. No per-cycle checkUpkeep simulation.

Design

Verification by construction, not committee.

Pay per execution

Clients fund a balance and pay 0.00005 ETH per performUpkeep — matching the proven fund-and-pay model, with automation cost kept economically separate from randomness fees.

No committee needed

The condition being checked — a deadline, or whatever checkUpkeep verifies — is public and independently verifiable on-chain. There's no off-chain claim to dispute.

Client-side guards

Any keeper may call performUpkeep for any eligible client; the client’s own guard conditions, re-checked inside its own performUpkeep, prevent a wrongful execution from doing anything.

Pause-only admin

The 3-of-5 production Safe can pause the registry but cannot touch escrowed client balances or redirect executions.

Adversarial Review

Two findings, both fixed before deploy.

A pre-deployment adversarial pass found and closed two real issues. 25 tests cover both interfaces' full lifecycle, mode isolation, pause switches, balance enforcement, and both fixes.

AV-113Medium
Unbounded reentrant calls into the registry

A malicious client’s performUpkeep could recurse back into the registry. Fixed with an explicit reentrancy guard on both performNativeUpkeep and performCompatibleUpkeep — the unguarded version now reverts immediately.

AV-114Low
Instant withdrawal could strand a keeper unpaid

A client could drain its balance in the same block a keeper’s pending performUpkeep landed. Fixed with a 1-hour withdrawal delay (requestWithdrawal / executeWithdrawal) — the same unbonding pattern used across the product family.

Measured on Base

Honest gas numbers.

The Native path's advantage is off-chain keeper operating cost — one batched nextDeadline() read instead of per-client checkUpkeep simulation — not per-transaction gas.

Action
Gas
Cost
Deployment (one-time)
1,727,146
~$0.02–0.03
registerNative / registerCompatible
~142,000–145,000
~$0.001–0.003
performNativeUpkeep (per event)
123,203
~$0.001–0.002
performCompatibleUpkeep (per event)
120,601
~$0.001–0.002
requestWithdrawal
95,084
~$0.001–0.002
executeWithdrawal
44,910
~$0.0005–0.001
For Developers

Compatible or native — your call.

// Chainlink-compatible path — 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);