pub enum Evidence {
Fast,
Quorum,
Full,
}Expand description
How much relay coverage a fetch waits to witness before returning.
The community planes distinguish POSITIVE DATA (signed events, hash-chained editions — safe to act on from any relay; refuse-downgrade floors make stale or replayed data harmless) from NEGATIVE VERDICTS (conclusions from absence: “no rotation happened”, “history ends here”, “coverage complete”). A partial relay view can only ever STALL consensus — and every stall heals via the straggler sink, the live subscription, or the next sync — but a written negative verdict has no healer. Pick the tier by what the caller CONCLUDES from the result, not by how fast it wants to be.
Variants§
Fast
Return at the FIRST successful relay EOSE (+ the residual merge window). For positive-data consumers only: never conclude absence from a Fast result.
Quorum
Wait for a MAJORITY of attempted relays — time-bounded to
QUORUM_GRACE_MS past the first success, so one dead relay can’t
gate a degraded set. A single fast-lying relay can’t force an early
return while its honest peers answer within the window. Note: for a
2-relay set the majority is BOTH, so a degraded pair always rides the
grace bound (first success + 2s), never a dead relay’s full timeout.
Full
Wait for EVERY relay to resolve (EOSE or its per-relay timeout). For
presence-latches and coverage gates whose correctness depends on the
union being as complete as the reachable set allows. Forced whenever
Query::until is set (back-page verdicts).
Trait Implementations§
impl Copy for Evidence
impl Eq for Evidence
impl StructuralPartialEq for Evidence
Auto Trait Implementations§
impl Freeze for Evidence
impl RefUnwindSafe for Evidence
impl Send for Evidence
impl Sync for Evidence
impl Unpin for Evidence
impl UnsafeUnpin for Evidence
impl UnwindSafe for Evidence
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more