From 19f79a3ea46d85785b3838c4118f11c9f8492f6a Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Mon, 30 Mar 2026 16:46:02 +0000 Subject: [PATCH 01/17] docs: expand initial registration section with all required values Moves the initial registration guide from the ValidatorConfig V2 page to the operator overview page and lists every value a new operator must provide: validator address, public key, ingress, egress, fee recipient, and the ed25519 add-validator signature. Includes the full CLI command. Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/operate-validator.mdx | 32 ++++++++++++++++++++ src/pages/guide/node/validator-config-v2.mdx | 8 +---- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/pages/guide/node/operate-validator.mdx b/src/pages/guide/node/operate-validator.mdx index 2b266c03..aecf30ee 100644 --- a/src/pages/guide/node/operate-validator.mdx +++ b/src/pages/guide/node/operate-validator.mdx @@ -14,6 +14,38 @@ Validator management differs depending on which ValidatorConfig version is activ For validator states and lifecycle transitions, see the respective V1 and V2 pages. +## Initial registration + +The management of the active validator set is currently permissioned by the Tempo team. To register a new validator, you must provide the following values: + +| 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`. | +| **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 `0x0000000000000000000000000000000000000001`. | +| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See below. | + +### Creating the add-validator signature + +The signature proves ownership of the ed25519 key being registered. Generate it with: + +```bash +tempo consensus create-add-validator-signature \ + --signing-key \ + --validator-address \ + --public-key \ + --ingress \ + --egress \ + --fee-recipient \ + --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](/guide/node/validator-config-v2#validator-states). + ## Checking your validator's state Monitor these metrics to track your validator's state: diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index e50f6321..6d2f6029 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -157,13 +157,7 @@ Once the old validator shows `in_committee = false`, it is safe to shut down. #### Initial registration -When registering a new validator, generate the add-validator signature and provide it to the Tempo team: - -```bash -tempo consensus create-add-validator-signature \ - --signing-key \ - --rpc-url https://rpc.tempo.xyz -``` +See [Initial registration](/guide/node/operate-validator#initial-registration) for the full list of values to provide and how to generate the add-validator signature. ### Transfer validator ownership From ac87d548ff31bf60cac89581762703ea0d2f3912 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Mon, 30 Mar 2026 17:52:45 +0000 Subject: [PATCH 02/17] docs: move initial registration to 'Running a validator' page Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/operate-validator.mdx | 32 -------------------- src/pages/guide/node/validator-config-v2.mdx | 2 +- src/pages/guide/node/validator.mdx | 32 ++++++++++++++++++++ 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/pages/guide/node/operate-validator.mdx b/src/pages/guide/node/operate-validator.mdx index aecf30ee..2b266c03 100644 --- a/src/pages/guide/node/operate-validator.mdx +++ b/src/pages/guide/node/operate-validator.mdx @@ -14,38 +14,6 @@ Validator management differs depending on which ValidatorConfig version is activ For validator states and lifecycle transitions, see the respective V1 and V2 pages. -## Initial registration - -The management of the active validator set is currently permissioned by the Tempo team. To register a new validator, you must provide the following values: - -| 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`. | -| **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 `0x0000000000000000000000000000000000000001`. | -| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See below. | - -### Creating the add-validator signature - -The signature proves ownership of the ed25519 key being registered. Generate it with: - -```bash -tempo consensus create-add-validator-signature \ - --signing-key \ - --validator-address \ - --public-key \ - --ingress \ - --egress \ - --fee-recipient \ - --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](/guide/node/validator-config-v2#validator-states). - ## Checking your validator's state Monitor these metrics to track your validator's state: diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index 6d2f6029..f987028d 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -157,7 +157,7 @@ Once the old validator shows `in_committee = false`, it is safe to shut down. #### Initial registration -See [Initial registration](/guide/node/operate-validator#initial-registration) for the full list of values to provide and how to generate the add-validator signature. +See [Initial registration](/guide/node/validator#initial-registration) for the full list of values to provide and how to generate the add-validator signature. ### Transfer validator ownership diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index 87619d29..8aaa2d78 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -34,6 +34,38 @@ tempo consensus calculate-public-key --private-key The public key should match the output of the `generate-private-key` command. +## Initial registration + +The active validator set is currently permissioned by the Tempo team. To register a new validator, you must provide the following values: + +| 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. Generated above with `tempo consensus generate-private-key`. | +| **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 `0x0000000000000000000000000000000000000001`. | +| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See below. | + +### Creating the add-validator signature + +The signature proves ownership of the ed25519 key being registered. Generate it with: + +```bash +tempo consensus create-add-validator-signature \ + --signing-key \ + --validator-address \ + --public-key \ + --ingress \ + --egress \ + --fee-recipient \ + --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](/guide/node/validator-config-v2#validator-states). + ## Running the validator The process for running a validator node is very similar to [running a full node](/guide/node/rpc). From d6f56fe5000a6aa9910e34bfbd94e6b39f074a6e Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:33:44 +0000 Subject: [PATCH 03/17] docs: rename to 'Deploying a validator' and make it the first section Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/validator-config-v2.mdx | 2 +- src/pages/guide/node/validator.mdx | 54 ++++++++++---------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index f987028d..48678204 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -157,7 +157,7 @@ Once the old validator shows `in_committee = false`, it is safe to shut down. #### Initial registration -See [Initial registration](/guide/node/validator#initial-registration) for the full list of values to provide and how to generate the add-validator signature. +See [Deploying a validator](/guide/node/validator#deploying-a-validator) for the full list of values to provide and how to generate the add-validator signature. ### Transfer validator ownership diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index 8aaa2d78..256826f4 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -10,42 +10,18 @@ The management of the active validator set is currently permissioned by the Temp Validator nodes secure Tempo by validating blocks and transactions, then using [Threshold Simplex](https://docs.rs/commonware-consensus/0.0.61/commonware_consensus/threshold_simplex/index.html) to reach consensus. They distribute signing shares among themselves to collectively sign block approvals and finalizations. -## Cryptographic key hierarchy - -All validators have two kinds of keys: -* signing key - this is an ED25519 keypair used to identify your validator amongst others -* signing share - this is a share of a BLS12-381 keypair used to sign block notarizations and finalizations - -The signing key is static. Pre-T2, it can only be rotated by removing and re-creating a validator on-chain with the Tempo team. Post-T2, [ValidatorConfig V2](/guide/node/validator-config-v2) enables self-service rotation via the `rotateValidator` precompile. The signing share is dynamic and is updated periodically on each DKG ceremony. Once updated, it will be saved to disk. Currently, the DKG ceremony is scheduled to run on-chain every ~3 hours. - -## Generating a signing key - -You can generate an ED25519 keypair using the following command: - -```bash -tempo consensus generate-private-key --output -``` - -Once the private key is generated, you can calculate/verify the public key by running: - -```bash -tempo consensus calculate-public-key --private-key -``` - -The public key should match the output of the `generate-private-key` command. - -## Initial registration +## Deploying a validator The active validator set is currently permissioned by the Tempo team. To register a new validator, you must provide the following values: | 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. Generated above with `tempo consensus generate-private-key`. | +| **Public key** | `0x`-prefixed 32-byte hex | Your ed25519 identity key. Generate one with `tempo consensus generate-private-key` (see [below](#generating-a-signing-key)). | | **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 `0x0000000000000000000000000000000000000001`. | -| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See below. | +| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See [Creating the add-validator signature](#creating-the-add-validator-signature). | ### Creating the add-validator signature @@ -66,6 +42,30 @@ This outputs a hex-encoded signature. Provide this signature along with the valu Once the Tempo team adds your validator on-chain, it will enter the active set in the [next epoch](/guide/node/validator-config-v2#validator-states). +## Cryptographic key hierarchy + +All validators have two kinds of keys: +* signing key - this is an ED25519 keypair used to identify your validator amongst others +* signing share - this is a share of a BLS12-381 keypair used to sign block notarizations and finalizations + +The signing key is static. Pre-T2, it can only be rotated by removing and re-creating a validator on-chain with the Tempo team. Post-T2, [ValidatorConfig V2](/guide/node/validator-config-v2) enables self-service rotation via the `rotateValidator` precompile. The signing share is dynamic and is updated periodically on each DKG ceremony. Once updated, it will be saved to disk. Currently, the DKG ceremony is scheduled to run on-chain every ~3 hours. + +## Generating a signing key + +You can generate an ED25519 keypair using the following command: + +```bash +tempo consensus generate-private-key --output +``` + +Once the private key is generated, you can calculate/verify the public key by running: + +```bash +tempo consensus calculate-public-key --private-key +``` + +The public key should match the output of the `generate-private-key` command. + ## Running the validator The process for running a validator node is very similar to [running a full node](/guide/node/rpc). From 96cdd6f952107b851b0bf6ac6a099d9017d51c3a Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:36:04 +0000 Subject: [PATCH 04/17] docs: move deploying a validator details into validator-config-v2 Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/validator-config-v2.mdx | 32 ++++++++++++++++++-- src/pages/guide/node/validator.mdx | 30 +----------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index 48678204..3c99e337 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -155,9 +155,37 @@ tempo consensus validators-info --rpc-url https://rpc.tempo.xyz Once the old validator shows `in_committee = false`, it is safe to shut down. ::: -#### Initial registration +#### Deploying a validator -See [Deploying a validator](/guide/node/validator#deploying-a-validator) for the full list of values to provide and how to generate the add-validator signature. +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 [Generating a signing key](/guide/node/validator#generating-a-signing-key)). | +| **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 `0x0000000000000000000000000000000000000001`. | +| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See below. | + +##### Creating the add-validator signature + +The signature proves ownership of the ed25519 key being registered. Generate it with: + +```bash +tempo consensus create-add-validator-signature \ + --signing-key \ + --validator-address \ + --public-key \ + --ingress \ + --egress \ + --fee-recipient \ + --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](#validator-states). ### Transfer validator ownership diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index 256826f4..3d555024 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -12,35 +12,7 @@ Validator nodes secure Tempo by validating blocks and transactions, then using [ ## Deploying a validator -The active validator set is currently permissioned by the Tempo team. To register a new validator, you must provide the following values: - -| 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](#generating-a-signing-key)). | -| **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 `0x0000000000000000000000000000000000000001`. | -| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See [Creating the add-validator signature](#creating-the-add-validator-signature). | - -### Creating the add-validator signature - -The signature proves ownership of the ed25519 key being registered. Generate it with: - -```bash -tempo consensus create-add-validator-signature \ - --signing-key \ - --validator-address \ - --public-key \ - --ingress \ - --egress \ - --fee-recipient \ - --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](/guide/node/validator-config-v2#validator-states). +The active validator set is currently permissioned by the Tempo team. See [Deploying a validator](/guide/node/validator-config-v2#deploying-a-validator) for the full list of values to provide and how to generate the add-validator signature. ## Cryptographic key hierarchy From dd13e2d2ee091093b292086a7d3999ec4f3e2bd5 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:40:26 +0000 Subject: [PATCH 05/17] docs: simplify validator intro and flatten info block Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/validator.mdx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index 3d555024..61c07464 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -4,15 +4,11 @@ description: Configure and run a Tempo validator node. Generate signing keys, pa # Running a validator node -:::info -The management of the active validator set is currently permissioned by the Tempo team. If you are interested in becoming a validator, please [get in touch](mailto:partners@tempo.xyz) with the Tempo team. -::: - -Validator nodes secure Tempo by validating blocks and transactions, then using [Threshold Simplex](https://docs.rs/commonware-consensus/0.0.61/commonware_consensus/threshold_simplex/index.html) to reach consensus. They distribute signing shares among themselves to collectively sign block approvals and finalizations. +Validator nodes secure Tempo by validating blocks and participating in consensus. ## Deploying a validator -The active validator set is currently permissioned by the Tempo team. See [Deploying a validator](/guide/node/validator-config-v2#deploying-a-validator) for the full list of values to provide and how to generate the add-validator signature. +The active validator set is currently permissioned. If you are interested in becoming a validator, please [get in touch](mailto:partners@tempo.xyz) with the Tempo team. See [Deploying a validator](/guide/node/validator-config-v2#deploying-a-validator) for the full list of values to provide and how to generate the add-validator signature. ## Cryptographic key hierarchy From 056e94cead4e66722d71add0f7dcbb45df56e28e Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:41:55 +0000 Subject: [PATCH 06/17] docs: shorten deploying a validator link text Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/validator.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index 61c07464..47aabaaa 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -8,7 +8,7 @@ Validator nodes secure Tempo by validating blocks and participating in consensus ## Deploying a validator -The active validator set is currently permissioned. If you are interested in becoming a validator, please [get in touch](mailto:partners@tempo.xyz) with the Tempo team. See [Deploying a validator](/guide/node/validator-config-v2#deploying-a-validator) for the full list of values to provide and how to generate the add-validator signature. +The active validator set is currently permissioned. If you are interested in becoming a validator, please [get in touch](mailto:partners@tempo.xyz) with the Tempo team. See [Deploying a validator](/guide/node/validator-config-v2#deploying-a-validator) for technical details. ## Cryptographic key hierarchy From b58dc0321d7e86773012bcf63f4f8c187ce22211 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:46:20 +0000 Subject: [PATCH 07/17] docs: make Initial registration the first subsection under Operator guide Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/validator-config-v2.mdx | 65 ++++++++++---------- src/pages/guide/node/validator.mdx | 2 +- 2 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index 3c99e337..04bbfc2a 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -96,6 +96,38 @@ The returned `Validator` struct fields are: ## 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 [Generating a signing key](/guide/node/validator#generating-a-signing-key)). | +| **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 `0x0000000000000000000000000000000000000001`. | +| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See below. | + +#### Creating the add-validator signature + +The signature proves ownership of the ed25519 key being registered. Generate it with: + +```bash +tempo consensus create-add-validator-signature \ + --signing-key \ + --validator-address \ + --public-key \ + --ingress \ + --egress \ + --fee-recipient \ + --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](#validator-states). + ### 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 @@ -106,7 +138,6 @@ tempo consensus set-validator-fee-recipient
--rpc-url https://rpc.tempo.xyz --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. @@ -155,38 +186,6 @@ tempo consensus validators-info --rpc-url https://rpc.tempo.xyz Once the old validator shows `in_committee = false`, it is safe to shut down. ::: -#### Deploying a validator - -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 [Generating a signing key](/guide/node/validator#generating-a-signing-key)). | -| **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 `0x0000000000000000000000000000000000000001`. | -| **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See below. | - -##### Creating the add-validator signature - -The signature proves ownership of the ed25519 key being registered. Generate it with: - -```bash -tempo consensus create-add-validator-signature \ - --signing-key \ - --validator-address \ - --public-key \ - --ingress \ - --egress \ - --fee-recipient \ - --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](#validator-states). - ### Transfer validator ownership Rebind your validator entry to a new control address: diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index 47aabaaa..89a437a3 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -8,7 +8,7 @@ Validator nodes secure Tempo by validating blocks and participating in consensus ## Deploying a validator -The active validator set is currently permissioned. If you are interested in becoming a validator, please [get in touch](mailto:partners@tempo.xyz) with the Tempo team. See [Deploying a validator](/guide/node/validator-config-v2#deploying-a-validator) for technical details. +The active validator set is currently permissioned. If you are interested in becoming a validator, please [get in touch](mailto:partners@tempo.xyz) with the Tempo team. See [Initial registration](/guide/node/validator-config-v2#initial-registration) for technical details. ## Cryptographic key hierarchy From e9f1e2cb34310b7f9e9c62b1a4a199c99ae67f34 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:58:24 +0000 Subject: [PATCH 08/17] docs: move generating a signing key into validator-config-v2 under initial registration Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/validator-config-v2.mdx | 18 +++++++++++++++++- src/pages/guide/node/validator.mdx | 16 ---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index 04bbfc2a..44fd4df4 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -103,12 +103,28 @@ To register a new validator, you must provide the following values to the Tempo | 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 [Generating a signing key](/guide/node/validator#generating-a-signing-key)). | +| **Public key** | `0x`-prefixed 32-byte hex | Your ed25519 identity key. Generate one with `tempo consensus generate-private-key` (see [below](#generating-a-signing-key)). | | **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 `0x0000000000000000000000000000000000000001`. | | **Signature** | `0x`-prefixed hex | An ed25519 signature proving you control the signing key. See below. | +#### Generating a signing key + +Generate an ed25519 keypair: + +```bash +tempo consensus generate-private-key --output +``` + +Verify the public key: + +```bash +tempo consensus calculate-public-key --private-key +``` + +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: diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index 89a437a3..e983add7 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -18,22 +18,6 @@ All validators have two kinds of keys: The signing key is static. Pre-T2, it can only be rotated by removing and re-creating a validator on-chain with the Tempo team. Post-T2, [ValidatorConfig V2](/guide/node/validator-config-v2) enables self-service rotation via the `rotateValidator` precompile. The signing share is dynamic and is updated periodically on each DKG ceremony. Once updated, it will be saved to disk. Currently, the DKG ceremony is scheduled to run on-chain every ~3 hours. -## Generating a signing key - -You can generate an ED25519 keypair using the following command: - -```bash -tempo consensus generate-private-key --output -``` - -Once the private key is generated, you can calculate/verify the public key by running: - -```bash -tempo consensus calculate-public-key --private-key -``` - -The public key should match the output of the `generate-private-key` command. - ## Running the validator The process for running a validator node is very similar to [running a full node](/guide/node/rpc). From 1c70534b9d460dbc294fad26ed0b9b7a2c47a0e4 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 14:06:50 +0000 Subject: [PATCH 09/17] docs: use zero address for fee burning Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/validator-config-v2.mdx | 2 +- src/pages/guide/node/validator.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index 44fd4df4..f332b706 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -106,7 +106,7 @@ To register a new validator, you must provide the following values to the Tempo | **Public key** | `0x`-prefixed 32-byte hex | Your ed25519 identity key. Generate one with `tempo consensus generate-private-key` (see [below](#generating-a-signing-key)). | | **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 `0x0000000000000000000000000000000000000001`. | +| **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 diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index e983add7..cb699fba 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -33,7 +33,7 @@ tempo node --datadir \ --telemetry-url ``` -If you are not prepared to accept fees, we recommend setting the `--consensus.fee-recipient` field to `0x0000000000000000000000000000000000000001` as that will funnel the funds to a non-user controllable wallet (there is no known private key for the address). +If you are not prepared to accept fees, we recommend setting the `--consensus.fee-recipient` field to `0x0000000000000000000000000000000000000000` as that will funnel the funds to a non-user controllable wallet (there is no known private key for the address). ### Optional flags From efa1848a8decede6eadf6d13b2b7e033536ed4a8 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 14:08:12 +0000 Subject: [PATCH 10/17] docs: link to generating a signing key from rotate section Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- src/pages/guide/node/validator-config-v2.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index f332b706..edd76378 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -174,7 +174,7 @@ Ingress addresses must be unique across all active validators. The transaction w ### Rotate validator identity -V2 lets you rotate to a new ed25519 key while keeping your validator index stable. This is useful for key rotation or recovery without leaving and re-joining the committee. +V2 lets you rotate to a new ed25519 key 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](#generating-a-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: From 2c626021440e21da6545be13840f291a3a2462ec Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 31 Mar 2026 14:11:06 +0000 Subject: [PATCH 11/17] docs: flatten validator sidebar into single 'Running a validator' group Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d3f9e-0620-773b-a54e-d0732af7ea03 --- vocs.config.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/vocs.config.ts b/vocs.config.ts index 5d486188..17a228aa 100644 --- a/vocs.config.ts +++ b/vocs.config.ts @@ -678,14 +678,13 @@ export default defineConfig({ }, { text: 'Running a validator', - link: '/guide/node/validator', - }, - { - text: 'Operating your validator', - collapsed: true, items: [ { text: 'Overview', + link: '/guide/node/validator', + }, + { + text: 'Operation', link: '/guide/node/operate-validator', }, { From 5ba0418418d06deb0adda71e5851707f24cecb7a Mon Sep 17 00:00:00 2001 From: Richard Janis Goldschmidt Date: Tue, 7 Apr 2026 18:16:59 +0200 Subject: [PATCH 12/17] remove bit on --consensus.fee-recipient --- src/pages/guide/node/validator.mdx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/pages/guide/node/validator.mdx b/src/pages/guide/node/validator.mdx index cb699fba..777d7872 100644 --- a/src/pages/guide/node/validator.mdx +++ b/src/pages/guide/node/validator.mdx @@ -29,12 +29,9 @@ Once you've downloaded the snapshot and have been whitelisted on-chain, you can tempo node --datadir \ --chain \ --consensus.signing-key \ - --consensus.fee-recipient \ --telemetry-url ``` -If you are not prepared to accept fees, we recommend setting the `--consensus.fee-recipient` field to `0x0000000000000000000000000000000000000000` as that will funnel the funds to a non-user controllable wallet (there is no known private key for the address). - ### Optional flags | Flag | Description | From 62a4f6931919eec37ca8461f9b288a2c28e4bcd8 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:39:12 +0000 Subject: [PATCH 13/17] docs: expand rotate-validator with all required arguments Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d68ce-0aaf-712f-bc99-13d7ddc3426e --- src/pages/guide/node/validator-config-v2.mdx | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index edd76378..83207641 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -180,7 +180,35 @@ The simplest way to rotate is using the `tempo` CLI, which handles signature cre ```bash tempo consensus rotate-validator \ + --validator-address \ + --public-key \ + --ingress \ + --egress \ + --signing-key \ + --private-key \ + --rpc-url https://rpc.tempo.xyz +``` + +Alternatively, you can create the signature separately and pass it directly: + +```bash +# Step 1: Create the rotation signature +tempo consensus create-rotate-validator-signature \ + --validator-address \ + --public-key \ + --ingress \ + --egress \ --signing-key \ + --chain-id-from-rpc-url https://rpc.tempo.xyz + +# Step 2: Submit the rotation with the pre-computed signature +tempo consensus rotate-validator \ + --validator-address \ + --public-key \ + --ingress \ + --egress \ + --signature \ + --private-key \ --rpc-url https://rpc.tempo.xyz ``` From 7b5507bf431756d45672b9b144aa8fb43baf3d4d Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:00:16 +0000 Subject: [PATCH 14/17] docs: remove V2 activation check, link mainnet activation tx Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d68ce-0aaf-712f-bc99-13d7ddc3426e --- src/pages/guide/node/validator-config-v2.mdx | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index 83207641..cdb1617e 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -7,7 +7,7 @@ description: Manage your validator with ValidatorConfig V2. Self-service key rot ValidatorConfig V2 ([TIP-1017](/protocol/tips/tip-1017)) is a new precompile for managing consensus participants. It replaces the original ValidatorConfig with stronger safety guarantees: ed25519 signature verification at registration, append-only history, and self-service operations for validators. -V2 becomes available after the T2 hardfork is activated and after an admin has finished the migration of entries from V1 to V2. Migration completion will be communicated to operators — you can also [check if V2 is active](#check-if-v2-is-active) yourself. +V2 was [activated on mainnet](https://explore.mainnet.tempo.xyz/receipt/0x4716147e3c2bf5c8d014b8c27d6e2af0042d5a5f29bdead256d6f33038702d64) as part of the T2 hardfork. ## Validator states @@ -38,24 +38,6 @@ All write operations require either the contract owner or the validator's own ad address constant VALIDATOR_CONFIG_V2 = 0xCCCCCCCC00000000000000000000000000000001; ``` -## Check if V2 is active - -After the T2 hardfork, the contract owner migrates validators from V1 to V2. Use these calls to check if migration is complete and V2 is active: - -```bash -# Returns true once migration is complete and V2 is the active config -cast call 0xCCCCCCCC00000000000000000000000000000001 \ - "isInitialized()(bool)" \ - --rpc-url https://rpc.tempo.xyz - -# Returns the block height at which V2 was initialized (0 if not yet initialized) -cast call 0xCCCCCCCC00000000000000000000000000000001 \ - "getInitializedAtHeight()(uint64)" \ - --rpc-url https://rpc.tempo.xyz -``` - -If `isInitialized()` returns `true`, V2 is active and all operations on this page are available. If it returns `false`, the network is still on [ValidatorConfig V1](/guide/node/validator-config-v1). - ## Reading validator state ### Query active validators From 65eab0760c8c4463916e6d849c4a3dd7d0d665a1 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:01:38 +0000 Subject: [PATCH 15/17] docs: warn against sharing private signing key Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d68ce-0aaf-712f-bc99-13d7ddc3426e --- src/pages/guide/node/validator-config-v2.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index cdb1617e..52b962c9 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -93,6 +93,10 @@ To register a new validator, you must provide the following values to the Tempo #### Generating a signing key +:::warning +Never share your private signing key. Anyone with access to it can impersonate your validator. +::: + Generate an ed25519 keypair: ```bash From f0685539aa9ab0da916bb1aacf5ce418fa49020d Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:03:48 +0000 Subject: [PATCH 16/17] docs: simplify rotate section, mention create-rotate-validator-signature for non-self-service Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d68ce-0aaf-712f-bc99-13d7ddc3426e --- src/pages/guide/node/validator-config-v2.mdx | 23 +------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index 52b962c9..7d488cdb 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -175,28 +175,7 @@ tempo consensus rotate-validator \ --rpc-url https://rpc.tempo.xyz ``` -Alternatively, you can create the signature separately and pass it directly: - -```bash -# Step 1: Create the rotation signature -tempo consensus create-rotate-validator-signature \ - --validator-address \ - --public-key \ - --ingress \ - --egress \ - --signing-key \ - --chain-id-from-rpc-url https://rpc.tempo.xyz - -# Step 2: Submit the rotation with the pre-computed signature -tempo consensus rotate-validator \ - --validator-address \ - --public-key \ - --ingress \ - --egress \ - --signature \ - --private-key \ - --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. :::info Rotation preserves your validator index and active validator count. The old entry is appended to history as deactivated, and the entry at your index is updated in place. You must use a different ingress address (changing the port is sufficient). From bab0e36cb226b42707125f349b6065db282ceac2 Mon Sep 17 00:00:00 2001 From: Derek Cofausper <256792747+decofe@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:04:39 +0000 Subject: [PATCH 17/17] docs: fix wording on V2 activation Co-authored-by: Richard Janis Goldschmidt <701177+SuperFluffy@users.noreply.github.com> Amp-Thread-ID: https://ampcode.com/threads/T-019d68ce-0aaf-712f-bc99-13d7ddc3426e --- src/pages/guide/node/validator-config-v2.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index 7d488cdb..9a33b2fb 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -7,7 +7,7 @@ description: Manage your validator with ValidatorConfig V2. Self-service key rot ValidatorConfig V2 ([TIP-1017](/protocol/tips/tip-1017)) is a new precompile for managing consensus participants. It replaces the original ValidatorConfig with stronger safety guarantees: ed25519 signature verification at registration, append-only history, and self-service operations for validators. -V2 was [activated on mainnet](https://explore.mainnet.tempo.xyz/receipt/0x4716147e3c2bf5c8d014b8c27d6e2af0042d5a5f29bdead256d6f33038702d64) as part of the T2 hardfork. +V2 was [activated on mainnet](https://explore.mainnet.tempo.xyz/receipt/0x4716147e3c2bf5c8d014b8c27d6e2af0042d5a5f29bdead256d6f33038702d64) after the T2 hardfork. ## Validator states