reth_optimism_flashblocks/
lib.rs1#![doc(
4 html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png",
5 html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256",
6 issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/"
7)]
8#![cfg_attr(docsrs, feature(doc_cfg))]
9#![cfg_attr(not(test), warn(unused_crate_dependencies))]
10
11use reth_primitives_traits::NodePrimitives;
12use std::sync::Arc;
13
14use reth_optimism_primitives as _;
16
17mod consensus;
18pub use consensus::FlashBlockConsensusClient;
19
20mod payload;
21pub use payload::{FlashBlock, PendingFlashBlock};
22
23mod sequence;
24pub use sequence::{FlashBlockCompleteSequence, FlashBlockPendingSequence};
25
26mod service;
27pub use service::{FlashBlockBuildInfo, FlashBlockService};
28
29mod worker;
30
31mod ws;
32pub use ws::{WsConnect, WsFlashBlockStream};
33
34pub type PendingBlockRx<N> = tokio::sync::watch::Receiver<Option<PendingFlashBlock<N>>>;
38
39pub type FlashBlockCompleteSequenceRx =
43 tokio::sync::broadcast::Receiver<FlashBlockCompleteSequence>;
44
45pub type FlashBlockRx = tokio::sync::broadcast::Receiver<Arc<FlashBlock>>;
49
50pub type InProgressFlashBlockRx = tokio::sync::watch::Receiver<Option<FlashBlockBuildInfo>>;
52
53#[derive(Debug)]
57pub struct FlashblocksListeners<N: NodePrimitives> {
58 pub pending_block_rx: PendingBlockRx<N>,
60 pub flashblocks_sequence: tokio::sync::broadcast::Sender<FlashBlockCompleteSequence>,
62 pub in_progress_rx: InProgressFlashBlockRx,
64 pub received_flashblocks: tokio::sync::broadcast::Sender<Arc<FlashBlock>>,
66}
67
68impl<N: NodePrimitives> FlashblocksListeners<N> {
69 pub const fn new(
71 pending_block_rx: PendingBlockRx<N>,
72 flashblocks_sequence: tokio::sync::broadcast::Sender<FlashBlockCompleteSequence>,
73 in_progress_rx: InProgressFlashBlockRx,
74 received_flashblocks: tokio::sync::broadcast::Sender<Arc<FlashBlock>>,
75 ) -> Self {
76 Self { pending_block_rx, flashblocks_sequence, in_progress_rx, received_flashblocks }
77 }
78}