consensus

package module
v1.19.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 27, 2025 License: BSD-3-Clause Imports: 8 Imported by: 17

README ยถ

Lux Consensus

CI Status Coverage Go Version Release

Lux Quasar: Post Quantum Consensus Engine with Photonic Selection

Quasar upgrades traditional consensus mechanisms with a Quantum Finality engine. Quasar combines traditional BLS signature aggregation with parallel lattice encryption to deliver 2-round finality with both classical and quantum security. Every chain in the Lux primary network - Q, C, X - run Quasar, reaching Quantum Finality, in < 1 second.

Why Quasar?

Traditional consensus engines have limitations:

  • Different engines for different chain types
  • No native post-quantum security
  • Complex multi-layer architecture

Quasar solves all these with "One engine to rule them all":

  • Unified Protocol: Same engine for DAG, linear, EVM, MPC chains
  • Quantum Finality: Every block requires post quantum certificates
  • 2-Round Total: BLS Signatures (1 round) + Lattice Signatures (2 phases) = quantum finality
  • Zero Leaders: Fully decentralized, leaderless, highly secure
  • Sub-Second Performance: <1s finality with quantum security

๐Ÿš€ Recent Updates (v1.17.0 - January 2025)

Multi-Language SDK with 100% Test Parity ๐ŸŽ‰
  • NEW: Complete C implementation with optimized hash tables (9M+ blocks/sec)
  • NEW: Rust FFI bindings with safe wrappers and Criterion benchmarks
  • NEW: Python SDK via Cython with Pythonic API (6.7M blocks/sec)
  • NEW: Go CGO integration for seamless C/Go switching
  • NEW: Quantum-resistant OP Stack integration example
  • 100% test parity across all 4 language implementations
  • 15 comprehensive test categories with full coverage
  • Performance benchmarks exceeding all targets
Previous: Photon/Emitter Refactoring โœ…
  • Replaced Sampler/Sample pattern with light-themed Emitter/Emit
  • Implemented luminance tracking (10-1000 lux range) for node selection
  • Performance-based weighting adjusts selection probability
  • 96%+ test coverage maintained
  • CI fully green with all lint checks passing

Quick Start

Installation
Go (Default)
go get github.com/luxfi/consensus@v1.17.0
C Library (High Performance)
cd consensus/c
make && sudo make install
# Enable with: CGO_ENABLED=1 USE_C_CONSENSUS=1
Rust
# Add to Cargo.toml
[dependencies]
lux-consensus = "1.17.0"
Python
cd consensus/python
python3 setup.py install
# Or: pip install lux-consensus
Basic Usage
import (
    "github.com/luxfi/consensus/photon"
    "github.com/luxfi/consensus/core/wave"
    "github.com/luxfi/consensus/config"
)

// Create photon emitter for peer selection
emitter := photon.NewUniformEmitter(peers, photon.DefaultEmitterOptions())

// Initialize wave consensus
cfg := config.DefaultParams()
engine := wave.New(cfg, emitter, transport)

// Start consensus
engine.Start(ctx, blockID)
Running Tests
# Run all tests
go test ./...

# Run with coverage
go test -cover ./...

# Run benchmarks
go test -bench=. ./...

Architecture

