# `EEVM.Interpreter.MachineState.Env`
[🔗](https://github.com/mw2000/eevm/blob/main/lib/eevm/interpreter/machine_state/env.ex#L1)

Per-call read-only execution environment.

Bundles the three fields that are set when a frame is constructed and
never mutate during its lifetime:

- `tx` — the originating transaction context (origin, gasprice, blob hashes…)
- `block` — the block context (number, timestamp, coinbase, basefee…)
- `config` — the active hardfork config (which EIPs are enabled, registered
  precompiles)

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.

# `t`

```elixir
@type t() :: %EEVM.Interpreter.MachineState.Env{
  block: EEVM.Context.Block.t(),
  config: EEVM.Config.t(),
  tx: EEVM.Context.Transaction.t()
}
```

# `new`

```elixir
@spec new(keyword()) :: t()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
