From b899c306f7b735114519fe4c3abe8c5645595f0e 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/11] 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 94fbbecb..4db20720 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -166,13 +166,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 20648b634261a792390fca14735f7f90e4d6cc80 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/11] 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 4db20720..63c81f35 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -166,7 +166,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 78d1ef53cbb534440622eb15e6591cb5eb70a0e5 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/11] 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 63c81f35..ca4a4084 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -166,7 +166,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 8d954722793a4706a20c0f0b3fb512fc1a4ae0bb 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/11] 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 ca4a4084..a996899d 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -164,9 +164,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 3d90bd2b3d36bf4340dd9e52883edd3896665432 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/11] 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 edb6ebef3a48ca697d09460ae9a896c7b515f94f 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/11] 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 a4932ce60b28cd1ed2bd20f4d4fe5ceb50a36284 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/11] 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 | 64 ++++++++++---------- src/pages/guide/node/validator.mdx | 2 +- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/pages/guide/node/validator-config-v2.mdx b/src/pages/guide/node/validator-config-v2.mdx index a996899d..6a0501ad 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -112,6 +112,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 IP addresses If your node's network endpoints change, update them on-chain. The change takes effect at the next finalized block. @@ -164,38 +196,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 47e8bf06d9596bc9d2733dcc14e5537a020f31ab 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/11] 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 6a0501ad..53ce83a8 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -119,12 +119,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 94226fd6498b647b7bf0ed7221a5f3d78a45f5bf 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/11] 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 53ce83a8..2426240e 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -122,7 +122,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 21986fc52074d7f5da0d43b53fe620d32f99510f 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/11] 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 2426240e..c2752f8b 100644 --- a/src/pages/guide/node/validator-config-v2.mdx +++ b/src/pages/guide/node/validator-config-v2.mdx @@ -184,7 +184,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 32d93884edf96b29e48535948160e4e65a2f3831 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/11] 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 77c68a8a..25703259 100644 --- a/vocs.config.ts +++ b/vocs.config.ts @@ -664,14 +664,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', }, {