$$ \newcommand \BBA {\mathrm{BinaryBA⋆}} $$
Conventions and Notation
This specification defines a player to be a unique participant in this protocol.
This specification describes the operation of a single correct player. A correct player follows this protocol exactly and is distinct from a faulty player. A faulty player may deviate from the protocol in any way, so this specification does not describe the behavior of those players.
Correct players do not follow distinct protocols, so this specification describes correct behavior with respect to a single, implicit player. When the protocol must describe a player distinct from the implicit player (for example, a message that originated from another player), the protocol will use subscripts to distinguish different players. Subscripts are omitted when the player is unambiguous. For instance, a player might be associated with some “address” \( I \); if this player is the \( k \)-th player in the protocol, then this address may also be denoted \( I_k \).
This specification will describe certain objects as opaque. This document does not specify the exact implementation of opaque objects, but it does specify the subset of properties required for any implementation of some opaque object.
Opaque data definitions and semantics may be specified in other documents, which this document will cite when available.
All integers described in this document are unsigned, with a maximum value of \( 2^{64}-1 \), unless otherwise noted.
Context Tuple
The Algorand protocol’s progress is described using a context tuple \( (r, p, s) \), which identifies the current state within the Agreement protocol’s state machine.
-
\( r \) (round): Indicates the current round of the protocol. It increases monotonically and corresponds to the block being committed. It is driven by protocol threshold events.
-
\( p \) (period): Indicates the attempt number for reaching agreement in the current round1. It is typically zero. A non-zero value reflects recovery from a failed commitment attempt. It is driven by protocol threshold events.
-
\( s \) (step): Enumerates the stages of the Agreement protocol within a given period. It is driven by protocol time events.
-
The protocol defined in the original research papers was based just on a rounds and steps \( (r, s) \) state machine and on a Binary Byzantine Agreement, named \( \BBA \), that could lead to the proposal of a block or an empty block for a given round. The notion of period (i.e., new consensus attempt for the same round) replaces the outcome of \( \BBA \) over an empty block for a round. ↩