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

Where specified, a player attempts to resynchronize.

A resynchronization attempt involves the following stages.

First, the player broadcasts its _freshest bundle_, if one exists.

A player’s freshest bundle is a complete bundle defined as follows:

- Bundle(r,p,soft,v)⊂VBundle(r,p,soft,v)⊂V for some vv, if it exists, or else

- Bundle(r,p−1,s,⊥)⊂VBundle(r,p−1,s,⊥)⊂V for some s>certs>cert, if it exists,
  or else

- Bundle(r,p−1,s,v)⊂VBundle(r,p−1,s,v)⊂V for some s>cert,v≠⊥s>cert,v≠⊥, if it exists.

> Important
> 
> **IMPLEMENTATION:**
> 
> Freshness relation [reference implementation](https://github.com/algorand/go-algorand/blob/b6e5bcadf0ad3861d4805c51cbf3f695c38a93b7/agreement/events.go#L745).

Second, if the player broadcasted a bundle Bundle(r,p,s,v)Bundle(r,p,s,v), and v≠⊥v≠⊥,
then the player broadcasts Proposal(v)Proposal(v) if the player has it.

Specifically, a resynchronization attempt:

- Corresponds to no additional outputs if no freshest bundle exists

N(S,L,…)=(S′,L′,…),N(S,L,…)=(S′,L′,…),

- Corresponds to a broadcast of the freshest bundle after a relay output and before any subsequent broadcast outputs, if said bundle exists, no matching proposal exists

N(S,L,…)=(S′,L′,(…,Bundle∗(r,p,s,v),…)),N(S,L,…)=(S′,L′,(…,Bundle∗(r,p,s,v),…)),

- Otherwise corresponds to a broadcast of both a bundle and its associated proposal after a relay output and before any subsequent broadcast outputs

N(S,L,…)=(S′,L′,(…,Bundle∗(r,p,s,v),Proposal(v),…)).N(S,L,…)=(S′,L′,(…,Bundle∗(r,p,s,v),Proposal(v),…).
