github.com/MetalBlockchain/subnet-evm@v0.4.9/plugin/evm/README.md (about) 1 # EVM Package 2 3 The EVM package implements the MetalGo VM interface. 4 5 ## VM 6 7 The VM creates the Ethereum backend and provides basic block building, parsing, and retrieval logic to the consensus engine. 8 9 ## APIs 10 11 The VM creates APIs for the node through the function `CreateHandlers()`. CreateHandlers returns the `Service` struct to serve Subnet-EVM specific APIs. Additionally, the Ethereum backend APIs are also returned at the `/rpc` extension. 12 13 ## Block Handling 14 15 The VM implements `buildBlock`, `parseBlock`, and `getBlock` and uses the `chain` package from MetalGo to construct a metered state, which uses these functions to implement an efficient caching layer and maintain the required invariants for blocks that get returned to the consensus engine. 16 17 To do this, the VM uses a modified version of the Ethereum RLP block type [here](../../core/types/block.go) and uses the core package's BlockChain type [here](../../core/blockchain.go) to handle the insertion and storage of blocks into the chain. 18 19 ## Block 20 21 The Block type implements the MetalGo ChainVM Block interface. The key functions for this interface are `Verify()`, `Accept()`, `Reject()`, and `Status()`. 22 23 The Block type wraps the stateless block type [here](../../core/types/block.go) and implements these functions to allow the consensus engine to verify blocks as valid, perform consensus, and mark them as accepted or rejected. See the documentation in MetalGo for the more detailed VM invariants that are maintained here.