defirisk.co
rubric v1.7.0

Fallback behavior on oracle failure

Fluid's assessment for RD-F-051 — scored yellow on the v1.7.0 rubric. The evidence below is the curator's reasoning for this score.

Evidence summary #

Fallback behavior on oracle failure: (1) ChainlinkOracleImpl returns 0 on any exception (try-catch with empty catch). (2) FallbackOracleImpl switches to secondary (Redstone or Chainlink) when primary returns 0 — so a failed Chainlink feed triggers Redstone fallback. (3) GenericOracle reverts if final rate is 0 (FluidOracleError RateZero). So the fallback sequence is: primary oracle fail → returns 0 → fallback oracle queried → if fallback also 0 → revert. This is a reasonable fallback for configured multi-source oracles. However: (a) The staleness trigger is not used — fallback only fires on zero, not on stale data. A stale-but-non-zero Chainlink price is NOT routed to fallback. (b) GenericOracle configurations with Mode 1 (CL only, no fallback) have no secondary. Yellow because the fallback exists for zero-price failures but is NOT triggered by staleness — a critical gap for the staleness failure mode.

Sources #

  • GitHub
    Fluid ChainlinkOracleImplInstadapp/fluid-contracts-public/contracts/oracle/implementations/chainlinkOracleImpl.sol — catch { return 0; }retrieved 2026-04-29
  • GitHub
    Fluid GenericOracleBaseInstadapp/fluid-contracts-public/contracts/oracle/oracles/genericOracleBase.sol — revert if rate == 0retrieved 2026-04-29
  • GitHub
    Fluid FallbackOracleImplInstadapp/fluid-contracts-public/contracts/oracle/implementations/fallbackOracleImpl.sol — _getRateWithFallback() switches on rate==0retrieved 2026-04-29

Methodology #

Identify the declared fallback behavior (pause, secondary source, last-known-price, revert) when the primary oracle reverts or reports a stale value.

See the full factor methodology and distribution across all protocols →

rubric_version v1.7.0 protocol fluid factor RD-F-051 score yellow collected_at 2026-04-29 10:35:01