Core Consensus Components
consensus/
โ”œโ”€โ”€ photon/                # ๐ŸŒŸ K-of-N committee selection (NEW)
โ”‚   โ”œโ”€โ”€ emitter.go        # Light emission-based peer selection
โ”‚   โ””โ”€โ”€ luminance.go      # Node brightness tracking (lux units)
โ”‚
โ”œโ”€โ”€ core/
โ”‚   โ”œโ”€โ”€ wave/             # ๐ŸŒŠ Wave consensus mechanism
โ”‚   โ”‚   โ””โ”€โ”€ engine.go     # Threshold voting (ฮฑ, ฮฒ parameters)
โ”‚   โ”œโ”€โ”€ dag/              # ๐Ÿ“Š DAG structure & ordering
โ”‚   โ”‚   โ”œโ”€โ”€ flare/        # Certificate generation
โ”‚   โ”‚   โ””โ”€โ”€ horizon/      # Frontier management
โ”‚   โ””โ”€โ”€ focus/            # ๐ŸŽฏ Confidence tracking
โ”‚
โ”œโ”€โ”€ protocol/
โ”‚   โ”œโ”€โ”€ quasar/          # โš›๏ธ Post-quantum security
โ”‚   โ”‚   โ””โ”€โ”€ ringtail.go  # Quantum-resistant signatures
โ”‚   โ”œโ”€โ”€ nebula/          # โ˜๏ธ State sync protocol
โ”‚   โ””โ”€โ”€ nova/            # โญ Parallel chain support
โ”‚
โ”œโ”€โ”€ qzmq/                # ๐Ÿ” Post-quantum transport
โ”‚   โ”œโ”€โ”€ session.go       # Hybrid key exchange
โ”‚   โ””โ”€โ”€ messages.go      # Wire protocol
โ”‚
โ””โ”€โ”€ engine/              # ๐ŸŽฎ Consensus engines
    โ”œโ”€โ”€ chain/          # Linear blockchain
    โ””โ”€โ”€ dag/            # DAG-based chains

Framework for Quasar Consensus

Quasar is built on two core components that provide both classical and quantum finality:

1. Nova DAG (Classical Finality)
  • Sampling: k-peer sampling for vote collection
  • Confidence: Build confidence d(T) through repeated sampling
  • Thresholds: ฮฒโ‚ for early preference, ฮฒโ‚‚ for decision
  • Time: ~600-700ms to classical finality
2. Quasar (Quantum Finality)
  • Phase I - Propose: Sample DAG frontier, propose highest confidence
  • Phase II - Commit: Aggregate threshold signatures if > ฮฑ๐šŒ agree
  • Certificates: Lattice-based post-quantum certificates
  • Time: ~200-300ms additional for quantum finality

Quantum Finality

Every block header now contains:

type CertBundle struct {
    BLSAgg  []byte  // 96B BLS aggregate signature
    PQCert  []byte  // ~3KB lattice certificate
}

// Block is only final when BOTH certificates are valid
isFinal := verifyBLS(blsAgg, quorum) && verifyPQ(pqCert, quorum)

Key Hierarchy

Layer Key Type Purpose Storage
Node-ID ed25519 P2P transport auth $HOME/.lux/node.key
Validator-BLS bls12-381 Fast finality votes $HOME/.lux/bls.key
Validator-PQ lattice PQ finality shares $HOME/.lux/rt.key
Wallet (EVM) secp256k1 or Lamport User tx signatures In wallet
Wallet (X-Chain) secp256k1 or Dilithium UTXO locking In wallet

The same rt.key registered on Q-Chain is reused by all chains - no extra onboarding.

Quick Start

package main

import (
  "context"
  "log"

  "github.com/luxfi/consensus/config"
  "github.com/luxfi/consensus/engine/quasar"
  "github.com/luxfi/ids"
)

func main() {
  // 1. Configure Quasar parameters
  cfg := config.Parameters{
    K:               21,  // Validators to sample
    AlphaPreference: 15,  // Preference threshold
    AlphaConfidence: 18,  // Confidence threshold
    Beta:            8,   // Finalization rounds
    QRounds:         2,   // Quantum rounds
  }

  // 2. Create Quasar engine
  nodeID := ids.GenerateNodeID()
  engine := quasar.NewQuasar(cfg, nodeID)

  // 3. Initialize with both BLS and PQ keys
  engine.Initialize(ctx, blsKey, pqKey)

  // 4. Process vertices/blocks
  engine.AddVertex(ctx, vertex)

  // 5. Dual-certificate finality
  engine.SetFinalizedCallback(func(qBlock QBlock) {
    log.Printf("Q-block %d finalized with quantum certificates\n", qBlock.Height)
  })
}

