Skip to content

[Feature Request]: double-sign detection #1672

Open

Description

@tzdybal

Implementation ideas

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.

Activity

  1. tzdybal commented on May 17, 2024

    @tzdybal
    ContributorAuthor
  2. Manav-Aggarwal commented on Jun 18, 2024

    @Manav-Aggarwal
    Member

    Related: #871

  3. moved this from Todo to In Progress in Evolveon Jul 3, 2024
  4. tuxcanfly commented on Jul 3, 2024

    @tuxcanfly
    Collaborator

    How does resolution look like? For now, should we just halt with the double sign details?

  5. moved this from In Progress to Blocked in Evolveon Jul 5, 2024
  6. tac0turtle commented on Nov 24, 2025

    @tac0turtle
    Contributor

    @alpe this was solved right?

  7. alpe commented on Feb 9, 2026

    @alpe
    Contributor

    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.

  8. moved this to Icebox in Evolveon Feb 23, 2026
  9. moved this from Icebox to Backlog in Evolveon Feb 23, 2026
  10. CaelRowley commented on Apr 30, 2026

    @CaelRowley
    Contributor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    • Status
      Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions