You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(fast-inbox): reject propose against a still-mutable inbox bucket (A-1378)
A bucket keeps absorbing messages for the whole L1 block that opened it, so a
reference to the current bucket is not a reference to any lasting snapshot. A lone
designated proposer could bundle send(A) -> propose(hash-after-A) -> send(B) into one
L1 transaction: L1 accepts the checkpoint, then the trailing send overwrites the
bucket in place, leaving the checkpoint committed to a rolling hash that exists
neither on L1 nor in any node, since nodes only ever observe a bucket's end-of-block
state. No honest node can resolve the consumed position, so the pending chain stalls
until the checkpoint is pruned.
validateInboxConsumption now requires the referenced bucket to be settled, which is
the negation of the Inbox's own rollover condition: the genesis bucket (which never
absorbs), a bucket whose L1 block has passed, or a full bucket whose successor takes
the next message. The per-bucket cap moves to IInbox.sol so the Inbox and the propose
path share one definition without the rollup libraries depending on the Inbox
implementation. Honest proposers never reference a bucket younger than
INBOX_LAG_SECONDS, so nothing legitimate is excluded.
0 commit comments