Performance Metrics

Consensus Performance
Network Validators Finality Block Time Configuration
Mainnet 21 9.63s 200ms Production ready
Testnet 11 6.3s 100ms Testing network
Local 5 3.69s 10ms Development
X-Chain 5 5ms 1ms 100Gbps networks
Benchmark Results (Apple M1 Max)
Component Operation Time/Op Memory Allocations
Wave Consensus Vote Round 3.38ฮผs 2.3KB 8 allocs
Photon Emitter K-of-N Selection 3.03ฮผs 3.0KB 2 allocs
Luminance Brightness Update 72ns 0B 0 allocs
Quasar Phase I 0.33ns 0B 0 allocs
Quasar Phase II 40.7ns 0B 0 allocs

Both BLS and post-quantum certificates complete within one consensus slot.

Security Model

  1. Pre-quantum: Attacker must corrupt โ‰ฅโ…“ stake to fork
  2. Q-day (BLS broken): Attacker can forge BLS but not lattice
    • Block fails quantum check
    • Consensus halts rather than accepting unsafe fork
  3. Post-quantum: Security rests on lattice SVP (2ยนโถโฐ ops)

Attack window โ‰ค PQ round time (โ‰ค50ms mainnet).

Chain Integration

Chain Integration Rule
Q-Chain Q-blocks as internal txs All chains read Q-blocks
C-Chain Every block has CertBundle Invalid without quantum certs
X-Chain Vertex metadata references Q-block Epoch sealed by quantum cert
M-Chain MPC rounds reference Q-block height Custody requires PQ proof

Account-Level PQ Options

EVM (C-Chain)
  • Lamport-XMSS multisig contracts
  • Gas: ~300k for VERIFY_LAMPORT
  • EIP-4337 AA wrapper available
X-Chain
  • New LatticeOutput type with PQ pubkey
  • Spend verifies single RT signature (~1.8KB)
  • CLI: lux-wallet generate --pq

Research Tools

# Interactive parameter tuning
consensus params tune

# Distributed benchmark with Quasar
consensus bench --engine quasar

# Simulate quantum state progression
consensus sim --quantum

# Analyze quantum-certificate safety
consensus check --quantum-cert

Implementation Roadmap

Priority Task Status
P0 Quasar engine core (Nova + Quasar) โœ“ Complete
P0 Quantum-certificate block headers โœ“ Complete
P0 Quantum key generation & registration In Progress
P1 Quasar service with precompute Planned
P1 PQ account options (Lamport) โœ“ Complete
P1 PQ account options (Dilithium) Planned

Testing

# Unit tests with quantum scenarios
go test ./engine/quasar/...

# Benchmark dual-certificate performance
go test -bench=QuantumCert ./lattice/

# Fuzz test certificate aggregation
go test -fuzz=Certificate ./testing/

Summary

Quasar is not an add-on or extra layer - it IS the consensus engine for Lux. By combining Nova DAG with Quasar PQ in a unified protocol, Quasar delivers:

  • 2-round finality with both classical and quantum security
  • Dual certificates required for every block
  • One engine for all chain types
  • Sub-second performance even with PQ security

Welcome to the quantum era of consensus.

License

BSD 3-Clause โ€” free for academic & commercial use. See LICENSE.

Documentation ยถ

Overview ยถ

Package consensus provides the Lux consensus implementation.

Package consensus provides the Lux consensus implementation.

Package consensus defines a minimal set of orthogonal primitives for probabilistic agreement.

The terminology follows a physics / cosmology metaphor:

photon   โ€” the atomic unit: select K "rays" (a committee sample)
wave     โ€” per-round thresholds (ฮฑ_pref, ฮฑ_conf) and phase shifts (FPC)
focus    โ€” ฮฒ consecutive rounds concentrate confidence into a decision
prism    โ€” geometric views of a DAG: frontiers, cuts, refractions
horizon  โ€” order-theoretic structure: reachability, antichains, cert/skip

