3535 const path_to_root = "" ;
3636 const default_light_theme = "light" ;
3737 const default_dark_theme = "navy" ;
38- window . path_to_searchindex_js = "searchindex-ee57cac9 .js" ;
38+ window . path_to_searchindex_js = "searchindex-a0050628 .js" ;
3939 </ script >
4040 <!-- Start loading toc.js asap -->
41- < script src ="toc-274da26b .js "> </ script >
41+ < script src ="toc-54238a3b .js "> </ script >
4242 </ head >
4343 < body >
4444 < div id ="mdbook-help-container ">
@@ -577,9 +577,9 @@ <h2 id="attestation-pipeline"><a class="header" href="#attestation-pipeline">Att
577577 fixed points
578578</ code > </ pre >
579579< blockquote >
580- < p > < strong > In ethlambda:</ strong > The two stages are called “new” and “known” attestations, stored
581- in < code > LatestNewAttestations </ code > and < code > LatestKnownAttestations </ code > tables respectively.
582- Promotion happens at tick intervals 0 (if proposing) and 3 (end of slot).</ p >
580+ < p > < strong > In ethlambda:</ strong > The two stages are called “new” and “known” attestations, held in
581+ the in-memory < code > new_payloads </ code > and < code > known_payloads </ code > buffers of the < code > Store </ code > respectively.
582+ Promotion happens at tick intervals 0 (if proposing) and 4 (end of slot).</ p >
583583</ blockquote >
584584< h3 id ="why-staged-promotion "> < a class ="header " href ="#why-staged-promotion "> Why Staged Promotion?</ a > </ h3 >
585585< p > The staged design serves two purposes:</ p >
@@ -727,25 +727,26 @@ <h2 id="ethlambda-implementation-reference"><a class="header" href="#ethlambda-i
727727< p > This section covers ethlambda-specific details: scheduling, Beacon Chain differences,
728728source code locations, and performance.</ p >
729729< h3 id ="tick-based-scheduling "> < a class ="header " href ="#tick-based-scheduling "> Tick-Based Scheduling</ a > </ h3 >
730- < p > ethlambda divides time into < strong > 4-second slots</ strong > , each split into < strong > 4 intervals</ strong > (1 second
731- each). Fork choice operations are scheduled at specific intervals:</ p >
732- < pre > < code class ="language-text "> ONE SLOT (4 seconds)
733- ┌──────────────┬──────────────┬──────────────┬──────────────┐
734- │ Interval 0 │ Interval 1 │ Interval 2 │ Interval 3 │
735- │ (t+0s) │ (t+1s) │ (t+2s) │ (t+3s) │
736- ├──────────────┼──────────────┼──────────────┼──────────────┤
737- │ │ │ │ │
738- │ IF PROPOSER: │ NON-PROPOSER:│ update_safe │ accept_new │
739- │ accept new │ produce │ _target() │ _attestations│
740- │ attestations│ attestation │ │ () │
741- │ + propose │ │ (2/3 vote │ │
742- │ block │ │ threshold) │ update_head()│
743- │ │ │ │ │
744- │ update_head()│ │ │ │
745- │ │ │ │ │
746- └──────────────┴──────────────┴──────────────┴──────────────┘
747-
748- ◄─────────────── Slot N ──────────────────────────────────────►
730+ < p > ethlambda divides time into < strong > 4-second slots</ strong > , each split into < strong > 5 intervals</ strong > (800 ms
731+ each), as described in < a href ="./slots_and_intervals.html "> Slots and Intervals</ a > . Fork choice
732+ operations are scheduled at specific intervals:</ p >
733+ < pre > < code class ="language-text "> ONE SLOT (4000 ms)
734+ ┌────────────┬────────────┬────────────┬────────────┬────────────┐
735+ │ Interval 0 │ Interval 1 │ Interval 2 │ Interval 3 │ Interval 4 │
736+ │ t+0 ms │ t+800 ms │ t+1600 ms │ t+2400 ms │ t+3200 ms │
737+ ├────────────┼────────────┼────────────┼────────────┼────────────┤
738+ │ │ │ │ │ │
739+ │IF PROPOSER:│ ALL │ aggregators│update_safe │accept_new_ │
740+ │ accept new │ VALIDATORS:│ publish │_target() │attestations│
741+ │ attestation│ produce │ aggregated │ │() │
742+ │ + propose │ attestation│ attestation│ (2/3 vote │ │
743+ │ block │ │ │ threshold) │update_head │
744+ │ │ │ │ │() │
745+ │update_head │ │ │ │ │
746+ │() │ │ │ │ │
747+ └────────────┴────────────┴────────────┴────────────┴────────────┘
748+
749+ ◄─────────────── Slot N ──────────────────────────────────────────►
749750</ code > </ pre >
750751< p > < strong > Detailed sequence:</ strong > </ p >
751752< pre > < code class ="language-text "> Interval 0 ─ Slot boundary
@@ -759,20 +760,25 @@ <h3 id="tick-based-scheduling"><a class="header" href="#tick-based-scheduling">T
759760 │
760761 Interval 1 ─ Attestation production
761762 │
762- ├── Non-proposers :
763+ ├── All validators, proposer included :
763764 │ └── Create attestation with:
764765 │ • head = current fork choice head (newest head)
765766 │ • target = derived from safe_target (for 3SF-mini)
766767 │ • source = latest_justified checkpoint
767768 │ Publish attestation to gossipsub
768769 │
769- Interval 2 ─ Safe target update
770+ Interval 2 ─ Aggregation
771+ │
772+ ├── Aggregators: aggregate their subnet's gossip signatures
773+ │ └── Publish the aggregated attestation to gossipsub
774+ │
775+ Interval 3 ─ Safe target update
770776 │
771777 ├── Recalculate safe_target using 2/3 supermajority threshold
772778 │ └── Only blocks with ≥ ⌈2V/3⌉ attestation weight qualify
773779 │ (V = total validators)
774780 │
775- Interval 3 ─ End of slot
781+ Interval 4 ─ End of slot
776782 │
777783 ├── Promote new → known attestations
778784 └── Run fork choice → update_head()
0 commit comments