Workers
One Node process on the operator machine serves both chains: watch logs, produce a Chainlink-format VRF proof with the per-chain proving key, fulfill in turn. The VRF secret and the gas wallet are separate keys and never leave that machine. The playground is a separate Convex simulation and does not drive Saigon or mainnet rows.
node.ts
# One process, both chains. VRF proving keys are per-chain and
# distinct from the gas wallet (enforced at startup).
RANDOO_NETWORKS=saigon,ronin \
RANDOO_COORDINATOR=0xC66eB2e7EE91145875000Ad46B55600000000001 \
RANDOO_ORACLE_PK=0x... # gas wallet (per-chain nonces) \
RANDOO_VRF_SK_SAIGON=0x... # from workers/src/keygen.ts saigon \
RANDOO_VRF_SK_RONIN=0x... # from workers/src/keygen.ts ronin \
npm start
# GET :8788/health → per-network head, wallet balance, keyHash, lastError