Together these stages form the optics of consensus: light is emitted (photon), amplified and interfered (wave), reinforced (focus), bent through a DAG (prism), and ultimately anchored against the limits of visibility (horizon).

Engines (chain, dag, quasar) compose these primitives into full protocols, while remaining modular and substitutable.

Example (ConsensusRound) ยถ

Example of how to run a consensus round programmatically

package main

import (
	"fmt"

	"github.com/luxfi/consensus"
	"github.com/luxfi/consensus/config"
	"github.com/luxfi/ids"
)

func main() {
	// Create engine
	engine := consensus.NewChainEngine()
	params := config.LocalParams()

	// Generate block ID
	blockID := ids.GenerateTestID()

	// Collect votes (in real scenario, from network)
	votes := map[string]bool{
		"node1": true,
		"node2": true,
		"node3": true,
		"node4": false,
		"node5": true,
	}

	// Calculate confidence
	acceptCount := 0
	for _, vote := range votes {
		if vote {
			acceptCount++
		}
	}

	confidence := float64(acceptCount) / float64(len(votes))
	finalized := confidence >= params.Alpha

	_ = engine // Use engine for actual consensus

	fmt.Printf("Block %s: confidence=%.0f%%, finalized=%v\n",
		blockID, confidence*100, finalized)
}

Index ยถ

Examples ยถ

Constants ยถ

View Source
const (
	// CurrentCodecVersion is the current codec version
	CurrentCodecVersion = codec.CurrentVersion
)

Export constants

Variables ยถ

View Source
var (
	GetTimestamp       = consensuscontext.GetTimestamp
	GetChainID         = consensuscontext.GetChainID
	GetNetID           = consensuscontext.GetNetID
	GetNetworkID       = consensuscontext.GetNetworkID
	GetValidatorState  = consensuscontext.GetValidatorState
	GetSubnetID        = consensuscontext.GetNetID // GetSubnetID is an alias for GetNetID for backward compatibility
	WithContext        = consensuscontext.WithContext
	FromContext        = consensuscontext.FromContext
	GetNodeID          = consensuscontext.GetNodeID
	WithIDs            = consensuscontext.WithIDs
	WithValidatorState = consensuscontext.WithValidatorState
)

Export functions from context

View Source
var (
	// Codec is the consensus codec
	Codec = codec.Codec
)

Export variables

Functions ยถ

func Config ยถ

func Config(nodes int) config.Parameters

Config returns default consensus parameters for different network sizes

func LuxAssetID ยถ

func LuxAssetID(ctx context.Context) interface{}

LuxAssetID returns the ID of the LUX asset

func QuantumNetworkID ยถ

func QuantumNetworkID(ctx context.Context) uint32

QuantumNetworkID returns the quantum network ID from context

Types ยถ

type Acceptor ยถ

type Acceptor interface {
	// Accept processes an accepted item
	Accept(ctx context.Context, containerID ids.ID, container []byte) error
}

Acceptor interface for consensus acceptors

type AcceptorGroup ยถ

type AcceptorGroup interface {
	RegisterAcceptor(chainID ids.ID, acceptorName string, acceptor Acceptor, dieOnError bool) error
	DeregisterAcceptor(chainID ids.ID, acceptorName string) error
}

AcceptorGroup manages a group of acceptors

func NewAcceptorGroup ยถ

func NewAcceptorGroup() AcceptorGroup

NewAcceptorGroup creates a new acceptor group

type AppError ยถ

type AppError struct {
	Code    int
	Message string
}

AppError represents an application error

type BasicAcceptor ยถ

type BasicAcceptor struct {
	// contains filtered or unexported fields
}

BasicAcceptor is a simple implementation of the Acceptor interface

func NewBasicAcceptor ยถ

func NewBasicAcceptor() *BasicAcceptor

NewBasicAcceptor creates a new basic acceptor

func (*BasicAcceptor) Accept ยถ

