Recovery - Algorand Specifications

Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Algorand Specifications

The recovery algorithm is executed periodically, whenever a BundlecertBundlecert has not been observed before DeadlineTimeout(p) for a given period pp.


Algorithm 9: Recovery

1: function Recovery()
2: ResynchronizationAttempt()
3: for a ∈ A do
4: credentials ← Sortition(aI, r, p, s)
5: if credentialsj > 0 then
6: if ∃v = Proposalv(proposal, proposalp, proposalI) for some proposal ∈ P | IsCommittable(v) then
7: Broadcast(Vote(aI, r, p, s, v, credentials))
8: else if ∃s0 > cert | Bundle(r, p − 1, s0, ⊥) ⊆ V ∧ ∃s1 > cert | Bundle(r, p − 1, s1, v¯) ⊆ V then
9: Broadcast(Vote(aI, r, p, s, v¯, credentials))
10: else
11: Broadcast(Vote(aI, r, p, s, ⊥, credentials))
12: end if
13: end if
14: end for
15: step ← step + 1
16: end function


Important
IMPLEMENTATION:
Next vote issuance reference implementation.

The node starts by making a resynchronization attempt (Line 2).

Afterward (Lines 3:5), the node plays independently for each online account (registered on the node). This means that for every account available in AA, the SortitionSortition algorithm is run, and accounts selected in the recovery committee (i.e., the players) for the current step nextknextk (that is, those whose credentialsj > 0) will produce one of the following three distinct outputs (Lines 6:14):

then a nextknextk vote for v¯ is broadcast by the player.

A player is forbidden from equivocating in nextknextk votes.

Lastly (Line 15), the node’s current step is updated.

For a formal definition of this functionality, refer to the ABFT normative section.


  1. This implies v¯ ≠ ⊥. ↩