Skip to main content

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 enable_partial_blocks(self) -> Self

Enables partial block updates (flashblocks).

Source

pub fn blocklist_components(self, ids: HashSet<String>) -> Self

Exclude specific component IDs from all registered exchanges.

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

Provides token metadata used to decode startup snapshots and initialize protocol states.

This is not a stream filter — components arriving after startup include their own token metadata. To restrict to specific tokens, filter in your consumer logic. New tokens arriving via stream deltas are 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 min_token_quality(self, quality: u32) -> Self

Sets the minimum token quality for tokens added via the stream.

Tokens arriving in stream deltas below this threshold are ignored. Defaults to 100. Set this to the same value used in load_all_tokens() to apply consistent filtering.

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 fn with_pending_indexer( self, extractor: &str, indexer: Box<dyn TxDeltaIndexer>, ) -> Result<Self, StreamError>

Registers a TxDeltaIndexer for ephemeral pending-block simulation.

The indexer is associated with extractor (the protocol synchronizer name, e.g. "uniswap_v3"). Use build_with_pending to obtain both the confirmed stream and the pending processor.

Returns an error if extractor names a VM protocol (prefix "vm:"), which requires update_engine() and cannot be simulated natively.

Source

pub fn with_step_controller(self) -> (Self, BlockStepController)

Enables controlled-step mode for testing.

Returns a BlockStepController that lets the caller decide when each buffered block is released for decoding. Call this before build or build_with_pending — both detect and wire up the gating automatically.

In production code, do not call this method; the stream runs at full speed.

Source

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

Builds the confirmed protocol stream and a PendingBlockProcessor that stays in sync with it automatically.

The stream pipeline forwards every confirmed FeedMessage to the processor via an internal unbounded channel — it never blocks waiting for the consumer. The consumer owns the returned PendingBlockProcessor exclusively and may wrap it in whatever synchronisation primitive suits their use case (e.g. Mutex for shared access, nothing for single-threaded use).

Call generate_pending_update to simulate a candidate bundle; it drains the channel automatically before computing.

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> ErasedDestructor for T
where T: 'static,

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: Sized + 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: Sized + 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