consensus

package
v1.22.82 Latest Latest
Warning

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

Go to latest
Published: Jan 5, 2026 License: BSD-3-Clause Imports: 6 Imported by: 0

README

Consensus Package

This package provides consensus infrastructure for the Lux node.

Overview

The consensus package contains:

  • Acceptor: Callback mechanism for accepted blocks/vertices
  • Quasar: Hybrid quantum-safe finality engine (BLS + Ringtail)
  • Engine: Chain and DAG consensus engine interfaces

Vote Terminology

This package uses "Vote" as the semantic name for validator responses to block proposals.

Vote (wire format: Chits): A validator's agreement or preference for a specific block. On the network wire, votes are transmitted using the "Chits" message format for backwards compatibility with existing protocols.

// VoteMessage represents a vote for a specific block.
// This is a semantic wrapper - the wire format remains Chits.
type VoteMessage struct {
    BlockID   ids.ID
    RequestID uint32
}

The UnsolicitedVoteRequestID constant (value 0) indicates a vote sent without a prior request, used in fast-follow scenarios.

Package Structure

consensus/
  acceptor.go     # Acceptor interface and group management
  engine/
    chain/
      vote.go     # Vote message types (wire format: Chits)
  quasar/
    quasar.go     # Hybrid BLS + Ringtail finality
    types.go      # Signature types and interfaces
    config.go     # Configuration
    gpu_ntt.go    # GPU acceleration for NTT operations

Acceptor

The Acceptor interface is called before containers are committed as accepted:

type Acceptor interface {
    Accept(ctx *consensuscontext.Context, containerID ids.ID, container []byte) error
}

Multiple acceptors can be registered per chain via AcceptorGroup.

Quasar Consensus

Quasar provides hybrid quantum-safe finality by combining:

  1. BLS Aggregate Signatures - Fast classical signatures (96 bytes)
  2. Ringtail Threshold Signatures - Post-quantum threshold signatures (t-of-n)

Both signature paths run in parallel, and blocks achieve finality only when both complete with sufficient weight.

See quasar/README.md for detailed documentation.

Documentation

Overview

Package consensus provides consensus infrastructure for the Lux node.

Terminology

This package uses "Vote" as the semantic name for validator responses to block proposals. On the network wire, votes are transmitted using the "Chits" message format for backwards compatibility.

Vote (wire format: Chits): A validator's agreement or preference for a specific block. The VoteMessage type wraps this semantic concept while the underlying protocol uses Chits.

Components

The package contains several components:

Acceptor: Callback interface invoked before blocks are committed as accepted. Multiple acceptors can be registered per chain via AcceptorGroup.

Engine: Chain and DAG consensus engine interfaces located in the engine subpackage. The chain/vote.go file defines vote message types.

Quasar: Hybrid quantum-safe finality engine combining BLS aggregate signatures (classical) with Ringtail threshold signatures (post-quantum). Located in the quasar subpackage.

Quasar Consensus

The Quasar engine achieves hybrid finality by running two signature paths in parallel:

  • BLS Path: Fast aggregate signatures from 2/3+ validators
  • Ringtail Path: Post-quantum threshold signatures (t-of-n)

Blocks achieve quantum finality only when both paths complete successfully.

See the quasar subpackage for detailed implementation.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Acceptor

type Acceptor interface {
	// Accept must be called before [containerID] is committed to the VM as
	// accepted.
	//
	// If the returned error is non-nil, the chain associated with [ctx] should
	// shut down and not commit [container] or any other container to its
	// database as accepted.
	Accept(ctx *consensuscontext.Context, containerID ids.ID, container []byte) error
}

Acceptor is implemented when a struct is monitoring if a message is accepted

type AcceptorGroup

type AcceptorGroup interface {
	// Calling Accept() calls all of the registered acceptors for the relevant
	// chain.
	Acceptor

	// RegisterAcceptor causes [acceptor] to be called every time an operation
	// is accepted on chain [chainID].
	// If [dieOnError], chain [chainID] stops if Accept returns a non-nil error.
	RegisterAcceptor(chainID ids.ID, acceptorName string, acceptor Acceptor, dieOnError bool) error

	// DeregisterAcceptor removes an acceptor from the group.
	DeregisterAcceptor(chainID ids.ID, acceptorName string) error
}

func NewAcceptorGroup

func NewAcceptorGroup(log log.Logger) AcceptorGroup

Directories

Path Synopsis
engine
chain
Package chain provides chain consensus engine types and interfaces.
Package chain provides chain consensus engine types and interfaces.
Package quasar provides hybrid quantum-safe consensus finality.
Package quasar provides hybrid quantum-safe consensus finality.

Jump to

Keyboard shortcuts

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