From e4e6c0161b515e1ea932cd6780f9e099ec464b17 Mon Sep 17 00:00:00 2001 From: unnawut Date: Mon, 4 May 2026 13:34:28 +0700 Subject: [PATCH 1/8] plan: devnet-5 draft --- .../leanConsensus/pq-interop/pq-devnet-5.md | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md diff --git a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md new file mode 100644 index 0000000..8e62235 --- /dev/null +++ b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md @@ -0,0 +1,123 @@ +# pq-devnet-5: High Level Plan + +## Objectives + +1. Produce one block-level aggregation proof that can cover multiple attestation messages +2. Leverage proof decomposability so per-message proofs remain recoverable from the block-level proof +3. Replace 3SF-mini with PQ heartbeat: committee-based voting under Goldfish fork-choice + +## Key functionalities & targets + +- **Existing** + - **Slot duration:** 4 seconds + - **PQ signature:** [leanSig](https://github.com/leanEthereum/leanSig) + - **Signature aggregation base:** [leanMultisig](https://github.com/leanEthereum/leanMultisig) + - **Per-message aggregation:** Recursive aggregation per `attestation_data` via `leanVm` (from pq-devnet-4) + - **Proposer keys:** Each validator maintains attestation and proposer keys (from pq-devnet-4) + +- **Changes** + - **Consensus mechanism:** + - 3SF-mini is removed from the devnet. + - Head selection follows [Goldfish](https://ethresear.ch/t/unblocking-faster-finality-with-decoupled-consensus/24527), an LMD-GHOST variant with vote expiry and view-merge that operates as a fork-choice / availability protocol over committee votes. Goldfish does not finalize on its own; it picks the canonical head and is intended to be paired with a finality gadget. + - 3SF-mini is not replaced by a finality gadget in this devnet — finality gadget integration (e.g. Minnimit, Simplex) is deferred to a future devnet once Goldfish ↔ finality-gadget interactions are better understood. + + - **PQ heartbeat (committee-based block production):** + - For each slot, an `X`-validator committee is sampled. Sampling method is a protocol-level configuration option. + - Valid options: random sampling, or fixed per-client allotment (each client gets a configured number of committee seats). + - The slot's proposer (drawn from the committee) builds a block. + - The committee votes on the proposed block. Goldfish's fork-choice picks the canonical head. + - Block propagates; the next slot starts. The result is a constant-latency confirmation that is reorg-resilient under honest proposals. + + - **Parallel finality-vote test bed:** + - In parallel with the committee path, the full validator set casts finality votes targeting the latest heartbeat tip. + - These votes: + - Propagate through the p2p network. + - Are aggregated through the same `leanMultisig`/`leanVm` pipeline used for committee attestations. + - Are NOT consumed by any gadget. They do not finalize blocks. They do not influence fork-choice. + - The sole purpose of this path is to stress-test PQ signature aggregation against full-validator-set traffic before any future finality gadget consumes it. + + - **Block-level multi-message aggregation:** + - Proposers include exactly one block-level aggregation proof per block, covering all `attestation_data` messages in that block. + - Aggregation is performed via `leanVm`'s multi-message aggregation: a single `Proof([message_0, slot_0], …, [message_n, slot_n])` is produced from the per-message aggregates. + - The resulting block-level proof is decomposable: any later party MAY recover an individual `Proof([message_i, slot_i])` from the block-level proof, without re-aggregation. No proof tree is required to expose per-message proofs to downstream consumers. + + - **Block contents:** + - Each block contains exactly one block-level aggregation proof. + - Multiple block-level proofs in a block MUST be rejected at block validation time. + - The previous "one aggregate per message" structure (pq-devnet-4) is replaced by this single block-level proof. + + - **Role behavior updates:** + - **Aggregator:** Continues per-message coalescing. Forwards per-message aggregates to the proposer for block-level merging. + - **Proposer:** Performs the final multi-message aggregation across all `attestation_data` in the block to produce the single block-level proof. + - **Verifier:** Validates that each block contains exactly one block-level proof and that it verifies against the union of participant sets across all included messages. + +## Notable exclusions + +- Finality gadget integration (Minnimit, Simplex, or other). Goldfish runs without a finality gadget in this devnet. +- Goldfish ↔ finality-gadget interaction semantics. +- Dynamic committee assignment changes beyond the configured sampling method. +- Changes to validator churn/activation logic. + +## Completion target + +TBD + +## Specification targets + +| Specification | Target | Remarks | +| ------------- | ------ | ------- | +| leanSpec | TBD | - For specification-related changes, see [all pq-devnet-5 spec PRs](https://github.com/leanEthereum/leanSpec/pulls?q=is%3Apr+is%3Amerged+label%3Aspecs+milestone%3Apq-devnet-5)
- For all changes including tests and framework, see [all pq-devnet-5 PRs](https://github.com/leanEthereum/leanSpec/pulls?q=is%3Apr+is%3Amerged+milestone%3Apq-devnet-5) | +| leanSig | TBD | | +| leanMultisig | TBD | | +| leanMetrics | TBD | | + +## Configurations + +- `validator-config.yaml`: TBD + - Example committee-eligible aggregator entry: + + ```yaml + - name: node_0 + attestation_privkey: 0000000000000000010000000000000002000000000000000300000000000000 + proposer_privkey: 0000000000000000040000000000000005000000000000000600000000000000 + enrFields: + ip: 10.0.0.0 + quic: 10000 + is_aggregator: true + committee_seats: 1 + ``` + +- Heartbeat committee parameters (protocol-level, TBD): + - `COMMITTEE_SIZE`: `X` (TBD) + - `COMMITTEE_SAMPLING`: `random` | `per_client_fixed` (TBD) + +## Interop toolings + +| Tool | Link | +| ---- | ---- | +| lean-quickstart | TBD | + +## Client support status + +| Client | Implementation | Spec tests | Interop | Code | Docker | +| ------ | -------------- | ---------- | ------- | --------- | ------ | +| Ream | ⏳ | ⏳ | ⏳ | | | +| Zeam | ⏳ | ⏳ | ⏳ | | | +| Qlean | ⏳ | ⏳ | ⏳ | | | +| Lantern | ⏳ | ⏳ | ⏳ | | | +| Lighthouse | ⏳ | ⏳ | ⏳ | | | + +## Benchmarks + +- Hardware specs: TBD (based on [EIP-7870](https://eips.ethereum.org/EIPS/eip-7870) full node specs) +- Configurations: TBD +- Results + - [leanMetrics](https://github.com/leanEthereum/leanMetrics) collected and analyzed. Links to results to be added here once completed. + +## Summary and learnings + +- **Single block-level aggregation proof:** Each block carries exactly one aggregation proof covering all `attestation_data` messages, replacing the per-message-aggregate model of pq-devnet-4. The proof is decomposable, so per-message proofs remain recoverable by later proposers without an explicit aggregation tree. +- **Reduced block size and bandwidth:** Collapsing per-message aggregates into a single block-level proof minimizes the proof component of the block, the largest contributor to block size in pq-devnet-4. +- **PQ heartbeat replaces 3SF-mini:** A small per-slot committee votes on the proposed block, and Goldfish fork-choice picks the canonical head from those votes. The proposer (drawn from the committee) builds the block. 3SF-mini is dropped entirely from the devnet, giving constant-latency, reorg-resilient confirmation under honest proposals — without on-chain finality, which is deferred to a future devnet. +- **Full validator set as PQ aggregation test bed:** Finality votes from the full validator set propagate, aggregate, and are then discarded. They do not finalize anything and do not influence fork-choice. This isolates PQ signature aggregation at full-validator-set scale as a measurable target before any finality gadget consumes the votes. +- **Remaining limitation:** No finality gadget runs in this devnet. Goldfish ↔ finality-gadget interaction (Minnimit, Simplex, or other) is the natural follow-up for a future devnet once those interactions are understood. From c2eb397fe86106be0446493287a518c79abb0072 Mon Sep 17 00:00:00 2001 From: unnawut Date: Mon, 4 May 2026 15:54:35 +0700 Subject: [PATCH 2/8] devnet-5: reframe objectives as feature-validation targets Restate each objective as what the devnet validates rather than what it introduces, and pull scoping qualifiers inline so each line is readable standalone. Co-Authored-By: Claude Opus 4.7 (1M context) --- breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md index 8e62235..3a6ceaa 100644 --- a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md +++ b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md @@ -2,9 +2,9 @@ ## Objectives -1. Produce one block-level aggregation proof that can cover multiple attestation messages -2. Leverage proof decomposability so per-message proofs remain recoverable from the block-level proof -3. Replace 3SF-mini with PQ heartbeat: committee-based voting under Goldfish fork-choice +1. Validate single block-level aggregation proof — exactly one proof per block subsumes all per-message `attestation_data` aggregates, replacing the per-message-aggregate model from pq-devnet-4 +2. Validate proof decomposability — per-message proofs remain recoverable from the block-level proof without re-aggregation and without an explicit proof tree +3. Validate PQ heartbeat under Goldfish fork-choice as a constant-latency, reorg-resilient head-selection mechanism — replacing 3SF-mini and operating without an on-chain finality gadget ## Key functionalities & targets From 2563f3cf662ba6888f8c2ccd7aaac6c0c05a5b35 Mon Sep 17 00:00:00 2001 From: unnawut Date: Mon, 4 May 2026 16:00:41 +0700 Subject: [PATCH 3/8] devnet-5: tighten objectives and add gossip-only aggregation objective MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trim wording across objectives 1–3 and add a 4th objective covering the feasibility of gossip-only intermediate aggregation proofs for PQ heartbeat. Co-Authored-By: Claude Opus 4.7 (1M context) --- breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md index 3a6ceaa..bf45f8c 100644 --- a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md +++ b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md @@ -2,9 +2,10 @@ ## Objectives -1. Validate single block-level aggregation proof — exactly one proof per block subsumes all per-message `attestation_data` aggregates, replacing the per-message-aggregate model from pq-devnet-4 -2. Validate proof decomposability — per-message proofs remain recoverable from the block-level proof without re-aggregation and without an explicit proof tree -3. Validate PQ heartbeat under Goldfish fork-choice as a constant-latency, reorg-resilient head-selection mechanism — replacing 3SF-mini and operating without an on-chain finality gadget +1. Validate block-level aggregation that enables each block to contain exactly one proof covering all per-message `attestation_data` aggregates +2. Validate proof decomposability — per-message proofs remain recoverable from the block-level proof without re-aggregation +3. Validate PQ heartbeat under Goldfish fork-choice replacing 3SF-mini and temporarily operating without an on-chain finality gadget +4. Validate feasibility of using gossip-only intermediate aggregation proofs for PQ heartbeat ## Key functionalities & targets From c9c0e11ef5c9f9eab1a8ba25bb0ab5f08e31216e Mon Sep 17 00:00:00 2001 From: unnawut Date: Mon, 4 May 2026 16:10:01 +0700 Subject: [PATCH 4/8] devnet-5: tighten Existing/Consensus mechanism sections Add Slot interval bullet, rename Proposer keys to Validator keys, drop per-bullet pq-devnet-4 attributions, and condense the Goldfish and 3SF-mini descriptions in the Consensus mechanism section. Co-Authored-By: Claude Opus 4.7 (1M context) --- breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md index bf45f8c..0d2cd65 100644 --- a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md +++ b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md @@ -11,16 +11,16 @@ - **Existing** - **Slot duration:** 4 seconds + - **Slot interval:** 5 intervals of 800ms each - **PQ signature:** [leanSig](https://github.com/leanEthereum/leanSig) - **Signature aggregation base:** [leanMultisig](https://github.com/leanEthereum/leanMultisig) - - **Per-message aggregation:** Recursive aggregation per `attestation_data` via `leanVm` (from pq-devnet-4) - - **Proposer keys:** Each validator maintains attestation and proposer keys (from pq-devnet-4) + - **Per-message aggregation:** Recursive aggregation per `attestation_data` via `leanVm` + - **Validator keys:** Each validator maintains attestation and proposer keys - **Changes** - **Consensus mechanism:** - - 3SF-mini is removed from the devnet. - - Head selection follows [Goldfish](https://ethresear.ch/t/unblocking-faster-finality-with-decoupled-consensus/24527), an LMD-GHOST variant with vote expiry and view-merge that operates as a fork-choice / availability protocol over committee votes. Goldfish does not finalize on its own; it picks the canonical head and is intended to be paired with a finality gadget. - - 3SF-mini is not replaced by a finality gadget in this devnet — finality gadget integration (e.g. Minnimit, Simplex) is deferred to a future devnet once Goldfish ↔ finality-gadget interactions are better understood. + - 3SF-mini mechanism is removed entirely. Finality gadget integration (e.g. Minnimit, Simplex) is deferred to a future devnet. + - Head selection follows [Goldfish](https://ethresear.ch/t/unblocking-faster-finality-with-decoupled-consensus/24527), an LMD-GHOST variant with vote expiry and view-merge. - **PQ heartbeat (committee-based block production):** - For each slot, an `X`-validator committee is sampled. Sampling method is a protocol-level configuration option. From 107c00b749749c8326b7d418bca9a90da6c5fa20 Mon Sep 17 00:00:00 2001 From: unnawut Date: Mon, 4 May 2026 16:27:47 +0700 Subject: [PATCH 5/8] devnet-5: restructure Changes sections and trim TBD/post-devnet content Rename Consensus mechanism -> Finality, PQ heartbeat -> PQ heartbeat & fork choice, drop "block-level" qualifier from Multi-message aggregation, split proof decomposability into a Proof recomposition section, and condense the Parallel finality-vote test bed bullets. Strip Configurations, Interop toolings, and Client support status sections, and reduce Summary and learnings to a TBD placeholder until the devnet is complete. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../leanConsensus/pq-interop/pq-devnet-5.md | 75 ++++--------------- 1 file changed, 13 insertions(+), 62 deletions(-) diff --git a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md index 0d2cd65..d2b80c4 100644 --- a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md +++ b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md @@ -18,34 +18,27 @@ - **Validator keys:** Each validator maintains attestation and proposer keys - **Changes** - - **Consensus mechanism:** - - 3SF-mini mechanism is removed entirely. Finality gadget integration (e.g. Minnimit, Simplex) is deferred to a future devnet. - - Head selection follows [Goldfish](https://ethresear.ch/t/unblocking-faster-finality-with-decoupled-consensus/24527), an LMD-GHOST variant with vote expiry and view-merge. + - **Finality:** + - 3SF-mini mechanism is removed entirely. - - **PQ heartbeat (committee-based block production):** + - **PQ heartbeat & fork choice:** + - Head selection follows [Goldfish](https://ethresear.ch/t/unblocking-faster-finality-with-decoupled-consensus/24527#p-59290-goldfish-1), an LMD-GHOST variant with vote expiry and view-merge. - For each slot, an `X`-validator committee is sampled. Sampling method is a protocol-level configuration option. - - Valid options: random sampling, or fixed per-client allotment (each client gets a configured number of committee seats). + - Valid options: TBD - The slot's proposer (drawn from the committee) builds a block. - The committee votes on the proposed block. Goldfish's fork-choice picks the canonical head. - Block propagates; the next slot starts. The result is a constant-latency confirmation that is reorg-resilient under honest proposals. - **Parallel finality-vote test bed:** - - In parallel with the committee path, the full validator set casts finality votes targeting the latest heartbeat tip. - - These votes: - - Propagate through the p2p network. - - Are aggregated through the same `leanMultisig`/`leanVm` pipeline used for committee attestations. - - Are NOT consumed by any gadget. They do not finalize blocks. They do not influence fork-choice. - - The sole purpose of this path is to stress-test PQ signature aggregation against full-validator-set traffic before any future finality gadget consumes it. - - - **Block-level multi-message aggregation:** - - Proposers include exactly one block-level aggregation proof per block, covering all `attestation_data` messages in that block. + - The full validator set casts finality votes targeting the latest heartbeat tip; votes propagate and aggregate through the same `leanMultisig`/`leanVm` pipeline used for committee attestations. + - Votes are not consumed by any gadget — they do not finalize blocks or influence fork-choice. Purpose is to stress-test PQ signature aggregation at full-validator-set scale. + + - **Multi-message aggregation:** + - Proposers include exactly one aggregation proof per block, covering all `attestation_data` messages in that block. - Aggregation is performed via `leanVm`'s multi-message aggregation: a single `Proof([message_0, slot_0], …, [message_n, slot_n])` is produced from the per-message aggregates. - - The resulting block-level proof is decomposable: any later party MAY recover an individual `Proof([message_i, slot_i])` from the block-level proof, without re-aggregation. No proof tree is required to expose per-message proofs to downstream consumers. - - **Block contents:** - - Each block contains exactly one block-level aggregation proof. - - Multiple block-level proofs in a block MUST be rejected at block validation time. - - The previous "one aggregate per message" structure (pq-devnet-4) is replaced by this single block-level proof. + - **Proof recomposition:** + - The resulting block-level proof is decomposable: any later party MAY recover an individual `Proof([message_i, slot_i])` from the block-level proof, without re-aggregation. No proof tree is required to expose per-message proofs to downstream consumers. - **Role behavior updates:** - **Aggregator:** Continues per-message coalescing. Forwards per-message aggregates to the proposer for block-level merging. @@ -56,8 +49,6 @@ - Finality gadget integration (Minnimit, Simplex, or other). Goldfish runs without a finality gadget in this devnet. - Goldfish ↔ finality-gadget interaction semantics. -- Dynamic committee assignment changes beyond the configured sampling method. -- Changes to validator churn/activation logic. ## Completion target @@ -72,42 +63,6 @@ TBD | leanMultisig | TBD | | | leanMetrics | TBD | | -## Configurations - -- `validator-config.yaml`: TBD - - Example committee-eligible aggregator entry: - - ```yaml - - name: node_0 - attestation_privkey: 0000000000000000010000000000000002000000000000000300000000000000 - proposer_privkey: 0000000000000000040000000000000005000000000000000600000000000000 - enrFields: - ip: 10.0.0.0 - quic: 10000 - is_aggregator: true - committee_seats: 1 - ``` - -- Heartbeat committee parameters (protocol-level, TBD): - - `COMMITTEE_SIZE`: `X` (TBD) - - `COMMITTEE_SAMPLING`: `random` | `per_client_fixed` (TBD) - -## Interop toolings - -| Tool | Link | -| ---- | ---- | -| lean-quickstart | TBD | - -## Client support status - -| Client | Implementation | Spec tests | Interop | Code | Docker | -| ------ | -------------- | ---------- | ------- | --------- | ------ | -| Ream | ⏳ | ⏳ | ⏳ | | | -| Zeam | ⏳ | ⏳ | ⏳ | | | -| Qlean | ⏳ | ⏳ | ⏳ | | | -| Lantern | ⏳ | ⏳ | ⏳ | | | -| Lighthouse | ⏳ | ⏳ | ⏳ | | | - ## Benchmarks - Hardware specs: TBD (based on [EIP-7870](https://eips.ethereum.org/EIPS/eip-7870) full node specs) @@ -117,8 +72,4 @@ TBD ## Summary and learnings -- **Single block-level aggregation proof:** Each block carries exactly one aggregation proof covering all `attestation_data` messages, replacing the per-message-aggregate model of pq-devnet-4. The proof is decomposable, so per-message proofs remain recoverable by later proposers without an explicit aggregation tree. -- **Reduced block size and bandwidth:** Collapsing per-message aggregates into a single block-level proof minimizes the proof component of the block, the largest contributor to block size in pq-devnet-4. -- **PQ heartbeat replaces 3SF-mini:** A small per-slot committee votes on the proposed block, and Goldfish fork-choice picks the canonical head from those votes. The proposer (drawn from the committee) builds the block. 3SF-mini is dropped entirely from the devnet, giving constant-latency, reorg-resilient confirmation under honest proposals — without on-chain finality, which is deferred to a future devnet. -- **Full validator set as PQ aggregation test bed:** Finality votes from the full validator set propagate, aggregate, and are then discarded. They do not finalize anything and do not influence fork-choice. This isolates PQ signature aggregation at full-validator-set scale as a measurable target before any finality gadget consumes the votes. -- **Remaining limitation:** No finality gadget runs in this devnet. Goldfish ↔ finality-gadget interaction (Minnimit, Simplex, or other) is the natural follow-up for a future devnet once those interactions are understood. +TBD once devnet is complete. From 564682d212c7a9143eb7128d60dccbd3bbbb134b Mon Sep 17 00:00:00 2001 From: unnawut Date: Mon, 4 May 2026 16:34:00 +0700 Subject: [PATCH 6/8] devnet-5: rename Parallel finality-vote test bed to Interim finality voting Also clarify Validator keys (separate keys), restore committee sampling options as a TBD line, and rewrite Proof recomposition to focus on the aggregator's recovery use case. Co-Authored-By: Claude Opus 4.7 (1M context) --- breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md index d2b80c4..0c4bd55 100644 --- a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md +++ b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md @@ -15,7 +15,7 @@ - **PQ signature:** [leanSig](https://github.com/leanEthereum/leanSig) - **Signature aggregation base:** [leanMultisig](https://github.com/leanEthereum/leanMultisig) - **Per-message aggregation:** Recursive aggregation per `attestation_data` via `leanVm` - - **Validator keys:** Each validator maintains attestation and proposer keys + - **Validator keys:** Each validator maintains separate attestation and proposer keys - **Changes** - **Finality:** @@ -24,12 +24,12 @@ - **PQ heartbeat & fork choice:** - Head selection follows [Goldfish](https://ethresear.ch/t/unblocking-faster-finality-with-decoupled-consensus/24527#p-59290-goldfish-1), an LMD-GHOST variant with vote expiry and view-merge. - For each slot, an `X`-validator committee is sampled. Sampling method is a protocol-level configuration option. - - Valid options: TBD + - TBD: random sampling, or fixed per-client allotment (each client gets a configured number of committee seats). - The slot's proposer (drawn from the committee) builds a block. - The committee votes on the proposed block. Goldfish's fork-choice picks the canonical head. - Block propagates; the next slot starts. The result is a constant-latency confirmation that is reorg-resilient under honest proposals. - - **Parallel finality-vote test bed:** + - **Interim finality voting:** - The full validator set casts finality votes targeting the latest heartbeat tip; votes propagate and aggregate through the same `leanMultisig`/`leanVm` pipeline used for committee attestations. - Votes are not consumed by any gadget — they do not finalize blocks or influence fork-choice. Purpose is to stress-test PQ signature aggregation at full-validator-set scale. @@ -38,7 +38,7 @@ - Aggregation is performed via `leanVm`'s multi-message aggregation: a single `Proof([message_0, slot_0], …, [message_n, slot_n])` is produced from the per-message aggregates. - **Proof recomposition:** - - The resulting block-level proof is decomposable: any later party MAY recover an individual `Proof([message_i, slot_i])` from the block-level proof, without re-aggregation. No proof tree is required to expose per-message proofs to downstream consumers. + - The multi-message aggregation proof is decomposable. An aggregator may recover an individual `Proof([message_i, slot_i])` from a multi-message proof in a block to aggregate more signatures for a specific message. - **Role behavior updates:** - **Aggregator:** Continues per-message coalescing. Forwards per-message aggregates to the proposer for block-level merging. From 63e3cd0594d159faa88ba3d06ccf914dd01b478d Mon Sep 17 00:00:00 2001 From: unnawut Date: Mon, 4 May 2026 16:48:36 +0700 Subject: [PATCH 7/8] devnet-5: clarify attester flow and replace leanVm with leanMultisig Restate the PQ heartbeat slot flow to specify that the proposer publishes the block and that attesters collect votes from both the prior block's aggregation proof and a dedicated gossip topic before applying Goldfish. Replace `leanVm` references with `leanMultisig`, switch "casts" to "publishes" for vote actions, and restore the deferred-finality bullet under the Finality section. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../leanConsensus/pq-interop/pq-devnet-5.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md index 0c4bd55..4d85d85 100644 --- a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md +++ b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md @@ -14,28 +14,28 @@ - **Slot interval:** 5 intervals of 800ms each - **PQ signature:** [leanSig](https://github.com/leanEthereum/leanSig) - **Signature aggregation base:** [leanMultisig](https://github.com/leanEthereum/leanMultisig) - - **Per-message aggregation:** Recursive aggregation per `attestation_data` via `leanVm` + - **Per-message aggregation:** Recursive aggregation per `attestation_data` via `leanMultisig` - **Validator keys:** Each validator maintains separate attestation and proposer keys - **Changes** - **Finality:** - 3SF-mini mechanism is removed entirely. + - Finality gadget integration is deferred to a future devnet. - **PQ heartbeat & fork choice:** - Head selection follows [Goldfish](https://ethresear.ch/t/unblocking-faster-finality-with-decoupled-consensus/24527#p-59290-goldfish-1), an LMD-GHOST variant with vote expiry and view-merge. - For each slot, an `X`-validator committee is sampled. Sampling method is a protocol-level configuration option. - TBD: random sampling, or fixed per-client allotment (each client gets a configured number of committee seats). - - The slot's proposer (drawn from the committee) builds a block. - - The committee votes on the proposed block. Goldfish's fork-choice picks the canonical head. - - Block propagates; the next slot starts. The result is a constant-latency confirmation that is reorg-resilient under honest proposals. + - The slot's proposer (drawn from the committee) builds and publishes a block. + - Each attester collects committee votes from the latest block's aggregation proof and from a dedicated committee-attestation gossip topic, applies Goldfish (vote expiry + view-merge) to pick the canonical head, and publishes its own vote. - **Interim finality voting:** - - The full validator set casts finality votes targeting the latest heartbeat tip; votes propagate and aggregate through the same `leanMultisig`/`leanVm` pipeline used for committee attestations. + - The full validator set publishes finality votes targeting the latest heartbeat tip; votes propagate and aggregate through the same `leanMultisig` pipeline used for committee attestations. - Votes are not consumed by any gadget — they do not finalize blocks or influence fork-choice. Purpose is to stress-test PQ signature aggregation at full-validator-set scale. - **Multi-message aggregation:** - Proposers include exactly one aggregation proof per block, covering all `attestation_data` messages in that block. - - Aggregation is performed via `leanVm`'s multi-message aggregation: a single `Proof([message_0, slot_0], …, [message_n, slot_n])` is produced from the per-message aggregates. + - Aggregation is performed via `leanMultisig`'s multi-message aggregation: a single `Proof([message_0, slot_0], …, [message_n, slot_n])` is produced from the per-message aggregates. - **Proof recomposition:** - The multi-message aggregation proof is decomposable. An aggregator may recover an individual `Proof([message_i, slot_i])` from a multi-message proof in a block to aggregate more signatures for a specific message. From 9882629e8415e14b05d539d017b4ffa1c0ad2375 Mon Sep 17 00:00:00 2001 From: unnawut Date: Mon, 4 May 2026 17:06:58 +0700 Subject: [PATCH 8/8] devnet-5: name the gossipsub topics attesters consume for fork-choice Replace the placeholder "dedicated committee-attestation gossip topic" with the existing aggregation and attestation_{subnet_id} topics from pq-devnet-3, and add a Gossipsub topics section noting the behavior change where attesters subscribe rather than only publish. Co-Authored-By: Claude Opus 4.7 (1M context) --- breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md index 4d85d85..602e0b8 100644 --- a/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md +++ b/breakout-rooms/leanConsensus/pq-interop/pq-devnet-5.md @@ -27,7 +27,10 @@ - For each slot, an `X`-validator committee is sampled. Sampling method is a protocol-level configuration option. - TBD: random sampling, or fixed per-client allotment (each client gets a configured number of committee seats). - The slot's proposer (drawn from the committee) builds and publishes a block. - - Each attester collects committee votes from the latest block's aggregation proof and from a dedicated committee-attestation gossip topic, applies Goldfish (vote expiry + view-merge) to pick the canonical head, and publishes its own vote. + - Each attester collects committee votes from the latest block's aggregation proof, from the `aggregation` gossipsub topic, and from its own `attestation_{subnet_id}` topic, applies Goldfish (vote expiry + view-merge) to pick the canonical head, and publishes its own vote. + + - **Gossipsub topics:** + - Attesters now subscribe to (a) the `aggregation` topic and (b) their own `attestation_{subnet_id}` topic to feed Goldfish (in pq-devnet-3 attesters only published, never subscribed). No new topics are introduced. - **Interim finality voting:** - The full validator set publishes finality votes targeting the latest heartbeat tip; votes propagate and aggregate through the same `leanMultisig` pipeline used for committee attestations.