From eeb72b69402aad57da7724d063d14499d8b9f9ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Wed, 28 Oct 2026 12:46:35 -0300 Subject: [PATCH 1/2] docs: describe ethlambda as a Beacon Chain and Lean Chain client The project's self-descriptions (README, book, CONTRIBUTING, Docker label, review prompt, infographics, CLAUDE.md) still called ethlambda a Lean consensus client only, and CLAUDE.md said it was not to be confused with a Beacon Chain client. `ethlambda beacon` now follows the Beacon Chain, so those statements are wrong. The LMD-GHOST comparison table also credited "ethlambda" with having no proposer boost or equivocation discounting, which is only true of the Lean Chain: the beacon fork choice implements both. It is now scoped to the Lean Chain. The book introduction gains the Beacon Chain part SUMMARY.md already lists. --- .github/prompts/ai-review.md | 2 +- CLAUDE.md | 5 +++-- CONTRIBUTING.md | 2 +- Dockerfile | 2 +- README.md | 8 ++++++-- book.toml | 2 +- docs/infographics/3sf-mini-infographic.html | 2 +- docs/infographics/ethlambda_architecture.html | 2 +- docs/introduction.md | 13 ++++++++----- docs/lmd_ghost.md | 16 +++++++++------- 10 files changed, 32 insertions(+), 22 deletions(-) diff --git a/.github/prompts/ai-review.md b/.github/prompts/ai-review.md index 5abef1e7f..c7cf28cdc 100644 --- a/.github/prompts/ai-review.md +++ b/.github/prompts/ai-review.md @@ -1,4 +1,4 @@ -You are a senior code reviewer for ethlambda, a minimalist Lean Ethereum consensus client written in Rust. +You are a senior code reviewer for ethlambda, a minimalist Beacon Chain and Lean Chain client written in Rust. Review this PR focusing on: - Code correctness and potential bugs diff --git a/CLAUDE.md b/CLAUDE.md index f03cd2296..a171704a8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,7 +1,8 @@ # ethlambda Development Guide -Development reference for ethlambda - minimalist Lean Ethereum consensus client. -Not to be confused with Ethereum consensus clients AKA Beacon Chain clients AKA Eth2 clients. +Development reference for ethlambda - minimalist Beacon Chain and Lean Chain client. +The two are different protocols sharing one binary: `ethlambda beacon` follows the +Ethereum Beacon Chain (AKA Eth2), and `ethlambda node` runs Lean consensus. ## Quick Reference diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff9c6b7d0..02955c4c5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing to ethlambda -Thanks for your interest in contributing to ethlambda — a minimalist Lean Consensus client for Ethereum, written in Rust. +Thanks for your interest in contributing to ethlambda — a minimalist Beacon Chain and Lean Chain client for Ethereum, written in Rust. Before diving in, we recommend reading [our introductory blog post](https://blog.lambdaclass.com/introducing-ethlambda-a-lean-consensus-client-for-ethereums-next-era/) to understand the project's goals and philosophy. diff --git a/Dockerfile b/Dockerfile index fae069bf3..55ef06559 100644 --- a/Dockerfile +++ b/Dockerfile @@ -66,7 +66,7 @@ FROM ubuntu AS runtime WORKDIR /app LABEL org.opencontainers.image.source=https://github.com/lambdaclass/ethlambda -LABEL org.opencontainers.image.description="A minimalist and fast Lean Consensus client written in Rust by LambdaClass" +LABEL org.opencontainers.image.description="A minimalist and fast Beacon Chain and Lean Chain client written in Rust by LambdaClass" LABEL org.opencontainers.image.licenses="MIT" ARG GIT_COMMIT=unknown diff --git a/README.md b/README.md index 69ff6a905..0e82f828b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # ethlambda -Minimalist, fast and modular implementation of the Lean Ethereum client written in Rust. +Minimalist, fast and modular implementation of a Beacon Chain and Lean Chain client written in Rust. 🌐 Visit our website at [**ethlambda.xyz**](https://ethlambda.xyz) to learn more about the project. @@ -316,7 +316,11 @@ Full documentation is available in the [`docs/`](./docs) directory. Please refer ## Current status -The client implements the core features of a Lean Ethereum consensus client: +ethlambda is a Beacon Chain and Lean Chain client. On the Beacon Chain +(`ethlambda beacon`), it follows a network from a checkpoint-synced anchor and serves +the standard Beacon API; see the [Beacon Chain follower](#beacon-chain-follower) +quickstart. On the Lean Chain (`ethlambda node`), it implements the core features of a +Lean consensus client: - **Networking** — libp2p peer connections, STATUS message handling, gossipsub for blocks and attestations - **State management** — genesis state generation, state transition function, block processing diff --git a/book.toml b/book.toml index a34ab2e50..df29912fb 100644 --- a/book.toml +++ b/book.toml @@ -3,7 +3,7 @@ authors = ["lambdaclass"] language = "en" src = "docs" title = "ethlambda" -description = "Minimalist, fast and modular implementation of the Lean Ethereum client written in Rust" +description = "Minimalist, fast and modular implementation of a Beacon Chain and Lean Chain client written in Rust" [rust] edition = "2024" diff --git a/docs/infographics/3sf-mini-infographic.html b/docs/infographics/3sf-mini-infographic.html index 017bef4b6..2ab46db60 100644 --- a/docs/infographics/3sf-mini-infographic.html +++ b/docs/infographics/3sf-mini-infographic.html @@ -732,7 +732,7 @@

