You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/adr/0007-observed-network-upgrade-activation.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ Peers already report their start height and protocol version during the Zcash ha
14
14
15
15
Each crawler starts its `SeederChainTip` immediately below the newest compiled activation height. It raises the tip to that activation height only after an independent observer confirms all of these conditions:
16
16
17
-
- The observer samples 1 recently live, outbound, full node from each available IPv4 `/16` or IPv6 `/32` network group.
17
+
- The observer uniformly samples at most 64 available IPv4 `/16` or IPv6 `/32` network groups, then chooses 1 recently live, outbound, full node from each selected group.
18
18
- At least 12 network groups participate in a completed sweep.
19
19
- At least 75% of the sampled groups report a start height at or above the activation height plus Zebra's maximum reorganization depth, negotiate the new protocol version, and advertise `NODE_NETWORK`.
20
20
- The threshold holds for 3 consecutive sweeps, separated by the target block spacing. A timeout, failed handshake, or nonqualifying response remains in the denominator and counts as not ready.
@@ -25,14 +25,15 @@ Before raising the floor, Zeeder atomically persists an exact record of the acti
25
25
26
26
## Rationale
27
27
28
-
Network-group voting limits the weight of many addresses from one prefix, while the minimum group count prevents a small, internally consistent view from deciding activation. A fixed 75% threshold requires a supermajority without allowing a stalled minority to block the transition indefinitely. Requiring 3 spaced sweeps rejects brief height spikes and transient partitions, and waiting through the maximum reorganization depth avoids reacting at the activation boundary.
28
+
Network-group voting limits the weight of many addresses from one prefix, while uniform selection prevents prefixes containing more addresses from gaining extra sampling weight. The 64-group cap bounds concurrent handshakes and prevents an attacker-influenced address book from expanding the quorum denominator. The minimum group count prevents a small, internally consistent view from deciding activation, and a fixed 75% threshold requires a supermajority without allowing a stalled minority to block the transition indefinitely. Requiring 3 spaced sweeps rejects brief height spikes and transient partitions, while waiting through the maximum reorganization depth avoids reacting at the activation boundary.
29
29
30
30
The algorithm treats missing evidence conservatively. Failed and timed-out probes do not disappear from the denominator, and any nonqualifying sweep resets the consecutive-sweep counter. Persistence makes the transition monotonic across ordinary restarts and fleet rolls.
31
31
32
32
## Consequences
33
33
34
34
- Zeeder can be deployed before activation without removing nodes that satisfy the previous protocol floor.
35
35
- Each Zeeder instance decides independently from the peers it has discovered, so the design adds no node or endpoint dependency.
36
+
- Each observation sweep opens at most 64 concurrent isolated handshakes.
36
37
- The protocol floor can rise later than the chain reaches the confirmation height when the address book lacks 12 groups or fewer than 75% of groups qualify.
37
38
- After confirmation, the servable-peer cache rechecks each peer's negotiated version against the new floor, which removes handshakes admitted under the previous floor from DNS responses immediately.
38
39
- Peer start heights remain self-reported. An attacker that controls at least 75% of the sampled network groups, or fully eclipses a seeder, can still cause a false confirmation; this design raises the cost of false evidence but cannot authenticate chain work.
Copy file name to clipboardExpand all lines: docs/architecture.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -119,7 +119,7 @@ sequenceDiagram
119
119
120
120
### Observed Activation
121
121
122
-
The activation observer separates a compiled upgrade target from proof that the network has reached it. Each sweep chooses 1 recently live peer per IPv4 `/16` or IPv6 `/32`group from the crawler's own address book, then performs an isolated handshake that accepts the previous protocol floor. At least 75% of 12 or more groups must report the target version and a height beyond the activation plus maximum reorganization depth for 3 consecutive sweeps.
122
+
The activation observer separates a compiled upgrade target from proof that the network has reached it. Each sweep uniformly selects at most 64 IPv4 `/16` or IPv6 `/32`groups from the crawler's own address book, chooses 1 recently live peer per selected group, and performs isolated handshakes that accept the previous protocol floor. At least 75% of 12 or more sampled groups must report the target version and a height beyond the activation plus maximum reorganization depth for 3 consecutive sweeps.
123
123
124
124
After the final qualifying sweep, the observer persists the exact decision and advances `SeederChainTip`. zebra-network receives the height change through its `ChainTip` monitor, while the 5-second servable-peer refresh applies the same new minimum to cached handshakes. [ADR 0007](adr/0007-observed-network-upgrade-activation.md) defines the trust model, thresholds, and failure behavior.
Copy file name to clipboardExpand all lines: docs/network-upgrades.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ Each network crawler starts immediately below the newest activation height compi
8
8
9
9
The floor advances only after all of these conditions hold:
10
10
11
-
-1 peer is sampled from each available IPv4 `/16` or IPv6 `/32` network group.
11
+
-At most 64 available IPv4 `/16` or IPv6 `/32` network groups are selected uniformly, with 1 peer sampled from each selected group.
12
12
- At least 12 groups participate.
13
13
- At least 75% of those groups report the activation height plus Zebra's maximum reorganization depth, negotiate the target protocol version, and advertise `NODE_NETWORK`.
14
14
- The same threshold holds for 3 consecutive sweeps, separated by the target block spacing.
@@ -71,7 +71,7 @@ To force fresh observation after investigating a suspected false confirmation, s
71
71
|----------|--------|
72
72
| Does an upgrade require Zeeder configuration changes? | No |
73
73
| Can the new image be deployed before activation? | Yes; deployment keeps the previous floor |
74
-
| What causes the floor to rise? | 75% of at least 12 network groups qualifying across 3 consecutive sweeps after the confirmation height |
74
+
| What causes the floor to rise? | 75% of a uniform sample of 12 to 64 network groups qualifying across 3 consecutive sweeps after the confirmation height |
75
75
| Does Zeeder depend on a node or endpoint? | No; each instance observes peers from its own address book |
76
76
| Must the peer cache be cleared? | No; preserve it for observation and restart continuity |
77
77
| What is the recovery control? | Delete only the affected `.activation` record, then restart |
0 commit comments