1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/// A peer's protocol-round claim, bound to the peer that made it.
///
/// The epoch machine's two peer-report doors,
/// [`confirm`](super::Epochs::confirm) and
/// [`adopt_report`](super::Epochs::adopt_report), fold a value *attributed to
/// a station*. Until S333 they took a bare `(station, value)` pair, so
/// nothing structurally connected the two: any caller could pair any station
/// with any claim, and the seal record that the whole duplicate contract and
/// every downstream certificate rest on was derived from unattributed
/// scalars. `Vouched` closes that pairing, in the same idiom
/// [`Received`](crate::metis::Received) closes it on the receive path and
/// [`Cut`](crate::metis::Cut) closes it for witnessed frontiers: the station
/// is *inside* the evidence, so the door reads it out rather than being told.
///
/// # What vouching means, and what it does not
///
/// Vouching is the caller's assertion that this claim genuinely came from
/// this station. Minerva has no identity or signature domain (the non-goals
/// keep membership and transport caller-side), so it cannot check that
/// itself; what it can do is refuse to accept an unvouched claim, which
/// gives a caller's verification an unavoidable, greppable place to live.
///
/// It does **not** detect equivocation, and it is important not to read it
/// as though it did. A Byzantine station may validly vouch two different
/// claims to two peers. Each recipient's vouch is then genuine, both fold,
/// and the sealed records diverge; the local machine sees one voice saying
/// one thing and has no basis to suspect otherwise. Detecting a contradiction
/// requires comparing what different members were told, which is inherently
/// cross-member evidence and stays the caller's
/// (`fleet::byzantine` maps exactly what one forked voice does, and the
/// exposure survives this type).
///
/// So the honest scope: `Vouched` closes *misattribution* and makes the trust
/// boundary explicit. It is necessary for, and not a substitute for, the
/// cross-member conviction that closes equivocation.
///
/// # The escape
///
/// Minerva mints no `Vouched` itself, because no shipped path here holds the
/// proof. [`trust`](Self::trust) is therefore the only constructor, and it is
/// an *audited door* rather than a convenience: every call is a caller
/// asserting provenance it is responsible for. Under the crate's standing
/// crash-only model a peer's report is honest by assumption and `trust` is
/// simply the shape that assumption takes; under a Byzantine caller it is the
/// line the caller's verification must sit on.