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

A _key registration_ transaction additionally has the following fields:

| FIELD                          | CODEC     | TYPE          | REQUIRED                      |
|--------------------------------|-----------|---------------|-------------------------------|
| Vote Public Key                | `votekey` | `[32]byte`    | Yes (for Online)             |
| Selection Public Key           | `selkey`  | `[32]byte`    | Yes (for Online)             |
| State Proof Public Key         | `sprfkey` | `[64]byte`    | Yes (for Online)             |
| Vote First                     | `votefst` | `uint64`      | Yes (for Online)             |
| Vote Last                      | `votelst` | `uint64`      | Yes (for Online)             |
| Vote Key Dilution              | `votekd`  | `uint64`      | Yes (for Online)             |
| Non-Participation               | `nonpart` | `bool`        | No                            |

The _vote public key_ vpk is the (root) [Ed25519](https://specs.algorand.co/crypto/crypto-ed25519) public authentication key of an account’s participation keys.

The _selection public key_ spk is the public [VRF](https://specs.algorand.co/keys/keys-vrf) key of an account’s participation keys.

The _state proof public key_ spk is the public commitment to the account’s State Proof keys.

> If vpk, spk, and spk are all omitted, the transaction deregisters the account’s participation key set, and marks the account as _offline_ (i.e., non-participating in the agreement).

The _vote first_ vf indicates the _first valid round_ (inclusive) of an account’s participation key sets.

The _vote last_ vl indicates the _last valid round_ (inclusive) of an account’s participation key sets.

The _vote key dilution_ defines the number of rounds for generating a new (second-level) ephemeral participation key. The higher the number, the more "dilution" is added to the authentication key’s security.

> For further details on the two-level ephemeral key scheme used for consensus participation authentication, refer to the Algorand [Participation Key Specification](https://specs.algorand.co/keys/keys-participation).

The _non-participation_ nonpart is a flag which, when deregistering keys, specifies whether to mark the account just as _offline_ (if nonpart is `false`) or as _non-participatory_ (if nonpart is `true`).

> The _non-participatory_ status is set to _true_ if the account is irreversibly excluded from consensus participation and from the legacy distribution rewards mechanism.

For a _key registration_ transaction to be valid, the following conditions **MUST** apply:

- The elements of the set (vpk,spk,sppk,KeyDilution) are **REQUIRED** to be _all present_, or _all omitted_ (clear).

> Providing the _default value_ or the _empty value_ for any of the set members would be interpreted as if these values were omitted.

- vfv ≤ vlv.
- If the set (vpk,spk,sppk,KeyDilution) is clear, then vf and vl **MUST** be clear as well.
- If the set (vpk,spk,sppk,KeyDilution) is not clear, the following **MUST** apply:
  - vfv ≤ r + 1 and vlv > r, where r is the current network round.
  - vfv ≤ r l + 1.
  - vlv − vfv < K Δ r, max.

> It is **RECOMMENDED** that vlv − vfv ≤ 3,000,000 rounds for security reasons, to ensure safe rotation of participation keys.
