Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Question: IBFT 2.0 Fault Tolerance Discrepancy between Documentation and Paper #8120

Open
HaoXuan40404 opened this issue Jan 15, 2025 · 1 comment

Comments

@HaoXuan40404
Copy link

Description
I noticed a potential discrepancy regarding IBFT 2.0's fault tolerance capability between the Besu documentation and the IBFT 2.0 paper.

Current Behavior
According to the Besu documentation, a 6-node IBFT 2.0 network can tolerate 2 faulty nodes.

Expected Behavior
Based on the IBFT 2.0 paper, Section 2 (Failure Model), a 6-node network should only be able to tolerate 1 faulty node according to the traditional Byzantine Fault Tolerance formula: n = 3f + 1, where:

n is the total number of nodes
f is the number of faulty nodes

Question
Could you explain why there is a difference between the documentation and the theoretical model? Is there a specific implementation in Besu that enables higher fault tolerance than the traditional BFT model suggests?

Environment

  • Consensus Protocol: IBFT 2.0
@HaoXuan40404
Copy link
Author

PBFT consensus with the following scenario:

Total nodes (n) = 6
Byzantine nodes (f) = 1
Disconnected nodes = 1
Normal functioning nodes = 4

It satisfies the basic PBFT requirement where n ≥ 3f + 1:

With f = 1, we need n ≥ 3(1) + 1 = 4
Our n = 6 satisfies this condition (6 > 4)
For consensus, PBFT requires 2f + 1 nodes to participate:

With f = 1, we need 2(1) + 1 = 3 nodes
We have 4 normal functioning nodes available (after subtracting 1 Byzantine and 1 disconnected node)
4 available nodes > 3 required nodes

Could you please confirm if this analysis is correct? Would the system be able to reach consensus in this scenario?
Thank you for your help in clarifying this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant