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
Copy file name to clipboardExpand all lines: docs/adr/adr-019-forced-inclusion-mechanism.md
+5-17Lines changed: 5 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -686,7 +686,7 @@ based_sequencer = true # Use based sequencer
686
686
687
687
### Full Node Verification Flow
688
688
689
-
1. Receive block from DA or P2P
689
+
1. Receive block from DA
690
690
2. Before applying block:
691
691
a. Fetch forced inclusion txs from DA at block's DA height (epoch-based)
692
692
b. Build map of transactions in block
@@ -699,6 +699,8 @@ based_sequencer = true # Use based sequencer
699
699
h. If txs within grace period: keep in pending queue, allow block
700
700
3. Apply block if verification passes
701
701
702
+
NOTE: P2P nodes only do not proceed to any verification. This is because DA inclusion happens later than block productions, and thus DA hints are added later to broadcasted blocks.
703
+
702
704
**Grace Period Example** (with base grace period = 1 epoch, `DAEpochForcedInclusion = 50`):
703
705
704
706
- Forced tx appears in epoch ending at DA height 100
@@ -722,18 +724,6 @@ based_sequencer = true # Use based sequencer
722
724
723
725
Every `DAEpochForcedInclusion` DA blocks
724
726
725
-
### Security Considerations
726
-
727
-
1.**Malicious Proposer Detection**: Full nodes reject blocks missing forced transactions
728
-
2.**No Timing Attacks**: Epoch boundaries are deterministic, no time-based logic
729
-
3.**Blob Size Limits**: Two-tier size validation prevents DoS
730
-
- Absolute limit (1.5MB): Blobs exceeding this are permanently rejected
731
-
- Batch limit (`MaxBytes`): Ensures no batch exceeds DA submission limits
732
-
4.**Graceful Degradation**: Continues operation if forced inclusion not configured
733
-
5.**Height Validation**: Handles "height from future" errors without state corruption
734
-
6.**Transaction Preservation**: No valid transactions are lost due to size constraints
735
-
7.**Strict MaxBytes Enforcement**: Batches NEVER exceed `req.MaxBytes`, preventing DA layer rejections
736
-
737
727
**Attack Vectors**:
738
728
739
729
### Security Considerations
@@ -774,11 +764,9 @@ Accepted and Implemented
774
764
### Negative
775
765
776
766
1.**Increased Latency**: Forced transactions subject to epoch boundaries
777
-
2.**DA Dependency**: Requires DA layer to support multiple namespaces
767
+
2.**DA Dependency**: Requires DA layer to be enabled on nodes for verification
778
768
3.**Higher DA Costs**: Users pay DA posting fees for forced inclusion
779
-
4.**Additional Complexity**: New component (DA Retriever) and verification logic with grace period tracking
780
-
5.**Epoch Configuration**: Requires setting `DAEpochForcedInclusion` in genesis (consensus parameter)
781
-
6.**Grace Period Adjustment**: Grace period is dynamically adjusted based on block fullness to balance censorship detection with operational reliability
769
+
4.**Epoch Configuration**: Requires setting `DAEpochForcedInclusion` in genesis (consensus parameter)
0 commit comments