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 ยถ
- Constants
- Variables
- func Config(nodes int) config.Parameters
- func LuxAssetID(ctx context.Context) interface{}
- func QuantumNetworkID(ctx context.Context) uint32
- type Acceptor
- type AcceptorGroup
- type AppError
- type BasicAcceptor
- type CodecVersion
- type Context
- type ContextInitializable
- type Contextualizable
- type Engine
- type Fx
- type IDs
- type QuantumIDs
- type State
- type VMState
- type ValidatorState
Examples ยถ
Constants ยถ
const ( VMInitializing = core.VMInitializing VMStateSyncing = core.VMStateSyncing VMBootstrapping = core.VMBootstrapping VMNormalOp = core.VMNormalOp )
VM state constants
const ( // CurrentCodecVersion is the current codec version CurrentCodecVersion = codec.CurrentVersion )
Export constants
Variables ยถ
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
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 ยถ
LuxAssetID returns the ID of the LUX asset
func QuantumNetworkID ยถ
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 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
type ContextInitializable ยถ
ContextInitializable can be initialized with context
type Contextualizable ยถ
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 NewPQEngine ยถ
func NewPQEngine() Engine
NewPQEngine creates a new post-quantum consensus engine
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 ValidatorState ยถ
type ValidatorState = consensuscontext.ValidatorState
ValidatorState provides validator information