Fast 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
- Auto
- Light
- Dark
Algorand Specifications
The fast recovery algorithm is executed periodically every integer multiple of λfλf seconds (plus finite random variance).
This results in an approximately linear execution rate, while the network partitioning continues.
The algorithm uses the last three steps (named late, redo, down) for step∈[253,254,255].
These steps are, by nature, mutually exclusive:
- A late-vote will be attempted if a staged value σ is available (for the current round and period),
- Otherwise, a redo-vote will be attempted if the current period p>0, and the last period was completed with a next-threshold for a proposal-value different from ⊥,
- Finally, as a fallback, a down-vote is attempted if none of the above conditions were met.
A down-vote is always a vote for the ⊥ proposal-value, while late-vote and redo-vote must vote for a proposal-value different from ⊥.
Algorithm 10: Fast Recovery
1: function FastRecovery()
2: Resync()
3: for a ∈ A do
4: if IsCommittable(v) then
5: credentials ← Sortition(aI,r,p,late)
6: if credentials[j] > 0 then
7: Broadcast(Vote(r,p,late,v,credentials))
8: end if
9: else if ∄s0 > cert | Bundle(r,p−1,s0,⊥) ⊆ V ∧ ∃s1 > cert | Bundle(r,p−1,s1,v) ⊆ V then
10: credentials ← Sortition(aI,r,p,redo)
11: if credentials[j] > 0 then
12: Broadcast(Vote(r,p,redo,v,credentials))
13: end if
14: else
15: credentials ← Sortition(aI,r,p,down)
16: if credentials[j] > 0 then
17: Broadcast(Vote(r,p,down,⊥,credentials))
18: end if
19: end if
20: end for
21: for vote ∈ V such that votes ≥ 253 do
22: Broadcast(vote)
23: end for
24: end function
FastRecovery is functionally very close to the regular Recovery algorithm (outlined in the previous section), performing the same checks and similar outputs.
The main difference is that it emits votes for any of the three different steps late, redo, down according to Sortition results for every selected account.
Nodes are forbidden to equivocate for late, redo, down votes.
Finally, the node broadcasts all fast recovery votes observed. That is, all votes for which votes is a fast recovery step (late, redo, down).
For a formal definition of this functionality, refer to the ABFT normative section.