chio-link 0.1.2

Oracle runtime for Chio cross-currency budget enforcement
Documentation

chio-link

Oracle runtime for Chio cross-currency budget enforcement. It resolves exchange rates from Chainlink and Pyth behind a pluggable backend, cross-checks and caches them, checks L2 sequencer uptime, and converts amounts between currencies for budget decisions. chio-kernel embeds it via the PriceOracle trait; chio-metering enforces budgets against the units it converts.

Responsibilities

  • Read prices from Chainlink (AggregatorV3Interface.latestRoundData, on-chain via alloy, feature web3) and Pyth (Hermes REST latest_price_feeds) behind a common OracleBackend trait.
  • Enforce a typed HttpEgressContract on every RPC/HTTP dispatch (Chainlink JSON-RPC, Pyth Hermes, sequencer uptime reads) so oracle calls cannot reach arbitrary hosts.
  • Cache the latest rate per pair and, when PairPolicy::twap_enabled, average a rolling observation window into a TWAP.
  • Cross-check primary against fallback backend reads with a basis-point circuit breaker and fail closed on divergence beyond divergence_threshold_bps.
  • Check L2 sequencer uptime before trusting a chain's feed; fail closed while the sequencer is down or inside its post-recovery grace period.
  • Apply operator runtime controls: global pause, per-chain enable/disable, and per-pair overrides (forced backend, fallback allowance, divergence threshold, degraded mode).
  • Convert amounts between currencies at fixed minor-unit scales with basis-point margin and ceiling rounding (convert::convert_units).
  • Build a runtime health report (OracleRuntimeReport) with per-chain and per-pair status and alerts.
  • Produce OracleConversionEvidence under the chio_link_runtime_v1 authority for auditable conversions. The evidence is unsigned when it leaves this crate (oracle_public_key/signature are None); signing happens downstream.

Public API

  • ChioLinkOracle - the oracle runtime; implements PriceOracle. Construct with new (builds backends from PriceOracleConfig) or new_with_backends (inject backends directly). Exposes cached_rate, refresh_pair, runtime_report, operator_config, set_global_pause, set_chain_enabled, set_pair_override.
  • PriceOracle - get_rate, supported_pairs; the trait consumers program against.
  • OracleBackend - kind, read_rate; implemented by chainlink::ChainlinkFeedReader (feature web3) and pyth::PythHermesClient.
  • ExchangeRate - a resolved rate plus ensure_fresh, ensure_matches_pair, age_seconds, with_degraded_mode, to_conversion_evidence.
  • PriceOracleError - the fail-closed error surface (Stale, CircuitBreakerTripped, OperatorPaused, ChainDisabled, SequencerDown/SequencerRecovering, InvalidFeed, ArithmeticOverflow, ...).
  • config - PriceOracleConfig, OperatorConfig, PairConfig, PairPolicy, PairRuntimeOverride, ChainlinkNetworkConfig, build_default_egress_contract.
  • convert - convert_units, convert_supported_units, minor_units_for_currency.
  • monitor - OracleRuntimeReport, ChainHealthReport, PairHealthReport, OracleAlert.
  • control::ChioLinkControlState - operator-action audit trail (global pause, chain enable, pair override) with before/after snapshots. Nothing in this crate writes to it automatically; callers record changes through it.

Feature flags

Flag Effect
web3 (default) Enables the on-chain ChainlinkFeedReader and L2 sequencer-uptime reads via alloy-*. Disabling it swaps in chainlink_disabled/sequencer_disabled stubs that return PriceOracleError::UnsupportedBackend; ChioLinkOracle::new fails if primary/fallback selects Chainlink without the feature.

Testing

cargo test -p chio-link covers the default (web3-enabled) build. cargo test -p chio-link --no-default-features exercises the disabled-stub paths.

See also

  • chio-kernel - embeds ChioLinkOracle and calls convert_supported_units during request evaluation.
  • chio-metering - enforces budgets against the units this crate converts.
  • chio-control-plane - drives ChioLinkOracle and records operator actions through control::ChioLinkControlState.
  • chio-egress-contract - supplies the HttpEgressContract this crate enforces on every dispatch.