You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<!--
Please read and fill out this form before submitting your PR.
Please make sure you have reviewed our contributors guide before
submitting your
first PR.
NOTE: PR titles should follow semantic commits:
https://www.conventionalcommits.org/en/v1.0.0/
-->
## Overview
<!--
Please provide an explanation of the PR, including the appropriate
context,
background, goal, and rationale. If there is an issue with this
information,
please provide a tl;dr and link the issue.
Ex: Closes #<issue number>
-->
Copy file name to clipboardExpand all lines: docs/learn/specs/block-manager.md
+10-3Lines changed: 10 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -595,20 +595,20 @@ When both header and data are available for a height:
595
595
596
596
The components communicate through well-defined interfaces:
597
597
598
-
#### Executor ↔ Core Executor:
598
+
#### Executor ↔ Core Executor
599
599
600
600
-`InitChain`: initializes the chain state with the given genesis time, initial height, and chain ID using `InitChainSync` on the executor to obtain initial `appHash` and initialize the state.
601
601
-`CreateBlock`: prepares a block with transactions from the provided batch data.
602
602
-`ApplyBlock`: validates the block, executes the block (apply transactions), captures validator updates, and returns updated state.
603
603
-`SetFinal`: marks the block as final when both its header and data are confirmed on the DA layer.
604
604
-`GetTxs`: retrieves transactions from the application (used by Reaper component).
605
605
606
-
#### Reaper ↔ Sequencer:
606
+
#### Reaper ↔ Sequencer
607
607
608
608
-`GetNextBatch`: retrieves the next batch of transactions to include in a block.
609
609
-`VerifyBatch`: validates that a batch came from the expected sequencer.
610
610
611
-
#### Submitter/Syncer ↔ DA Layer:
611
+
#### Submitter/Syncer ↔ DA Layer
612
612
613
613
-`Submit`: submits headers or data blobs to the DA network.
614
614
-`Get`: retrieves headers or data blobs from the DA network.
@@ -617,17 +617,20 @@ The components communicate through well-defined interfaces:
617
617
## Assumptions and Considerations
618
618
619
619
### Component Architecture
620
+
620
621
- The block package uses a modular component architecture instead of a monolithic manager
621
622
- Components are created based on node type: aggregator nodes get all components, non-aggregator nodes only get synchronization components
622
623
- Each component has a specific responsibility and communicates through well-defined interfaces
623
624
- Components share a common Cache Manager for coordination and state tracking
624
625
625
626
### Initialization and State Management
627
+
626
628
- Components load the initial state from the local store and use genesis if not found in the local store, when the node (re)starts
627
629
- The default mode for aggregator nodes is normal (not lazy)
628
630
- Components coordinate through channels and shared cache structures
629
631
630
632
### Block Production (Executor Component)
633
+
631
634
- The Executor can produce empty blocks
632
635
- In lazy aggregation mode, the Executor maintains consistency with the DA layer by producing empty blocks at regular intervals, ensuring a 1:1 mapping between DA layer blocks and execution layer blocks
633
636
- The lazy aggregation mechanism uses a dual timer approach:
@@ -637,6 +640,7 @@ The components communicate through well-defined interfaces:
637
640
- Transaction notifications from the `Reaper` to the `Executor` are handled via a non-blocking notification channel (`txNotifyCh`) to prevent backpressure
638
641
639
642
### DA Submission (Submitter Component)
643
+
640
644
- The Submitter enforces `MaxPendingHeadersAndData` limit to prevent unbounded growth of pending queues during DA submission issues
641
645
- Headers and data are submitted separately to the DA layer using different namespaces, supporting the header/data separation architecture
642
646
- The Cache Manager uses persistent caches for headers and data to track seen items and DA inclusion status
@@ -645,16 +649,19 @@ The components communicate through well-defined interfaces:
645
649
- Gas price management in the Submitter includes automatic adjustment with `GasMultiplier` on DA submission retries
646
650
647
651
### Storage and Persistence
652
+
648
653
- Components use persistent storage (disk) when the `root_dir` and `db_path` configuration parameters are specified in `config.yaml` file under the app directory. If these configuration parameters are not specified, the in-memory storage is used, which will not be persistent if the node stops
649
654
- The Syncer does not re-apply blocks when they transition from soft confirmed to DA included status. The block is only marked DA included in the caches
650
655
- Header and data stores use separate prefixes for isolation in the underlying database
651
656
- The genesis `ChainID` is used to create separate `PubSubTopID`s for headers and data in go-header
652
657
653
658
### P2P and Synchronization
659
+
654
660
- Block sync over the P2P network works only when a full node is connected to the P2P network by specifying the initial seeds to connect to via `P2PConfig.Seeds` configuration parameter when starting the full node
655
661
- Node's context is passed down to all components to support graceful shutdown and cancellation
656
662
657
663
### Architecture Design Decisions
664
+
658
665
- The Executor supports custom signature payload providers for headers, enabling flexible signing schemes
659
666
- The component architecture supports the separation of header and data structures in Evolve. This allows for expanding the sequencing scheme beyond single sequencing and enables the use of a decentralized sequencer mode. For detailed information on this architecture, see the [Header and Data Separation ADR](../../adr/adr-014-header-and-data-separation.md)
660
667
- Components process blocks with a minimal header format, which is designed to eliminate dependency on CometBFT's header format and can be used to produce an execution layer tailored header if needed. For details on this header structure, see the [Evolve Minimal Header](../../adr/adr-015-rollkit-minimal-header.md) specification
Copy file name to clipboardExpand all lines: docs/learn/specs/full_node.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,13 +35,15 @@ The [Store] is initialized with `DefaultStore`, an implementation of the [store
35
35
The [Block Components] provide a modular architecture for managing block-related operations. Instead of a single monolithic manager, the system uses specialized components:
36
36
37
37
**For Aggregator Nodes:**
38
+
38
39
-**Executor**: Block production (normal and lazy modes) and state transitions
39
40
-**Reaper**: Transaction collection and submission to sequencer
40
41
-**Submitter**: Header and data submission to DA layer
41
42
-**Syncer**: Block retrieval and synchronization from DA and P2P
42
43
-**Cache Manager**: Coordination and tracking across all components
43
44
44
45
**For Non-Aggregator Nodes:**
46
+
45
47
-**Syncer**: Block retrieval and synchronization from DA and P2P
46
48
-**Cache Manager**: Tracking and caching of synchronized blocks
0 commit comments