Struct MessageGraph

Source
pub struct MessageGraph<'a, P> { /* private fields */ }
Expand description

The MessageGraph represents a set of blocks at a given timestamp and the interop dependencies between them.

This structure is used to determine whether or not any interop messages are invalid within the set of blocks within the graph. An “invalid message” is one that was relayed from one chain to another, but the original MessageIdentifier is not present within the graph or from a dependency referenced via the InteropProvider (or otherwise is invalid, such as being older than the message expiry window).

Message validity rules: https://specs.optimism.io/interop/messaging.html#invalid-messages

Implementations§

Source§

impl<'a, P> MessageGraph<'a, P>
where P: InteropProvider,

Source

pub async fn derive( blocks: &HashMap<u64, Sealed<Header>>, provider: &'a P, rollup_configs: &'a HashMap<u64, RollupConfig>, ) -> MessageGraphResult<Self, P>

Derives the edges from the blocks within the graph by scanning all receipts within the blocks and searching for ExecutingMessages.

Source

pub async fn resolve(self) -> MessageGraphResult<(), P>

Checks the validity of all messages within the graph.

Note: This function does not account for cascading dependency failures. When MessageGraphError::InvalidMessages is returned by this function, the consumer must re-execute the bad blocks with deposit transactions only per the interop derivation rules. Once the bad blocks have been replaced, a new MessageGraph should be constructed and resolution should be re-attempted. This process should repeat recursively until no invalid dependencies remain, with the terminal case being all blocks reduced to deposits-only.

Trait Implementations§

Source§

impl<'a, P: Debug> Debug for MessageGraph<'a, P>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a, P> Freeze for MessageGraph<'a, P>

§

impl<'a, P> RefUnwindSafe for MessageGraph<'a, P>
where P: RefUnwindSafe,

§

impl<'a, P> Send for MessageGraph<'a, P>
where P: Sync,

§

impl<'a, P> Sync for MessageGraph<'a, P>
where P: Sync,

§

impl<'a, P> Unpin for MessageGraph<'a, P>

§

impl<'a, P> UnwindSafe for MessageGraph<'a, P>
where P: RefUnwindSafe,

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
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