ProtocolStreamBuilder

Struct ProtocolStreamBuilder 

Source
pub struct ProtocolStreamBuilder { /* private fields */ }
Expand description

Builds and configures the multi protocol stream described in the module-level docs.

See the module documentation for details on protocols, configuration options, and stream behavior.

Implementations§

Source§

impl ProtocolStreamBuilder

Source

pub fn new(tycho_url: &str, chain: Chain) -> Self

Creates a new builder for a multi-protocol stream.

See the module-level docs for full details on stream behavior and configuration.

Source

pub fn exchange<T>( self, name: &str, filter: ComponentFilter, filter_fn: Option<fn(&ComponentWithState) -> bool>, ) -> Self

Adds a specific exchange to the stream.

This configures the builder to include a new protocol synchronizer for name, filtering its components according to filter and optionally filter_fn.

The type parameter T specifies the decoder type for this exchange. All component states for this exchange will be decoded into instances of T.

§Parameters
  • name: The protocol or exchange name (e.g., "uniswap_v4", "vm:balancer_v2").
  • filter: Defines the set of components to include in the stream.
  • filter_fn: Optional custom filter function for client-side filtering of components not expressible in filter.
§Notes

For certain protocols (e.g., "uniswap_v4", "vm:balancer_v2", "vm:curve"), omitting filter_fn may cause decoding errors or incorrect results. In these cases, a proper filter function is required to ensure correct decoding and quoting logic.

Source

pub fn exchange_with_decoder_context<T>( self, name: &str, filter: ComponentFilter, filter_fn: Option<fn(&ComponentWithState) -> bool>, decoder_context: DecoderContext, ) -> Self

Adds a specific exchange to the stream with decoder context.

This configures the builder to include a new protocol synchronizer for name, filtering its components according to filter and optionally filter_fn. It also registers the DecoderContext (this is useful to test protocols that are not live yet)

The type parameter T specifies the decoder type for this exchange. All component states for this exchange will be decoded into instances of T.

§Parameters
  • name: The protocol or exchange name (e.g., "uniswap_v4", "vm:balancer_v2").
  • filter: Defines the set of components to include in the stream.
  • filter_fn: Optional custom filter function for client-side filtering of components not expressible in filter.
  • decoder_context: The decoder context for this exchange
§Notes

For certain protocols (e.g., "uniswap_v4", "vm:balancer_v2", "vm:curve"), omitting filter_fn may cause decoding errors or incorrect results. In these cases, a proper filter function is required to ensure correct decoding and quoting logic.

Source

pub fn block_time(self, block_time: u64) -> Self

Sets the block time interval for the stream.

This controls how often the stream produces updates.

Source

pub fn timeout(self, timeout: u64) -> Self

👎Deprecated: Use latency_buffer instead

Sets the network operation timeout (deprecated).

Use [latency_buffer] instead for controlling latency. This method is retained for backwards compatibility.

Source

pub fn latency_buffer(self, timeout: u64) -> Self

Sets the latency buffer to aggregate same-block messages.

This allows the supervisor to wait a short interval for all synchronizers to emit before aggregating.

Source

pub fn max_missed_blocks(self, n: u64) -> Self

Sets the maximum number of blocks a synchronizer may miss before being marked as Stale.

Source

pub fn startup_timeout(self, timeout: Duration) -> Self

Sets how long a synchronizer may take to process the initial message.

Useful for data-intensive protocols where startup decoding takes longer.

Source

pub fn no_state(self, no_state: bool) -> Self

Configures the stream to exclude state updates.

This reduces bandwidth and decoding workload if protocol state is not of interest (e.g. only process new tokens).

Source

pub fn auth_key(self, auth_key: Option<String>) -> Self

Sets the API key for authenticating with the Tycho server.

Source

pub fn no_tls(self, no_tls: bool) -> Self

Disables TLS/ SSL for the connection, using http and ws protocols.

This is not recommended for production use.

Source

pub fn disable_compression(self) -> Self

Disable compression for the connection.

Source

pub fn stream_end_policy(self, stream_end_policy: StreamEndPolicy) -> Self

Sets the stream end policy.

Controls when the stream should stop based on synchronizer states.

§Note

The stream always ends latest if all protocols are stale or ended independent of this configuration. This allows you to end the stream earlier than that.

See self::StreamEndPolicy for possible configuration options.

Source

pub async fn set_tokens(self, tokens: HashMap<Bytes, Token>) -> Self

Sets the initial tokens to consider during decoding.

Only components containing these tokens will be decoded initially. New tokens may be added automatically if they meet the quality threshold.

Source

pub fn skip_state_decode_failures(self, skip: bool) -> Self

Skips decoding errors for component state updates.

Allows the stream to continue processing even if some states fail to decode, logging a warning instead of panicking.

Source

pub fn websocket_retry_config(self, config: &RetryConfiguration) -> Self

Configures the retry policy for websocket reconnects.

Source

pub fn state_synchronizer_retry_config( self, config: &RetryConfiguration, ) -> Self

Configures the retry policy for state synchronization.

Source

pub fn get_decoder(&self) -> &TychoStreamDecoder<BlockHeader>

Source

pub async fn build( self, ) -> Result<impl Stream<Item = Result<Update, StreamDecodeError>>, StreamError>

Builds and returns the configured protocol stream.

See the module-level docs for details on stream behavior and emitted messages. This method applies all builder settings and starts the stream.

Auto Trait Implementations§

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

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
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> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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,