@@ -8,16 +8,13 @@ use crate::{
88 derivation:: DerivationPipeline ,
99 error:: DriverError ,
1010 metrics:: DriverMetrics ,
11- sync:: {
12- AtomicCanonicalTip , CanonicalTipState , engine:: PayloadApplier , error:: SyncError ,
13- is_stale_preconf,
14- } ,
11+ sync:: { engine:: PayloadApplier , error:: SyncError } ,
1512} ;
1613use alloy:: { eips:: BlockNumberOrTag , primitives:: B256 , providers:: Provider } ;
1714use async_trait:: async_trait;
1815use metrics:: { counter, histogram} ;
1916use rpc:: { RpcClientError , client:: Client } ;
20- use tracing:: { debug, error, warn } ;
17+ use tracing:: { debug, error} ;
2118
2219/// A block-production path capable of materialising the provided input into execution blocks.
2320///
@@ -67,22 +64,15 @@ where
6764 A : PayloadApplier + BlockHashReader ,
6865{
6966 applier : A ,
70- canonical_tip_state : Arc < AtomicCanonicalTip > ,
7167}
7268
7369impl < A > PreconfirmationPath < A >
7470where
7571 A : PayloadApplier + BlockHashReader ,
7672{
77- /// Construct a preconfirmation path with a canonical block tip boundary.
78- ///
79- /// Blocks at or below this tip are considered event-synced canonical history and must never be
80- /// rewritten by preconfirmation payloads.
81- pub fn new_with_canonical_tip_state (
82- applier : A ,
83- canonical_tip_state : Arc < AtomicCanonicalTip > ,
84- ) -> Self {
85- Self { applier, canonical_tip_state }
73+ /// Construct a preconfirmation path backed by a payload applier.
74+ pub fn new ( applier : A ) -> Self {
75+ Self { applier }
8676 }
8777}
8878
@@ -107,29 +97,6 @@ where
10797 let block_number = preconf. block_number ( ) ;
10898 let parent_number = block_number. saturating_sub ( 1 ) ;
10999
110- match self . canonical_tip_state . load ( std:: sync:: atomic:: Ordering :: Relaxed ) {
111- CanonicalTipState :: Unknown => {
112- warn ! (
113- block_number,
114- "rejecting preconfirmation production: canonical tip unknown"
115- ) ;
116- return Err ( DriverError :: PreconfIngressNotReady ) ;
117- }
118- CanonicalTipState :: Known ( canonical_block_tip) => {
119- if is_stale_preconf ( block_number, canonical_block_tip) {
120- counter ! ( DriverMetrics :: PRECONF_STALE_DROPPED_TOTAL ) . increment ( 1 ) ;
121- counter ! ( DriverMetrics :: PRECONF_STALE_DROPPED_PRODUCTION_TOTAL )
122- . increment ( 1 ) ;
123- warn ! (
124- block_number,
125- canonical_block_tip,
126- "dropping stale preconfirmation at or below canonical event-sync tip"
127- ) ;
128- return Ok ( Vec :: new ( ) ) ;
129- }
130- }
131- }
132-
133100 // Measure parent hash lookup duration.
134101 let lookup_start = Instant :: now ( ) ;
135102 let parent_hash_result = self . applier . block_hash_by_number ( parent_number) . await ;
@@ -421,9 +388,7 @@ mod tests {
421388 fn preconfirmation_path_delegates_to_applier ( ) {
422389 let parent_hash = B256 :: from ( [ 1u8 ; 32 ] ) ;
423390 let applier = MockApplier :: new ( 0 , parent_hash) ;
424- let canonical_tip = Arc :: new ( AtomicCanonicalTip :: new ( CanonicalTipState :: Known ( 0 ) ) ) ;
425- let path =
426- PreconfirmationPath :: new_with_canonical_tip_state ( applier. clone ( ) , canonical_tip) ;
391+ let path = PreconfirmationPath :: new ( applier. clone ( ) ) ;
427392 let payload = Arc :: new ( PreconfPayload :: new ( sample_payload ( 1 ) ) ) ;
428393
429394 let rt = Runtime :: new ( ) . unwrap ( ) ;
@@ -436,30 +401,10 @@ mod tests {
436401 }
437402
438403 #[ test]
439- fn preconfirmation_path_drops_block_at_or_below_canonical_tip ( ) {
440- let parent_hash = B256 :: from ( [ 1u8 ; 32 ] ) ;
441- let applier = MockApplier :: new ( 0 , parent_hash) ;
442- let canonical_tip = Arc :: new ( AtomicCanonicalTip :: new ( CanonicalTipState :: Known ( 1 ) ) ) ;
443- let path =
444- PreconfirmationPath :: new_with_canonical_tip_state ( applier. clone ( ) , canonical_tip) ;
445- let payload = Arc :: new ( PreconfPayload :: new ( sample_payload ( 1 ) ) ) ;
446-
447- let rt = Runtime :: new ( ) . unwrap ( ) ;
448- let outcomes = rt
449- . block_on ( path. produce ( ProductionInput :: Preconfirmation ( payload) ) )
450- . expect ( "preconfirmation at canonical boundary should be dropped" ) ;
451-
452- assert_eq ! ( applier. calls( ) , 0 ) ;
453- assert ! ( outcomes. is_empty( ) ) ;
454- }
455-
456- #[ test]
457- fn preconfirmation_path_allows_reorg_above_canonical_tip ( ) {
404+ fn preconfirmation_path_produces_above_parent ( ) {
458405 let parent_hash = B256 :: from ( [ 1u8 ; 32 ] ) ;
459406 let applier = MockApplier :: new ( 1 , parent_hash) ;
460- let canonical_tip = Arc :: new ( AtomicCanonicalTip :: new ( CanonicalTipState :: Known ( 1 ) ) ) ;
461- let path =
462- PreconfirmationPath :: new_with_canonical_tip_state ( applier. clone ( ) , canonical_tip) ;
407+ let path = PreconfirmationPath :: new ( applier. clone ( ) ) ;
463408 let payload = Arc :: new ( PreconfPayload :: new ( sample_payload ( 2 ) ) ) ;
464409
465410 let rt = Runtime :: new ( ) . unwrap ( ) ;
@@ -470,22 +415,4 @@ mod tests {
470415 assert_eq ! ( applier. calls( ) , 1 ) ;
471416 assert_eq ! ( outcomes. len( ) , 1 ) ;
472417 }
473-
474- #[ test]
475- fn preconfirmation_path_rejects_when_canonical_tip_unknown ( ) {
476- let parent_hash = B256 :: from ( [ 1u8 ; 32 ] ) ;
477- let applier = MockApplier :: new ( 0 , parent_hash) ;
478- let canonical_tip = Arc :: new ( AtomicCanonicalTip :: new ( CanonicalTipState :: Unknown ) ) ;
479- let path =
480- PreconfirmationPath :: new_with_canonical_tip_state ( applier. clone ( ) , canonical_tip) ;
481- let payload = Arc :: new ( PreconfPayload :: new ( sample_payload ( 1 ) ) ) ;
482-
483- let rt = Runtime :: new ( ) . unwrap ( ) ;
484- let err = rt
485- . block_on ( path. produce ( ProductionInput :: Preconfirmation ( payload) ) )
486- . expect_err ( "unknown canonical tip should reject preconfirmation production" ) ;
487-
488- assert ! ( matches!( err, DriverError :: PreconfIngressNotReady ) ) ;
489- assert_eq ! ( applier. calls( ) , 0 ) ;
490- }
491418}
0 commit comments