Skip to content

Block invalidation may fail silently without rewinding executing engine #74

@lucasmt

Description

@lucasmt

InvalidateBlock() in invalidation.go returns false with no error if it fails to retrieve the block from the EngineController, which happens in the following cases:

  1. When the EngineController is nil.
  2. When the EngineController fails to retrieve an L2BlockRef for the block (via L2BlockRefByNumber()).
  3. When the hash of the retrieved L2BlockRef doesn't match the block.

In any of these cases, the invalidation procedure will continue silently with no error, but the execution engine will not be rewound to the previous block. This could happen, for example, if L2BlockRefByNumber() fails due to a network problem, leaving the execution layer out of sync with the Supernode.

Note that invalidateBlock() in interop.go ignores the boolean return value of InvalidateBlock() and returns only the error, so the fact that it returns false in this case doesn't affect the outcome.

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