Skip to content
Blockchain Association of Cameroon
BAC-L0-FOUND-1083 h

Fault tolerance and Byzantine faults

Telling a crashed node from a malicious one, and why the latter is structurally more expensive to tolerate.

  • Distinguish crash faults from Byzantine faults by their observable effects
  • Justify the two-thirds threshold in BFT protocols
  • Explain the role of quorums in agreement

A machine that stops is one problem; a machine that answers falsely, or answers differently to each peer, is another, far more expensive one. In this workshop you learn to tell a crash from a Byzantine fault by what can be observed, to understand, through a counting argument, why a quorum-based protocol tolerating f Byzantine faults requires at least 3f + 1 nodes (stating the assumptions under which that holds), and to understand the role of quorums in agreement. You finish by turning the theoretical one-third threshold into an attack budget, with its limits.

Lessons 1/4 · 20 min

Crash or Byzantine fault: what can be observed

The starting question

Seven cashiers, in seven cities, each keep a copy of the same ledger. One morning, one of them stops answering. Another answers, but says "yes" to the Douala cashier and "no" to the Garoua cashier for the same question. Do these two incidents look alike? Treating them the same way would be a serious mistake.

The types of faults

TypeBehaviourWhat can be observed
Crash faultthe node stops and does nothing moresilence; never a false message
Omissionthe node loses or ignores some messagesintermittent silences
Byzantine faultarbitrary behaviour: lying, silence, different messages depending on the recipient, collusion with other faulty nodesmessages that look correct but contradict each other

The name comes from the "Byzantine generals problem" (Lamport, Shostak and Pease, 1982): generals must decide together whether to attack, while some are traitors and lie.

A Byzantine fault is not necessarily malicious: a corrupted bit in memory, a software bug or a wrong configuration also produce arbitrary behaviour. But in security we assume the worst: an adversary who knows the protocol.

Why the second costs more

Facing a crash, a reliable node can reason: "what it told me was true". It may only lack information. Facing a Byzantine node, nothing it says is trustworthy, and it can say different things to each peer (this is called equivocation). You must cross-check testimonies, and you need more of them.

A worked example: three nodes, without signatures

Three nodes A, B, C exchanging oral messages (no signatures: each relays what it heard, without proof). A wants to know whether C voted "yes" or "no".

  • If C crashed: A hears nothing from C. A knows one voice is missing.
  • If C is Byzantine: C says "yes" to A and "no" to B. A asks B: B answers "C told me no". A sees two versions, but cannot know whether C or B is lying: from A's viewpoint the contradiction is symmetric. Without signatures, with three nodes and one faulty, it is impossible to decide. With signatures the diagnosis becomes possible (see below), but lesson 3 shows that a quorum-based protocol still needs at least 4 nodes.

The role of signatures (workshop 105)

If messages are signed, B cannot lie about what C said: it can only present messages really signed by C. But that does not stop C from signing "yes" for A and "no" for B. A signature proves who said what, not that what is said is true or unique. On the other hand, two contradictory messages signed by C constitute a proof of equivocation: anyone can verify that C contradicted itself. This is the basis of automatic punishment (slashing) in some protocols. With signatures, A can therefore establish C's contradiction, but only after the fact: the decision may have been taken in the meantime.

Tolerating crashes: 2f + 1

If we assume only crashes, a majority suffices: with n = 2f + 1 nodes, f can fall and the remaining f + 1 still form a majority. Three nodes tolerate 1 crash; five tolerate 2. This is the model of replication protocols such as Paxos or Raft. It assumes that no node lies.

Your turn

In quorum-sim, set 7 validators and switch one to "offline", then another to "Byzantine". Compare the quorum's behaviour: the offline node removes a voice; the Byzantine one can supply a false or contradictory one.

What this does NOT guarantee

Classifying an incident as a crash is an assumption: a silent node can be Byzantine (it keeps quiet on purpose), and a slow node can pass for dead (lesson 1 of workshop 107).

