## 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 Algorand Specifications consist of _normative_ and _non-normative_ sections.

The _normative_ sections formally define Algorand. The Algorand consensus protocol
gates all the components of the normative sections. The scope of these sections
is to provide a complete and correct specification of the Algorand protocol, regardless
of the implementation. Therefore, the language used in those sections is formal,
prescriptive, and succinct.

The _non-normative_ sections provide context and auxiliary information for the Algorand
implementation. The components of the non-normative sections are not enforced through
the Algorand consensus protocol. The scope of these sections is to ease the understanding
of the normative sections and provide readers with a comprehensive view of the Algorand
reference implementation (`go-algorand`). Therefore, the language used in those
sections is informal, descriptive, and discursive.

The current version of the Algorand Specifications reflects the latest version of
the Algorand consensus protocol in its _normative_ sections and is generally aligned
with the latest stable release of `go-algorand` in its _non-normative_ sections.

Specifications for previous consensus versions can be found via the link provided
in the block’s `current-protocol.upgrade-state` field corresponding to the desired
consensus version.

The _node functional diagram_ above provides an overview of the _functional blocks_
that define the structure of the Algorand Specification.

Contents are organized in four hierarchical levels:

```text
Part
└── 1. Chapter (Normative / Non-Normative)
    └── 1.1. Section
        └── 1.1.1. Sub Section
```

Each _Part_ begins with a _Preamble_, highlighting the covered _functional blocks_,
usually divided into two _Chapters_: _normative_ and _non-normative_ (always present).

> Notes like this are non-normative comments in the normative sections.

> Important
> 
> **EXAMPLE:**
> 
> Sections like this are examples aiming to clarify the formal specifications.

> Important
> 
> **IMPLEMENTATION:**
> 
> Sections like this contain links to the `go-algorand` reference implementation.

The `code-blocks` may contain pseudocode or real code snippets.

For a correct rendering of mathematical symbols and formulas, it is recommended to
right-click on the symbol below, and select `Math Settings -> Math Renderer -> Common HTML`
from the drop-down menu.

CC

Once MathJax rendering is correctly set, you should see a calligraphic “C”.

Readers used to classical \LaTeX\LaTeX-styled books can download the full
PDF Book from the [latest release artifacts](https://github.com/algorandfoundation/specs/releases/latest).

> ⚠️ The PDF Book is a work in progress, it may contain formatting errors and missing
> graphic contents. You can track the progress of the PDF Book in [this issue](https://github.com/algorandfoundation/specs/issues/243).
