Skip to content

[Consensus] Twins: BFT Systems Made Robust #108

@Olshansk

Description

@Olshansk

Objective

Implement the Twins Test originally authored by the Facebook Novi team on top of HotPOKT to guarantee the safety against Byzantine attacks as well as capture bugs during development and DevNet deployments, and prior to TestNet.

Origin Document

The original paper can be found here.

Ths Twins Test generates Byzantine unit tests that simulate 3 types of behaviour:

  • Leader equivocation
  • Double voting
  • Losing internal state

This was implemented atop of DiemBFT, but the same specification can be applied to any other BFT algorithm. Intuitively, since DiemBFT and HotPOKT are both Hotstuff-based algorithms, it should translate well.

Additional Resources

  1. As a potential point of reference, another open-source implementation of the Twins Test atop a Hostuff implementation in Go can be found here.

  2. The implementation of the consensus module can be found here with the existing unit tests accessible here.

  3. The consensus specification is available here.

Goals / Deliverables

  • Implementation: Library / framework implementing the Twins Test around HotPOKT
  • Tests: A few unit tests for a basic LocalNet
  • Documentation: Documentation (text and/or diagram) of the Test's functionality, source code structure, and implementation.
  • Follow up work: Github issues and/or milestones + TODOs for future work needed for exhaustive Byzantine behaviour testing.

Non-goals

  • A fully functional Twins Test on a remote DevNet environment
  • Exhaustive testing of all possible Byzantine combinations

Creator: @Olshansk
Co-Owners: ???

Metadata

Metadata

Assignees

Labels

consensusConsensus specific changescoreCore infrastructure - protocol related

Type

No type

Projects

Status

Backlog

Relationships

None yet

Development

No branches or pull requests

Issue actions