laconicd/docs/intro/architecture.md
Federico Kunze Küllmer f7bcc8d12e
docs: first update (#188)
* docs: update

* update +

* txs

* update docs

* more docs

* spec update

* doc fixes
2021-08-03 17:35:31 +00:00

2.0 KiB

Architecture

Learn how Ethermint's architecture leverages the Cosmos SDK Proof-of-Stake functionality, EVM compatibility and fast-finality from Tendermint Core's BFT consensus. {synopsis}

Cosmos SDK

Ethermint enables the full composability and modularity of the Cosmos SDK

Tendermint Core & the Application Blockchain Interface (ABCI)

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.

Tendermint has evolved to be a general purpose blockchain consensus engine that can host arbitrary application states. Since Tendermint can replicate arbitrary applications, it can be used as a plug-and-play replacement for the consensus engines of other blockchains. Ethermint is such an example of an ABCI application replacing Ethereum's PoW via Tendermint's consensus engine.

Another example of a cryptocurrency application built on Tendermint is the Cosmos network. Tendermint is able to decompose the blockchain design by offering a very simple API (ie. the ABCI) between the application process and consensus process.

EVM module

Ethermint enables EVM compatibility by implementing various components that together support all the EVM state transitions while ensuring the same developer experience as Ethereum:

  • Ethereum transaction format as a Cosmos SDK Tx and Msg interface
  • Ethereum's secp256k1 curve for the Cosmos Keyring
  • StateDB interface for state updates and queries
  • JSON-RPC client for interacting with the EVM

Next {hide}

Check the available Ethermint resources {hide}