# 3.4.2 Istanbul Byzantine Fault Tolerant (IBFT)

IBFT is another Byzantine fault-tolerant protocol based on Practical Byzantine Fault Tolerance (PBFT). On a high level, Byzantine consensus is achieved deterministically as follows: \
\
&#x20;    1\. A leader or bidder/proposer is selected. \
\
&#x20;    2\. Each proposed block goes through several stages of communication between the nodes before being added and confirmed on the blockchain. \
\
There are four types of messages which are exchanged between the nodes:&#x20;

* Pre-Prepare, Ready, Commit: Used through ordinary consensus algorithms operations.&#x20;
* Round robin: Used to select a new block producer when the current producer is suspected of failing or when the block has not been created within a specific time frame.&#x20;

\
Additionally, there are two approaches in the SatoshiChain framework for choosing block producers:&#x20;

* Round-robin: This is a block producer selection strategy where a different bidder is chosen for every block producing phase.&#x20;
* Attached bidder: A new bidder is only selected whenever a malicious behavior has been detected by the current bidder.&#x20;

In these two approaches, every validator knows in advance which one of them is going to be the next block producer. This is because the decision is made through deterministic calculations based on node IDs. Similar to PBFT, IBFT also guarantees that there will be only one single bidder in each round.\
\
Moreover, the bidder is required to get responses from the other nodes in order to continue executing its further tasks. This means that in the case of a network partition with more than n nodes (at least more than 3n+1 nodes), the protocol does not make any decisions not to break the consensus until the partition is fixed and their communication is timely synced. This also allows immediate finality where no forks are ever allowed to occur.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://satoshichain.gitbook.io/satoshi-chain/background/3.4-consensus-protocols/3.4.2-istanbul-byzantine-fault-tolerant-ibft.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
