On-chain
Pushers & oracles
Pushers read prepared prices off the bus, encode them for their oracle, sign, and broadcast. The compressed oracle is registrationless — a feed's identity is packed into its id.
Registrationless feedId
There is no registry and no createOracles step. A feed's 32-byte id is
self-describing — creator, chain id, slot and lane packed together — so a push carries everything
the contract needs to place it.
feedId = uint160(creator) << 96 | chainid << 16 | slot << 8 | pos
Compressed pusher
Prices are packed into 32-byte slot words (four lanes each) and pushed to the CompressedOracle. Two send modes:
- broadcast — parallel send to N public RPCs, first-accepted wins; a pool of signing wallets with the anti-drift nonce machine and creator-funded refills. For L2s / altchains.
- builder_lane — escalating-fee replacement bundles to MEV builders, Flashbots-signed when required. For Ethereum mainnet.
Operator onboarding
Because the oracle is registrationless, onboarding is only about delegating signers and (optionally) setting price bounds — one-shot commands, then the push loop:
--allow-pushers— delegate the derived signer wallets to the creator's namespace. Each signer signs an EIP-191 consent with a deadline (replay of consent is the one place a deadline still matters).--set-guards— write staticsetPriceGuardbounds for feeds that declaremin_price/max_price.--register— both, in order. Full onboarding.
Push calldata is the slot words verbatim — no deadline prefix; each word carries its own timestamp and the oracle checks time drift on-chain.
The guard service
Beyond static bounds, an in-process task keeps the oracle's price band tracking the
script-formed band the feed publishes. It reads
guard_min:{chain}/guard_max:{chain} and calls setPriceGuard
— funder-signed (same nonce owner as refills), and deliberately excluded from push stats.
It updates by time (re-assert every interval_secs) or
trigger (either bound deviates past trigger_bps), with a
min_update_secs anti-spam floor. Off by default:
[guard]
enabled = true
interval_secs = 3600
trigger_bps = 500
min_update_secs = 300
Pyth-lazer pusher
Forwards the signed Lazer EVM blob from the bus to the Pyth oracle. Feeds auto-register on the first signed push — no registrar role. A pool of signers shares the same nonce machinery as the compressed pusher.