Recap

  • Crash: the node goes quiet, does not lie. Byzantine: arbitrary behaviour, including saying different things to each peer.
  • Signatures attribute messages but do not prevent equivocation; they make it provable.
  • Crashes only: 2f + 1 nodes. Byzantine faults: more, as we shall see.

Interactive tool

BFT quorum simulator

Click a validator to change its state: honest, offline, then Byzantine (malicious or arbitrarily faulty).

Number of validators n

n = 7 · f = ⌊(n−1)/3⌋ = 2 · quorum = 2f+1 = 5

7 honest, 0 offline, 0 Byzantine.

✓ Can decide: 7 honest online validators ≥ quorum 5. The network can gather a quorum and finalise blocks.

✓ Safety guaranteed by the model: 0 Byzantine ≤ f = 2. Any two quorums overlap in at least one honest validator, so no conflicting decisions.

Classic BFT model: n ≥ 3f + 1 validators tolerate up to f faulty ones (offline or Byzantine). A quorum is 2f + 1 votes. Losing liveness = the network stops making progress, but nothing wrong is decided. Losing safety = conflicting decisions become possible, which is worse. Liveness additionally assumes a network that eventually delivers messages. This is only a model: real protocols have other assumptions and thresholds.

Lessons 2/4 · 20 min

Quorums: how a group reaches agreement

The starting question

Four validators must decide which block comes next. How many votes make the decision final? If we say "simple majority, 3 out of 4", is that enough against a Byzantine node? To answer, we need two precise notions.

Safety and liveness

  • Safety: "nothing bad ever happens"; here, two honest nodes never decide two different values for the same position.
  • Liveness: "something good eventually happens"; here, the system eventually decides.

These are two independent properties. A system that never decides is safe (it never contradicts itself) but not live. Classic BFT protocols are designed so that stopping is better than contradicting oneself: facing crashes or a faulty network, liveness is lost before safety. But facing more than f Byzantine nodes, both can be lost at the same time (lesson 3).

The concept: the quorum

A quorum is a set of nodes whose agreement suffices to validate a step. A simple rule: a value is decided when confirmed by a quorum of size q.

Two conflicting requirements weigh on q:

  1. q must not be too large: the system must progress even if f nodes keep silent. So q ≤ n − f.
  2. q must not be too small: two quorums must necessarily share an honest node, otherwise two contradictory values could be decided in parallel.

A worked example: four validators, f = 1

n = 4, one Byzantine node possible, q = 3 (we will justify this choice in lesson 3).

  • Two quorums of 3 out of 4 share at least 3 + 3 − 4 = 2 nodes.
  • At most 1 is Byzantine: at least 1 of the 2 is honest.
  • An honest node votes only once per position: it cannot confirm two different values. So the two quorums cannot decide two different values. Safety is preserved.

With q = 2 out of 4: two disjoint quorums {A, B} and {C, D} exist, each could decide a different value. Safety lost even without any fault.

A worked example: seven validators, f = 2

n = 7, q = 5. Two quorums share at least 5 + 5 − 7 = 3 nodes; at most 2 are Byzantine, hence at least 1 honest. And the system lives: 7 − 2 = 5 nodes still answer, which is just a quorum.

Quorum and reading the state

Once the value is decided by a quorum, a client querying a quorum will meet at least one honest node that saw it, but it does not know which one is honest. It needs f + 1 identical answers to be sure that at least one comes from an honest node. This is what lets a client verify without trusting a single server.

What this does NOT guarantee

  • A quorum guarantees safety if the number of Byzantine nodes does not exceed f. Beyond that, the guarantees collapse (lesson 3).
  • A quorum does not ensure liveness if the network is too slow or cut: you may wait a long time. No decision is not necessarily an attack.
  • A quorum proves that "enough nodes voted", not that the decided value is valid: validity is checked by each honest node before voting.

Your turn

