Struct ComponentTracker

Source
pub struct ComponentTracker<R: RPCClient> {
    pub components: HashMap<ComponentId, ProtocolComponent>,
    pub contracts: HashSet<Address>,
    /* private fields */
}
Expand description

Helper struct to determine which components and contracts are being tracked atm.

Fields§

§components: HashMap<ComponentId, ProtocolComponent>§contracts: HashSet<Address>

Derived from tracked components. We need this if subscribed to a vm extractor because updates are emitted on a contract level instead of a component level.

Implementations§

Source§

impl<R> ComponentTracker<R>
where R: RPCClient,

Source

pub fn new( chain: Chain, protocol_system: &str, filter: ComponentFilter, rpc: R, ) -> Self

Source

pub async fn initialise_components(&mut self) -> Result<(), RPCError>

Retrieves all components that belong to the system we are streaming that have sufficient tvl. Also detects which contracts are relevant for simulating on those components.

Source

pub async fn start_tracking( &mut self, new_components: &[&ComponentId], ) -> Result<(), RPCError>

Add new components to be tracked

Source

pub fn stop_tracking<'a, I: IntoIterator<Item = &'a ComponentId> + Debug>( &mut self, to_remove: I, ) -> HashMap<ComponentId, ProtocolComponent>

Stop tracking components

Source

pub fn process_entrypoints( &mut self, dci_update: &DCIUpdate, ) -> Result<(), RPCError>

Updates the tracked entrypoints and contracts based on the given DCI data.

Source

pub fn get_contracts_by_component<'a, I: IntoIterator<Item = &'a String>>( &self, ids: I, ) -> HashSet<Address>

Get related contracts for the given component ids. Assumes that the components are already tracked, either by calling start_tracking or initialise_components.

§Arguments
  • ids - A vector of component IDs to get the contracts for.
§Returns

A HashSet of contract IDs. Components that are not tracked will be logged and skipped.

Source

pub fn get_tracked_component_ids(&self) -> Vec<ComponentId>

Source

pub fn filter_updated_components( &self, deltas: &BlockChanges, ) -> (Vec<ComponentId>, Vec<ComponentId>)

Given BlockChanges, filter out components that are no longer relevant and return the components that need to be added or removed.

Auto Trait Implementations§

§

impl<R> Freeze for ComponentTracker<R>
where R: Freeze,

§

impl<R> RefUnwindSafe for ComponentTracker<R>
where R: RefUnwindSafe,

§

impl<R> Send for ComponentTracker<R>

§

impl<R> Sync for ComponentTracker<R>

§

impl<R> Unpin for ComponentTracker<R>
where R: Unpin,

§

impl<R> UnwindSafe for ComponentTracker<R>
where R: 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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

impl<T> ErasedDestructor for T
where T: 'static,