Skip to content
Formal verification of the Algorand consensus protocol
Branch: master
Clone or download
Latest commit 00487f3 Jun 19, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
scripts global state setters generation Mar 14, 2019
theories Update liveness.v Jun 18, 2019
Makefile Update Jun 18, 2019

Algorand verification

A formalization of the Algorand consensus protocol using the Coq proof assistant. The project provides:

  • an abstract and timed specification of the protocol as a transition system, including node-level behavior, asynchronous messaging and a model of the adversary,
  • a complete formal proof of asynchronous safety for the transition system.

PDF Modeling and Verification of the Algorand Consensus Protocol

Statements of some liveness properties for the transition system are also provided, but these are work-in-progress and their proofs are currently incomplete.



We recommend installing the dependencies of the project via OPAM:

opam repo add coq-released
opam install coq.8.9.1 coq-mathcomp-ssreflect.1.8.0 \
  coq-mathcomp-algebra.1.8.0 coq-mathcomp-finmap.1.2.1 \
  coq-interval.3.4.0 coq-ppsimpl.8.9.0

Then, run make in the project root directory. This will check all the definitions and proofs.


All Coq vernacular files can be found under the theories directory, and their content is as follows:

  • boolp.v, reals.v, Rstruct.v, R_util.v: definitions and lemmas for using real numbers via MathComp and SSReflect, adapted from the MathComp analysis project
  • fmap_ext.v: some useful auxiliary definitions and lemmas about finite maps
  • local_state.v: definition of Algorand local node state
  • global_state.v: definition of Algorand global system state
  • algorand_model.v: definition of the Algorand transition system, along with helper functions and facts
  • safety_helpers.v: helper functions and lemmas used when proving safety of the transition system
  • quorums.v: definitions and hypotheses about quorums of nodes
  • safety.v: statement and complete formal proof of safety for the transition system
  • liveness.v: an initial attempt at specifying liveness properties for the transition system. This part is work-in-progress and thus the file contains incomplete (admitted) proofs.

Getting Help

Feel free to report GitHub issues or to contact us at:

You can’t perform that action at this time.