In quorum-sim, set 7 validators, 2 Byzantine: is the quorum of 5 reachable? Switch a third to Byzantine or offline and see what the tool reports.

Recap

  • Safety = never two contradictory decisions; liveness = we eventually decide. Independent.
  • A quorum q must satisfy q ≤ n − f (liveness) and two quorums must share an honest node (safety).
  • With n = 4, f = 1: q = 3. With n = 7, f = 2: q = 5.

Interactive tool

BFT quorum simulator

Click a validator to change its state: honest, offline, then Byzantine (malicious or arbitrarily faulty).

Number of validators n

n = 7 · f = ⌊(n−1)/3⌋ = 2 · quorum = 2f+1 = 5

7 honest, 0 offline, 0 Byzantine.

✓ Can decide: 7 honest online validators ≥ quorum 5. The network can gather a quorum and finalise blocks.

✓ Safety guaranteed by the model: 0 Byzantine ≤ f = 2. Any two quorums overlap in at least one honest validator, so no conflicting decisions.

Classic BFT model: n ≥ 3f + 1 validators tolerate up to f faulty ones (offline or Byzantine). A quorum is 2f + 1 votes. Losing liveness = the network stops making progress, but nothing wrong is decided. Losing safety = conflicting decisions become possible, which is worse. Liveness additionally assumes a network that eventually delivers messages. This is only a model: real protocols have other assumptions and thresholds.

Lessons 3/4 · 30 min

Why 3f + 1: a counting argument and its assumptions

The starting question

You read everywhere: "a BFT protocol tolerates up to one third of Byzantine nodes". Where does the third come from? Why not a half, as for crashes? And under which conditions is it true?

The assumptions (read before the reasoning)

The counting argument below holds for the following model:

  1. n nodes, of which at most f are Byzantine (the rest are honest).
  2. Honest nodes follow the protocol; Byzantine ones can do anything, including coordinating.
  3. The network may delay messages, but a message between honest nodes eventually arrives. We want safety to hold even without a delay bound, and liveness to hold when the network eventually behaves (the so-called partial synchrony assumption).
  4. Messages are authenticated (a node cannot impersonate another). It can, however, say different things to each peer. Transferable signatures do not lower the number of nodes needed under partial synchrony.
  5. The protocol is deterministic, on a replicated state machine.

In other models the bounds differ: for example, with a synchronous network (bounded, known delays) and unforgeable signatures, the generals problem can be solved for a larger number of traitors, according to the 1982 paper; without signatures, that same paper gives the bound n > 3f. And in a purely asynchronous network, no deterministic protocol can guarantee termination (while staying safe) if even a single node may crash (result of Fischer, Lynch and Paterson, 1985): this is why partial synchrony is assumed for liveness.

Mind the scope of what follows: the counting shows what a quorum-based decision rule requires. The bound n ≥ 3f + 1 is also established for any protocol (Lamport, Shostak and Pease, 1982, without signatures in a synchronous network; Dwork, Lynch and Stockmeyer, 1988, under partial synchrony) by an indistinguishability argument that we do not reproduce.

The counting argument

We look for the quorum size q and the number of nodes n. Two constraints:

  • Liveness: we must be able to decide even if the f Byzantine nodes keep silent. Only n − f nodes answer, so q ≤ n − f.
  • Safety: any two quorums overlap in at least 2q − n nodes. Among them, f may be Byzantine, so at least one must be honest: 2q − n ≥ f + 1, i.e. q ≥ (n + f + 1) ÷ 2.

Chaining: (n + f + 1) ÷ 2 ≤ q ≤ n − f, which requires (n + f + 1) ÷ 2 ≤ n − f, i.e. n + f + 1 ≤ 2n − 2f, hence n ≥ 3f + 1.

For n = 3f + 1, the compatible quorum size is q = 2f + 1.

fn = 3f + 1q = 2f + 1overlap 2q − nof which honest (at least)
14321
27531
310741

