## 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

On observing a timeout event of T=kλf+u where kk is a positive integer and u∈[0,λf] sampled uniformly at random, the player attempts to resynchronize. Then,

- The player broadcasts* Vote(I,r,p,late,v) if v=σ(S,r,p) is committable in (r,p).

- The player broadcasts* Vote(I,r,p,redo,v¯) if there does not exist a s0>cert such that Bundle(r,p−1,s0,⊥) was observed and there exists an s1>cert such that Bundle(r,p−1,s1,v¯) was observed.

- Otherwise, the player broadcasts* Vote(I,r,p,down,⊥).

Finally, the player broadcasts all Vote(I,r,p,late,v)∈V, all Vote(I,r,p,redo,v)∈V, and all Vote(I,r,p,down,⊥)∈V that it has observed.

> Important
>
> **IMPLEMENTATION:**
>
> Fast recovery [reference implementation](https://github.com/algorand/go-algorand/blob/b6e5bcadf0ad3861d4805c51cbf3f695c38a93b7/agreement/player.go#L150).

> For a detailed pseudocode overview of the fast recovery routine, along with protocol recovery run examples, refer to the Algorand ABFT [non-normative section](https://specs.algorand.co/abft/non-normative/abft-nn).
