Expand description
A real-time oracle state engine built on a forked-EVM state cache
(evm_fork_cache).
evm-oracle-state is the oracle domain crate layered over
evm_fork_cache: the companion crate owns generic cache invalidation,
reactive batching, and reorg reporting, while this crate owns
oracle-specific metadata, event decoding, typed snapshots, staleness
policy, reconciliation, and feed lookup. Chainlink-compatible feeds are
registered through their proxy addresses; adapter-owned oracle families
(Aave, Morpho, Euler, Pyth, RedStone) plug into the same typed state,
hook, and overlay surfaces behind feature flags.
The central contract:
Events are fast-path hints; proxy reads are authoritative.
Oracle log events update typed state immediately, so simulations can observe a new answer with no RPC on the hot path; authoritative proxy reads confirm, correct, or repair that state afterwards:
oracle log event (AnswerUpdated / OCR1+OCR2 NewTransmission / adapter event)
-> reactive handler decodes it; an OraclePriceUpdate hook fires immediately
-> OracleTracker stores an EventPending typed snapshot
-> OracleReadOverlay serves registered oracle view calls from typed state
-> OracleReconciler reads the proxy latestRoundData()
-> the snapshot becomes Confirmed or Corrected (or Stale / RequiresRepair)§Main types
The internal modules are private; everything below is re-exported at the crate root:
OracleRuntime— the high-level runtime, built from a provider (OracleRuntime::builder) or an existing cache (OracleRuntime::cache_builder):ChainlinkFeedregistrations, typed event callbacks, storage/code warmup, and the reactive install / refresh / uninstall lifecycle.OracleAdapter— the cache-native registration path over anevm_fork_cache::cache::EvmCache:Feedbuilders, Multicall3-batched discovery reads, and skip-aware build reports.OracleTracker— the typed state store:OracleSnapshotlookup with freshness classification,OraclePriceUpdatehook payloads, and reconciliation throughOracleReconciler.OracleRegistry— feed registrations (FeedRegistration,FeedId), aggregator and dependency bookkeeping, and feed-readiness reporting.OracleReactiveHandler— dependency-aware log routing bridged into theevm_fork_cachereactive runtime; detected OCR1/OCR2 layouts get exact direct storage writes, everything else takes the conservative purge/refetch fallback.OracleReadOverlay— serves registered oracle view calls (latestRoundData(), adapter reads such as Morphoprice(), EulergetQuote(...), PythgetPriceUnsafe(...)) from typed state, so simulations see event prices before a follow-up RPC read completes.PricePolicy/CheckedPrice— the typed price vocabulary (AssetId,Denomination,TokenAmount): promote raw oracle answers into policy-vetted values before liquidation or valuation decisions.OracleAdapterPlugin— the extension seam for oracle families that are not plain Chainlink proxies: adapter-owned discovery plus an adapter-owned reactive handler over the same runtime.- Feature-gated adapters —
AaveV3OracleAdapter(aave),MorphoBlueOracleAdapter(morpho),EulerOracleAdapter(euler),PythOracleAdapter(pyth), andRedstoneOracleAdapter(redstone).
See the crate’s examples/local_oracle_lifecycle.rs for the
compile-checked quickstart: a deterministic, RPC-free walk through
register → synthetic event → hook → overlay read → reconciliation.
Re-exports§
pub use alloy_primitives;pub use evm_fork_cache;
Structs§
- Aave
Asset aave - Declarative Aave V3 asset source registration.
- Aave
V3Oracle Adapter aave - Cache-backed Aave V3 oracle source discovery adapter.
- Aggregator
Change - Aggregator routing change found during reconciliation.
- Aggregator
Layout Evidence - Evidence collected while identifying an aggregator implementation.
- Answer
Updated - Decoded Chainlink
AnswerUpdatedevent. - AssetId
- Stable typed asset identifier used for oracle bases and token amounts.
- Chainlink
Feed - Builder-friendly Chainlink feed registration.
- Chainlink
Ocr1 Storage Adapter - Verified direct-storage adapter for Chainlink OCR1 aggregators.
- Chainlink
Ocr2 Storage Adapter - Verified direct-storage adapter for Chainlink OCR2 aggregators.
- Checked
Price - Oracle price that has satisfied a caller-selected policy.
- Derived
Reconcile Failure - One derived-source protocol read that failed during a
OracleTracker::reconcile_derived_pending_withpass. - Derived
Reconcile Report - Summary of one
OracleTracker::reconcile_derived_pending_withpass. - Euler
Oracle Adapter euler - Cache-backed Euler price oracle discovery adapter.
- Euler
Quote Pair euler - Declarative Euler quote-pair registration.
- EvmCache
Chainlink Reader - Chainlink view reader backed by an
evm-fork-cachefork cache. - Feed
- Typed feed registration primitive.
- Feed
Access - Read-only accessors for finalized typed feed registrations.
- Feed
Builder State - Marker for builder-stage typed feed registrations.
- Feed
Config - Feed registration configuration.
- FeedId
- Stable id for a registered feed.
- Feed
Metadata - Static metadata read from a Chainlink-compatible proxy.
- Feed
Ready - Marker for finalized typed feed registrations.
- Feed
Registration - Registered Chainlink-compatible proxy feed.
- Morpho
Blue Market morpho - Declarative Morpho Blue market oracle registration.
- Morpho
Blue Oracle Adapter morpho - Cache-backed Morpho Blue oracle discovery adapter.
- Morpho
Chainlink Feed - One optional Chainlink feed used by
MorphoChainlinkOracleV2. - Morpho
Market Params morpho - Morpho Blue market parameters.
- NewRound
- Decoded Chainlink
NewRoundevent. - Ocr1
NewTransmission - Decoded Chainlink OCR1
NewTransmissionevent. - Ocr1
Transmission Storage Update - OCR1 transmission data that can be translated into exact aggregator storage writes.
- Ocr2
NewTransmission - Decoded Chainlink OCR2
NewTransmissionevent. - Ocr2
Transmission Storage Update - OCR2 transmission data that can be translated into exact aggregator storage writes.
- Oracle
Adapter - Cache-native oracle adapter entry point.
- Oracle
Adapter Build Report - Best-effort cache-native oracle registration report.
- Oracle
Adapter Builder - Builder for cache-backed oracle tracker registration.
- Oracle
Adapter Feed Skip - Feed skipped during best-effort cache-native registration.
- Oracle
Adapter Id - Stable identifier for an oracle adapter family.
- Oracle
Batch Report - Typed digest of one committed reactive batch.
- Oracle
Block Ref - Block identity for hash-pinned oracle reconciliation reads.
- Oracle
Cache Runtime Build Report - Best-effort cache-native oracle runtime build report.
- Oracle
Cache Runtime Builder - Cache-native runtime builder with first-class oracle adapter plugins.
- Oracle
Change Impact - Downstream consequences of a feed change, mirroring
evm-amm-state’sAmmChangeImpact { state, quoteability, topology }. - Oracle
Code Install - One successfully installed bytecode entry.
- Oracle
Code Install Error - Code install failure for one entry.
- Oracle
Code Mismatch - Code-hash mismatch for a canonical seed.
- Oracle
Code Policy Violation - Summary of the code warmup report entries that violated an enforced
OracleCodeWarmupPolicy, carried byOracleError::CodePolicy. - Oracle
Code Registry - Registry of oracle bytecode claims to install before discovery or simulation.
- Oracle
Code Seed - One bytecode install request for an oracle-related contract.
- Oracle
Code Unverifiable - Canonical code claim that could not be verified due to transport or provider limitations.
- Oracle
Code Warmup Policy - Failure policy for oracle bytecode warmup.
- Oracle
Code Warmup Report - Report for code seeding, verification, and explicit etching.
- Oracle
Cold Start Warmup Report - Summary of an oracle cold-start storage warmup run.
- Oracle
Dependency - One Chainlink-compatible dependency used by a derived oracle source.
- Oracle
Discovered Feed - One feed discovered and seeded by an oracle adapter plugin.
- Oracle
Discovery Context - Cache-native discovery context passed to oracle adapter plugins.
- Oracle
Discovery Report - Result of adapter discovery.
- Oracle
Feed Change - One digested per-feed change inside an
OracleBatchReport. - Oracle
Feed Readiness Report - Feed/runtime readiness surfaced by registry, warmup, build, repair, and health reports.
- Oracle
Feed Skip - Complete description of one adapter feed skip, carried by
OracleError::FeedSkippedwhen a fail-fastbuildsurfaces a skip as an error. Use thebuild_reportmethods to receive skips as data instead. - Oracle
Mock Report - Result of applying an overlay-scoped oracle mock.
- Oracle
Price - Consumer-facing typed oracle price.
- Oracle
Price Confirmed - Hook emitted when an event price is confirmed by the proxy.
- Oracle
Price Corrected - Hook emitted when a proxy read corrects an event price.
- Oracle
Price Mock - A requested oracle price mock.
- Oracle
Price Stale - Hook emitted when the proxy read is stale under policy.
- Oracle
Price Update - Rich event-derived oracle price update emitted by the reactive handler.
- Oracle
Reactive Handler - Reactive-runtime bridge for Chainlink-compatible oracle feeds.
- Oracle
Reactive Install Report - Result of registering oracle handlers with a reactive engine.
- Oracle
Reactive Refresh Report - Result of refreshing oracle handlers after runtime mutation.
- Oracle
Reactive Uninstall Report - Result of unregistering oracle handlers from a reactive engine.
- Oracle
Read Overlay - Simulation-facing ABI call overlay backed by typed oracle state.
- Oracle
Reconciler - Reconciles event-derived oracle state against authoritative proxy reads.
- Oracle
Reconciliation Request - Event-specific reconciliation request queued after an event update.
- Oracle
Reconciliation Result - One completed event reconciliation.
- Oracle
Registry - Registry plus latest proxy-read snapshots.
- Oracle
Runtime - High-level facade for registration, typed events, reads, and reconciliation.
- Oracle
Runtime Builder - Builder for a high-level oracle runtime facade.
- Oracle
Runtime Mutation Report - Result of mutating a runtime’s oracle registration set.
- Oracle
Snapshot - Typed current oracle state for one registered proxy feed.
- Oracle
Source Descriptor - Open descriptor for an adapter-owned oracle source.
- Oracle
Storage Sync - Ordered collection of oracle storage adapters.
- Oracle
Storage Warmup Failure - One failed oracle storage warmup slot.
- Oracle
Storage Warmup Report - Result of prewarming oracle storage slots through
evm-fork-cache. - Oracle
Tracker - Mutable typed oracle state.
- Oracle
Update - Event-derived oracle update carried in reactive hook payloads.
- Price
Policy - Policy for promoting raw oracle prices into checked prices.
- Pyth
Feed pyth - Builder-style Pyth EVM feed registration config.
- Pyth
Oracle Adapter pyth - Pyth EVM oracle adapter plugin.
- Pyth
Price Feed Update pyth - Decoded Pyth
PriceFeedUpdateevent. - Pyth
Reactive Handler pyth - Reactive handler for Pyth EVM
PriceFeedUpdatelogs. - Reconcile
Report - Reconciliation summary.
- Redstone
Feed redstone - Declarative RedStone push-feed registration.
- Redstone
Multi Feed Storage Adapter redstone - Storage helpers for RedStone
MultiFeedAdapterWithoutRoundspush feeds. - Redstone
Oracle Adapter redstone - Cache-backed RedStone push oracle discovery adapter.
- Redstone
Price Feeds Storage Adapter redstone - Storage helpers for RedStone
PriceFeedsAdapter*push-feed layouts. - Redstone
Reactive Handler redstone - Reactive-runtime bridge for RedStone push oracle feeds.
- Redstone
Value Update redstone - Decoded RedStone
ValueUpdateevent. - Round
Data - Round tuple returned by
latestRoundData(). - Staleness
Policy - Policy used to classify round freshness and answer validity.
- Token
Amount - Raw token amount in the base asset’s smallest units.
- Valued
Amount - Checked quote-denominated value produced from a typed oracle price.
Enums§
- Aggregator
Layout - Known aggregator storage layouts.
- Aggregator
Layout Confidence - How an aggregator layout was detected.
- Chainlink
Event Decode Error - Errors returned by Chainlink event decoding.
- Denomination
- Typed quote denomination for oracle prices and valued amounts.
- Euler
Quote Leg - One dependency leg inside an Euler quote adapter.
- Feed
Source - Network source and transform for a registered feed.
- Morpho
Chainlink Feed Role - Role of a Chainlink dependency inside
MorphoChainlinkOracleV2. - Oracle
Adapter Skip Reason - Classified reason for skipping a feed in best-effort registration.
- Oracle
Code Install Mode - How an oracle bytecode entry should be installed into the fork cache.
- Oracle
Config Error - Caller or programming errors carried by
OracleError::Config. - Oracle
Error - Errors returned by registry, reconciliation, and report application.
- Oracle
Feed Change Kind - Classified per-feed change kind.
- Oracle
Feed Status - Lifecycle readiness of a registered oracle feed.
- Oracle
Hook Event - Rich oracle hook events emitted by reconciliation.
- Oracle
Incident - Continuity incident observed while applying a batch.
- Oracle
Mock Error - Errors returned by oracle mocking helpers.
- Oracle
Reconciliation Kind - How a queued
OracleReconciliationRequestis satisfied. - Oracle
Round Status - Classified usability of an oracle round under the feed policy.
- Oracle
Signal - Borrowed typed view over an oracle hook signal payload.
- Oracle
Signal Decode Error - Errors returned when decoding oracle hook signals.
- Oracle
Signal Kind - Strongly typed oracle hook signal kind.
- Oracle
Storage Effect - Result of attempting event-derived oracle storage sync.
- Oracle
Storage Error - Errors returned by oracle storage adapters.
- Oracle
Storage Warmup Mode - Storage warmup implementation to use for oracle direct-write slots.
- Oracle
Transform Descriptor - Open transform descriptor for non-Chainlink-native source adapters.
- Oracle
Value Source - Source that produced an oracle value.
- Oracle
Value Status - Reconciliation lifecycle for an oracle value.
- Price
Policy Violation - Structured reason a
PricePolicycheck or valuation was rejected.
Constants§
- ANSWER_
UPDATED_ TOPIC AnswerUpdated(int256,uint256,uint256)topic0.- NEW_
ROUND_ TOPIC NewRound(uint256,address,uint256)topic0.- OCR1_
NEW_ TRANSMISSION_ TOPIC - OCR1
NewTransmission(uint32,int192,address,int192[],bytes,bytes32)topic0. - OCR2_
NEW_ TRANSMISSION_ TOPIC - OCR2
NewTransmission(uint32,int192,address,uint32,int192[],bytes,int192,bytes32,uint40)topic0. - ORACLE_
LEGACY_ ANSWER_ UPDATED_ KIND - Legacy event-update hook kind retained for compatibility.
- ORACLE_
SIGNAL_ NAMESPACE - Namespace used by every oracle hook signal.
- PYTH_
PRICE_ FEED_ UPDATE_ TOPIC pyth - Pyth
PriceFeedUpdate(bytes32,uint64,int64,uint64)topic0. - REDSTONE_
VALUE_ UPDATE_ TOPIC redstone - RedStone
ValueUpdate(uint256,bytes32,uint256)topic0.
Traits§
- Chainlink
Feed Provider - Minimal read seam for Chainlink-compatible proxy feeds.
- Oracle
Adapter Plugin - Public plugin interface for oracle families layered over
evm-fork-cache. - Oracle
Derived Reader - Reads the authoritative protocol value for a derived oracle source.
- Oracle
Overlay Mock Ext - Extension trait for overlay-scoped oracle price mocks.
- Oracle
Storage Adapter - Adapter that can translate oracle events into direct EVM cache state updates.
Functions§
- classify_
type_ and_ version - Classify a Chainlink-style
typeAndVersion()string. - decode_
answer_ updated - Decode a Chainlink
AnswerUpdatedlog. - decode_
new_ round - Decode a Chainlink
NewRoundlog. - decode_
ocr1_ new_ transmission - Decode a Chainlink OCR1
NewTransmissionlog. - decode_
ocr2_ new_ transmission - Decode a Chainlink OCR2
NewTransmissionlog. - decode_
pyth_ price_ feed_ update pyth - Decode a Pyth
PriceFeedUpdatelog. - decode_
redstone_ value_ update redstone - Decode a RedStone
ValueUpdatelog.
Type Aliases§
- Adapter
Future - Boxed async result returned by oracle adapter extension points.
- Feed
Builder - Builder-stage typed feed registration.
- Oracle
Aggregator Changed - Hook emitted when proxy reconciliation detects an aggregator change.
- Provider
Future - Boxed future used by the provider seam.