Skip to content

Commit 536bebf

Browse files
committed
make pr
1 parent 02580e8 commit 536bebf

File tree

12 files changed

+90
-46
lines changed

12 files changed

+90
-46
lines changed

crates/optimism/flashblocks/src/cache.rs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ use ringbuffer::{AllocRingBuffer, RingBuffer};
1717
use tokio::sync::broadcast;
1818
use tracing::*;
1919

20+
type CachedSequenceEntry<P> = (
21+
FlashBlockCompleteSequence<P>,
22+
Vec<WithEncoded<Recovered<<P as FlashblockPayload>::SignedTx>>>,
23+
);
24+
25+
type SequenceBuildArgs<P> = BuildArgs<
26+
Vec<WithEncoded<Recovered<<P as FlashblockPayload>::SignedTx>>>,
27+
<P as FlashblockPayload>::Base,
28+
>;
29+
2030
/// Maximum number of cached sequences in the ring buffer.
2131
const CACHE_SIZE: usize = 3;
2232
/// 200 ms flashblock time.
@@ -37,7 +47,7 @@ pub(crate) struct SequenceManager<P: FlashblockPayload> {
3747
pending_transactions: Vec<WithEncoded<Recovered<P::SignedTx>>>,
3848
/// Ring buffer of recently completed sequences bundled with their decoded transactions (FIFO,
3949
/// size 3)
40-
completed_cache: AllocRingBuffer<(FlashBlockCompleteSequence<P>, Vec<WithEncoded<Recovered<P::SignedTx>>>)>,
50+
completed_cache: AllocRingBuffer<CachedSequenceEntry<P>>,
4151
/// Broadcast channel for completed sequences
4252
block_broadcaster: broadcast::Sender<FlashBlockCompleteSequence<P>>,
4353
/// Whether to compute state roots when building blocks
@@ -65,7 +75,9 @@ impl<P: FlashblockPayload> SequenceManager<P> {
6575
}
6676

6777
/// Gets a subscriber to the flashblock sequences produced.
68-
pub(crate) fn subscribe_block_sequence(&self) -> broadcast::Receiver<FlashBlockCompleteSequence<P>> {
78+
pub(crate) fn subscribe_block_sequence(
79+
&self,
80+
) -> broadcast::Receiver<FlashBlockCompleteSequence<P>> {
6981
self.block_broadcaster.subscribe()
7082
}
7183

@@ -130,7 +142,7 @@ impl<P: FlashblockPayload> SequenceManager<P> {
130142
&mut self,
131143
local_tip_hash: B256,
132144
local_tip_timestamp: u64,
133-
) -> Option<BuildArgs<Vec<WithEncoded<Recovered<P::SignedTx>>>, P::Base>> {
145+
) -> Option<SequenceBuildArgs<P>> {
134146
// Try to find a buildable sequence: (base, last_fb, transactions, cached_state,
135147
// source_name)
136148
let (base, last_flashblock, transactions, cached_state, source_name) =
@@ -143,7 +155,7 @@ impl<P: FlashblockPayload> SequenceManager<P> {
143155
}
144156
// Priority 2: Try cached sequence with exact parent match
145157
else if let Some((cached, txs)) = self.completed_cache.iter().find(|(c, _)| c.payload_base().parent_hash() == local_tip_hash) {
146-
let base = cached.payload_base().clone();
158+
let base = cached.payload_base();
147159
let last_fb = cached.last().clone();
148160
let transactions = txs.clone();
149161
let cached_state = None;
@@ -267,8 +279,7 @@ impl<P: FlashblockPayload> SequenceManager<P> {
267279
#[cfg(test)]
268280
mod tests {
269281
use super::*;
270-
use crate::test_utils::TestFlashBlockFactory;
271-
use crate::FlashBlock;
282+
use crate::{test_utils::TestFlashBlockFactory, FlashBlock};
272283
use alloy_primitives::B256;
273284

274285
#[test]

crates/optimism/flashblocks/src/consensus.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::{
2-
traits::FlashblockPayloadBase, FlashBlock, FlashBlockCompleteSequence, FlashBlockCompleteSequenceRx,
2+
traits::FlashblockPayloadBase, FlashBlock, FlashBlockCompleteSequence,
3+
FlashBlockCompleteSequenceRx,
34
};
45
use alloy_primitives::B256;
56
use alloy_rpc_types_engine::PayloadStatusEnum;
@@ -30,7 +31,8 @@ where
3031
impl<P> FlashBlockConsensusClient<P>
3132
where
3233
P: PayloadTypes,
33-
P::ExecutionData: for<'a> TryFrom<&'a FlashBlockCompleteSequence<FlashBlock>, Error: std::fmt::Display>,
34+
P::ExecutionData:
35+
for<'a> TryFrom<&'a FlashBlockCompleteSequence<FlashBlock>, Error: std::fmt::Display>,
3436
{
3537
/// Create a new `FlashBlockConsensusClient` with the given Op engine and sequence receiver.
3638
pub const fn new(

crates/optimism/flashblocks/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ mod payload;
2626
pub use payload::{FlashBlock, PendingFlashBlock};
2727

2828
mod sequence;
29-
pub use sequence::{FlashBlockCompleteSequence, FlashBlockPendingSequence, SequenceExecutionOutcome};
29+
pub use sequence::{
30+
FlashBlockCompleteSequence, FlashBlockPendingSequence, SequenceExecutionOutcome,
31+
};
3032

3133
mod service;
3234
pub use service::{FlashBlockBuildInfo, FlashBlockService};

crates/optimism/flashblocks/src/op_impl.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ impl FlashblockDiff for OpFlashblockPayloadDelta {
5151
}
5252

5353
fn withdrawals(&self) -> Option<&Withdrawals> {
54-
// OpFlashblockPayloadDelta stores Vec<Withdrawal>, not Withdrawals newtype
55-
// This method isn't currently used in the flashblocks infrastructure
54+
// TODO: Might not be needed as withdrawals aren't processed in a block except if at start or end
5655
None
5756
}
5857

@@ -83,12 +82,12 @@ impl FlashblockPayload for OpFlashblockPayload {
8382
}
8483

8584
fn block_number(&self) -> u64 {
86-
OpFlashblockPayload::block_number(self)
85+
Self::block_number(self)
8786
}
8887

8988
fn recover_transactions(
9089
&self,
9190
) -> impl Iterator<Item = Result<WithEncoded<Recovered<Self::SignedTx>>, RecoveryError>> {
92-
OpFlashblockPayload::recover_transactions::<OpTxEnvelope>(self)
91+
Self::recover_transactions::<OpTxEnvelope>(self)
9392
}
9493
}

crates/optimism/flashblocks/src/sequence.rs

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ impl<P: FlashblockPayload> FlashBlockCompleteSequence<P> {
210210
}
211211

212212
/// Returns the number of flashblocks in the sequence.
213-
pub fn count(&self) -> usize {
213+
pub const fn count(&self) -> usize {
214214
self.inner.len()
215215
}
216216

@@ -235,10 +235,7 @@ impl<P: FlashblockPayload> FlashBlockCompleteSequence<P> {
235235
/// Returns all transactions from all flashblocks in the sequence
236236
pub fn all_transactions(&self) -> Vec<Bytes> {
237237
use crate::traits::FlashblockDiff;
238-
self.inner
239-
.iter()
240-
.flat_map(|fb| fb.diff().transactions_raw().iter().cloned())
241-
.collect()
238+
self.inner.iter().flat_map(|fb| fb.diff().transactions_raw().iter().cloned()).collect()
242239
}
243240

244241
/// Returns an iterator over all flashblocks in the sequence.
@@ -306,7 +303,8 @@ mod tests {
306303

307304
#[test]
308305
fn test_insert_ignores_different_block_number() {
309-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
306+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
307+
FlashBlockPendingSequence::new();
310308
let factory = TestFlashBlockFactory::new();
311309

312310
let fb0 = factory.flashblock_at(0).build();
@@ -322,7 +320,8 @@ mod tests {
322320

323321
#[test]
324322
fn test_insert_ignores_different_payload_id() {
325-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
323+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
324+
FlashBlockPendingSequence::new();
326325
let factory = TestFlashBlockFactory::new();
327326

328327
let fb0 = factory.flashblock_at(0).build();
@@ -340,7 +339,8 @@ mod tests {
340339

341340
#[test]
342341
fn test_insert_maintains_btree_order() {
343-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
342+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
343+
FlashBlockPendingSequence::new();
344344
let factory = TestFlashBlockFactory::new();
345345

346346
let fb0 = factory.flashblock_at(0).build();
@@ -362,7 +362,8 @@ mod tests {
362362

363363
#[test]
364364
fn test_finalize_empty_sequence_fails() {
365-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
365+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
366+
FlashBlockPendingSequence::new();
366367
let result = sequence.finalize();
367368

368369
assert!(result.is_err());
@@ -374,7 +375,8 @@ mod tests {
374375

375376
#[test]
376377
fn test_finalize_clears_pending_state() {
377-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
378+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
379+
FlashBlockPendingSequence::new();
378380
let factory = TestFlashBlockFactory::new();
379381

380382
let fb0 = factory.flashblock_at(0).build();
@@ -391,7 +393,8 @@ mod tests {
391393

392394
#[test]
393395
fn test_finalize_preserves_execution_outcome() {
394-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
396+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
397+
FlashBlockPendingSequence::new();
395398
let factory = TestFlashBlockFactory::new();
396399

397400
let fb0 = factory.flashblock_at(0).build();
@@ -408,7 +411,8 @@ mod tests {
408411

409412
#[test]
410413
fn test_finalize_clears_cached_reads() {
411-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
414+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
415+
FlashBlockPendingSequence::new();
412416
let factory = TestFlashBlockFactory::new();
413417

414418
let fb0 = factory.flashblock_at(0).build();
@@ -426,7 +430,8 @@ mod tests {
426430

427431
#[test]
428432
fn test_finalize_multiple_times_after_refill() {
429-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
433+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
434+
FlashBlockPendingSequence::new();
430435
let factory = TestFlashBlockFactory::new();
431436

432437
// First sequence
@@ -616,7 +621,8 @@ mod tests {
616621

617622
#[test]
618623
fn test_try_from_pending_to_complete_valid() {
619-
let mut pending: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
624+
let mut pending: FlashBlockPendingSequence<FlashBlock> =
625+
FlashBlockPendingSequence::new();
620626
let factory = TestFlashBlockFactory::new();
621627

622628
let fb0 = factory.flashblock_at(0).build();
@@ -637,7 +643,8 @@ mod tests {
637643

638644
#[test]
639645
fn test_try_from_preserves_execution_outcome() {
640-
let mut pending: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
646+
let mut pending: FlashBlockPendingSequence<FlashBlock> =
647+
FlashBlockPendingSequence::new();
641648
let factory = TestFlashBlockFactory::new();
642649

643650
let fb0 = factory.flashblock_at(0).build();
@@ -657,7 +664,8 @@ mod tests {
657664

658665
#[test]
659666
fn test_last_flashblock_returns_highest_index() {
660-
let mut sequence: FlashBlockPendingSequence<FlashBlock> = FlashBlockPendingSequence::new();
667+
let mut sequence: FlashBlockPendingSequence<FlashBlock> =
668+
FlashBlockPendingSequence::new();
661669
let factory = TestFlashBlockFactory::new();
662670

663671
let fb0 = factory.flashblock_at(0).build();

crates/optimism/flashblocks/src/service.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,8 @@ where
5151
N: NodePrimitives,
5252
P: FlashblockPayload<SignedTx = N::SignedTx>,
5353
S: Stream<Item = eyre::Result<P>> + Unpin + 'static,
54-
EvmConfig: ConfigureEvm<Primitives = N, NextBlockEnvCtx: From<P::Base> + Unpin>
55-
+ Clone
56-
+ 'static,
54+
EvmConfig:
55+
ConfigureEvm<Primitives = N, NextBlockEnvCtx: From<P::Base> + Unpin> + Clone + 'static,
5756
Provider: StateProviderFactory
5857
+ BlockReaderIdExt<
5958
Header = HeaderTy<N>,
@@ -92,7 +91,9 @@ where
9291
}
9392

9493
/// Returns the sender half to the flashblock sequence.
95-
pub const fn block_sequence_broadcaster(&self) -> &broadcast::Sender<FlashBlockCompleteSequence<P>> {
94+
pub const fn block_sequence_broadcaster(
95+
&self,
96+
) -> &broadcast::Sender<FlashBlockCompleteSequence<P>> {
9697
self.sequences.block_sequence_broadcaster()
9798
}
9899

crates/optimism/flashblocks/src/traits.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,10 @@ pub trait FlashblockPayload:
8686
/// or an error if decoding/recovery failed.
8787
fn recover_transactions(
8888
&self,
89-
) -> impl Iterator<Item = Result<alloy_eips::eip2718::WithEncoded<reth_primitives_traits::Recovered<Self::SignedTx>>, RecoveryError>>;
89+
) -> impl Iterator<
90+
Item = Result<
91+
alloy_eips::eip2718::WithEncoded<reth_primitives_traits::Recovered<Self::SignedTx>>,
92+
RecoveryError,
93+
>,
94+
>;
9095
}

crates/optimism/flashblocks/src/worker.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,14 @@ where
144144
}
145145
}
146146

147-
impl<EvmConfig: Clone, Provider: Clone, Base> Clone for FlashBlockBuilder<EvmConfig, Provider, Base> {
147+
impl<EvmConfig: Clone, Provider: Clone, Base> Clone
148+
for FlashBlockBuilder<EvmConfig, Provider, Base>
149+
{
148150
fn clone(&self) -> Self {
149-
Self { evm_config: self.evm_config.clone(), provider: self.provider.clone(), _base: PhantomData }
151+
Self {
152+
evm_config: self.evm_config.clone(),
153+
provider: self.provider.clone(),
154+
_base: PhantomData,
155+
}
150156
}
151157
}

crates/optimism/flashblocks/tests/it/stream.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use futures_util::stream::StreamExt;
2+
use op_alloy_rpc_types_engine::OpFlashblockPayload;
23
use reth_optimism_flashblocks::WsFlashBlockStream;
34

45
#[tokio::test]
56
async fn test_streaming_flashblocks_from_remote_source_is_successful() {
67
let items = 3;
78
let ws_url = "wss://sepolia.flashblocks.base.org/ws".parse().unwrap();
8-
let stream = WsFlashBlockStream::new(ws_url);
9+
let stream: WsFlashBlockStream<_, _, _, OpFlashblockPayload> = WsFlashBlockStream::new(ws_url);
910

1011
let blocks: Vec<_> = stream.take(items).collect().await;
1112

crates/optimism/rpc/src/eth/mod.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ use alloy_consensus::BlockHeader;
1616
use alloy_primitives::{B256, U256};
1717
use eyre::WrapErr;
1818
use op_alloy_network::Optimism;
19-
use op_alloy_rpc_types_engine::{OpFlashblockPayload};
19+
use op_alloy_rpc_types_engine::OpFlashblockPayload;
2020
pub use receipt::{OpReceiptBuilder, OpReceiptFieldsBuilder};
2121
use reqwest::Url;
2222
use reth_chainspec::{EthereumHardforks, Hardforks};
2323
use reth_evm::ConfigureEvm;
2424
use reth_node_api::{FullNodeComponents, FullNodeTypes, HeaderTy, NodeTypes};
25-
use reth_primitives_traits::NodePrimitives;
2625
use reth_node_builder::rpc::{EthApiBuilder, EthApiCtx};
2726
use reth_optimism_flashblocks::{
2827
FlashBlockBuildInfo, FlashBlockCompleteSequence, FlashBlockCompleteSequenceRx,
29-
FlashBlockService, FlashblocksListeners, FlashblockPayload, PendingBlockRx, PendingFlashBlock,
28+
FlashBlockService, FlashblockPayload, FlashblocksListeners, PendingBlockRx, PendingFlashBlock,
3029
WsFlashBlockStream,
3130
};
31+
use reth_primitives_traits::NodePrimitives;
3232
use reth_rpc::eth::core::EthApiInner;
3333
use reth_rpc_eth_api::{
3434
helpers::{
@@ -366,8 +366,11 @@ impl<N: RpcNodeCore, Rpc: RpcConvert, F: FlashblockPayload> fmt::Debug for OpEth
366366
}
367367

368368
/// Container type `OpEthApi`
369-
pub struct OpEthApiInner<N: RpcNodeCore, Rpc: RpcConvert, F: FlashblockPayload = OpFlashblockPayload>
370-
{
369+
pub struct OpEthApiInner<
370+
N: RpcNodeCore,
371+
Rpc: RpcConvert,
372+
F: FlashblockPayload = OpFlashblockPayload,
373+
> {
371374
/// Gateway to node's core components.
372375
eth_api: EthApiNodeBackend<N, Rpc>,
373376
/// Sequencer client, configured to forward submitted transactions to sequencer of given OP
@@ -383,7 +386,9 @@ pub struct OpEthApiInner<N: RpcNodeCore, Rpc: RpcConvert, F: FlashblockPayload =
383386
flashblocks: Option<FlashblocksListeners<N::Primitives, F>>,
384387
}
385388

386-
impl<N: RpcNodeCore, Rpc: RpcConvert, F: FlashblockPayload> fmt::Debug for OpEthApiInner<N, Rpc, F> {
389+
impl<N: RpcNodeCore, Rpc: RpcConvert, F: FlashblockPayload> fmt::Debug
390+
for OpEthApiInner<N, Rpc, F>
391+
{
387392
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
388393
f.debug_struct("OpEthApiInner").finish()
389394
}
@@ -562,8 +567,9 @@ where
562567
let in_progress_rx = service.subscribe_in_progress();
563568
ctx.components.task_executor().spawn(Box::pin(service.run(tx)));
564569

565-
566-
if flashblock_consensus { todo!("Modularize FlashBlockConsensusClient?") }
570+
if flashblock_consensus {
571+
todo!("Modularize FlashBlockConsensusClient?")
572+
}
567573
// if flashblock_consensus {
568574
// info!(target: "reth::cli", "Launching FlashBlockConsensusClient");
569575
// let flashblock_client = FlashBlockConsensusClient::new(

0 commit comments

Comments
 (0)