pub struct BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Debug,
BF: L2ChainProvider + Debug,{ /* private fields */ }
Expand description
BatchQueue is responsible for o rdering unordered batches and gnerating empty batches when the sequence window has passed.
It receives batches that are tagged with the L1 Inclusion block of the batch. It only considers batches that are inside the sequencing window of a specific L1 Origin. It tries to eagerly pull batches based on the current L2 safe head. Otherwise it filters/creates an entire epoch’s worth of batches at once.
This stage tracks a range of L1 blocks with the assumption that all batches with an L1 inclusion block inside that range have been added to the stage by the time that it attempts to advance a full epoch.
It is internally responsible for making sure that batches with L1 inclusions block outside it’s working range are not considered or pruned.
Implementations§
Source§impl<P, BF> BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Debug,
BF: L2ChainProvider + Debug,
impl<P, BF> BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Debug,
BF: L2ChainProvider + Debug,
Sourcepub fn new(cfg: Arc<RollupConfig>, prev: P, fetcher: BF) -> BatchQueue<P, BF>
pub fn new(cfg: Arc<RollupConfig>, prev: P, fetcher: BF) -> BatchQueue<P, BF>
Creates a new BatchQueue stage.
Sourcepub fn pop_next_batch(&mut self, parent: L2BlockInfo) -> Option<SingleBatch>
pub fn pop_next_batch(&mut self, parent: L2BlockInfo) -> Option<SingleBatch>
Pops the next batch from the current queued up span-batch cache. The parent is used to set the parent hash of the batch. The parent is verified when the batch is later validated.
Sourcepub async fn derive_next_batch(
&mut self,
empty: bool,
parent: L2BlockInfo,
) -> Result<Batch, PipelineErrorKind>
pub async fn derive_next_batch( &mut self, empty: bool, parent: L2BlockInfo, ) -> Result<Batch, PipelineErrorKind>
Derives the next batch to apply on top of the current L2 safe head. Follows the validity rules imposed on consecutive batches. Based on currently available buffered batch and L1 origin information. A PipelineError::Eof is returned if no batch can be derived yet.
Sourcepub async fn add_batch(
&mut self,
batch: Batch,
parent: L2BlockInfo,
) -> Result<(), PipelineErrorKind>
pub async fn add_batch( &mut self, batch: Batch, parent: L2BlockInfo, ) -> Result<(), PipelineErrorKind>
Adds a batch to the queue.
Trait Implementations§
Source§impl<P, BF> AttributesProvider for BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Send + Debug,
BF: L2ChainProvider + Send + Debug,
impl<P, BF> AttributesProvider for BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Send + Debug,
BF: L2ChainProvider + Send + Debug,
Source§fn next_batch<'life0, 'async_trait>(
&'life0 mut self,
parent: L2BlockInfo,
) -> Pin<Box<dyn Future<Output = Result<SingleBatch, PipelineErrorKind>> + Send + 'async_trait>>where
'life0: 'async_trait,
BatchQueue<P, BF>: 'async_trait,
fn next_batch<'life0, 'async_trait>(
&'life0 mut self,
parent: L2BlockInfo,
) -> Pin<Box<dyn Future<Output = Result<SingleBatch, PipelineErrorKind>> + Send + 'async_trait>>where
'life0: 'async_trait,
BatchQueue<P, BF>: 'async_trait,
Returns the next valid batch upon the given safe head. Also returns the boolean that indicates if the batch is the last block in the batch.
Source§fn is_last_in_span(&self) -> bool
fn is_last_in_span(&self) -> bool
Returns if the previous batch was the last in the span.
Source§impl<P, BF> Debug for BatchQueue<P, BF>where
P: Debug + NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver,
BF: Debug + L2ChainProvider,
impl<P, BF> Debug for BatchQueue<P, BF>where
P: Debug + NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver,
BF: Debug + L2ChainProvider,
Source§impl<P, BF> OriginAdvancer for BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Send + Debug,
BF: L2ChainProvider + Send + Debug,
impl<P, BF> OriginAdvancer for BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Send + Debug,
BF: L2ChainProvider + Send + Debug,
Source§fn advance_origin<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<(), PipelineErrorKind>> + Send + 'async_trait>>where
'life0: 'async_trait,
BatchQueue<P, BF>: 'async_trait,
fn advance_origin<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = Result<(), PipelineErrorKind>> + Send + 'async_trait>>where
'life0: 'async_trait,
BatchQueue<P, BF>: 'async_trait,
advance_l1_block
.Source§impl<P, BF> OriginProvider for BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Debug,
BF: L2ChainProvider + Debug,
impl<P, BF> OriginProvider for BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Debug,
BF: L2ChainProvider + Debug,
Source§impl<P, BF> SignalReceiver for BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Send + Debug,
BF: L2ChainProvider + Send + Debug,
impl<P, BF> SignalReceiver for BatchQueue<P, BF>where
P: NextBatchProvider + OriginAdvancer + OriginProvider + SignalReceiver + Send + Debug,
BF: L2ChainProvider + Send + Debug,
Auto Trait Implementations§
impl<P, BF> Freeze for BatchQueue<P, BF>
impl<P, BF> RefUnwindSafe for BatchQueue<P, BF>where
P: RefUnwindSafe,
BF: RefUnwindSafe,
impl<P, BF> Send for BatchQueue<P, BF>
impl<P, BF> Sync for BatchQueue<P, BF>
impl<P, BF> Unpin for BatchQueue<P, BF>
impl<P, BF> UnwindSafe for BatchQueue<P, BF>where
P: UnwindSafe,
BF: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more