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

Upon observing messages or receiving timeout events, the player state machine emits network outputs, which are externally visible. The player may also append an entry to the ledger.

A correct player emits only valid votes. Suppose the player is identified with the address II and possesses the secret key sksk, and the agreement is occurring on the ledger LL. Then the player constructs a vote Vote(I,r,p,s,v) by doing the following:

- Let  
  - (pk,B,rfirst,rlast)=Record(L,r−δb,I),  
  - B¯=Stake(L,r−δb),  
  - Q=Seed(L,r−δs),  
  - τ=CommitteeThreshold(s),  
  - τ¯=CommitteeSize(s).
- Encode x:=(I,r,p,s,v),x′:=(I,r,p,s).

- Try to set y:=Sign(x,x′,sk,B,B¯,Q,τ,τ¯).

If the signing procedure succeeds, the player broadcasts Vote(I,r,p,s,v)=(I,r,p,s,v,y). Otherwise, the player does not broadcast anything.

For certain broadcast vote-messages specified here, a node is forbidden to _equivocate_ (i.e., produce a pair of votes which contain the same round, period, and step but which vote for different proposal values). These messages are marked with an asterisk (*) below. To prevent accidental equivocation after a power failure, nodes **SHOULD** checkpoint their state to crash-safe storage before sending these messages.

> For further details on these checkpoint strategies, refer to the [non-normative Ledger specification](https://specs.algorand.co/ledger/non-normative/ledger-nn). For an in-depth review of broadcasting functionalities, refer to the [non-normative Network specification](https://specs.algorand.co/network/network-overview).
