Shared EIP-2718 typed-transaction envelope helpers.
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 also owns the EIP-2930 access-list encode/decode guards so every
envelope that carries an access list rejects the same malformed entries on
both sides of the wire.
Summary
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.
Encodes an access list as EIP-2930 RLP items ([address, storage_keys]).
Accepts a canonical {address, storage_keys} access-list entry.
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}.
@spec encode_access_list(term()) :: [[<<_::160>> | [<<_::256>>]]]
Encodes an access list as EIP-2930 RLP items ([address, storage_keys]).
Constructors that document a bare-address shorthand must canonicalize to
{address, []} before calling this. Malformed entries raise ArgumentError.
@spec validate_access_list_entry!(term()) :: access_list_entry()
Accepts a canonical {address, storage_keys} access-list entry.
Used by constructors that lift documented shorthand before encoding.