Tendermint Core is open-source software that allows users to write applications in any language of their choice. The most interesting part is that this software can interact with other Blockchains. You need to know that the Blockchain we all talk about has a very rigid structure. If you are a developer, you will have two options. You can either build applications within a restrictive environment or fork the code and create your own chain.
Since creating your own chain isn't a stroll in the park. You will have to start a network and figure out what consensus mechanism to deploy. Developing a Blockchain network requires more effort than just initializing a database. It needs the incentives and trade-offs to balance security, decentralization, as well as scalability.
Over the years, teams have explored different approaches looking to build the most robust Blockchain ecosystem. In this post, we will consider one of such approaches: Tendermint Core. If you already know a bit about Blockchain systems, much of the things we say about Tendermint will seem familiar. Before we delve into this fully, let us explore Blockchain architecture.
Also learn about Optimistic Rollups.
In simple terms, we can define Blockchain as a time-stamped series of immutable records of data. This data is managed by a cluster of computer systems not owned by any single entity. All the blocks of data are secured and connected to one another using cryptographic principles. Alternatively, we can say that the Blockchain system is a deterministic state machine replicated on nodes. It is also important to note that these nodes do not necessarily trust each other.
When we said deterministic, we mean that if the same steps are repeated, it will always lead to the same result. There are three specific layers in the architecture of Blockchain technology. These layers include the following:
This is the propagation of the transaction or information throughout the notes.
It allows the different nodes to reach a decision provided more than two-thirds of the nodes are not malicious.
This layer is saddled with the responsibility of updating and processing transactions.
The downside is that building a Blockchain system from the ground up with the above layers is really hard work. Lots of projects preferred building on by forking the Bitcoin codebase. Although this approach saves a lot of time, it is handcuffed by the Bitcoin protocol's limitations. Also, there is no way you can execute a complex project with a protocol known for its throughput issues.
With the advent of Ethereum, things got a bit better. Ethereum provided developers with a platform to create their own customized codes (smart contracts and projects). However, both Ethereum and Bitcoin suffered from the same monolithic architecture. This brings us to the concept of monolithic and modular architecture.
A monolithic system means that everything in that system is interconnected and interdependent. Monolithic architecture implies that everything is composed all in one piece, and the design is more self-contained. The implication is that the architecture is more tightly-coupled, and the associated components must all be present for any code to be executed or compiled. Although this makes a system more robust, one cannot derive from it and create custom codes.
Monolithic systems are not the most flexible of systems. If you want to update any of the components, the entire system will have to be reworked. You can agree that this is not the best for all parties. This is where modular architecture comes into play. In modular architecture, the layers are not linked to each other. Although it is not as robust as monolithic architecture, it is relatively easy to update the whole application by working with separate modules.
With its independent modules, modular architecture allows users actually to update a section without changing the entire system. Therefore, iterative processes are much simpler in modular programs, unlike monolithic systems.
Curious about what is compound chain? Read here.
Some people use Tendermint and Tendermint Core interchangeably. For clarification, Tendermint is the company founded by Jae Kwon, while Tendermint Core is the software. Tendemint Core is an open-source software system that achieves fault tolerance. It is a distributed computer system that shows everyone in the same state at the same time. Provided two-thirds of the participants are non-malicious; everything will undoubtedly work smoothly.
Certain things set it apart from most Blockchain systems. The consensus mechanism deployed by Tendermint Core is Proof-of-Stake (PoS). For every period, a random node from a validator set is selected. Through a round-robin system, the node must propose the next block. If the other validators accept the new block, it gets added to the system, and the chain is updated. With Tendermint, finality is always instant. Unlike Bitcoin and Ethereum, you don't need to wait for confirmations to be sure that your transaction is valid.
Also, the architecture of Tendermint Core is modular. Thus the application layer is not attached to the consensus and networking layers. The implication is that you can plug your application layer into the stack. You don't have to worry about pesky incentives or consensus algorithms. End users might not be thrilled by this, but developers are certainly joyous about it. Having the ability to leverage an existing framework means developers can dive right into building applications without bootstrapping a whole network. These developers can pipe data from the Blockchain to write in any language.
The Application Blockchain Interface (ABCI) is another great addition to the Tendermint. ABCI is akin to the GPIO pins that you get on a Raspberry Pi computer. The ABCI is what defines the boundary between the Blockchain the applications running on it. ABCI is designed with distinct components, which include the following:
It is involved in the pairing of messages and response requests. The requests are made through consensus, while the application is responsible for responses.
The consensus engine runs the client while the application runs the server. There are two proper implementations; async raw bytes and grpc.
The ABCI is connection-oriented, and there are three connections for the Tendermint Core. These connections include:
The application interface is separated from the consensus mechanism, and this gives rise to greater flexibility for different decentralized applications. This flexibility makes it possible for decentralized applications to integrate any programming language into their business logic.
A good example of what you can do with the Tendermint Core is Ethermint. Ethermint is a project that removed the Proof-of-Our Work mechanism of the Ethereum codebase. The project bolted the Ethereum Virtual Machine on top of the Tendermint software. So many things became possible as a result of the Ethermint project. It made it possible for Ethereum developers to port their smart contracts over the new engine with so much ease. Aside from providing Ethereum functionality, Ethermint also functions like proof-of-Stake Ethereum. It gave us a glimpse of what the Casper implementation could look like in Ethereum 2.0.
Tendermint deploys the modular architecture with the aim to:
There are different needs for different projects. While some projects need an open system where anyone can contribute, others demand privacy. Tendermint can help in achieving the needs of both Blockchain systems. Since Tinmdermint handles only the networking and consensus for a Blockchain system, it can help in:
The implication is that developers define the application in any way they want. Therefore, it is left for the developers to determine how the validator set is defined within the ecosystem. The developers can have an election-system that elects validators based on the number of tokens. These validators have staked within the Blockchain system (proof-of-stake). Alternatively, they can create an application that defines a restricted set of pre-approved validators (proof-of-authority).
Tendermint Core has a block time of one second. Therefore, all applications made through Tendermint can expect high performance. Provided the application allows it, Tendermint can handle a transaction volume of 10,000 per second for 250-byte transactions.
Finality means that once a certain action has been executed, it cannot be reversed. Until the full implementation of Casper FFG, Bitcoin and Ethereum don't really have settlement finality. In the case of a hard fork or 51% attack, there is a high chance that transactions can be reversed. On the other hand, Tendermint gives instant finality within a second of transaction completion.
The security of Tendermint is not only secure; it also compels its participants to be accountable for their actions. As we mentioned at the beginning of this post, Tendermint Core cannot be forked if less than two-thirds of the validators are malicious. Also, the Tendermint consensus is optimally Byzantine fault-tolerant.
The friendliness of Tendermint is another great advantage. Its modular architecture makes it possible for the application layer to be suitably customized. This makes it possible for developers to link Blockchain codebases effortlessly onto Tendermint through ABCIs.
Tendermint's proof-of-stake (PoS) implementation protocol is far more scalable than the traditional proof-of-work (PoW) consensus algorithm. The major reason is that PoW- based systems cannot shard.
Tendermint Core already has the attention of numerous stakeholders in the Blockchain industry, from end-users to developers. With its current trajectory, it could become the backbone for the Internet of Blockchains. Several projects have already launched with the Cosmos SDK to actualize this vision.