pub struct ProbeResponseExt {
pub total_bytes: Option<u64>,
pub coverage: Coverage,
}Expand description
Optional ProbeResponse extension fields, carried as trailing bytes after
the ProbeResponse message via the two-phase pattern (ADR 013 §Tier 1; see
encode_probe_response / parse_probe_response_ext).
Nothing here is covered by slash_sig, and nothing here may become
load-bearing for payment, slashing, or any decision a lying node profits
from: an unsigned field is a hint, and the sender is the party with the
motive to shade it.
New fields are appended to the END of this struct and MUST be Option<T> or
have a meaningful Default. Insertions and reordering are Tier-3.
Fields§
§total_bytes: Option<u64>Blob size in bytes when known. Nodes SHOULD include it when the size is known so requesters can estimate cost before opening a payment pool. Unsigned: treat it as a sizing hint, never as a commitment.
coverage: CoverageWhich discovery blocks (decdn_protocol::coverage) this node will
serve. Unsigned: treat it as a hint, never as a commitment. A
requester MUST treat body.has_blob and coverage.is_empty() as a
biconditional — see the consistency check at the probe consumer — and
drop a response where they disagree rather than trust either field
alone.
Implementations§
Source§impl ProbeResponseExt
impl ProbeResponseExt
Sourcepub fn consistent_with(&self, has_blob: bool) -> bool
pub fn consistent_with(&self, has_blob: bool) -> bool
Does this ext’s coverage agree with the signed body’s has_blob
(ADR 013 §Tier 1; #1506)? An honest responder’s has_blob and
coverage.is_empty() are a biconditional by construction (the probe
handler derives has_blob FROM coverage, never the other way
round), so any disagreement means a malformed or dishonest response.
Neither field is in the signed set, so a mismatch has no attributable
author to slash: a requester finding false here MUST drop the
candidate rather than admit it, and must NOT score it to local
reputation — the same treatment an unrecovered slash_sig gets.