Skip to content
LogoLogo

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.xyz

This 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.xyz

The returned Validator struct fields are:

FieldTypeDescription
publicKeybytes32Ed25519 communication public key
validatorAddressaddressValidator control address
ingressstringInbound address (IP:port)
egressstringOutbound address (IP)
indexuint64Index of the validator (constant under rotation)
addedAtHeightuint64Block height when added
deactivatedAtHeightuint64Block height when deactivated (0 = active)
feeRecipientaddressAddress that receives block proposal fees

Operator guide

Initial registration

To register a new validator, you must provide the following values to the Tempo team:

ValueFormatDescription
Validator addressEthereum address (0x…)The control address for your validator. Used to authorize on-chain operations (IP updates, rotation, ownership transfer).
Public key0x-prefixed 32-byte hexYour ed25519 identity key. Generate one with tempo consensus generate-private-key (see below).
IngressIP:portThe inbound address other validators use to reach your node. Must be unique across all active validators.
EgressIPThe outbound IP address your node uses to connect to other validators.
Fee recipientEthereum address (0x…)The address that receives transaction fees from blocks your validator proposes. If you are not prepared to accept fees, use 0x0000000000000000000000000000000000000000.
Signature0x-prefixed hexAn 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.xyz

This 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.xyz

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