## 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 that (r,p) has begun, the player attempts to resynchronize, and then

- if p=0 or there exists some s>cert where Bundle(r,p−1,s,⊥) was observed, then a player generates a new proposal (v′,Proposal(v′)) and then broadcasts (Vote(I,r,p,0,v′),Proposal(v′)).

- if p>0 and there exists some s0>cert,v where Bundle(r,p−1,s0,v) was observed, while there exists no s1>cert where Bundle(r,p−1,s1,⊥) was observed, then the player broadcasts Vote(I,r,p,0,v). Moreover, if Proposal(v)∈P, the player then broadcasts Proposal(v).

A player generates a new proposal by executing the entry-generation procedure and by setting the fields of the proposal accordingly. Specifically, the player creates a proposal payload ((o,s),y) by setting

- o:=Entry(L),

- Q:=Seed(L,r−1)

- y:=Sign(Q,Q,0,0,0,0,0,0),

- and s:=Rand(y,pk) if p=0 or s:=Hash(Seed(L,r−1)) otherwise.

This consequently defines the matching proposal-value v=(I,p,Digest(e),Hash(Encoding(e))).

> For an in-depth overview of how proposal generation may be implemented, refer to the Algorand Ledger [non-normative section](https://specs.algorand.co/ledger/non-normative/ledger-nn).

In other words, if the player generates a new proposal,

N(S,L,…)=(S′,L′,(…,Vote(I,r,p,0,v′),Proposal(v′))),

while if the player broadcasts an old proposal,

N(S,L,…)=(S′,L′,(…,Vote(I,r,p−1,0,v),Proposal(v)))

if Proposal(v)∈P and

N(S,L,…)=(S′,L′,(…,Vote(I,r,p−1,0,v))) otherwise.
