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 check it against the signed body (hash and
has_blob) with ProbeResponseExt::consistent_with and drop a
response where they disagree rather than trust either field alone.
Implementations§
Source§impl ProbeResponseExt
impl ProbeResponseExt
Sourcepub fn consistent_with(&self, body: &ProbeResponseBody) -> bool
pub fn consistent_with(&self, body: &ProbeResponseBody) -> bool
Does this ext’s coverage agree with the signed body (ADR 013 §Tier
1; ADR 022 § Consistency rule; #1506)?
For every blob but the empty one, body.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.
The empty blob (EMPTY_ROOT) spans zero blocks, so its coverage is
empty on a holder and a non-holder alike. For that hash the coverage
must be empty and has_blob alone says whether the node serves it
(#2471). The rule keys on body.hash, which the signature covers,
never on the unsigned total_bytes hint.
Neither coverage nor total_bytes 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.