func (a *BasicAcceptor) Accept(ctx context.Context, containerID ids.ID, container []byte) error

Accept marks an item as accepted

type CodecVersion ยถ

type CodecVersion = codec.CodecVersion

CodecVersion is the codec version

type Context ยถ

type Context = consensuscontext.Context

Context is the consensus context

type ContextInitializable ยถ

type ContextInitializable interface {
	InitCtx(context.Context)
}

ContextInitializable can be initialized with context

type Contextualizable ยถ

type Contextualizable interface {
	InitializeContext(context.Context) error
}

Contextualizable can be contextualized

type Engine ยถ

type Engine interface {
	// Start starts the engine
	Start(context.Context, uint32) error

	// Stop stops the engine
	Stop(context.Context) error

	// HealthCheck performs a health check
	HealthCheck(context.Context) (interface{}, error)

	// IsBootstrapped returns whether the engine is bootstrapped
	IsBootstrapped() bool
}

Engine is the main consensus engine interface

func NewChainEngine ยถ

func NewChainEngine() Engine

NewChainEngine creates a new chain consensus engine

func NewDAGEngine ยถ

func NewDAGEngine() Engine

NewDAGEngine creates a new DAG consensus engine

func NewPQEngine ยถ

func NewPQEngine() Engine

NewPQEngine creates a new post-quantum consensus engine

type Fx ยถ

type Fx interface {
	Initialize(interface{}) error
}

Fx represents a feature extension

type IDs ยถ

type IDs = consensuscontext.IDs

IDs holds consensus IDs

type QuantumIDs ยถ

type QuantumIDs struct {
	// QuantumID is the root quantum network identifier
	QuantumID uint32
	NodeID    ids.NodeID
	// NetID identifies networks within the quantum network
	NetID   ids.ID
	ChainID ids.ID
	// P-Chain is the quantum validation chain
	PChainID    ids.ID
	XChainID    ids.ID
	CChainID    ids.ID
	AVAXAssetID ids.ID
}

QuantumIDs contains various quantum network and chain IDs

func GetQuantumIDs ยถ

func GetQuantumIDs(ctx context.Context) *QuantumIDs

GetQuantumIDs retrieves QuantumIDs from context

type State ยถ

type State interface {
	GetTimestamp() int64
	SetTimestamp(int64)
}

State represents consensus state

type ValidatorState ยถ

type ValidatorState = consensuscontext.ValidatorState

ValidatorState provides validator information

Directories ยถ

