Motivation

Thus far, all blockchain "stacks" like Bitcoin are designed to have a monolithic design. That is, each blockchain stack is a single program that handles all the concerns of a decentralised ledger.

These concerns include P2P connectivity, the "mempool" broadcasting of transactions, consensus on the most recent block, account balances, Turing-complete contracts, user-level permissions among others. Using a monolithic architecture is typically bad practice in computer science. It makes it difficult to reuse components of the code and any attempts to do so result in complex maintenance procedures for forks of the codebase.

This is especially true when the codebase is not modular in design and suffers from "spaghetti code" issues. Another problem with monolithic design is that it limits you to the language of the blockchain stack (or vice versa). In the case of Ethereum which supports a Turing-complete bytecode virtual machine.

Therefore, this limits you to languages that compile down to this bytecode for instance Serpent and Solidity.

In contrast, our approach is to decouple the consensus engine and P2P layers from the details of the application state of the particular blockchain application. We do this by abstracting away the details of the application to an interface which is implemented as a socket protocol. Thus, the E-Money network has an interface, the Application BlockChain Interface (ABCI), and its primary implementation, the Tendermint Socket Protocol (TSP, or Teaspoon).

Last updated