Good to know: Splitting your product into fundamental concepts, objects, or areas can be a great way to let readers deep dive into the concepts that matter most to them.
Our blockchain, built with the Cosmos SDK on top of the consensus engine Tendermint, is an application-specific blockchain, as opposed to another popular type of virtual-machine blockchain with Ethereum as one the most prominent examples.
In a virtual-machine blockchain, the development revolves around building a decentralized application on top of an existing blockchain as a set of smart contracts. While smart contracts can be a good fit for use cases such as single-use applications (e.g., ICOs,) they often fall short for building complex decentralized platforms due to its limitations in terms of flexibility, sovereignty and performance.
On the other hand, application-specific blockchains offer a radically different development paradigm where a blockchain could be customized to operate a single application. Developers have all the freedom to make design decisions required for the application to run optimally. In addition, they can easily extend the application’s complexity with modules while not sacrificing sovereignty, security or performance.
At its core, a blockchain is a replicated deterministic state machine. A state machine is a computer science concept whereby a machine can have multiple states, but only one at any given time. In a blockchain context, the state machine is deterministic, i.e., if a node is started at a given state and replays the same sequence of transactions, it will always end up with the same final state.
The Cosmos SDK gives developers maximum flexibility to define the state of their application, transaction types and state transition functions. To replicate the state machine implemented with Cosmos SDK over the network, we use Tendermint. Tendermint is an application-agnostic engine that is responsible for handling the networking and consensus layers of a blockchain.
In practice, this means that Tendermint is responsible for propagating and ordering transaction bytes. The interface for message exchange between Tendermint and the application is called the Application Blockchain Interface (ABCI.) It consists of a set of methods, each with a corresponding Request and Response message type.