Skip to content

feat(zone): skip pool transactions during L1 catch-up (no_tx_pool) #214

@mattsse

Description

@mattsse

When a zone node restarts after downtime, the L1Subscriber backfills all missed L1 blocks into the DepositQueue and the ZoneEngine processes them sequentially. During this catch-up phase, every block currently includes pool transactions, which is wrong — they're evaluated against stale state and slow down sync.

Proposal

Add a no_tx_pool: bool field to ZonePayloadAttributes (like OP Stack's noTxPool). The engine sets it based on timestamp drift, and the builder skips pool transactions when the flag is set.

Drift detection: Compare the L1 block's timestamp to wall clock time. If now - l1_block_timestamp > threshold, set no_tx_pool = true. The threshold should be configurable via CLI arg with a sensible default (e.g. ~24s / 2 L1 block times).

When no_tx_pool is true, the zone block contains only system transactions (advanceTempo + finalizeWithdrawalBatch), no pool transactions. Once the zone catches up and the L1 block timestamp is within the threshold of wall clock time, pool transactions resume.

Files to modify

  • payload.rs — add no_tx_pool: bool to ZonePayloadAttributes and ZonePayloadBuilderAttributes
  • builder.rs — guard pool tx inclusion with if !attributes.no_tx_pool()
  • engine.rs — compute no_tx_pool from timestamp drift in advance()
  • CLI args — add --no-tx-pool-drift-threshold flag

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions