Skip to content
SORA Codex Community-curated documentation

Sumeragi Consensus

Sumeragi is the Byzantine Fault Tolerant (BFT) consensus algorithm used in Hyperledger Iroha. Named after the imperial lineage of Japan, Sumeragi provides deterministic finality with high performance, making it ideal for enterprise blockchain deployments and the SORA v3 network.

BFT consensus allows a distributed network to reach agreement even when some participants behave maliciously or fail unexpectedly.

The classic thought experiment:

Several generals must coordinate an attack. They can only communicate via messengers who might be traitors. How can they reach reliable agreement?

BFT algorithms solve this by tolerating up to f faulty nodes in a network of 3f + 1 total nodes:

Total NodesMax Faulty NodesRequired Honest
413
725
1037
1003367

Sumeragi operates in rounds, each producing one block:

Round N:
┌─────────────────────────────────────────────────────┐
│ 1. Leader 2. Propose 3. Vote 4. Commit │
│ Selection → Block → Phase → Block │
└─────────────────────────────────────────────────────┘

Each round has a designated leader who proposes blocks:

  1. Deterministic ordering — Peers are sorted by cryptographic hash
  2. Round-robin rotation — Leader changes each round
  3. Predictable — All peers know who leads each round
Round 1: Peer A leads
Round 2: Peer B leads
Round 3: Peer C leads
Round 4: Peer D leads
Round 5: Peer A leads (cycle repeats)

Sumeragi uses a specific topology for vote propagation:

The first 2f + 1 peers in the sorted order form the voting set:

  • Required for block commitment
  • Must all sign the block
  • Remaining peers are observing proxies

The leader creates a block:

// Pseudocode for block creation
fn create_block(transactions: Vec<Transaction>) -> Block {
Block {
height: current_height + 1,
previous_hash: last_block.hash(),
transactions,
timestamp: now(),
leader_signature: sign(block_hash),
}
}

Voting peers validate and sign:

  1. Validate transactions — Check permissions and signatures
  2. Verify block structure — Hash chains, timestamps
  3. Sign block hash — Add signature to block
  4. Forward to next peer — Chain voting pattern
Leader → Peer 1 → Peer 2 → ... → Peer 2f → Commit
↓ ↓ ↓
Sign Sign Sign

When 2f + 1 signatures are collected:

  1. Block is committed to storage
  2. Broadcast to proxy tail
  3. State changes are applied
  4. Next round begins

When a leader fails or acts maliciously, the network performs a view change:

  • Timeout — Leader doesn’t propose in time
  • Invalid blockProposal fails validation
  • Byzantine behavior — Conflicting proposals detected
1. Peer detects failure
2. Broadcasts ViewChange message
3. Collects 2f + 1 ViewChange messages
4. New leader takes over
5. Round continues with new leader

The view change promotes the next peer in line:

Original: A (leader) → B → C → D
After VC: B (leader) → C → D → A*
*moved to end

Sumeragi achieves low latency through:

FactorOptimization
Network hopsLinear voting chain
Signature aggregationBatch verification
Block pipelineParallel execution

Typical latency: 1-3 seconds for finality

Performance depends on:

  • Network bandwidth between peers
  • Transaction complexity
  • Number of voting peers

Benchmarks on modern hardware:

ScenarioTransactions/Second
Simple transfers10,000+
Complex WASM1,000+
Mixed workload5,000+

AspectSumeragiPoW
FinalityInstantProbabilistic
EnergyMinimalMassive
ThroughputHighLow
DecentralizationPermissionedOpen
AspectSumeragiTendermint
CommunicationLinearAll-to-all
ComplexityO(n)O(n²)
View changesSimpleComplex
ImplementationRustGo
AspectSumeragiGRANDPA
Block productionIntegratedSeparate (BABE)
FinalityPer-blockBatch
Latency1-3s12-60s
Use caseEnterprisePublic chain

Sumeragi guarantees safety as long as less than 1/3 of peers are Byzantine:

  • No forks — Only one valid chain exists
  • No double-spending — Transactions are ordered
  • No rollbacks — Committed blocks are permanent

The network continues producing blocks if:

  • 2f + 1 peers are online and honest
  • Network partitions eventually heal
  • View changes recover from failures

SORA v3 validators are selected through:

  1. StakingVAL tokens locked as collateral
  2. Reputation — Historical performance
  3. GovernanceParliament approval for major validators
MechanismPurpose
StakingCollateral for honest behavior
SlashingPenalty for Byzantine actions
RewardsIncentive for participation
UnbondingDelay prevents quick exit after attack

The SORA Parliament can:

  • Adjust validator set
  • Modify consensus parameters
  • Respond to security incidents
  • Upgrade the consensus protocol

Sumeragi is implemented in Rust for:

pub struct Block {
pub header: BlockHeader,
pub transactions: Vec<Transaction>,
pub signatures: Vec<Signature>,
}
pub struct BlockHeader {
pub height: u64,
pub previous_block_hash: Hash,
pub transactions_hash: Hash,
pub timestamp: u128,
pub view_change_index: u32,
}
{
"sumeragi": {
"block_time_ms": 2000,
"commit_time_ms": 4000,
"max_transactions_in_block": 512,
"actor_channel_capacity": 100
}
}