ValidatorConfig V2
ValidatorConfig V2 (TIP-1017) is the precompile that manages consensus participants. This config was activated on mainnet after the T2 hardfork.
Validator states
Once added, a validator immediately becomes a player in the next epoch.
What changes for operators
Validators can perform several operations themselves without coordinating with the Tempo team:
- Rotate your validator identity — swap to a new ed25519 key without losing your committee slot
- Update IP addresses — change ingress and egress endpoints independently (V2 supports asymmetric ingress/egress IPs)
- Transfer ownership — rebind your validator entry to a new address
All write operations require either the contract owner or the validator's own address.
Precompile address
address constant VALIDATOR_CONFIG_V2 = 0xCCCCCCCC00000000000000000000000000000001;Reading validator state
Query active validators
Use validators-info to see the current state of all validators:
tempo consensus validators-info --rpc-url https://rpc.tempo.xyzThis returns the committee of the current epoch (validators with in_committee = true) as well as validators that have been added but will only become active in a future epoch. Use this to verify your validator's status after registration or rotation.
Look up your validator
You can query your validator by ethereum address, ed25519 public key, or index:
tempo consensus validator <address/public_key/index> --rpc-url https://rpc.tempo.xyzThe returned Validator struct fields are:
| Field | Type | Description |
|---|---|---|
publicKey | bytes32 | Ed25519 communication public key |
validatorAddress | address | Validator control address |
ingress | string | Inbound address (IP:port) |
egress | string | Outbound address (IP) |
index | uint64 | Index of the validator (constant under rotation) |
addedAtHeight | uint64 | Block height when added |
deactivatedAtHeight | uint64 | Block height when deactivated (0 = active) |
feeRecipient | address | Address that receives block proposal fees |
Operator guide
Initial registration
To register a new validator, you must provide the following values to the Tempo team:
| Value | Format | Description |
|---|---|---|
| Validator address | Ethereum address (0x…) | The control address for your validator. Used to authorize on-chain operations (IP updates, rotation, ownership transfer). |
| Public key | 0x-prefixed 32-byte hex | Your ed25519 identity key. Generate one with tempo consensus generate-private-key (see below). |
| Ingress | IP:port | The inbound address other validators use to reach your node. Must be unique across all active validators. |
| Egress | IP | The outbound IP address your node uses to connect to other validators. |
| Fee recipient | Ethereum address (0x…) | The address that receives transaction fees from blocks your validator proposes. If you are not prepared to accept fees, use 0x0000000000000000000000000000000000000000. |
| Signature | 0x-prefixed hex | An ed25519 signature proving you control the signing key. See below. |
Generating a signing key
Generate an ed25519 keypair:
tempo consensus generate-private-key --output <path>Verify the public key:
tempo consensus calculate-public-key --private-key <path>The public key should match the output of the generate-private-key command.
Creating the add-validator signature
The signature proves ownership of the ed25519 key being registered. Generate it with:
tempo consensus create-add-validator-signature \
--signing-key <PRIVATE_KEY_PATH> \
--validator-address <YOUR_VALIDATOR_ADDRESS> \
--public-key <YOUR_PUBLIC_KEY> \
--ingress <IP:PORT> \
--egress <IP> \
--fee-recipient <FEE_RECIPIENT_ADDRESS> \
--chain-id-from-rpc-url https://rpc.tempo.xyzThis outputs a hex-encoded signature. Provide this signature along with the values above to the Tempo team to complete registration.
Once the Tempo team adds your validator on-chain, it will enter the active set in the next epoch.
Update the Fee Recipient
The fee recipient used by your validator when constructing block proposals is managed on-chain. This can be updated and takes effect on the next finalized block
tempo consensus set-validator-fee-recipient <address/pubkey/index>
--fee-recipient <ETHEREUM_ADDRESS>
--rpc-url https://rpc.tempo.xyz
--private-key <PATH_TO_VALIDATOR_PRIVATE_KEY>Update IP addresses
If your node's network endpoints change, update them on-chain. The change takes effect at the next finalized block.
tempo consensus set-validator-ip-address <address/pubkey/index>
--ingress <NEW_IP>:NEW_PROT>
--egress <NEW_IP>
--rpc-url https://rpc.tempo.xyz
--private-key <PATH_TO_VALIDATOR_PRIVATE_KEY>Rotate validator identity
The ed25519 key can be changed while keeping your validator index stable. This is useful for key rotation or recovery without leaving and re-joining the committee. Generate a new signing key first.
The simplest way to rotate is using the tempo CLI, which handles signature creation and the on-chain transaction in one step:
tempo consensus rotate-validator \
--validator-address <YOUR_VALIDATOR_ADDRESS> \
--public-key <NEW_PUBLIC_KEY> \
--ingress <NEW_IP:PORT> \
--egress <NEW_IP> \
--signing-key <NEW_PRIVATE_KEY_PATH> \
--private-key <ETHEREUM_PRIVATE_KEY_PATH> \
--rpc-url https://rpc.tempo.xyzIf self-service rotation is not yet enabled for your validator, use tempo consensus create-rotate-validator-signature to generate the signature and provide it to the Tempo team.
After rotation, your validator goes through the standard lifecycle with the new identity.
Transfer validator ownership
Rebind your validator entry to a new control address:
tempo consensus transfer-validator-ownership <address/pubkey/index>
--rpc-url https://rpc.tempo.xyz \
--private-key <PATH_TO_VALIDATOR_PRIVATE_KEY>
--new-private-key <PATH_TO_NEW_VALIDATOR_PRIVATE_KEY>The new address must not already be used by another active validator.
Deactivate your validator
Deactivate your validator. Once deactivated, please keep your the node. The validator is only removed from the commitee once reaching the end of an epoch where the DKG was successful, thus the validator is no longer dealt any new shares.
See the validators-info command which lists active validators. It is safe to shut down the node once the deactivated validator is no longer present in this list.
tempo consensus deactivate-validator <address/pubkey/index>
--rpc-url https://rpc.tempo.xyz \
--private-key <PATH_TO_VALIDATOR_PRIVATE_KEY>Was this helpful?