Per-call read-only execution environment.
Bundles the fields that are set when a frame is constructed and never mutate during its lifetime:
tx— the transaction environment,EEVM.TxEnv(origin, gas price, blob hashes…)block— the block environment,EEVM.BlockEnv(number, timestamp, coinbase, base fee…)config— the active hardfork config (which EIPs are enabled, registered precompiles)instruction_table— the hardfork's opcode dispatch table (EEVM.Interpreter.InstructionTable), resolved here once so the interpreter loop never re-checks the fork per opcode
Child frames inherit the parent's env unchanged. Treating them as a single
immutable record makes intent explicit at call sites — state.env is
what you pass through, state.frame and state.substate are what you
evolve.
Summary
Types
@type t() :: %EEVM.Interpreter.MachineState.Env{ block: EEVM.BlockEnv.t(), config: EEVM.Config.t(), instruction_table: EEVM.Interpreter.InstructionTable.t(), tx: EEVM.TxEnv.t() }