forked from cerc-io/laconicd-deprecated
6e1c16627a
* evm: module specification * params and events * readme and messages * minor updates * concepts * genesis state concept * begin and end block * update parameters and genesis * state objects * state table * use permalink * init and export genesis * update abci * extra eips param * review comments * precision * link to photon doc
2.6 KiB
2.6 KiB
evm
Abstract
This document defines the specification of the Ethereum Virtual Machine (EVM) as a Cosmos SDK module.
Contents
Module Architecture
NOTE:: 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
├── 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