Skip to content

About

Formal verification of the Algorand consensus protocol

Resources

Stars

27 stars

Watchers

16 watching

Forks

Repository files navigation

Algorand Verification

Docker CI

The Algorand consensus protocol is the foundation of a decentralized digital currency and transactions platform. This project provides a model of the protocol in Coq, expressed as a transition system over global states in a message-passing distributed system. Included is a formal proof of safety for the transition system.

Meta

Building

We recommend installing the dependencies of the project via opam, for example:

opam repo add coq-released https://coq.inria.fr/opam/released
opam install coq.8.16.0 coq-mathcomp-ssreflect.1.15.0 \
 coq-mathcomp-algebra coq-mathcomp-finmap.1.5.2 \
 coq-mathcomp-analysis.0.5.4 coq-mathcomp-zify coq-record-update

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

Contents

The project includes:

  • an abstract and timed specification in Coq of the Algorand consensus 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.

For more details on the formalization, see the report:

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.

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

  • fmap_ext.v: auxiliary definitions and results on finite maps
  • algorand_model.v: definition of the Algorand local state, global state, and 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.

Help and Feedback

Feel free to report GitHub issues or to contact us at: contact@runtimeverification.com

About

Formal verification of the Algorand consensus protocol

Resources

Stars

27 stars

Watchers

16 watching

Forks

Releases

Packages

Used by

Contributors

Languages