---
# System prepended metadata

title: 'Understanding EVM Machine State (μ): Building MiniEVM from the Yellow Paper'

---

# Understanding EVM Machine State (μ): Building MiniEVM from the Yellow Paper

## The EVM's Machine State (μ)

When the Ethereum Virtual Machine executes bytecode, it maintains a **machine state** (denoted as μ in the Yellow Paper). This state is the working memory of the EVM during execution.

### The Five Components of Machine State:

1. **μ_g** - Remaining gas
   - Tracks how much gas is left for execution
   - Prevents infinite loops and resource exhaustion

2. **μ_pc** - Program counter
   - Points to the current instruction in bytecode
   - Advances after each opcode execution

3. **μ_m** - Memory contents
   - Byte-addressable temporary storage
   - Expands dynamically during execution

4. **μ_i** - Active memory size
   - Tracks how many words (32 bytes) are in use
   - Used for gas calculation

5. **μ_s** - Stack contents
   - LIFO stack of 256-bit words
   - Maximum depth: 1024 items
   - Primary data structure for EVM operations

##  Implementing Machine State in Go

I'm building **MiniEVM** - a simplified EVM implementation in Go to learn the execution layer. Here's how I'm implementing machine state:

```go
// VM holds code, program counter (PC), and gas tracking
type VM struct {
    Code     []byte  // Bytecode to execute
    PC       uint64  // μ_pc - Program counter
    Gas      uint64  // μ_g - Remaining gas
    GasLimit uint64  // Maximum gas allowed
    // Stack (μ_s) and Memory (μ_m) coming next!
}

// Execution loop (simplified)
func (vm *VM) Execute() error {
    for vm.HasMore() {
        opcode := vm.Fetch()  // Read instruction at μ_pc
        // impl, repo coming soon
    }
    return nil
}
```

##  
 machine state is crucial because:
- **Every opcode** reads/writes from these components
- **Gas costs** depend on memory expansion (μ_i)
- **Stack operations** (μ_s) are the foundation of EVM computation
- **Program counter** (μ_pc) controls execution flow


## Resources

- [Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf) - Section 9


---

*Building MiniEVM one opcode at a time.*