Path Synopsis
Package block provides block interfaces for consensus
Package block provides block interfaces for consensus
cmd
bench command
Package main provides the bench CLI tool for consensus benchmarking
Package main provides the bench CLI tool for consensus benchmarking
checker command
Package main provides the checker CLI tool for consensus health checking
Package main provides the checker CLI tool for consensus health checking
consensus command
Package main provides the main consensus CLI tool
Package main provides the main consensus CLI tool
params command
Package main provides the params CLI tool for viewing consensus network parameters
Package main provides the params CLI tool for viewing consensus network parameters
server command
sim command
Package main provides the sim CLI tool for consensus simulation
Package main provides the sim CLI tool for consensus simulation
Package codec provides encoding/decoding for consensus types
Package codec provides encoding/decoding for consensus types
Package context provides consensus context for VMs
Package context provides consensus context for VMs
Package core provides core consensus interfaces and contracts.
Package core provides core consensus interfaces and contracts.
appsender
Package appsender defines the AppSender interface for application-level messaging
Package appsender defines the AppSender interface for application-level messaging
coremock
Package coremock provides mock implementations for testing
Package coremock provides mock implementations for testing
dag
interfaces
Package interfaces defines core consensus interfaces
Package interfaces defines core consensus interfaces
tracker
Package tracker provides consensus tracking utilities
Package tracker provides consensus tracking utilities
Package engine houses the three consensus engines: chain, dag, and pq.
Package engine houses the three consensus engines: chain, dag, and pq.
bft
chain
Package chain implements linear consensus protocol.
Package chain implements linear consensus protocol.
chain/block/blockmock
Package blockmock provides mock implementations for testing
Package blockmock provides mock implementations for testing
chain/block/blocktest
Package blocktest provides test utilities for blocks
Package blocktest provides test utilities for blocks
chain/chainmock
Package chainmock provides mock implementations for testing
Package chainmock provides mock implementations for testing
chain/chaintest
Package chaintest provides test utilities for chains
Package chaintest provides test utilities for chains
core/coremock
Package coremock provides mock implementations for core consensus
Package coremock provides mock implementations for core consensus
dag
Package dag provides DAG consensus functionality
Package dag provides DAG consensus functionality
enginetest
Package enginetest provides test utilities for consensus engines
Package enginetest provides test utilities for consensus engines
pq
Package pq implements the post-quantum consensus engine that combines classical and quantum-resistant consensus mechanisms.
Package pq implements the post-quantum consensus engine that combines classical and quantum-resistant consensus mechanisms.
Package examples demonstrates integration between consensus and node packages
Package examples demonstrates integration between consensus and node packages
Package flare finalizes DAG cuts via a cascading accept protocol.
Package flare finalizes DAG cuts via a cascading accept protocol.
Package focus accumulates confidence by counting ฮฒ consecutive successes.
Package focus accumulates confidence by counting ฮฒ consecutive successes.
Package horizon houses DAG order-theory predicates.
Package horizon houses DAG order-theory predicates.
Package interfaces provides common consensus interfaces
Package interfaces provides common consensus interfaces
networking
benchlist
Package benchlist is DEPRECATED.
Package benchlist is DEPRECATED.
router
Package router is DEPRECATED.
Package router is DEPRECATED.
router/routermock
Package routermock provides mock implementations for message routing
Package routermock provides mock implementations for message routing
sender/sendertest
Package sendertest provides test utilities for message sending
Package sendertest provides test utilities for message sending
tracker
Package tracker is DEPRECATED.
Package tracker is DEPRECATED.
Package photon chooses a K-sized committee each round.
Package photon chooses a K-sized committee each round.
Package prism provides DAG geometry: frontiers, cuts, and refractions.
Package prism provides DAG geometry: frontiers, cuts, and refractions.
protocol
field
Package field orchestrates DAG finality via distributed state reduction.
Package field orchestrates DAG finality via distributed state reduction.
flare
Package flare finalizes DAG cuts via a cascading accept protocol.
Package flare finalizes DAG cuts via a cascading accept protocol.
focus
Package focus accumulates confidence by counting ฮฒ consecutive successes.
Package focus accumulates confidence by counting ฮฒ consecutive successes.
horizon
Package horizon houses DAG order-theory predicates.
Package horizon houses DAG order-theory predicates.
quasar
Package quasar provides post-quantum overlay: dual BLS + ring certificates.
Package quasar provides post-quantum overlay: dual BLS + ring certificates.
ray
Package ray finalizes linear chains through single-threaded consensus.
Package ray finalizes linear chains through single-threaded consensus.
Package qzmq provides post-quantum secure transport over ZeroMQ.
Package qzmq provides post-quantum secure transport over ZeroMQ.
Package uptime provides uptime calculation functionality
Package uptime provides uptime calculation functionality
uptimemock
Package uptimemock provides mock implementations for uptime tracking
Package uptimemock provides mock implementations for uptime tracking
bag
ids
set
validatorsmock
Package validatorsmock provides mock implementations for validator management
Package validatorsmock provides mock implementations for validator management
Package verify provides verification utilities
Package verify provides verification utilities
Package version provides version information
Package version provides version information
Package wave computes per-round thresholds and drives a poll.
Package wave computes per-round thresholds and drives a poll.
fpc
Package fpc implements Fast Probabilistic Consensus thresholds.
Package fpc implements Fast Probabilistic Consensus thresholds.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL