lux-consensus 1.23.0

Lux Consensus SDK — pure-Rust Quasar post-quantum probabilistic consensus (Wave / FPC / Photon / Focus / Quasar PQ finality via hybrid BLS12-381 + Pulsar = P3Q)
Documentation
# lux-consensus

Pure-Rust SDK for the Lux **Quasar** consensus stack — Wave threshold voting,
FPC (Fast Probabilistic Consensus), Photon validator sampling, Focus
confidence accumulation, and post-quantum hybrid finality via BLS12-381 +
Pulsar (Module-LWE threshold, FIPS 204 byte-equal).

## Features

| Flag      | What it pulls in                                                |
|-----------|-----------------------------------------------------------------|
| *default* | CPU-only, no extra deps beyond `blst` and `hex`                 |
| `simd`    | `blake3` (SIMD hashing) + `rayon` (data-parallel vote tally)    |
| `mlx`     | Apple Silicon GPU acceleration via `mlx-sys` (implies `simd`)   |
| `cuda`    | NVIDIA GPU acceleration (implies `simd`) — work in progress     |
| `gpu`     | `mlx` + `cuda` — auto-select per platform                       |

## Usage

```rust
use lux_consensus::*;

let config = QuasarConfig::mainnet();
let mut engine = QuasarEngine::new(config);
engine.start().unwrap();

let block = Block::new(
    ID::from([1u8; 32]),
    ID::from([0u8; 32]),
    1,
    b"Hello, Lux!".to_vec(),
);
engine.add(block.clone()).unwrap();

// A validator is named by its 20-byte NodeID — never the 32-byte block id.
for i in 0..20 {
    engine.add_validator(NodeID::from([i; 20]), 1).unwrap();
}

for i in 0..20 {
    let vote = Vote::new(block.id.clone(), VoteType::Preference, NodeID::from([i; 20]));
    engine.record_vote(vote).unwrap();
}

assert!(engine.is_accepted(&block.id));
engine.stop().unwrap();
```

## Architecture

- **Wave** — adaptive-threshold voting driven by FPC outputs
- **FPC** — PRF-derived per-round thresholds for fast probabilistic consensus
- **Photon** — luminance-tracked validator sampling
- **Focus** — β consecutive rounds of confidence before commit
- **Quasar** — a two-thirds-by-stake certificate: the distinct signed accepts themselves, each checked against its own signer's key

## License

Lux Ecosystem License 1.2 — see the `LICENSE` file.