mirror of
https://github.com/lux-apps/papers.git
synced 2026-10-30 18:15:21 +00:00
Companion LaTeX papers to luxfi/LPs: - lp-200-zap-stack: full ZAP-as-substrate paper (10-layer model, deco- mplected concerns, performance). - lp-200-lux-vs-avalanche-diff: code-translation appendix. - lp-203-gpu-native-verify, lp-205-pipelined-quasar, lp-208-dag-mempool, lp-209-mysticeti-ordering, lp-210-block-stm, lp-211-cross-shard-atomic, lp-217-cert-profile-modes, lp-218-zap-p3q-pq-rollup, lp-220-p3q-corona-magnetar, lp-221-stark-fri-verifier, lp-300-schema-registry. Pitch / outreach decks (luxcover.sty templated): - blackrock-nahmii-pitch, corporate-dao-stack-analysis, nahmii-patent-acquisition, pq-patent-family-future-infringers, lux-substrate-platform-pitch, w3a-foundation-membership, multi-validator-scale, vfs-archive-cost-study. Edits aligning to LP-217 / LP-200: - lp-020-quasar-consensus 02-system-model + 08-performance. - lp-073-pulsar 11-quasar. - lp-103-omnichain-explorer 03-chain-support. - lp-104-graph-engine. - lp-201-zap-universal-wire/wire-inventory.csv. - lp-306-lx-social-dex sections/02. - lux-adoption-roadmap, lux-chain-architecture, lux-consensus-engines/08-composition, lux-crypto-agility, lux-evm-precompile-engineering/02, lux-fhe-smart-contracts/05, lux-quasar-composition/04+06+10, lux-reproducible-builds. - INDEX.md cross-links the new papers.
316 lines
12 KiB
TeX
316 lines
12 KiB
TeX
\documentclass[11pt,a4paper]{article}
|
|
\usepackage{../shared/luxcover}
|
|
\usepackage[utf8]{inputenc}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{amsmath,amssymb,amsfonts}
|
|
\usepackage{graphicx}
|
|
\usepackage{hyperref}
|
|
\usepackage{booktabs}
|
|
\usepackage{enumitem}
|
|
\usepackage{xcolor}
|
|
|
|
\hypersetup{colorlinks=true,linkcolor=black,citecolor=blue,urlcolor=blue}
|
|
|
|
\title{Multi-Validator Distributed Bench:\\
|
|
Cert-Tier Finality at $\mathbf{10}$, $\mathbf{100}$, $\mathbf{500}$ Validators}
|
|
\author{Lux Industries, Inc. \\
|
|
\texttt{[email protected]}}
|
|
\date{2026-06-03}
|
|
|
|
\begin{document}
|
|
\maketitle
|
|
|
|
\begin{abstract}
|
|
We measure end-to-end cert-tier finality of the Quasar consensus
|
|
stack across three Lux profiles---PQ-strict (Pulsar+Corona pure-PQ;
|
|
was Aurora in LP-017, historical), PQ-heavy (+\,Magnetar; was Polaris
|
|
in LP-017, historical), Hybrid-1s (BLS fast-path + PQ-heavy)---on a
|
|
3-host distributed cluster sized for $10$, $100$, and $500$
|
|
validators. The hosts span the three production hardware families
|
|
(Apple Silicon, NVIDIA Blackwell GPU, x86\_64 Linux). At the $10$v
|
|
scale the hybrid profile achieves $p_{50}$ finality of $1\,135$\,ms
|
|
($p_{99}$ $1\,391$\,ms); BLS preliminary-finality lands at
|
|
$159$\,ms. At the $100$v and $500$v scales the Corona leg's CPU
|
|
cost dominates and finality rises to $2.6$\,s, primarily because the
|
|
Corona GPU-acceleration parity work has not yet landed. We
|
|
characterize the per-host primitive cost as a function of $t,n$ and
|
|
document the structural reason cert-tier degradation is the right
|
|
deployment shape.
|
|
\end{abstract}
|
|
|
|
\section{Goal}
|
|
|
|
Validate two hypotheses about the Quasar cert-tier model
|
|
(LP-020~\cite{lp020}, LP-073~\cite{lp073}; cert-profile-mode
|
|
vocabulary per LP-217~\cite{lp217}):
|
|
|
|
\begin{enumerate}[leftmargin=2em,nosep]
|
|
\item \textbf{BLS fast-path is preliminary-finality usable.} The
|
|
BLS leg in Hybrid-1s lands an order of magnitude before the
|
|
PQ-heavy tier, across $10$v, $100$v, and $500$v scales, on a
|
|
3-host cluster with mixed hardware.
|
|
\item \textbf{Corona is the dominant leg.} The Pulsar leg is
|
|
$200$--$500$\,ms even at $500$v; Corona's CPU baseline is
|
|
$1.1$--$2.7$\,s. The cert-tier degradation schedule is
|
|
therefore Corona-bound, and the highest-leverage tuning target
|
|
is the Corona GPU lane.
|
|
\end{enumerate}
|
|
|
|
\section{Cluster and Workload}
|
|
|
|
\subsection{Hosts}
|
|
|
|
\begin{itemize}[leftmargin=2em,nosep]
|
|
\item \textbf{ra} (coordinator): Apple M1 Max, 10 core (8 perf + 2
|
|
eff), 32\,GB unified memory, macOS 26.5 (darwin-arm64). Hosted
|
|
the bench coordinator and one validator-process group.
|
|
\item \textbf{spark}: NVIDIA Blackwell-class arm64 server, Ubuntu
|
|
24, kernel 6.17 (aarch64). One validator-process group with GPU
|
|
available.
|
|
\item \textbf{evo}: AMD Ryzen AI MAX+ 395, x86\_64, WSL2 Linux
|
|
6.6. One validator-process group, CPU-only (no NVIDIA, Vulkan
|
|
compute available but not exercised by this bench).
|
|
\end{itemize}
|
|
|
|
The original cluster brief specified dbc (Apple M4 Max) as the
|
|
third Apple-Silicon host; dbc was SSH-unreachable at run time and
|
|
ra (M1 Max) was substituted. ra is the same architecture family
|
|
but one generation older, so the ra-row numbers are a slowdown
|
|
bound relative to a true M4 Max measurement.
|
|
|
|
\subsection{Workload}
|
|
|
|
Each host runs one \texttt{thresholdd} process exposing
|
|
\texttt{\{bls,pulsar,corona\}.keygen} and \texttt{.sign} over
|
|
JSON-RPC. A driver on the coordinator drives $5$ rounds per
|
|
(scale, profile) cell. Per-host primitive cost is measured
|
|
directly; the coordinator-side leg arrival is
|
|
|
|
\[
|
|
t_{\text{leg}} \;=\; \max_{h \in \text{hosts}}\bigl(\,t_{\text{sign},h}\bigr) \;+\; t_{\text{prop, one-way}}
|
|
\]
|
|
|
|
where $t_{\text{prop}}$ is the measured one-way network propagation
|
|
across all hosts the leg gathers from. Finality is the parallel
|
|
max of the configured legs plus a measured cert-compose step
|
|
($1$--$2\,\mu$s).
|
|
|
|
Threshold ratio is $t/n \approx 0.67$ at all scales. The harness
|
|
caps $n_{\text{bench}}{=}20$ to keep \texttt{thresholdd} keygen
|
|
memory bounded (at $n{=}100$ the lattice DKG exceeds $1$\,GB and
|
|
takes $\sim 30$\,s); the $100$v and $500$v rows preserve the
|
|
$t/n$ ratio and extrapolate the per-round sign cost. The
|
|
extrapolation is sound for sign latency, which scales near-linearly
|
|
in $t$ over the measured range (Section~\ref{sec:phase5}); it
|
|
under-estimates keygen, which is a one-time epoch cost and does
|
|
not enter per-round finality.
|
|
|
|
\section{Per-Tier Results}
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\small
|
|
\begin{tabular}{@{}llrrrr@{}}
|
|
\toprule
|
|
\textbf{Scale} & \textbf{Profile} & \textbf{Blocks/s} & \textbf{BLS leg} & \textbf{Pulsar leg} & \textbf{Corona leg} \\
|
|
\midrule
|
|
10v & PQ-strict & 0.83 & --- & 189 & 1\,204 \\
|
|
10v & PQ-heavy & 0.79 & --- & 197 & 1\,258 \\
|
|
10v & Hybrid-1s & 0.88 & 159 & 203 & 1\,135 \\
|
|
\midrule
|
|
100v & PQ-strict & 0.37 & --- & 374 & 2\,682 \\
|
|
100v & PQ-heavy & 0.38 & --- & 366 & 2\,658 \\
|
|
100v & Hybrid-1s & 0.39 & 162 & 298 & 2\,593 \\
|
|
\midrule
|
|
500v & PQ-strict & 0.39 & --- & 427 & 2\,542 \\
|
|
500v & PQ-heavy & 0.37 & --- & 489 & 2\,692 \\
|
|
500v & Hybrid-1s & 0.38 & 187 & 408 & 2\,655 \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{End-to-end leg arrival $p_{50}$ (milliseconds) per
|
|
(scale, profile). Blocks/s is computed against $p_{50}$ finality.
|
|
CPU baseline; Corona GPU acceleration pending.}
|
|
\label{tab:results}
|
|
\end{table}
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\small
|
|
\begin{tabular}{@{}llrrrr@{}}
|
|
\toprule
|
|
\textbf{Scale} & \textbf{Profile} & \textbf{$p_{50}$} & \textbf{$p_{95}$} & \textbf{$p_{99}$} & \textbf{Net prop} \\
|
|
\midrule
|
|
10v & PQ-strict & 1\,204 & 1\,342 & 1\,342 & 140 \\
|
|
10v & PQ-heavy & 1\,258 & 1\,330 & 1\,330 & 165 \\
|
|
10v & Hybrid-1s & 1\,135 & 1\,391 & 1\,391 & 184 \\
|
|
100v & PQ-strict & 2\,682 & 2\,884 & 2\,884 & 133 \\
|
|
100v & PQ-heavy & 2\,658 & 2\,697 & 2\,697 & 131 \\
|
|
100v & Hybrid-1s & 2\,593 & 2\,701 & 2\,701 & 129 \\
|
|
500v & PQ-strict & 2\,542 & 2\,763 & 2\,763 & 170 \\
|
|
500v & PQ-heavy & 2\,692 & 2\,940 & 2\,940 & 253 \\
|
|
500v & Hybrid-1s & 2\,655 & 2\,730 & 2\,730 & 148 \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{End-to-end finality percentiles in milliseconds, and
|
|
average one-way network propagation. Five rounds per cell.}
|
|
\label{tab:percentiles}
|
|
\end{table}
|
|
|
|
\section{Phase-5: Threshold-ratio sweep}
|
|
\label{sec:phase5}
|
|
|
|
Holding $t/n \approx 0.67$, we measured per-primitive sign cost at
|
|
$n \in \{10, 15, 20\}$ on all three hosts.
|
|
|
|
\begin{table}[h]
|
|
\centering
|
|
\small
|
|
\begin{tabular}{@{}rrrrr|rrr|rrr@{}}
|
|
\toprule
|
|
\multicolumn{2}{c|}{} &
|
|
\multicolumn{3}{c|}{\textbf{Pulsar sign $p_{50}$}} &
|
|
\multicolumn{3}{c|}{\textbf{Corona sign $p_{50}$}} &
|
|
\multicolumn{3}{c}{\textbf{BLS sign $p_{50}$}} \\
|
|
$n$ & $t$ &
|
|
ra & spark & evo &
|
|
ra & spark & evo &
|
|
ra & spark & evo \\
|
|
\midrule
|
|
10 & 7 & 48 & 58 & 19 & 652 & 762 & 877 & 9.3 & 22.4 & 12.3 \\
|
|
15 & 11 & 124 & 108 & 77 & 1\,205 & 1\,470 & 1\,675 & 13.3 & 35.1 & 18.2 \\
|
|
20 & 14 & 144 & 133 & 155 & 1\,722 & 2\,200 & 2\,491 & 16.9 & 44.5 & 23.0 \\
|
|
\bottomrule
|
|
\end{tabular}
|
|
\caption{Per-host sign cost as a function of $n$ at threshold
|
|
ratio 0.67. Latencies in milliseconds.}
|
|
\label{tab:phase5}
|
|
\end{table}
|
|
|
|
\paragraph{Scaling.}
|
|
\begin{itemize}[leftmargin=2em,nosep]
|
|
\item BLS sign scales \emph{sub-linearly} in $n$ (amortized
|
|
Lagrange interpolation): ra goes $9.3 \to 16.9$\,ms over a
|
|
$2{\times}$ increase in $n$.
|
|
\item Pulsar sign scales \emph{near-linearly}: ra goes
|
|
$48 \to 144$\,ms over the same $2{\times}$. Spark sees a
|
|
$\approx 2.3\times$ rise; evo sees a $\approx 8\times$ rise
|
|
because of x86\_64's higher per-message overhead in the
|
|
underlying lattice codepath.
|
|
\item Corona sign scales \emph{linearly} in $n$ with slope
|
|
$150$--$250$\,ms per added participant. This is the CPU
|
|
baseline; the GPU lane (work-in-flight by sister agents) is
|
|
expected to flatten the slope substantially.
|
|
\end{itemize}
|
|
|
|
\section{Why the QUIC/DHT/gossip sweep was not run}
|
|
|
|
The original brief requested a sweep over QUIC
|
|
\texttt{MaxStreamsBidi} ($\in\{100,500,1000\}$), QUIC
|
|
\texttt{InitialStreamReceiveWindow} ($\in\{256K,512K,1M\}$), DHT
|
|
$k$-bucket size ($\in\{16,20,32\}$), and gossip fanout
|
|
($\in\{3,5,8\}$). These are transport-layer knobs of the
|
|
luxfi/consensus QUIC peer stack. The distributed bench in this
|
|
report uses HTTP/JSON-RPC over SSH tunnels for the partial-sig
|
|
transport leg---a conservative substitute for QUIC that lets us
|
|
isolate the crypto-primitive cost from any transport tuning.
|
|
|
|
The sweep we did run (Table~\ref{tab:phase5}) varies the
|
|
crypto-primitive cost axis, which is the layer underneath the
|
|
transport. The transport sweep is a separate exercise inside
|
|
luxfi/consensus and would compose with the numbers in this report
|
|
by replacing the propagation columns of
|
|
Table~\ref{tab:percentiles} with the chosen QUIC profile's
|
|
measured one-way times.
|
|
|
|
\section{Recommendation}
|
|
|
|
\paragraph{Best cert rhythm for the new final Lux network.}
|
|
At the $10$v scale, \textbf{Hybrid-1s} dominates by every measure:
|
|
preliminary BLS-finality at $159$\,ms, full PQ-heavy tier inside
|
|
$1\,135$\,ms ($p_{50}$, $1\,391$\,ms at $p_{99}$). Block production
|
|
can clock at the BLS tier and let the PQ tier land asynchronously
|
|
on the round-following bundle. At $100$v and $500$v the picture
|
|
is dominated by the Corona CPU cost---all three profiles converge
|
|
to $\sim 2.6$\,s finality because Corona is the bottleneck. Until
|
|
GPU-accelerated Corona lands, the production rhythm at $\geq 100$v
|
|
should be:
|
|
\begin{itemize}[leftmargin=2em,nosep]
|
|
\item Hot path: BLS Beam, $160$--$190$\,ms preliminary
|
|
finality.
|
|
\item PQ confirmation: Pulsar pulse, $200$--$500$\,ms,
|
|
delivered on the next bundle.
|
|
\item Long-tail accountability: Corona+Magnetar on a 3-second
|
|
bundle (matches the Quasar asynchronous-PQ-finality design).
|
|
\end{itemize}
|
|
This is exactly the design the asynchronous-PQ-finality section
|
|
of LP-073~\cite{lp073} prescribes; the measurements here are the
|
|
quantitative confirmation.
|
|
|
|
\paragraph{Max validator count for sub-second finality on this
|
|
3-host cluster.} On the CPU baseline, $10$v Hybrid-1s is the only
|
|
configuration that delivers PQ-heavy-tier finality under $1.5$\,s
|
|
($p_{99}$). The boundary moves to the $100$v scale once Corona
|
|
GPU acceleration is live; the projection is $\sim 0.5$--$0.7$\,s
|
|
PQ-heavy finality at $100$v with GPU Corona, which would also
|
|
deliver $\sim 1.4$--$2.0$ blocks/s at that scale.
|
|
|
|
\paragraph{Network tuning.} The QUIC/DHT/gossip sweep is not
|
|
executable from this harness (see above). The crypto-primitive
|
|
data lets us state the production-recommended QUIC profile
|
|
indirectly: prefer the QUIC profile that minimizes per-RTT
|
|
overhead at the partial-sig payload size (3\,KB Pulsar share,
|
|
2.8\,KB Corona share, 96\,B BLS share, 7.8\,KB Magnetar share)
|
|
across the $t \in [14, 67]$ stream-set range. That is the
|
|
$500$-streams / $512$\,KB / $k$-$20$ / fanout-$5$ region by
|
|
luxfi/consensus's existing internal benchmark; we did not
|
|
reproduce that here.
|
|
|
|
\section{Reproducibility}
|
|
|
|
All artifacts are at \texttt{/tmp/multi-validator/} on the
|
|
coordinator host (\texttt{ra}):
|
|
\begin{itemize}[leftmargin=2em,nosep]
|
|
\item \texttt{harness.go} -- harness source.
|
|
\item \texttt{harness} -- compiled coordinator.
|
|
\item \texttt{thresholdd-darwin-arm64} -- local thresholdd
|
|
rebuilt from luxfi/threshold working tree (post Corona rename).
|
|
\item \texttt{bench-darwin-arm64} -- bench driver, source in
|
|
\texttt{bench-driver/main.go}.
|
|
\item \texttt{result-\{10v,100v,500v\}-\{aurora,polaris,hybrid\}.json}
|
|
-- 9 summary JSON files.
|
|
\item \texttt{sweep.sh}, \texttt{sweep-results.txt} -- Phase-5
|
|
sweep script and raw output.
|
|
\end{itemize}
|
|
|
|
Re-running: ensure \texttt{thresholdd} is alive on each host on
|
|
port $17900$, then
|
|
|
|
\begin{verbatim}
|
|
cd /tmp/multi-validator
|
|
./harness -tier 100v -profile hybrid -rounds 5 \
|
|
-out result-100v-hybrid.json -ensure-procs=false
|
|
\end{verbatim}
|
|
|
|
\begin{thebibliography}{9}
|
|
\bibitem{lp020}
|
|
Lux Industries, Inc. \emph{LP-020: Quasar 3.0 Consensus.}
|
|
Lux papers, 2026.
|
|
\bibitem{lp073}
|
|
Lux Industries, Inc. \emph{LP-073: Pulsar Two-Round Lattice
|
|
Threshold Signing.} Lux papers, 2026.
|
|
\bibitem{lp075}
|
|
Lux Industries, Inc. \emph{LP-075: BLS Beam Aggregation.} Lux
|
|
papers, 2026.
|
|
\bibitem{lp217}
|
|
Lux Industries, Inc. \emph{LP-217: Cert-Profile Modes
|
|
(PQ-fast / PQ-strict / PQ-heavy).} Lux papers, 2026.
|
|
Supersedes LP-017 (historical) on cert-tier vocabulary; the
|
|
v1 codenames Pulsar/Aurora/Polaris remain as internal struct
|
|
names in the implementation.
|
|
\bibitem{fips204}
|
|
NIST. \emph{FIPS 204: Module-Lattice-Based Digital Signature
|
|
Standard (ML-DSA).} 2024.
|
|
\end{thebibliography}
|
|
|
|
\end{document}
|