pub struct DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send,
P: L2ChainProvider + Send + Sync + Debug,{
pub attributes: S,
pub prepared: VecDeque<OpAttributesWithParent>,
pub rollup_config: Arc<RollupConfig>,
pub l2_chain_provider: P,
}
Expand description
The derivation pipeline is responsible for deriving L2 inputs from L1 data.
Fields§
§attributes: S
A handle to the next attributes.
prepared: VecDeque<OpAttributesWithParent>
Reset provider for the pipeline. A list of prepared OpAttributesWithParent to be used by the derivation pipeline consumer.
rollup_config: Arc<RollupConfig>
The rollup config.
l2_chain_provider: P
The L2 Chain Provider used to fetch the system config on reset.
Implementations§
Source§impl<S, P> DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send,
P: L2ChainProvider + Send + Sync + Debug,
impl<S, P> DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send,
P: L2ChainProvider + Send + Sync + Debug,
Sourcepub const fn new(
attributes: S,
rollup_config: Arc<RollupConfig>,
l2_chain_provider: P,
) -> Self
pub const fn new( attributes: S, rollup_config: Arc<RollupConfig>, l2_chain_provider: P, ) -> Self
Creates a new instance of the DerivationPipeline.
Trait Implementations§
Source§impl<S, P> Debug for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send + Debug,
P: L2ChainProvider + Send + Sync + Debug + Debug,
impl<S, P> Debug for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send + Debug,
P: L2ChainProvider + Send + Sync + Debug + Debug,
Source§impl<B, P, T, D> From<PipelineBuilder<B, P, T, D>> for DerivationPipeline<AttributesQueue<BatchProvider<BatchStream<ChannelReader<ChannelProvider<FrameQueue<L1Retrieval<D, L1Traversal<P>>>>>, T>, T>, B>, T>where
B: AttributesBuilder + Send + Debug,
P: ChainProvider + Send + Sync + Debug,
T: L2ChainProvider + Clone + Send + Sync + Debug,
D: DataAvailabilityProvider + Send + Sync + Debug,
impl<B, P, T, D> From<PipelineBuilder<B, P, T, D>> for DerivationPipeline<AttributesQueue<BatchProvider<BatchStream<ChannelReader<ChannelProvider<FrameQueue<L1Retrieval<D, L1Traversal<P>>>>>, T>, T>, B>, T>where
B: AttributesBuilder + Send + Debug,
P: ChainProvider + Send + Sync + Debug,
T: L2ChainProvider + Clone + Send + Sync + Debug,
D: DataAvailabilityProvider + Send + Sync + Debug,
Source§fn from(builder: PipelineBuilder<B, P, T, D>) -> Self
fn from(builder: PipelineBuilder<B, P, T, D>) -> Self
Source§impl<S, P> Iterator for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send + Sync,
P: L2ChainProvider + Send + Sync + Debug,
impl<S, P> Iterator for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send + Sync,
P: L2ChainProvider + Send + Sync + Debug,
Source§type Item = OpAttributesWithParent
type Item = OpAttributesWithParent
Source§fn next(&mut self) -> Option<Self::Item>
fn next(&mut self) -> Option<Self::Item>
Source§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk
)N
values. Read more1.0.0 · Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by
)n
elements. Read more1.0.0 · Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
n
th element of the iterator. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
iter_intersperse
)separator
between adjacent
items of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse
)separator
between adjacent items of the original iterator. Read more1.0.0 · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.0.0 · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n
elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n
elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
1.29.0 · Source§fn flatten(self) -> Flatten<Self>
fn flatten(self) -> Flatten<Self>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows
)f
for each contiguous window of size N
over
self
and returns an iterator over the outputs of f
. Like slice::windows()
,
the windows during mapping overlap as well. Read more1.0.0 · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Source§fn try_collect<B>(
&mut self,
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
fn try_collect<B>( &mut self, ) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
iterator_try_collect
)Source§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into
)1.0.0 · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned
)true
precede all those that return false
. Read more1.27.0 · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce
)1.0.0 · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find
)1.0.0 · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 · Source§fn max(self) -> Option<Self::Item>
fn max(self) -> Option<Self::Item>
1.0.0 · Source§fn min(self) -> Option<Self::Item>
fn min(self) -> Option<Self::Item>
1.6.0 · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks
)N
elements of the iterator at a time. Read more1.11.0 · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by
)Iterator
with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd
elements of
this Iterator
with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by
)Iterator
with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by
)1.5.0 · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator
are lexicographically
less than those of another. Read more1.5.0 · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator
are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator
are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator
are lexicographically
greater than or equal to those of another. Read more1.82.0 · Source§fn is_sorted(self) -> bool
fn is_sorted(self) -> bool
1.82.0 · Source§fn is_sorted_by<F>(self, compare: F) -> bool
fn is_sorted_by<F>(self, compare: F) -> bool
1.82.0 · Source§fn is_sorted_by_key<F, K>(self, f: F) -> bool
fn is_sorted_by_key<F, K>(self, f: F) -> bool
Source§impl<S, P> OriginProvider for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send,
P: L2ChainProvider + Send + Sync + Debug,
impl<S, P> OriginProvider for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send,
P: L2ChainProvider + Send + Sync + Debug,
Source§impl<S, P> Pipeline for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send + Sync,
P: L2ChainProvider + Send + Sync + Debug,
impl<S, P> Pipeline for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send + Sync,
P: L2ChainProvider + Send + Sync + Debug,
Source§fn peek(&self) -> Option<&OpAttributesWithParent>
fn peek(&self) -> Option<&OpAttributesWithParent>
Peeks at the next prepared OpAttributesWithParent from the pipeline.
Source§fn step<'life0, 'async_trait>(
&'life0 mut self,
cursor: L2BlockInfo,
) -> Pin<Box<dyn Future<Output = StepResult> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn step<'life0, 'async_trait>(
&'life0 mut self,
cursor: L2BlockInfo,
) -> Pin<Box<dyn Future<Output = StepResult> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Attempts to progress the pipeline.
§Returns
A PipelineError::Eof is returned if the pipeline is blocked by waiting for new L1 data. Any other error is critical and the derivation pipeline should be reset. An error is expected when the underlying source closes.
When DerivationPipeline::step returns [Ok(())], it should be called again, to continue the derivation process.
Source§impl<S, P> SignalReceiver for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send + Sync,
P: L2ChainProvider + Send + Sync + Debug,
impl<S, P> SignalReceiver for DerivationPipeline<S, P>where
S: NextAttributes + SignalReceiver + OriginProvider + OriginAdvancer + Debug + Send + Sync,
P: L2ChainProvider + Send + Sync + Debug,
Source§fn signal<'life0, 'async_trait>(
&'life0 mut self,
signal: Signal,
) -> Pin<Box<dyn Future<Output = PipelineResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn signal<'life0, 'async_trait>(
&'life0 mut self,
signal: Signal,
) -> Pin<Box<dyn Future<Output = PipelineResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Signals the pipeline by calling the SignalReceiver::signal
method.
During a Signal::Reset
, each stage is recursively called from the top-level
crate::stages::AttributesQueue to the bottom crate::stages::L1Traversal
with a head-recursion pattern. This effectively clears the internal state
of each stage in the pipeline from bottom on up.
Signal::Activation
does a similar thing to the reset, with different
holocene-specific reset rules.
§Parameters
The signal
is contains the signal variant with any necessary parameters.