Why 3 nodes cannot tolerate 1 Byzantine node

n = 3, f = 1. We would need q ≤ 2 (liveness) and 2q − 3 ≥ 2, i.e. q ≥ 2.5 (safety): impossible. Concretely: A and B are honest, C is Byzantine. A cannot wait for C (it may stay silent), so it decides with {A, C}; B likewise decides with {B, C}. C votes X with A and Y with B: two contradictory decisions, and the only node common to the two quorums, C, is faulty. This reasoning holds even with signed messages.

The third "as a percentage"

n ≥ 3f + 1 is written f < n ÷ 3: the protocol is safe as long as strictly fewer than one third of nodes are Byzantine. In proof-of-stake chains, n is replaced by the share of stake (the stake is the tokens each validator puts up as collateral; votes are weighted): the assumption becomes "less than one third of the stake is Byzantine".

Convention: in this workshop, a decision requires strictly more than two thirds of the votes (q = 2f + 1 when n = 3f + 1). Other protocol descriptions (see workshop 109) say "two thirds" without saying whether it is strict or inclusive; the difference matters precisely at exactly one third.

What happens beyond f?

n = 4, tolerated f = 1, but two Byzantine nodes B1 and B2, and two honest ones H1 and H2. Quorum q = 3. B1 and B2 vote "X" with H1, forming the quorum {B1, B2, H1}, and vote "Y" with H2, forming {B1, B2, H2}. The two quorums overlap in {B1, B2}: two contradictory decisions for the same position. Safety is lost. The threshold is not a comfort zone: beyond it, the guarantee vanishes entirely.

The founding paper of practical Byzantine fault tolerance is Castro and Liskov's Practical Byzantine Fault Tolerance (OSDI 1999), which works in this model with n ≥ 3f + 1.

What this does NOT guarantee

  • The bound says "if at most f are faulty"; it does not say that fewer than f faulty is likely. Who controls the proportion of faulty nodes? In an open network, that is the question of validator identity (proof of stake, permissioning).
  • It does not cover attacks on the network itself (manufactured partitions, workshop 107).
  • It says nothing about transaction validity, performance, or decentralisation.

Recap

  • Constraints: q ≤ n − f (liveness) and 2q − n ≥ f + 1 (safety) give n ≥ 3f + 1 and q = 2f + 1.
  • Assumptions: at most f Byzantine, authenticated messages, safety without a delay bound, liveness under partial synchrony.
  • Beyond f Byzantine nodes, safety can be lost, not merely degraded.

Interactive tool

BFT quorum simulator

Click a validator to change its state: honest, offline, then Byzantine (malicious or arbitrarily faulty).

Number of validators n

n = 7 · f = ⌊(n−1)/3⌋ = 2 · quorum = 2f+1 = 5

7 honest, 0 offline, 0 Byzantine.

✓ Can decide: 7 honest online validators ≥ quorum 5. The network can gather a quorum and finalise blocks.

✓ Safety guaranteed by the model: 0 Byzantine ≤ f = 2. Any two quorums overlap in at least one honest validator, so no conflicting decisions.

Classic BFT model: n ≥ 3f + 1 validators tolerate up to f faulty ones (offline or Byzantine). A quorum is 2f + 1 votes. Losing liveness = the network stops making progress, but nothing wrong is decided. Losing safety = conflicting decisions become possible, which is worse. Liveness additionally assumes a network that eventually delivers messages. This is only a model: real protocols have other assumptions and thresholds.

Lessons 4/4 · 20 min

From threshold to attack budget

The starting question

A proof-of-stake network announces: "safe as long as less than one third of the stake is Byzantine". How much money does it cost to exceed that threshold? The answer "a third of the total value" is a starting point, not a result.

