Skip to content

Architecture ​

GENESIS has three layers. Contracts hold the rules and verify everything. Operator nodes do the off-chain work. The SDK lets apps and users check that work independently.

            ┌───────────────────────── Elysium ─────────────────────────┐
  dApps ──▶ │  VRF Coordinator   Beacon   Fair Selection   Commit–Reveal │
            │  Automation Registry       Data Oracle (+ feed proxies)    │
            │  Fee Manager (HYPE / GENESIS pricing)    Staking           │
            └───────────▲──────────────────────────────────▲─────────────┘
                        │ proofs, rounds, upkeeps, reports │ reads
                 ┌──────┴───────┐                    ┌─────┴─────┐
                 │ Operator node│                    │ SDK / you │
                 └──────────────┘                    └───────────┘

Trust model ​

ComponentOperator can…Operator cannot…
VRF / BeaconDelay or refuse to answerChoose, bias or fake an output
Fair SelectionDelay the drawChange entrants or winners
AutomationSkip its turn (turns rotate between keepers)Trigger a job that isn't due, or inject data
OracleWithhold a signature (3 of 8 can be offline)Move the median: that needs 3 of the 8 signers

The main residual risk is liveness, not correctness: an operator can stop answering, but it can't lie. Run several operators with separate keys. See Security & limits.

The ECVRF ​

Each VRF key is a secp256k1 key pair (x, Y = x·G). For an input seed:

H      = hashToCurve(Y, seed)
Γ      = x · H
proof  = (Γ, c, s)              a Schnorr-style proof that log_G(Y) = log_H(Γ)
output = keccak256(Γ)

Because Γ is unique for a given key and seed, there is exactly one valid output, so the operator has nothing to choose. Elliptic-curve multiplication is expensive in the EVM. The contract avoids it by checking prover-supplied points with the ecrecover precompile, which keeps verification at about 27k gas.

The TypeScript prover in sdk/src/crypto/ecvrf.ts mirrors contracts/lib/ECVRF.sol byte for byte. Anyone can re-run the verification off-chain with GenesisClient.verifyFulfillment(txHash).

GENESIS · verifiable infrastructure for Elysium