Tendermint software is designed to “securely and consistently” replicate an application on many machines. The phrase “securely and consistently” succinctly describes how Tendermint works. Securely means that Tendermint works even if up to 1/3 of machines fail in arbitrary ways while consistently means that every non-faulty machine sees the same transaction log and computes the same state. Secure and consistent replication is a fundamental problem in distributed systems. Therefore, it plays a critical role in the fault tolerance of a broad range of applications from currencies to elections including infrastructure orchestration and beyond.

The ability to tolerate machines failing in arbitrary ways or even becoming malicious is known as Byzantine fault tolerance (BFT). The theory of BFT is decades old but software implementations of BFT have only become popular recently. This is due largely to the success of "blockchain technology" like Bitcoin and Ethereum. Blockchain technology is just a formalisation of BFT in a more modern setting with an emphasis on peer-to-peer networking and cryptographic authentication. The name blockchain derives from the way transactions are batched in blocks where each block contains a cryptographic hash of the previous one thus forming a chain. In practice, the blockchain data structure actually optimises BFT design.

Tendermint consists of two primary technical components: a blockchain consensus engine and a generic application interface. The consensus engine, called the Tendermint Core, ensures that the same transactions are recorded on every machine in the same order. The generic application interface, called the Application BlockChain Interface (ABCI), enables the transactions to be processed in any programming language. Unlike other blockchain and consensus solutions, Tendermint's usefulness for BFT state machine replication of applications is that it can be used in blockchains written in whatever programming language or development environment. Other blockchain and consensus solutions come pre-packaged with built-in state machines like a fancy key-value store or a quirky scripting language making them rigid structures. Tendermint on the other hand gives developers greater flexibility. It is designed to be easily used, is simple to understand, is highly performative and useful for a wide variety of distributed applications.

Last updated