kona_derive::stages

Struct ChannelBank

Source
pub struct ChannelBank<P>{ /* private fields */ }
Expand description

ChannelBank is a stateful stage that does the following:

  1. Unmarshalls frames from L1 transaction data
  2. Applies those frames to a channel
  3. Attempts to read from the channel when it is ready
  4. Prunes channels (not frames) when the channel bank is too large.

Note: we prune before we ingest data. As we switch between ingesting data & reading, the prune step occurs at an odd point Specifically, the channel bank is not allowed to become too large between successive calls to IngestData. This means that we can do an ingest and then do a read while becoming too large. ChannelBank buffers channel frames, and emits full channel data

Implementations§

Source§

impl<P> ChannelBank<P>

Source

pub fn new(cfg: Arc<RollupConfig>, prev: P) -> Self

Create a new ChannelBank stage.

Source

pub fn size(&self) -> usize

Returns the size of the channel bank by accumulating over all channels.

Source

pub fn prune(&mut self) -> PipelineResult<()>

Prunes the Channel bank, until it is below the max channel bank size. Prunes from the high-priority channel since it failed to be read.

Source

pub fn ingest_frame(&mut self, frame: Frame) -> PipelineResult<()>

Adds new L1 data to the channel bank. Should only be called after all data has been read.

Source

pub fn read(&mut self) -> PipelineResult<Option<Bytes>>

Read the raw data of the first channel, if it’s timed-out or closed.

Returns an error if there is nothing new to read.

Trait Implementations§

Source§

impl<P> ChannelReaderProvider for ChannelBank<P>

Source§

fn next_data<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = PipelineResult<Option<Bytes>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Pulls the next piece of data from the channel bank. Note that it attempts to pull data out of the channel bank prior to loading data in (unlike most other stages). This is to ensure maintain consistency around channel bank pruning which depends upon the order of operations.
Source§

impl<P> Debug for ChannelBank<P>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<P> OriginAdvancer for ChannelBank<P>

Source§

fn advance_origin<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = PipelineResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Advances the internal state of the lowest stage to the next l1 origin. This method is the equivalent of the reference implementation advance_l1_block.
Source§

impl<P> OriginProvider for ChannelBank<P>

Source§

fn origin(&self) -> Option<BlockInfo>

Returns the optional L1 BlockInfo origin.
Source§

impl<P> SignalReceiver for ChannelBank<P>

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,

Receives a signal from the driver.

Auto Trait Implementations§

§

impl<P> Freeze for ChannelBank<P>
where P: Freeze,

§

impl<P> RefUnwindSafe for ChannelBank<P>
where P: RefUnwindSafe,

§

impl<P> Send for ChannelBank<P>
where P: Send,

§

impl<P> Sync for ChannelBank<P>
where P: Sync,

§

impl<P> Unpin for ChannelBank<P>
where P: Unpin,

§

impl<P> UnwindSafe for ChannelBank<P>
where P: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more