EEVM.Handler.Validation (eevm v0.1.0)

Copy Markdown View Source

Pre-flight checks on a wire transaction.

This phase handles steps 1-3 of the transaction pipeline (Yellow Paper §6):

  1. Decode the wire bytes (or accept an already-decoded typed struct).
  2. Recover sender via secp256k1 ecrecover on the typed signing hash.
  3. Validate intrinsic gas, nonce, balance, EOA sender, EIP-1559 fee constraints, blob/initcode size rules.

Outputs {:ok, %EEVM.Context.Transaction{}} ready for the next phase, or {:error, reason} for any failure.

Summary

Functions

Build the EEVM.Context.Transaction the EVM sees from a decoded transaction.

Convert a 20-byte address to its integer form.

Decode wire bytes into a typed transaction struct, or pass a struct through.

Use opts[:config] if given, else build one from opts[:hardfork] (default :cancun).

Types

Functions

build_tx_context(tx, sender_bytes)

@spec build_tx_context(decoded_tx(), binary()) :: {:ok, EEVM.Context.Transaction.t()}

Build the EEVM.Context.Transaction the EVM sees from a decoded transaction.

decode_address(bytes)

@spec decode_address(binary()) :: non_neg_integer()

Convert a 20-byte address to its integer form.

ensure_decoded(tx)

@spec ensure_decoded(wire_tx()) :: {:ok, decoded_tx()} | {:error, atom()}

Decode wire bytes into a typed transaction struct, or pass a struct through.

recover_sender(tx, chain_id)

@spec recover_sender(decoded_tx(), non_neg_integer()) ::
  {:ok, binary()} | {:error, atom()}

Recover the 20-byte sender address; see EEVM.Transaction.Signer.recover_sender/2.

resolve_config(opts)

@spec resolve_config(keyword()) :: EEVM.Config.t()

Use opts[:config] if given, else build one from opts[:hardfork] (default :cancun).

validate(tx_ctx, db, block, hardfork)

Validate the transaction against state; see EEVM.Transaction.Validator.validate/4.