Federated Byzantine Agreement
The general idea is that every Byzantine general, responsible for their own chain, sorts messages as they come in to establish truth. In Ripple the generals (validators) are pre-selected by the Ripple foundation. In Stellar, anyone can be a validator so you choose which validators to trust.
- Each node receives transaction from external applications
- Each Node forms public list of all valid (not included into last ledger (=block)) transactions aka (Candidate Set)
- Nodes merge its candidate set with UNLs(Unique Node List) candidate sets and vote on the veracity of all transactions (1st round of consensus)
- all transactions that received at least 50% votes are passed on the next round (many rounds may take place)
- final round of consensus requires that min 80% of Nodes UNL agreeing on transactions. It means that at least 80% of Validating nodes should have same Candidate SET of transactions
- after that each Validating node computes a new ledger (=block) with all transactions (with 80% UNL agreement) and calculate ledger hash, signs and broadcasts
- All Validating nodes compare their ledgers hash
- Nodes of the network recognize a ledger instance as validated when a 80% of the peers have signed and broadcast the same validation hash.