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
Currently during sync, blocks are processed in First Come, First Served manner. After first block at given height is processed, other at this height are completely ignored. In case of double-sign of blocks at given height no action is taken (as latter block is ignored).
This is a missed opportunity to detect double-sign of a block.
Currently sequencer is centralized, so double-sign attack should have very significant consequences and probably should be resolved via human consensus.
This is still an unresolved scenario. Duplicate blocks from DA are ignored.
With HA we have another safety layer that stores the latest block in RAFT before publishing so that this should not happen anymore. Also #2521 would help for the non HA setup.
A scenario that lead to duplicate blocks in tests: when an aggregator that was killed before state could be published to DA or flushed to disk, blocks may be published to P2P that are unknown to the sequencer after restart.
We have improved the header validation on fullnodes to prevent dirty state.
Hi, I’d like to work on this issue could you assign it to me?
My plan is for each incoming block from DA or P2P, we check whether a header already exists or is observed at that height. If the hashes match, it will be treated as a benign duplicate. If they don't, we verify whether both blocks have valid signatures from the sequencer, and if so, flag this as double-signing and halt the node. Then you can resolve it via human consensus.
Activity
tzdybal commentedon May 17, 2024
CC: @robert-zaremba
Manav-Aggarwal commentedon Jun 18, 2024
Related: #871
tuxcanfly commentedon Jul 3, 2024
How does resolution look like? For now, should we just halt with the double sign details?
tac0turtle commentedon Nov 24, 2025
@alpe this was solved right?
alpe commentedon Feb 9, 2026
This is still an unresolved scenario. Duplicate blocks from DA are ignored.
With HA we have another safety layer that stores the latest block in RAFT before publishing so that this should not happen anymore. Also #2521 would help for the non HA setup.
A scenario that lead to duplicate blocks in tests: when an aggregator that was killed before state could be published to DA or flushed to disk, blocks may be published to P2P that are unknown to the sequencer after restart.
We have improved the header validation on fullnodes to prevent dirty state.
CaelRowley commentedon Apr 30, 2026
Hi, I’d like to work on this issue could you assign it to me?
My plan is for each incoming block from DA or P2P, we check whether a header already exists or is observed at that height. If the hashes match, it will be treated as a benign duplicate. If they don't, we verify whether both blocks have valid signatures from the sequencer, and if so, flag this as double-signing and halt the node. Then you can resolve it via human consensus.