-
Notifications
You must be signed in to change notification settings - Fork 27
BFT Quorum Thresholds
Hugo Perez edited this page Apr 5, 2026
·
1 revision
Supermajority threshold: 6667 basis points (66.67%) via has_supermajority().
All quorum checks use lib_types::consensus::threshold::has_supermajority(votes, total).
No raw >= / > / < comparisons. One function, one threshold, one source of truth.
| Validators | Needed | Percentage | Byzantine faults tolerated |
|---|---|---|---|
| 3 | 3/3 | 100% | 0 |
| 4 | 3/4 | 75% | 1 |
| 5 | 4/5 | 80% | 1 |
| 7 | 5/7 | ~71% | 2 |
| 10 | 7/10 | 70% | 3 |
| 14 | 10/14 | ~71% | 4 |
| 21 | 15/21 | ~71% | 6 |
| 50 | 34/50 | 68% | 16 |
| 100 | 67/100 | 67% | 33 |
threshold_bps = 6667 (66.67%)
has_supermajority(votes, total) = votes * 10_000 >= total * 6667
This is mathematically equivalent to votes >= floor(total * 2 / 3) + 1 for all positive integers, proven by exhaustive test for n=1..200.
BFT tolerates f < n/3 Byzantine validators. Safety requires n - f honest validators to agree, which is n - floor((n-1)/3) = ceil(2n/3). The 6667 bps threshold encodes this bound exactly.
- Below 6667 bps: breaks the mathematical proof that BFT tolerates f < n/3.
- Above 6667 bps: stricter, safe, but reduces liveness (more validators needed to commit).
The same meets_threshold(numerator, denominator, threshold_bps) function supports governance voting tiers:
| Proposal Type | Quorum | Approval |
|---|---|---|
| Operational | 1000 bps (10%) | 5001 bps (>50%) |
| Sector Policy | 1500 bps (15%) | 6000 bps (60%) |
| Network Parameter | 2500 bps (25%) | 6667 bps (66.67%) |
| Constitutional | 4000 bps (40%) | 8000 bps (80%) |