Pre-flight checks on a wire transaction.
This phase handles steps 1-3 of the transaction pipeline (Yellow Paper §6):
- Decode the wire bytes (or accept an already-decoded typed struct).
- Recover sender via secp256k1 ecrecover on the typed signing hash.
- Validate intrinsic gas, nonce, balance, EOA sender, EIP-1559 fee constraints, blob/initcode size rules.
Outputs {:ok, %EEVM.TxEnv{}} ready for the next phase, or
{:error, reason} for any failure.
Summary
Functions
Build the EEVM.TxEnv the EVM sees from a decoded transaction.
Decode wire bytes into a typed transaction struct, or pass a struct through.
Recover the sender address; see EEVM.Transaction.Signer.recover_sender/2.
Use opts[:config] if given, else build one from opts[:hardfork] (default
:cancun). The deprecated :chain_id option, when given, overrides the
config's chain id.
The EEVM.Tracer that opts[:tracer] asks for: a new one for true, the
given one, or nil (no tracing) when absent or false.
Validate the transaction against state; see EEVM.Transaction.Validator.validate/4.
Types
@type decoded_tx() :: EEVM.Transaction.Legacy.t() | EEVM.Transaction.AccessList.t() | EEVM.Transaction.FeeMarket.t() | EEVM.Transaction.Blob.t() | EEVM.Transaction.SetCode.t()
@type wire_tx() :: decoded_tx() | binary()
Functions
@spec build_tx_context(decoded_tx(), non_neg_integer()) :: {:ok, EEVM.TxEnv.t()}
Build the EEVM.TxEnv the EVM sees from a decoded transaction.
@spec ensure_decoded(wire_tx()) :: {:ok, decoded_tx()} | {:error, atom()}
Decode wire bytes into a typed transaction struct, or pass a struct through.
@spec recover_sender(decoded_tx(), non_neg_integer()) :: {:ok, non_neg_integer()} | {:error, atom()}
Recover the sender address; see EEVM.Transaction.Signer.recover_sender/2.
@spec resolve_config(keyword()) :: EEVM.Config.t()
Use opts[:config] if given, else build one from opts[:hardfork] (default
:cancun). The deprecated :chain_id option, when given, overrides the
config's chain id.
@spec resolve_tracer(keyword()) :: EEVM.Tracer.t() | nil
The EEVM.Tracer that opts[:tracer] asks for: a new one for true, the
given one, or nil (no tracing) when absent or false.
@spec validate( EEVM.TxEnv.t(), EEVM.Database.t(), EEVM.BlockEnv.t(), EEVM.HardforkConfig.t() ) :: :ok | {:error, atom()}
Validate the transaction against state; see EEVM.Transaction.Validator.validate/4.