What each fraction of the stake allows (in lesson 3's model)

Share of stake controlled by the attackerTheoretical effect
less than 1/3neither safety nor liveness is threatened (if the assumptions hold)
exactly 1/3can block decisions by refusing to vote: with the "strictly more than 2/3" rule, the quorum becomes unreachable (liveness lost; safety still holds)
more than 1/3can block and, with control of the network, can also cause contradictory decisions (safety threatened)
more than 2/3can pass anything the vote allows, since it supplies a quorum by itself

The exact threshold: safety is guaranteed for b < n ÷ 3. At exactly b = n ÷ 3 (when the division is exact), with a quorum strictly above 2/3, safety still holds but liveness is lost; beyond, safety is no longer guaranteed. With an inclusive "at least 2/3" rule, however, exactly one third of faulty nodes already suffices to lose safety.

A worked example

Fictitious network: 2,400,000 tokens staked in total, a token being worth 3 fictitious units.

  • One third of the stake: 2,400,000 ÷ 3 = 800,000 tokens.
  • Naive price: 800,000 × 3 = 2,400,000 units.

This value is a theoretical floor, not a price. Why?

  1. Buying pushes the price up. If the market is thin, acquiring 800,000 tokens costs more than 3 per token (slippage).
  2. Stake may be locked: tokens in an unbonding period, held by people who do not sell, or not purchasable.
  3. The calculation depends on how stake is acquired. If the attacker buys tokens that are already staked, the total stays 2,400,000 and they need 800,000. If they add fresh stake, the total grows: they need x such that x ÷ (2,400,000 + x) ≥ 1 ÷ 3, i.e. x ≥ 1,200,000 tokens, 50% more.
  4. Slashing: if the protocol destroys stake caught in equivocation (the proof from lesson 1), the attack costs the lost stake on top.
  5. The gain: the attacker spends only if the expected gain exceeds the cost. A threshold is also a question of incentives, not only of mathematics.

Bribing instead of buying

One can also bribe validators who already hold 800,000 tokens: the cost is then the bribe, not the price of the tokens. If a few large validators concentrate the stake, convincing a few may suffice. Stake concentration is therefore a security measure as much as the total amount.

What this does NOT guarantee

Staying under the third guarantees the protocol's properties within its model. It does not protect against an implementation bug, a stolen validator key (workshop 105) or a partition (workshop 107) that would put honest nodes on the wrong side.

Recap

  • At a third of the stake, an attacker can block; beyond it, with the network, they can sometimes contradict. Above two thirds, they decide.
  • Theoretical threshold ≠ price: slippage, locking, bribes, penalties and gain all matter.
  • Acquiring 1/3 by buying costs 1/3 of the total; by adding fresh stake, 1/2 of the existing total is needed.

Guided lab

In this lab you handle the quorum tool and apply lesson 3's formulas. The browser does not run your own code: the simulation to program is the independent lab. The numbers of the generated exercise change at each attempt, and the check questions concern the tool's cases.

A browser is no substitute for a real terminal: this lab trains reading and reasoning; the real hands-on practice is in the independent lab.

A certified account is required

Graded activities record results in your name and are the basis for a credential. They therefore need a complete certified file and a current consent. Filling in the file does not verify your identity; the Secretariat can verify it afterwards ("Verified" badge).

  1. 1.Explore seven validators

    In quorum-sim, set n = 7. Switch validators to "offline" one by one, then to "Byzantine", and note each time whether a quorum of 5 is reachable and what the tool says about safety and liveness. Find the smallest number of faulty nodes that breaks each of the two properties. This step has nothing to submit; your observations feed the next two.

    Interactive tool

    BFT quorum simulator

    Click a validator to change its state: honest, offline, then Byzantine (malicious or arbitrarily faulty).

    Number of validators n

    n = 7 · f = ⌊(n−1)/3⌋ = 2 · quorum = 2f+1 = 5

    7 honest, 0 offline, 0 Byzantine.

    ✓ Can decide: 7 honest online validators ≥ quorum 5. The network can gather a quorum and finalise blocks.

    ✓ Safety guaranteed by the model: 0 Byzantine ≤ f = 2. Any two quorums overlap in at least one honest validator, so no conflicting decisions.

    Classic BFT model: n ≥ 3f + 1 validators tolerate up to f faulty ones (offline or Byzantine). A quorum is 2f + 1 votes. Losing liveness = the network stops making progress, but nothing wrong is decided. Losing safety = conflicting decisions become possible, which is worse. Liveness additionally assumes a network that eventually delivers messages. This is only a model: real protocols have other assumptions and thresholds.

  2. 2.Apply n = 3f + 1

    The brief gives the number n of validators in a classic BFT network with n = 3f + 1. Determine f (the number of Byzantine nodes tolerated), the quorum size 2f + 1, and the smallest network that would tolerate one more Byzantine fault (3(f + 1) + 1).

  3. 3.Three crashes out of seven

    In quorum-sim with n = 7 and a quorum of 5: set three validators offline (crashes, no Byzantine faults). Observe what the tool reports for the quorum, safety and liveness, then answer the check question.

    Interactive tool

    BFT quorum simulator

    Click a validator to change its state: honest, offline, then Byzantine (malicious or arbitrarily faulty).

    Number of validators n

    n = 7 · f = ⌊(n−1)/3⌋ = 2 · quorum = 2f+1 = 5

    7 honest, 0 offline, 0 Byzantine.

    ✓ Can decide: 7 honest online validators ≥ quorum 5. The network can gather a quorum and finalise blocks.

    ✓ Safety guaranteed by the model: 0 Byzantine ≤ f = 2. Any two quorums overlap in at least one honest validator, so no conflicting decisions.

    Classic BFT model: n ≥ 3f + 1 validators tolerate up to f faulty ones (offline or Byzantine). A quorum is 2f + 1 votes. Losing liveness = the network stops making progress, but nothing wrong is decided. Losing safety = conflicting decisions become possible, which is worse. Liveness additionally assumes a network that eventually delivers messages. This is only a model: real protocols have other assumptions and thresholds.

  4. 4.Two Byzantine nodes out of four

    Set n = 4 (quorum of 3, tolerated f = 1) and make two validators Byzantine. Using lesson 3, work out whether the two Byzantine nodes can lead honest nodes to decide different values. Answer the check question.

    Interactive tool

    BFT quorum simulator

    Click a validator to change its state: honest, offline, then Byzantine (malicious or arbitrarily faulty).

    Number of validators n

    n = 7 · f = ⌊(n−1)/3⌋ = 2 · quorum = 2f+1 = 5

    7 honest, 0 offline, 0 Byzantine.

    ✓ Can decide: 7 honest online validators ≥ quorum 5. The network can gather a quorum and finalise blocks.

    ✓ Safety guaranteed by the model: 0 Byzantine ≤ f = 2. Any two quorums overlap in at least one honest validator, so no conflicting decisions.

    Classic BFT model: n ≥ 3f + 1 validators tolerate up to f faulty ones (offline or Byzantine). A quorum is 2f + 1 votes. Losing liveness = the network stops making progress, but nothing wrong is decided. Losing safety = conflicting decisions become possible, which is worse. Liveness additionally assumes a network that eventually delivers messages. This is only a model: real protocols have other assumptions and thresholds.

Security exercise — How much does a third of the votes cost?

A fictitious proof-of-stake chain uses a BFT-type protocol: it is safe as long as less than one third of the stake is Byzantine (lesson 3's model), and an attacker holding at least one third of the stake can block finality by refusing to vote (a decision requires strictly more than two thirds of the stake).

Fictitious data:

ItemValue
Total stake2,400,000 tokens
Price of one token3 fictitious units
Acquisition modethe attacker buys tokens that are already staked (the total does not change)
Marketdeep: the price stays 3 per token
Penaltynone for a mere refusal to vote

Compute the attacker's minimum budget, in fictitious units, to reach the blocking threshold, using the exact figure. Enter it with no separator. Then write down for yourself three real factors that would make the attack more expensive or harder than this floor, and one that would make it cheaper.

Workshop quiz

Eight questions drawn from a larger pool, 70% to pass. It opens once every lab checkpoint is passed. You can retake it: the draw changes.

A certified account is required

Graded activities record results in your name and are the basis for a credential. They therefore need a complete certified file and a current consent. Filling in the file does not verify your identity; the Secretariat can verify it afterwards ("Verified" badge).

Independent lab (outside the site)

Not graded online: do it on your own machine and publish it to your Git repository.

To do on your machine, outside the site, in Python (standard library), in a Git repository.

  1. Model n nodes: h honest and b Byzantine (n = h + b). A value is "decided" when it collects at least q distinct votes. Honest nodes vote for a single value; Byzantine ones may vote for both values X and Y (they coordinate).
  2. For n = 7 and q = 5, vary b from 0 to 7. For each b, compute: (a) is safety preserved, i.e. is it impossible for X and Y each to get at least q votes? (b) is liveness preserved, i.e. do the h honest nodes suffice to reach q (h ≥ q)? Check your results against the formulas: safety is lost as soon as b ≥ 2q − n; liveness is lost as soon as b > n − q.
  3. Plot (with matplotlib or a table) the "safety curve": b on the x axis, two 0/1 indicators on the y axis. Mark the threshold f = 2.
  4. Repeat for n = 7, 10 and 13, with q = 2f + 1 (f = ⌊(n − 1) ÷ 3⌋) and then with a quorum that is too small: the simple majority q = ⌊n ÷ 2⌋ + 1. (For n = 4 the two coincide, q = 3: try it and observe why.) Observe where safety is lost.
  5. In NOTES.md: interpret the curve in three sentences (what happens at b = f, at b = f + 1?), and list the assumptions of your model that reality does not respect (perfect messages, a single voting round, no delay).

Deliverable: the code, the curve, NOTES.md. The data stays fictitious.

Takeaways

  • A crash goes quiet; a Byzantine fault can lie, contradict itself and collaborate. The second is structurally more expensive to tolerate.
  • Signatures attribute messages but do not prevent equivocation; they make it provable.
  • The constraints q ≤ n − f (liveness) and 2q − n ≥ f + 1 (safety) give n ≥ 3f + 1 and q = 2f + 1, under explicit assumptions: at most f Byzantine, authenticated messages, partial synchrony for liveness.
  • Beyond f Byzantine nodes, safety can be lost: the threshold is not a comfort zone.
  • A threshold as a percentage of stake is not a price: slippage, locking, bribery, penalties and gain all matter.

Common misconceptions

  • Misconception : "A silent node has crashed, so it is harmless."

    In fact : Silence can be a Byzantine choice, or just a delay. From the outside you cannot conclude a crash.

  • Misconception : "Signed messages are enough to tolerate dishonest nodes."

    In fact : A dishonest node can sign two contradictory messages. The signature makes it detectable, not harmless.

  • Misconception : "A BFT protocol always tolerates 33% of malicious nodes."

    In fact : It tolerates strictly fewer than one third, under assumptions on the network and messages. At one third or more, safety or liveness can be lost.

  • Misconception : "To attack, just buy a third of the stake at the market price."

    In fact : It is a theoretical floor. Slippage, locking, any penalty and the way of acquiring change the real cost.

Glossary

Crash fault
A failure where a node stops and does nothing more, without ever sending a false message.
Byzantine fault
A failure where a node behaves arbitrarily: lying, silence, different messages depending on the recipient.
Equivocation
A node sending contradictory messages to different peers for the same step.
Quorum
A set of nodes whose agreement suffices to validate a step; in a classic BFT with n = 3f + 1, its size is 2f + 1.
Safety
The property that nothing bad happens: two honest nodes never decide contradictory values.
Liveness
The property that something good eventually happens: the system eventually decides.