# Research on Progress of Blockchain Consensus Algorithm:
## 3 Blockchain Consensus Algorithm
### Byzantine Fault-Tolerant Consensus Algorithm
#### 3.3.1 PBFT Algorithm  
The PBFT algorithm is a practical Byzantine fault-tolerance algorithm, which was first proposed by [PERSON] et al. in 1999. Inspired by the solution of the Byzantine general problem based on the oral message and signature message proposed by [PERSON] in 1982 [49], the algorithm reduces the complexity of the Byzantine fault-tolerant algorithm from the exponential level to polynomial level, and it increases the fault-tolerant performance by one-third on the premise of ensuring the stability and security of the original algorithm, making the Byzantine fault-tolerant algorithm more suitable for practice. The PBFT algorithm focuses on solving the problem of transaction ordering in distributed nodes that may have Byzantine errors. Under the condition that the number of Byzantine nodes with Byzantine errors accounts for up to \(1/3\) of the total, the state of non-Byzantine nodes in the system can be consistent. The nodes in the PBFT algorithm include the master node and other nodes. The master node is selected by the system and is responsible for distributing the number and processing information to other nodes in blockchain as well as checking the validity of the information. The distributing number is used for the ordering of the request message and the processing information includes the current view, the number n of the current request, the summary of the message content, and the message content. After other nodes accept the information sent by the master node, they will verify the information. Suppose there are \(3f+1\) nodes in the working process of the PBFT algorithm; among \(3f+1\) nodes, there is \(1\) master node, \(2f\) honest nodes, and \(f\) malicious nodes. The working phase of the PBFT algorithm can be divided into three phases: pre-preparation phase, preparation phase, and submission phase. In the pre-preparation phase, the master node sends the assigned sequence number and pre-preparation information to other nodes. After the other nodes receive the information sent by the master node and confirm, the preparation phase begins. In the preparation phase, each node sends preparation information to all nodes except itself. When each node receives \(2f+1\) pieces of information, all consensus nodes are regarded as ready. Then, it is in the confirmation phase. All other nodes will broadcast a confirmation message to the entire network. When each node receives \(2f+1\) confirmation messages, the confirmation work phase is completed, and the correct log information is returned; then, they will be recorded in the blockchain. The workflow of the PBFT algorithm is shown in Figure 6.  
The PBFT algorithm greatly improves the efficiency of the Byzantine fault-tolerant algorithm by reducing the complexity of the algorithm. When the number of Byzantine nodes in the system is less than \(1/3\) of the total, the PBFT consensus algorithm can operate correctly and ensure the reliability of the blockchain system, thus greatly improving the security performance. These advantages make the Byzantine fault-tolerant algorithm more suitable for practical application scenarios. However, the PBFT algorithm also has certain limitations. For example, because the complexity of communication is the square of the number of nodes, it is difficult to support large-scale network nodes, so its scalability is poor. It cannot be directly used in the public chain, which may include a large number of nodes and is unable to undertake large-scale communication between nodes. So, it is only applicable to consortium chains and private chains, and it is not suitable for public chains with public authority. The PBFT algorithm also has certain limitations in communication problems. If the number of nodes is too large, the performance will be limited. In the case of poor network conditions, there will also be problems such as high processing delay. Some optimization algorithms based on the PBFT algorithm have also been proposed.