# Shared-Publisher Rollback Scenarios ## 🟥 Scenario 1: Invalid Block **Description:** A sequencer published a block that includes an xCall, but the block is invalid (state transition or false xCall inclusion). Detection happens async in 2 stages: * SP doesn't include the block * At some point a ZK invalidity proof is submitted **Why it’s invalid:** Block invalidity can't be included in the superblock **Outcome:** * SP rejects the block * Dependent blocks are rolled back in the next epoch * The sequencer is slashed or penalized * Faulty sequencer is maximally slashed ![invalid block.drawio](https://hackmd.io/_uploads/ryTScYjree.png) ## 🟨 Scenario 2: Missing xCall **Description:** A sequencer publishes a block, but omits an xCall that was previously committed during the 2PC pre-block phase. **Why it’s invalid:** The 2PC commit phase guarantees the xCall is expected and must be included. If it’s missing, this breaks synchronous composability and atomicity. **Outcome:** * SP rejects the block * Dependent blocks are immediately (within the epoch) rolled back * Rolled back blocks are re-produced for the same epoch * Sequencer may be penalized for non-deterministic execution and/or penalized on the P2P layer (reduces ability for future xCalls) ![missing xCall.drawio](https://hackmd.io/_uploads/S1pDqKiBll.png) ## 🟧 Scenario 3: Missing Block **Description:** A rollup sequencer doesn’t publish a block at all, despite having pre-committed to an xCall as part of a multi-rollup execution. **Why it’s invalid:** Synchronous cross-rollup execution relies on timely block publication. Failure to produce the block breaks the atomicity of the transaction bundle. **Outcome:** * The SP can't include the block * Dependent blocks roll back immediately (within the epoch) * Rolled back blocks are re-produced for the same epoch ![missing block.drawio](https://hackmd.io/_uploads/SkTYqFoBxl.png) ## 🟦 Scenario 4: Missing ZK Proof **Description:** The sequencer publishes a block that includes xCalls, but fails to submit the zero-knowledge (ZK) proof for that block within the required time. **Why it’s invalid:** The SP needs the ZK proof to finalize the block and aggregate it into the superblock. Without the proof, the state transitions are unverified. **Outcome:** * SP excludes the block from the aggregated proof * Dependent blocks roll back immediately (within the epoch) * Rolled back blocks are re-produced the next epoch * Faulty sequencer is penalized ![missing zk.drawio](https://hackmd.io/_uploads/Hk6sqFsrex.png)