Justification & Finalization

diff --git a/docs/infographics/ethlambda_architecture.html b/docs/infographics/ethlambda_architecture.html index 95d4ad55b..2bd2bffaf 100644 --- a/docs/infographics/ethlambda_architecture.html +++ b/docs/infographics/ethlambda_architecture.html @@ -246,7 +246,7 @@

ethlambda

-
Minimalist Lean Ethereum Consensus Client in Rust
+
Minimalist Beacon Chain and Lean Chain Client in Rust
Rust diff --git a/docs/introduction.md b/docs/introduction.md index c9ac04d48..01145be79 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -4,21 +4,24 @@ # Introduction -**ethlambda** is a minimalist, fast and modular implementation of the Lean Ethereum -consensus client, written in Rust. +**ethlambda** is a minimalist, fast and modular implementation of a Beacon Chain and +Lean Chain client, written in Rust. This book collects the design notes and operator-facing references for ethlambda. -It is split into four parts: +It is split into five parts: - **Design** describes the shape of a running node: the [architecture](./architecture.md) of its actors, workers and shared storage, and how they are wired together at startup. -- **Consensus** explains how the chain advances: the +- **Consensus** explains how the Lean Chain advances: the [slot and interval structure](./slots_and_intervals.md) that schedules every validator duty, the [3SF-mini](./3sf_mini.md) justification and finalization rules, and the [LMD-GHOST](./lmd_ghost.md) fork choice algorithm. These documents are implementation-agnostic; ethlambda-specific behaviour is called out in blockquotes. +- **Beacon Chain** covers the Ethereum Beacon Chain side: its + [state transition](./beacon_stf.md), the [mainnet wire](./beacon_wire.md), + and the [execution layer pairing](./beacon_engine.md). - **Operations** documents observable surfaces of a running node: [Prometheus metrics](./metrics.md), [checkpoint sync](./checkpoint_sync.md), and the [fork choice visualization](./fork_choice_visualization.md) served @@ -48,7 +51,7 @@ into the rendered output: ## Related projects -ethlambda is one of several Lean Ethereum consensus clients under active development. +On the Lean Chain, ethlambda is one of several clients under active development. For comparison and cross-client testing: - [zeam](https://github.com/blockblaz/zeam) (Zig) diff --git a/docs/lmd_ghost.md b/docs/lmd_ghost.md index 9319f04d6..6c77ad84d 100644 --- a/docs/lmd_ghost.md +++ b/docs/lmd_ghost.md @@ -684,10 +684,12 @@ at specific intervals: ### Differences from the Ethereum Beacon Chain -ethlambda is a lean consensus client with several simplifications compared to the -Ethereum Beacon Chain: +Lean consensus simplifies several parts of the Ethereum Beacon Chain's fork choice. This +section describes ethlambda's Lean Chain (`ethlambda node`); its Beacon Chain follower +(`ethlambda beacon`) runs the Beacon Chain's own fork choice, proposer boost and +equivocation discounting included. -| Aspect | ethlambda | Ethereum Beacon Chain | +| Aspect | Lean Chain | Ethereum Beacon Chain | |--------|-----------|----------------------| | **Vote weight** | Equal: 1 vote per validator | Proportional to effective balance (up to 32 ETH) | | **Proposer boost** | None | Yes: newly proposed blocks get temporary bonus weight | @@ -697,18 +699,18 @@ Ethereum Beacon Chain: | **Slot duration** | 4 seconds (configurable) | 12 seconds | **No proposer boost.** The Beacon Chain adds a "proposer boost", a temporary weight bonus -given to newly proposed blocks to prevent balancing attacks. ethlambda does not implement -this. Instead, proposer fairness is handled through the two-stage attestation pipeline +given to newly proposed blocks to prevent balancing attacks. The Lean Chain has no such +boost. Instead, proposer fairness is handled through the two-stage attestation pipeline (the proposer's own attestation enters as "new", not "known"). **No balance weighting.** In the Beacon Chain, a validator with 32 ETH of effective balance -has more fork choice weight than one with 16 ETH. In ethlambda, every validator has exactly +has more fork choice weight than one with 16 ETH. On the Lean Chain, every validator has exactly equal weight (1 vote = 1 unit of weight), simplifying the algorithm and analysis. **No equivocation discounting.** The Beacon Chain's fork choice detects validators who equivocate (attest to conflicting blocks in the same slot) and excludes their weight. This addresses the "nothing at stake" problem where validators can costlessly vote for multiple -forks. ethlambda does not implement this in its fork choice. +forks. The Lean Chain's fork choice does not do this. ### Key Files From 9c6d0a691f3c3d8845c6e24d946ab56e14f7e2b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Wed, 28 Oct 2026 12:58:45 -0300 Subject: [PATCH 2/2] docs: scope Lean-only explanations to the Lean Chain Several pages still spoke of "ethlambda" or "the node" where they meant the Lean Chain alone, and some of those statements are false for the Beacon Chain side: the LMD-GHOST notes say every validator has equal weight, 3SF-mini is described as ethlambda's finality gadget, and the architecture page describes only the Lean node without saying so. The "In ethlambda" notes in the Consensus pages become "In ethlambda's Lean Chain", and the architecture, benchmarking, metrics and fork choice visualization pages say which chain they describe. The Lean content is unchanged. --- README.md | 4 ++-- docs/3sf_mini.md | 17 +++++++++-------- docs/architecture.md | 6 ++++++ docs/benchmarking.md | 12 ++++++------ docs/fork_choice_visualization.md | 4 +++- docs/introduction.md | 3 ++- docs/lmd_ghost.md | 18 ++++++++++-------- docs/metrics.md | 4 ++-- docs/slots_and_intervals.md | 8 ++++---- 9 files changed, 44 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 0e82f828b..0eee80381 100644 --- a/README.md +++ b/README.md @@ -184,8 +184,8 @@ cargo build --release #### `ethlambda node` — the Lean consensus chain -This is what the rest of this README is about, and it is the default: a bare -flag list with no sub-command still runs the node, so existing scripts and +The [devnet section](#running-in-a-devnet) below runs this sub-command, and it +is the default: a bare flag list with no sub-command still runs the node, so existing scripts and Docker entrypoints keep working unchanged. It needs a genesis config, a validator registry, a bootnode list and this diff --git a/docs/3sf_mini.md b/docs/3sf_mini.md index 4f2aae7f3..b85936019 100644 --- a/docs/3sf_mini.md +++ b/docs/3sf_mini.md @@ -1,8 +1,9 @@ # 3SF-mini: Justification & Finalization -ethlambda uses **3SF-mini** (Three-Stage Finality, minimal version) for justification -and finalization. Unlike the Ethereum Beacon Chain's epoch-based Casper FFG, 3SF-mini -operates at the **slot level**: any slot can be justified, not just epoch boundaries. +ethlambda's Lean Chain (`ethlambda node`) uses **3SF-mini** (Three-Stage Finality, +minimal version) for justification and finalization. Unlike the Ethereum Beacon Chain's +epoch-based Casper FFG, which `ethlambda beacon` follows, 3SF-mini operates at the +**slot level**: any slot can be justified, not just epoch boundaries. ## Quick Example: Three Slots to Finality @@ -78,7 +79,7 @@ A checkpoint becomes **justified** when at least two-thirds of validators attest The threshold is computed as: `3 × vote_count >= 2 × validator_count` -> **In ethlambda:** Justification and finalization are processed inside +> **In ethlambda's Lean Chain:** Justification and finalization are processed inside > `process_attestations()` in `crates/blockchain/state_transition/src/lib.rs`, > called from `process_block()`. The supermajority check is > `3 * vote_count >= 2 * validator_count`. @@ -98,7 +99,7 @@ finalized slot. This is the novel part of 3SF-mini. A slot is **justifiable** if `delta = slot - finalized_slot` matches any rule: -> **In ethlambda:** The function `slot_is_justifiable_after(slot, finalized_slot)` in +> **In ethlambda's Lean Chain:** The function `slot_is_justifiable_after(slot, finalized_slot)` in > `crates/blockchain/state_transition/src/lib.rs` implements this check. It uses > `isqrt()` for perfect square detection and the identity `4n(n+1) + 1 = (2n+1)²` > for pronic number detection. @@ -155,7 +156,7 @@ whose target is the **next justifiable slot**. In other words, there must be **n justifiable slots between source and target**: the two must be consecutive entries in the justifiability schedule. -> **In ethlambda:** The `try_finalize()` function iterates over slots between +> **In ethlambda's Lean Chain:** The `try_finalize()` function iterates over slots between > source and target and calls `slot_is_justifiable_after` on each. If any slot > is justifiable, finalization fails (source and target aren't consecutive). > The check uses `original_finalized_slot` (the finalized slot at the start of @@ -304,7 +305,7 @@ When finalization advances, the following cleanup occurs: - Gossip signatures and aggregation proofs for finalized blocks are cleaned up - Future fork choice runs start from the finalized slot's successor -> **In ethlambda:** The `justified_slots` bitlist uses relative indexing (index 0 = +> **In ethlambda's Lean Chain:** The `justified_slots` bitlist uses relative indexing (index 0 = > `finalized_slot + 1`). When finalization advances, `shift_window()` in > `crates/blockchain/state_transition/src/justified_slots_ops.rs` drops the > now-finalized prefix. The attestation target is also walked back to the nearest @@ -342,7 +343,7 @@ behind the head. The attestation **target** is derived by walking back from the toward the safe target (max 3 steps), then to the nearest justifiable slot. See [Safe Target Selection](lmd_ghost.md#safe-target-selection) for details. -> **In ethlambda:** `get_attestation_target()` in `crates/blockchain/src/store.rs` +> **In ethlambda's Lean Chain:** `get_attestation_target()` in `crates/blockchain/src/store.rs` > implements this walk-back. `JUSTIFICATION_LOOKBACK_SLOTS = 3` provides a liveness > guarantee: even if the safe target is stuck, the target eventually advances once > the head moves far enough ahead. diff --git a/docs/architecture.md b/docs/architecture.md index 7f889d4ec..9a4df60e0 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -12,6 +12,12 @@ genservers: each owns its state, and the only way in is a message. Everything else hangs off those two: an aggregation worker on a blocking thread, the libp2p swarm loop on its own task, and the axum servers that expose the node to the outside world. +This page describes the Lean Chain node, `ethlambda node`. `ethlambda beacon` runs the +same two actors over its own `Store`, but its chain actor (`BlockChain::spawn_beacon`) has +no validator keys, no aggregator role and no duties for the sync gate to hold back: it +imports blocks and runs the Beacon Chain's fork choice. [The mainnet wire](./beacon_wire.md) +and [Beacon Chain state transition](./beacon_stf.md) cover that side. + > Note: for what a genserver is, read [this blogpost on the `spawned` crate](https://blog.lambdaclass.com/introducing-spawned-erlang-style-actors-for-rust/). ```text diff --git a/docs/benchmarking.md b/docs/benchmarking.md index 7a69b858a..ae50db389 100644 --- a/docs/benchmarking.md +++ b/docs/benchmarking.md @@ -1,12 +1,12 @@ # Benchmarking -`ethlambda benchmark` measures two things the node does in production, each -against a reproducible offline workload, with no devnet running: +`ethlambda benchmark` measures two things the node does in production, one per +chain, each against a reproducible offline workload, with no devnet running: -- **`synthetic`**: block building, the way the node performs it when it - proposes, on a synthetic in-memory chain built for the run. -- **`import`**: block import, replaying a corpus of real blocks through the - node's own import path. See [Import workload](#import-workload) below. +- **`synthetic`**: Lean Chain block building, the way `ethlambda node` performs + it when it proposes, on a synthetic in-memory chain built for the run. +- **`import`**: Beacon Chain block import, replaying a corpus of real blocks + through `ethlambda beacon`'s own import path. See [Import workload](#import-workload) below. Both are otherwise only observable through the Prometheus histograms a live node exports. Those are noisy, depend on whatever the network happened to be diff --git a/docs/fork_choice_visualization.md b/docs/fork_choice_visualization.md index f30928cf7..985d0a118 100644 --- a/docs/fork_choice_visualization.md +++ b/docs/fork_choice_visualization.md @@ -9,7 +9,9 @@ A browser-based real-time visualization of the LMD GHOST fork choice tree, serve | `GET /lean/v0/fork_choice/ui` | Interactive D3.js visualization page | | `GET /lean/v0/fork_choice` | JSON snapshot of the fork choice tree | -Both endpoints are served on the API port (`--api-port`, default `5052`). +Both endpoints are served on the API port (`--api-port`, default `5052`), by `ethlambda node` +only: they show the Lean Chain's fork choice tree, and on `ethlambda beacon` every `/lean/v0` +path returns 404. ## Quick Start diff --git a/docs/introduction.md b/docs/introduction.md index 01145be79..512e749a1 100644 --- a/docs/introduction.md +++ b/docs/introduction.md @@ -27,7 +27,8 @@ It is split into five parts: and the [fork choice visualization](./fork_choice_visualization.md) served by the API. - **Development** collects notes for contributors, starting with the - [spec deviations](./spec_deviations.md) where ethlambda departs from leanSpec. + [spec deviations](./spec_deviations.md) where ethlambda departs from leanSpec (Lean + Chain) or consensus-specs (Beacon Chain). For build and contribution instructions, see the [`README`](https://github.com/lambdaclass/ethlambda/blob/main/README.md) and diff --git a/docs/lmd_ghost.md b/docs/lmd_ghost.md index 6c77ad84d..3d767ab03 100644 --- a/docs/lmd_ghost.md +++ b/docs/lmd_ghost.md @@ -5,8 +5,10 @@ fork choice algorithm works. LMD-GHOST is the fork choice rule used by Ethereum' and its derivatives. Each validator's **latest attestation** is their single active vote, and the algorithm follows the heaviest branch at every fork. -This document is implementation-agnostic, with ethlambda-specific details called out in -blockquotes marked **"In ethlambda"**. +This document is implementation-agnostic, with details of ethlambda's Lean Chain +(`ethlambda node`) called out in blockquotes marked **"In ethlambda's Lean Chain"**. +ethlambda's Beacon Chain follower (`ethlambda beacon`) runs the consensus-specs fork +choice instead; see [its section of the Beacon Chain state transition](./beacon_stf.md#fork-choice). > Much of the conceptual framing in this document is inspired by Ben Edgington's > [Eth2 Book](https://eth2book.info/), particularly the @@ -176,7 +178,7 @@ the chain. | Attestations | Latest message per validator: validator_index → attestation | | Min score | Minimum weight for a branch to be considered (0 = follow any branch; higher = conservative) | -> **In ethlambda:** The function is `compute_lmd_ghost_head()` in +> **In ethlambda's Lean Chain:** The function is `compute_lmd_ghost_head()` in > `crates/blockchain/fork_choice/src/lib.rs`. The block tree comes from > the `LiveChain` storage index, and `min_score` is 0 for head selection > or ⌈2V/3⌉ for safe target computation. @@ -207,7 +209,7 @@ effective balance is added instead. └ start_root (not weighted, used as the descent origin) ``` -> **In ethlambda:** All validators have equal weight (+1 per vote). The Ethereum +> **In ethlambda's Lean Chain:** All validators have equal weight (+1 per vote). The Ethereum > Beacon Chain instead weights votes by effective balance (up to 2048 ETH). Then, **greedily descend.** Starting from the start root, at each node pick the child @@ -399,7 +401,7 @@ finality gadget (e.g., Casper FFG in the Ethereum Beacon Chain, or [3SF-mini](3s └────────────────────────────────────────────────────┘ ``` -> **In ethlambda:** The finality gadget is [3SF-mini](3sf_mini.md), which operates at +> **In ethlambda's Lean Chain:** The finality gadget is [3SF-mini](3sf_mini.md), which operates at > the slot level rather than epoch boundaries. The two layers interact: LMD-GHOST runs its greedy descent **starting from the latest @@ -422,7 +424,7 @@ tree.** Without finality, fork choice would need to consider every block since g and the tree would grow without bound. With finality, all blocks at or before the finalized checkpoint can be discarded from the fork choice's working set. -> **In ethlambda:** The `LiveChain` index (the in-memory block tree used by fork choice) +> **In ethlambda's Lean Chain:** The `LiveChain` index (the in-memory block tree used by fork choice) > is pruned every time finalization advances, keeping it bounded to only the non-finalized > portion of the chain. @@ -455,7 +457,7 @@ designated moments. This ensures all validators operate on a consistent view. fixed points ``` -> **In ethlambda:** The two stages are called "new" and "known" attestations, held in +> **In ethlambda's Lean Chain:** The two stages are called "new" and "known" attestations, held in > the in-memory `new_payloads` and `known_payloads` buffers of the `Store` respectively. > Promotion happens at tick intervals 0 (if proposing) and 4 (end of slot). @@ -576,7 +578,7 @@ Reorgs are normal during transient network conditions but should be rare in stab operation. They cannot cross a finalization boundary: once a block is finalized, it is permanently part of the canonical chain. -> **In ethlambda:** Reorgs are detected by checking whether the old and new heads +> **In ethlambda's Lean Chain:** Reorgs are detected by checking whether the old and new heads > share a common prefix, and tracked via Prometheus metrics > (`lean_fork_choice_reorgs_total`). diff --git a/docs/metrics.md b/docs/metrics.md index 662e4f18e..b36138578 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -2,9 +2,9 @@ We collect various metrics and serve them via a Prometheus-compatible HTTP endpoint at `http://:/metrics` (default: `http://127.0.0.1:5054/metrics`). -A ready-to-use Grafana + Prometheus monitoring stack with pre-configured [leanMetrics](https://github.com/leanEthereum/leanMetrics) dashboards is available in [lean-quickstart](https://github.com/blockblaz/lean-quickstart). +For the Lean Chain, a ready-to-use Grafana + Prometheus monitoring stack with pre-configured [leanMetrics](https://github.com/leanEthereum/leanMetrics) dashboards is available in [lean-quickstart](https://github.com/blockblaz/lean-quickstart). -The exposed metrics follow [the leanMetrics specification](https://github.com/leanEthereum/leanMetrics/blob/2719baad8351c9ad5eaf3c8621f33fcec20a1dc7/metrics.md), with some metrics not yet implemented. We have a full list of implemented metrics below, with a checkbox indicating whether each metric is currently supported or not. +The Lean Chain's metrics follow [the leanMetrics specification](https://github.com/leanEthereum/leanMetrics/blob/2719baad8351c9ad5eaf3c8621f33fcec20a1dc7/metrics.md), with some metrics not yet implemented. The Beacon Chain side has no such specification: its own metrics are among the [Custom Metrics](#custom-metrics-non-leanmetrics) (the "Beacon" sections and Data Column Sidecars), and the validator client's are under [Validator client](#validator-client). We have a full list of implemented metrics below, with a checkbox indicating whether each metric is currently supported or not. ## Node Info Metrics diff --git a/docs/slots_and_intervals.md b/docs/slots_and_intervals.md index e658b3784..6b3a24a0f 100644 --- a/docs/slots_and_intervals.md +++ b/docs/slots_and_intervals.md @@ -33,7 +33,7 @@ knows which duty is due. The order is a dependency chain, since each interval co what the previous one produced. A duty that overruns its interval is not rescheduled: it lands late, and the slot moves on without it. -> **In ethlambda:** the intervals are the `SlotInterval` variants in +> **In ethlambda's Lean Chain:** the intervals are the `SlotInterval` variants in > `crates/blockchain/src/lib.rs`. `INTERVALS_PER_SLOT` is fixed in > `crates/common/types/src/constants.rs` (each interval carries a distinct duty, so > the count is not a knob), while the slot duration is read from the network's config @@ -59,7 +59,7 @@ Genesis occupies slot 0, so proposals start at slot 1, and nothing forces a slot filled: a proposer that is offline or too slow leaves an empty slot, and the next block simply points its parent root at an older block. -> **In ethlambda:** block proposal is merged into the previous slot's head-update +> **In ethlambda's Lean Chain:** block proposal is merged into the previous slot's head-update > interval: the proposer advances its store to the next slot, builds the block there, > and holds publication until the slot boundary. That buys the build one extra interval > of headroom and leaves no actor work at the block-proposal tick itself. @@ -71,7 +71,7 @@ append to it a `(source, target)` [finality vote](./3sf_mini.md#recap-attestatio These votes are in aggregation subnets and are imported by aggregators. Aggregators verify the votes in their subnet and store them for later aggregation. -> **In ethlambda:** a validator's subnet is `validator_index % attestation_committee_count`, +> **In ethlambda's Lean Chain:** a validator's subnet is `validator_index % attestation_committee_count`, > and a node only aggregates for subnets it subscribed to at startup. Aggregation is also > gated on the aggregator role, seeded by `--is-aggregator` and flippable at runtime > through the admin API. A chain whose validators all decline the role still gossips votes @@ -89,7 +89,7 @@ into one proof is the heaviest recurring computation in the client. It is also w block affordable, since a block carrying raw votes would need one full XMSS signature per voter, quickly going over the network bandwidth limit. -> **In ethlambda:** the proofs run on an off-thread worker so the blockchain actor's +> **In ethlambda's Lean Chain:** the proofs run on an off-thread worker so the blockchain actor's > message loop stays responsive, and a session may start up to `EARLY_AGGREGATION_WINDOW` > before the interval boundary once two thirds of the signatures are in. At the session's > soft deadline the actor stops handing out new jobs, but a proof already in flight