Tendermint is software for securely and consistently replicating an application on many machines. By securely, we mean that Tendermint works even if up to 1/3 of machines fail in arbitrary ways. By consistently, we mean 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; it plays a critical role in the fault tolerance of a broad range of applications, from currencies, to elections, to infrastructure orchestration, and beyond.
The ability to tolerate machines failing in arbitrary ways, including becoming malicious, is known as Byzantine fault tolerance (BFT). The theory of BFT is decades old, but software implementations have only became popular recently, due largely to the success of “blockchain technology” like Bitcoin and Ethereum. Blockchain technology is just a reformalization of BFT in a more modern setting, with emphasis on peer-to-peer networking and cryptographic authentication. The name derives from the way transactions are batched in blocks, where each block contains a cryptographic hash of the previous one, forming a chain. In practice, the blockchain data structure actually optimizes BFT design.
Tendermint consists of two chief technical components: a blockchain consensus engine and a generic application interface. The consensus engine, called Tendermint Core, ensures that the same transactions are recorded on every machine in the same order. The application interface, called the Application BlockChain Interface (ABCI), enables the transactions to be processed in any programming language. Unlike other blockchain and consensus solutions, which come pre-packaged with built in state machines (like a fancy key-value store, or a quirky scripting language), developers can use Tendermint for BFT state machine replication of applications written in whatever programming language and development environment is right for them.
Tendermint is designed to be easy-to-use, simple-to-understand, highly performant, and useful for a wide variety of distributed applications.(https://docs.tendermint.com/master/introduction/what-is-tendermint.html)
First, a quick clarification on terminology. We’ll use the terms “Tendermint” and “Tendermint Core” interchangeably here since we’re only focused on the tech.
However, Tendermint is the name of the company (founded by the developer that wrote the original whitepaper, Jae Kwon), while Tendermint Core is the actual software the company works on. More specifically, the software has two primary components: its core consensus engine (Tendermint Core) and its application interface (ABCI).
Tendermint Core is a system that achieves fault tolerance. In essence, it’s a big, distributed computer that shows everyone the same state at the same time. So long as at least two-thirds of the participants are honest, everything works smoothly. But that’s pretty much every blockchain, right? What makes it so special?Firstly, the consensus mechanism used is a Proof of Stake (PoS) one. For each period, a random node from a validator set is selected. That node must then propose the next block (in something called a round-robin system). If the other validators are happy with it, then the new block is added, and the chain is updated. Finality is instant – unlike with Bitcoin or Ethereum, there’s no need to wait for confirmations to be sure that your transaction is valid.
But wait, there’s more! Tendermint Core’s architecture is modular, with the application layer divorced from the consensus and networking layers. In plain English, that means that you can plug your own application layer into the stack. No need to worry about pesky incentives or consensus algorithms.
Perhaps this isn’t too thrilling for the end-user. But for developers, the ability to leverage an existing framework means they can dive right into building applications without bootstrapping a whole network. Data from the blockchain can be piped to the integrated layer, enabling devs to write software in any language.
The magic happens with something called the Application Blockchain Interface, or simply, ABCI. Think of this like the GPIO pins you get on a Raspberry Pi computer. You can hook up all kinds of third-party components to those, from LEDs to elaborate sprinkler systems for your plants. In a similar way, the ABCI is what defines the boundary between the blockchain and the applications running on top of it.
What’s so great about Tendermint Core?
The separation of the application interface and the consensus mechanism allows greater flexibility for a range of decentralized applications to incorporate any programming languages into their business logic.For a tangible example of what can be done, you need only look to Ethermint: a project that took the Ethereum codebase removed the Proof of Work mechanism and bolted the Ethereum Virtual Machine on top of Tendermint. This made a few interesting things possible. The first is that Ethereum developers could port their smart contracts over to the new engine with ease, or write new contracts in the Solidity language. On top of providing Ethereum functionality, Ethermint acts like a Proof of Stake Ethereum, giving us a glimpse of what a Casper implementation might look like in Ethereum 2.0.