Skip to content

fix(heze): raise MAX_SIGNED_INCLUSION_LIST_SIZE to the derived bound and reject empty transactions - #9936

Open
barnabasbusa wants to merge 1 commit into
ChainSafe:focil-devnet-0from
barnabasbusa:fix/heze-il-serialized-size
Open

fix(heze): raise MAX_SIGNED_INCLUSION_LIST_SIZE to the derived bound and reject empty transactions#9936
barnabasbusa wants to merge 1 commit into
ChainSafe:focil-devnet-0from
barnabasbusa:fix/heze-il-serialized-size

Conversation

@barnabasbusa

@barnabasbusa barnabasbusa commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Motivation

Follow-up to #9935 for ethereum/consensus-specs#5576 (issue ethereum/consensus-specs#5575). MAX_SIGNED_INCLUSION_LIST_SIZE = 8348 only fits a single-transaction list: every transaction adds a 4-byte SSZ offset on top of MAX_TRANSACTIONS_BYTES_PER_INCLUSION_LIST, so a full list of ~65 transactions serializes to ~8600 bytes and outboundTransform refuses to publish it (ssz_snappy encoded data length 8586 > 8348 — 209 of 211 publishes on focil-devnet-0).

Description

Tracks the direction taken in consensus-specs#5576 (keep the raw-bytes rule, derive the message bound from it):

  • MAX_SIGNED_INCLUSION_LIST_SIZE: 8348 → 41112 in both presets (152 + 5 · MAX_TRANSACTIONS_BYTES_PER_INCLUSION_LIST, the size of a list of one-byte transactions — the largest spec-valid list, with no assumption about EL transaction encoding).
  • Gossip/API validation: [REJECT] an inclusion list containing an empty transaction (INCLUSION_LIST_ERROR_EMPTY_TRANSACTION), which is what makes that bound finite.

The constant is used as the inclusion_list topic's max message size (getGossipSSZMaxSize); nothing else changes. If the spec settles on a tighter derived value instead (see the PR), only the constant moves.

Testing

pnpm build, check-types on params/beacon-node, biome clean; topic.test.ts / inclusionListStore.test.ts pass.

https://claude.ai/code/session_01YHCg1Q6QaZn8rPjB7za3UB

…and reject empty transactions

consensus-specs#5576: MAX_SIGNED_INCLUSION_LIST_SIZE (8348) only fit a
single-transaction list, since each transaction adds a 4-byte SSZ offset on
top of MAX_TRANSACTIONS_BYTES_PER_INCLUSION_LIST. A full list of ~65
transactions serializes to ~8600 bytes and could not be published. The bound
becomes 152 + 5 * MAX_TRANSACTIONS_BYTES_PER_INCLUSION_LIST = 41112, the size
of a list of one-byte transactions, and gossip validation rejects empty
transactions so that bound is finite.

Claude-Session: https://claude.ai/code/session_01YHCg1Q6QaZn8rPjB7za3UB
@barnabasbusa barnabasbusa changed the title fix(heze): bound inclusion list transactions by their SSZ-serialized size fix(heze): raise MAX_SIGNED_INCLUSION_LIST_SIZE to the derived bound and reject empty transactions Aug 28, 2026
@barnabasbusa
barnabasbusa force-pushed the fix/heze-il-serialized-size branch from 7de9e8b to e14d098 Compare August 28, 2026 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

1 participant