From 2a556e3a2151fb0d109af8d17a458fa28c129c81 Mon Sep 17 00:00:00 2001 From: Liam Horne Date: Fri, 23 Jan 2026 11:47:42 -0500 Subject: [PATCH 1/2] docs: add Consensus and Finality page under Blockspace Add documentation for Tempo's consensus mechanism: - Simplex BFT via Commonware - Deterministic sub-second finality - Validator fault tolerance (up to 1/3 Byzantine) - Distributed validation vs single sequencer - Degraded state behavior - Integrator guidance for finality --- src/pages/protocol/blockspace/consensus.mdx | 57 +++++++++++++++++++++ vocs.config.ts | 4 ++ 2 files changed, 61 insertions(+) create mode 100644 src/pages/protocol/blockspace/consensus.mdx diff --git a/src/pages/protocol/blockspace/consensus.mdx b/src/pages/protocol/blockspace/consensus.mdx new file mode 100644 index 00000000..b8b0fd70 --- /dev/null +++ b/src/pages/protocol/blockspace/consensus.mdx @@ -0,0 +1,57 @@ +--- +title: Consensus and Finality +description: "Tempo uses Simplex BFT via Commonware for deterministic sub-second finality with Byzantine fault tolerance." +--- + +# Consensus and Finality + +Tempo uses Simplex BFT consensus to provide deterministic, sub-second finality. This page describes the consensus mechanism, finality guarantees, and fault tolerance properties. + +## Simplex BFT Consensus + +Tempo uses Simplex Consensus, implemented by [Commonware](https://www.commonware.xyz/). Simplex is a Byzantine Fault Tolerant consensus protocol optimized for fast finality with graceful degradation under adverse network conditions. + +### Block Production + +Blocks are produced approximately every 0.5 seconds under normal network conditions. Proposer selection follows a round-robin pattern among active validators. Once a block is finalized, it cannot be reverted. + +### Deterministic Finality + +Tempo provides deterministic finality rather than probabilistic finality. When a block is marked as finalized, transactions in that block are guaranteed to remain in the canonical chain. There is no reorg risk after finality. + +For payment applications, this provides the settlement certainty that operators expect from traditional financial systems. + +## Validator Set + +### Current Configuration + +The testnet operates with 4 validators in a permissioned configuration. Mainnet will launch with institutional validators, also permissioned initially. The roadmap includes a path to permissionless validation. + +### Fault Tolerance + +Simplex BFT tolerates Byzantine validators up to a threshold: + +- The network maintains safety as long as fewer than one-third of validators are Byzantine +- The network maintains liveness as long as at least two-thirds of validators are honest and online + +With 4 validators, the network tolerates 1 Byzantine validator. With 10 validators, the network tolerates 3 Byzantine validators. + +## Distributed Validation + +Tempo uses a distributed validator set rather than a single sequencer. Multiple validators share block production responsibility. Transactions can be included by any proposer, preventing single points of censorship. The network can continue finalizing blocks as long as two-thirds of validators are online and honest. + +## Degraded State Behavior + +Under adverse conditions, Simplex consensus degrades gracefully: + +| Condition | Behavior | +|-----------|----------| +| Network partition | Block times may increase but finality guarantees are preserved | +| Validator offline within threshold | Network continues with remaining validators | +| More than one-third of validators offline | Network halts and resumes when threshold is restored | + +The protocol prioritizes safety over liveness. It will halt rather than produce conflicting blocks. + +## For Integrators + +Treat finalized blocks as irreversible for settlement purposes. No additional confirmations are needed after finality. Query finalized blocks using `eth_getBlockByNumber` with the `finalized` tag. diff --git a/vocs.config.ts b/vocs.config.ts index bad1358e..1e646ea4 100644 --- a/vocs.config.ts +++ b/vocs.config.ts @@ -370,6 +370,10 @@ export default defineConfig({ text: 'Sub-block Specification', link: '/protocol/blockspace/sub-block-specification', }, + { + text: 'Consensus and Finality', + link: '/protocol/blockspace/consensus', + }, ], }, { From 1ed0e81a242a554f392a1f6091513e9182d1eee0 Mon Sep 17 00:00:00 2001 From: Georgios Konstantopoulos Date: Fri, 23 Jan 2026 17:14:22 +0000 Subject: [PATCH 2/2] docs: address review comments on consensus page - Change block time from 0.5s to ~600ms (more realistic with network latency) - Replace round-robin with VRF-based random leader selection - Add Further Reading section with Commonware Simplex docs links --- src/pages/protocol/blockspace/consensus.mdx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pages/protocol/blockspace/consensus.mdx b/src/pages/protocol/blockspace/consensus.mdx index b8b0fd70..59d85b0d 100644 --- a/src/pages/protocol/blockspace/consensus.mdx +++ b/src/pages/protocol/blockspace/consensus.mdx @@ -13,7 +13,7 @@ Tempo uses Simplex Consensus, implemented by [Commonware](https://www.commonware ### Block Production -Blocks are produced approximately every 0.5 seconds under normal network conditions. Proposer selection follows a round-robin pattern among active validators. Once a block is finalized, it cannot be reverted. +Blocks are produced approximately every 600ms under normal network conditions (500ms builder loop plus network latency and block validation). Proposer selection uses a VRF (Verifiable Random Function) for random leader election, providing DoS protection and MEV resistance. Once a block is finalized, it cannot be reverted. ### Deterministic Finality @@ -55,3 +55,8 @@ The protocol prioritizes safety over liveness. It will halt rather than produce ## For Integrators Treat finalized blocks as irreversible for settlement purposes. No additional confirmations are needed after finality. Query finalized blocks using `eth_getBlockByNumber` with the `finalized` tag. + +## Further Reading + +- [Commonware Simplex Documentation](https://docs.rs/commonware-consensus/0.0.65/commonware_consensus/simplex/) +- [Simplex with BLS12-381 Threshold Scheme](https://docs.rs/commonware-consensus/0.0.65/commonware_consensus/simplex/index.html#schemebls12381_threshold)