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

$$ \newcommand \PartKey {\mathrm{PartKey}} \newcommand \VoteKey {\mathrm{vpk}} \newcommand \SelectionKey {\mathrm{spk}} \newcommand \StateProofKey {\mathrm{sppk}} \newcommand \VoteFirstValid {v_\mathrm{fv}} \newcommand \VoteLastValid {v_\mathrm{lv}} \newcommand \KeyDilution {\mathrm{KeyDilution}} \newcommand \NonPart {\mathrm{nonpart}} \newcommand \LastValidRound {r_\mathrm{lv}} \newcommand \MaxKeyregValidPeriod {K_{\Delta r,\max}} $$

Key Registration Transaction

Fields

A key registration transaction additionally has the following fields:

FIELDCODECTYPEREQUIRED
Vote Public Keyvotekey[32]byteYes (for Online)
Selection Public Keyselkey[32]byteYes (for Online)
State Proof Public Keysprfkey[64]byteYes (for Online)
Vote Firstvotefstuint64Yes (for Online)
Vote Lastvotelstuint64Yes (for Online)
Vote Key Dilutionvotekduint64Yes (for Online)
Non-ParticipationnonpartboolNo

Vote Public Key

The vote public key \( \VoteKey \) is the (root) Ed25519 public authentication key of an account’s participation keys (\( \PartKey \)).

Selection Public Key

The selection public key \( \SelectionKey \) is the public VRF key of an account’s participation keys (\( \PartKey \)).

State Proof Public Key

The state proof public key \( \StateProofKey \) is the public commitment to the account’s State Proof keys \( \StateProofKey \).

If \( \VoteKey \), \( \SelectionKey \), and \( \StateProofKey \) are all omitted, the transaction deregisters the account’s participation key set, and as a result marks the account as offline (that is, non-participating in the agreement).

Vote First

The vote first \( \VoteFirstValid \) indicates first valid round (inclusive) of an account’s participation key sets.

Vote Last

The vote last \( \VoteLastValid \) indicates last valid round (inclusive) of an account’s participation key sets.

Vote Key Dilution

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.

Non-Participation

The non-participation \( \NonPart \) (OPTIONAL) is 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 the account is irreversibly excluded from consensus participation (i.e., can no longer be marked as online) and from the legacy distribution rewards mechanism.

Semantic

TODO

Validation

For a key registration transaction to be valid, the following conditions MUST apply:

  • The elements of the set \( (\VoteKey, \SelectionKey, \StateProofKey, \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.

  • \( \VoteFirstValid \leq \VoteLastValid \).

  • If the set \( (\VoteKey, \SelectionKey, \StateProofKey, \KeyDilution) \) is clear, then \( \VoteFirstValid \) and \( \VoteLastValid \) MUST be clear as well.

  • If the set \( (\VoteKey, \SelectionKey, \StateProofKey, \KeyDilution) \) is not clear, the following MUST apply:

  • \( \VoteFirstValid \leq r + 1 \) and \( \VoteLastValid > r \), where \( r \) is the current network round (the round of the last block committed).

  • \( \VoteFirstValid \leq \LastValidRound + 1 \).

  • \( \VoteLastValid - \VoteFirstValid < \MaxKeyregValidPeriod \).

It is RECOMMENDED that \( \VoteLastValid - \VoteFirstValid \leq 3{,}000{,}000 \) rounds for security reasons, to ensure safe rotation of participation keys.