$$ \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:
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 |
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.