Shared EIP-2718 typed-transaction envelope dispatch.
Every typed transaction (EIP-2930 V_2930, EIP-7702 V4, …) decodes the
same way: match the leading type byte, RLP-decode the remaining payload, then
hand the decoded field list to a type-specific decode_fields callback. This
module owns that envelope contract so each decoder only declares its type
byte, its error message, and how to turn the RLP list into its struct.
Summary
Types
EIP-2930 access list: {address, [storage_key]} pairs.
Functions
Dispatches a typed-transaction binary.
Decodes an RLP-decoded access list into {address, [storage_key]} tuples.
Left-pads a signature/word binary to a full 32-byte word.
Decodes an RLP y_parity field (0/1) into a boolean.
Types
Functions
@spec decode(binary(), byte(), String.t(), (list() -> {:ok, term()} | {:error, String.t()})) :: {:ok, term()} | {:error, String.t()}
Dispatches a typed-transaction binary.
Matches the leading tx_type byte, RLP-decodes the rest (returning invalid
on malformed RLP), and applies decode_fields to the decoded field list. Any
other leading byte (or non-binary) yields {:error, invalid}.
@spec decode_access_list(term(), String.t()) :: {:ok, access_list()} | {:error, String.t()}
Decodes an RLP-decoded access list into {address, [storage_key]} tuples.
Each entry must be a [20-byte address, [32-byte storage_key, ...]] list;
anything else yields {:error, invalid}. Shared by every typed transaction
that carries an EIP-2930 access list (V_2930, V3, …).
Left-pads a signature/word binary to a full 32-byte word.
Words longer than 32 bytes are rejected with {:error, invalid}.
Decodes an RLP y_parity field (0/1) into a boolean.
Any other value — or a non-binary that :binary.decode_unsigned/1 rejects —
yields {:error, invalid}.