EVM
Abstract
This document defines the specification of the Ethereum Virtual Machine (EVM) as a Cosmos SDK module.
Since the introduction of Ethereum in 2015, the ability to control digital assets through smart contracts has attracted a large community of developers to build decentralized applications on the Ethereum Virtual Machine (EVM). This community is continuously creating extensive tooling and introducing standards, which are further increasing the adoption rate of EVM compatible technology.
The growth of EVM-based chains (e.g. Ethereum), however, has uncovered several scalability challenges that are often referred to as the trilemma of decentralization, security, and scalability. Developers are frustrated by high gas fees, slow transaction speed & throughput, and chain-specific governance that can only undergo slow change because of its wide range of deployed applications. A solution is required that eliminates these concerns for developers, who build applications within a familiar EVM environment.
The x/evm
module provides this EVM familiarity on a scalable, high-throughput Proof-of-Stake blockchain.
It is built as a Cosmos SDK module which allows
for the deployment of smart contracts, interaction with the EVM state machine (state transitions), and the use of EVM tooling.
It can be used on Cosmos application-specific blockchains, which alleviate the aforementioned concerns through
high transaction throughput via CometBFT, fast transaction finality,
and horizontal scalability via IBC.
The x/evm
module previously was a part of the ethermint library,
but has been merged into the Evmos repository lately and got protected by new LICENCE. Therefore, we decided
to merge the latest common version into the HAQQ repository.
Contents
Module Architecture
If you're not familiar with the overall module structure from the SDK modules, please check this document as prerequisite reading.
evm/
├── client
│ └── cli
│ ├── query.go # CLI query commands for the module
│ ├── tx.go # CLI transaction commands for the module
│ └── utils.go # Utility functions for CLI commands of the module
├── keeper