Skip to content

Tendermint

Tendermint is a Byzantine Fault Tolerant (BFT) consensus algorithm used by Cosmos and other blockchain networks. It provides instant finality and high throughput for blockchain applications.


Tendermint is a consensus engine that:

  • Guarantees safety and liveness
  • Provides immediate block finality (no probabilistic finality)
  • Supports 1/3 Byzantine fault tolerance
  • Uses a rotating proposer mechanism
PropertyValue
Fault ToleranceUp to 1/3 malicious validators
Block Time5-7 seconds
FinalityImmediate (1 block)
ConsensusBFT (Byzantine Fault Tolerant)

┌─────────────────────────────────────────────────────────────────┐
│ TENDERMINT NODE ARCHITECTURE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ APPLICATION LAYER │ │
│ │ ┌─────────────────────────────────────────────────────┐ │ │
│ │ │ Cosmos SDK Application │ │ │
│ │ │ (Your custom blockchain logic) │ │ │
│ │ └─────────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ TENDERMINT CORE │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Consensus │ │ Mempool │ │ Blockchain │ │ │
│ │ │ Engine │ │ (TX Pool) │ │ (State) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ NETWORK LAYER │ │
│ │ (Peer-to-peer gossip with other validators) │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

Tendermint uses a three-phase consensus protocol:

┌─────────────────────────────────────────────────────────────────┐
│ TENDERMINT CONSENSUS ROUND │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ PROPOSE PHASE │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ PROPOSER (selected by round-robin) │ │ │
│ │ │ Creates new block │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ ↓ │ │
│ │ Broadcasts block proposal to all validators │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ PRE-VOTE PHASE │ │
│ │ │ │
│ │ All validators receive the proposal │ │
│ │ ↓ │ │
│ │ Validate block (check signatures, transactions) │ │
│ │ ↓ │ │
│ │ Broadcast PRE-VOTE (vote for block validity) │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ If 2/3+ PRE-VOTE: Proceed to PRE-COMMIT │ │ │
│ │ │ If < 2/3+ PRE-VOTE: Start new round (timeout) │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ PRE-COMMIT PHASE │ │
│ │ │ │
│ │ Validators receive pre-votes │ │
│ │ ↓ │ │
│ │ If 2/3+ pre-votes received: │ │
│ │ Broadcast PRE-COMMIT (commit to block) │ │
│ │ ↓ │ │
│ │ Block is finalized and added to blockchain │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ If 2/3+ PRE-COMMIT: Block FINALIZED │ │ │
│ │ │ If < 2/3+ PRE-COMMIT: Start new round │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

Validators are responsible for:

  • Running a Tendermint node
  • Participating in consensus
  • Proposing and voting on blocks
  • Staking tokens (ATOM)
┌─────────────────────────────────────────────────────────────────┐
│ PROPOSER SELECTION ALGORITHM │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Proposers are selected using weighted round-robin: │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Weight = (Validator Stake / Total Staked) * Rotation │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Example: │
│ - Validator A: 1000 ATOM (50% stake) → 50% selection chance │
│ - Validator B: 600 ATOM (30% stake) → 30% selection chance │
│ - Validator C: 400 ATOM (20% stake) → 20% selection chance │
│ │
│ Higher stake = More frequent proposer selection │
│ │
└─────────────────────────────────────────────────────────────────┘

Validators can be slashed for:

  • Double-signing: Signing two different blocks at same height
  • Downtime: Being offline for extended periods
  • Missed votes: Not participating in consensus

┌─────────────────────────────────────────────────────────────────┐
│ TENDERMINT STATE MACHINE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ NewHeight │────▶│ Propose │────▶│ Prevote │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Precommit│◀────│ Prevote │◀────│ Propose │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ │
│ │ Commit │ ───▶ Block added to blockchain │
│ └──────────┘ │
│ │
│ States: │
│ - NewHeight: Start of new block height │
│ - Propose: Proposer creates block │
│ - Prevote: Validators vote on block │
│ - Precommit: Validators commit to block │
│ - Commit: Block is finalized │
│ │
└─────────────────────────────────────────────────────────────────┘

CometBFT is the successor to Tendermint, featuring:

  • Improved performance
  • Simplified API
  • Better transaction ordering
  • Vote extensions
  • Metadata in blocks
FeatureTendermintCometBFT
APIABCIABCI++
PerformanceGoodBetter
Vote ExtensionsNoYes
Partial SignaturesNoYes

Terminal window
# Install Tendermint
git clone https://github.com/cometbft/cometbft.git
cd cometbft
make install
# Verify installation
tendermint version
~/.tendermint/config/config.toml
# Validator configuration
moniker = "your-node-name"
priv_validator_key_file = "config/priv_validator_key.json"
priv_validator_state_file = "data/priv_validator_state.json"
# Network settings
p2p.laddr = "tcp://0.0.0.0:26656"
rpc.laddr = "tcp://127.0.0.1:26657"
# Consensus settings
consensus.timeout_propose = "3s"
consensus.timeout_prevote = "1s"
consensus.timeout_precommit = "1s"
Terminal window
# Initialize node
tendermint init
# Start node
tendermint start
# With custom config
tendermint start --config /path/to/config.toml

QuestionAnswer
What is Tendermint?BFT consensus algorithm with instant finality
How does Tendermint guarantee safety?2/3+ honest validators required for consensus
What happens if 1/3 validators are offline?Network halts (liveness failure)
How is the proposer selected?Weighted round-robin based on stake
What is the block time in Tendermint?5-7 seconds
What is immediate finality?Blocks are finalized in one block (no probabilistic finality)
What is ABCI?Application Blockchain Interface - connects app to consensus

  • Tendermint is a BFT consensus algorithm
  • Provides instant block finality
  • Uses rotating proposer selection
  • Validators stake tokens to participate
  • Supports up to 1/3 Byzantine faults
  • CometBFT is the latest version

In Chapter 18: RPC Nodes Explained, we’ll explore RPC node architecture.


Last Updated: 2026-02-20