> For the complete documentation index, see [llms.txt](https://docs.emoney.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.emoney.network/tendermint-and-evmos/abci-overview/motivation.md).

# Motivation

Thus far, all blockchain "stacks" like[ Bitcoin](https://github.com/bitcoin/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.&#x20;

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.&#x20;

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.&#x20;

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).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.emoney.network/tendermint-and-evmos/abci-overview/motivation.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
