# evm

# Abstract

This document defines the specification of the Ethereum Virtual Machine (EVM) as a Cosmos SDK module.

# Contents

  1. Concepts
  2. State
  3. State Transitions
  4. Messages
  5. ABCI
  6. Events
  7. Parameters

# Module Architecture

NOTE:: If you're not familiar with the overall module structure from the SDK modules, please check this document as prerequisite reading.

Copy evm/ ├── client │ └── cli │ ├── query.go # CLI query commands for the module │ └── tx.go # CLI transaction commands for the module ├── keeper │ ├── keeper.go # ABCI BeginBlock and EndBlock logic │ ├── keeper.go # Store keeper that handles the business logic of the module and has access to a specific subtree of the state tree. │ ├── params.go # Parameter getter and setter │ ├── querier.go # State query functions │ └── statedb.go # Functions from types/statedb with a passed in sdk.Context ├── types │ ├── chain_config.go │ ├── codec.go # Type registration for encoding │ ├── errors.go # Module-specific errors │ ├── events.go # Events exposed to the Tendermint PubSub/Websocket │ ├── genesis.go # Genesis state for the module │ ├── journal.go # Ethereum Journal of state transitions │ ├── keys.go # Store keys and utility functions │ ├── logs.go # Types for persisting Ethereum tx logs on state after chain upgrades │ ├── msg.go # EVM module transaction messages │ ├── params.go # Module parameters that can be customized with governance parameter change proposals │ ├── state_object.go # EVM state object │ ├── statedb.go # Implementation of the StateDb interface │ ├── storage.go # Implementation of the Ethereum state storage map using arrays to prevent non-determinism │ └── tx_data.go # Ethereum transaction data types ├── genesis.go # ABCI InitGenesis and ExportGenesis functionality ├── handler.go # Message routing └── module.go # Module setup for the module manager