diff --git a/Cargo.toml b/Cargo.toml index 32b0c3b1..c0967a90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [workspace.package] version = "0.0.1" -edition = "2021" -rust-version = "1.82" +edition = "2024" +rust-version = "1.85" license = "MIT OR Apache-2.0" exclude = [".github/"] diff --git a/crates/chain-orchestrator/src/lib.rs b/crates/chain-orchestrator/src/lib.rs index 176f0213..020d5647 100644 --- a/crates/chain-orchestrator/src/lib.rs +++ b/crates/chain-orchestrator/src/lib.rs @@ -3,9 +3,9 @@ use alloy_consensus::Header; use alloy_eips::{BlockHashOrNumber, Encodable2718}; -use alloy_primitives::{b256, keccak256, B256}; +use alloy_primitives::{B256, b256, keccak256}; use alloy_provider::Provider; -use futures::{pin_mut, task::AtomicWaker, Stream, StreamExt, TryStreamExt}; +use futures::{Stream, StreamExt, TryStreamExt, pin_mut, task::AtomicWaker}; use reth_chainspec::EthChainSpec; use reth_network_p2p::{BlockClient, BodiesClient}; use reth_scroll_primitives::ScrollBlock; @@ -26,8 +26,8 @@ use std::{ collections::{HashMap, VecDeque}, pin::Pin, sync::{ - atomic::{AtomicU64, Ordering}, Arc, + atomic::{AtomicU64, Ordering}, }, task::{Context, Poll}, time::Instant, @@ -92,10 +92,10 @@ pub struct ChainOrchestrator { } impl< - ChainSpec: ScrollHardforks + EthChainSpec + Send + Sync + 'static, - BC: BlockClient + Send + Sync + 'static, - P: Provider + 'static, - > ChainOrchestrator + ChainSpec: ScrollHardforks + EthChainSpec + Send + Sync + 'static, + BC: BlockClient + Send + Sync + 'static, + P: Provider + 'static, +> ChainOrchestrator { /// Creates a new chain orchestrator. pub async fn new( @@ -143,17 +143,16 @@ impl< chain_orchestrator_fut: PendingChainOrchestratorFuture, ) -> PendingChainOrchestratorFuture { let metric = self.metrics.get(&item).expect("metric exists").clone(); - let fut_wrapper = Box::pin(async move { + Box::pin(async move { let now = Instant::now(); let res = chain_orchestrator_fut.await; metric.task_duration.record(now.elapsed().as_secs_f64()); res - }); - fut_wrapper + }) } /// Sets the L1 synced status to the provided value. - pub fn set_l1_synced_status(&mut self, l1_synced: bool) { + pub const fn set_l1_synced_status(&mut self, l1_synced: bool) { self.l1_synced = l1_synced; } @@ -888,10 +887,10 @@ async fn init_chain_from_db + 'static>( } impl< - ChainSpec: ScrollHardforks + 'static, - BC: BlockClient + Send + Sync + 'static, - P: Provider + Send + Sync + 'static, - > Stream for ChainOrchestrator + ChainSpec: ScrollHardforks + 'static, + BC: BlockClient + Send + Sync + 'static, + P: Provider + Send + Sync + 'static, +> Stream for ChainOrchestrator { type Item = Result; @@ -1117,7 +1116,7 @@ mod test { use super::*; use alloy_consensus::Header; use alloy_eips::{BlockHashOrNumber, BlockNumHash}; - use alloy_primitives::{address, bytes, B256, U256}; + use alloy_primitives::{B256, U256, address, bytes}; use alloy_provider::{ProviderBuilder, RootProvider}; use alloy_transport::mock::Asserter; use arbitrary::{Arbitrary, Unstructured}; @@ -1126,15 +1125,15 @@ mod test { use rand::Rng; use reth_eth_wire_types::HeadersDirection; use reth_network_p2p::{ + BodiesClient, download::DownloadClient, error::PeerRequestResult, headers::client::{HeadersClient, HeadersRequest}, priority::Priority, - BodiesClient, }; use reth_network_peers::{PeerId, WithPeerId}; use reth_primitives_traits::Block; - use reth_scroll_chainspec::{ScrollChainSpec, SCROLL_MAINNET}; + use reth_scroll_chainspec::{SCROLL_MAINNET, ScrollChainSpec}; use rollup_node_primitives::BatchCommitData; use scroll_alloy_network::Scroll; use scroll_db::test_utils::setup_test_db; @@ -1568,7 +1567,9 @@ mod test { to: address!("Ba50f5340FB9F3Bd074bD638c9BE13eCB36E603d"), value: U256::ZERO, sender: address!("61d8d3E7F7c656493d1d76aAA1a836CEdfCBc27b"), - input: bytes!("8ef1332e000000000000000000000000323522a8de3cddeddbb67094eecaebc2436d6996000000000000000000000000323522a8de3cddeddbb67094eecaebc2436d699600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000001034de00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000"), + input: bytes!( + "8ef1332e000000000000000000000000323522a8de3cddeddbb67094eecaebc2436d6996000000000000000000000000323522a8de3cddeddbb67094eecaebc2436d699600000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000000000001034de00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000" + ), }; chain_orchestrator.handle_l1_notification(L1Notification::L1Message { message: message.clone(), diff --git a/crates/derivation-pipeline/src/error.rs b/crates/derivation-pipeline/src/error.rs index 099c83ab..d6dcb64c 100644 --- a/crates/derivation-pipeline/src/error.rs +++ b/crates/derivation-pipeline/src/error.rs @@ -19,6 +19,14 @@ pub enum DerivationPipelineError { /// Missing L1 message. #[error("missing l1 message for L2 block {0:?}")] MissingL1Message(L2Block), + /// Blocks are not contiguous + #[error("loss of contiguity in blocks: expected {expected}, got {got}")] + BlockDiscontinuity { + /// The expected block number. + expected: u64, + /// The actual block number. + got: u64, + }, /// Unknown batch. #[error("unknown batch for index {0}")] UnknownBatch(u64), diff --git a/crates/derivation-pipeline/src/lib.rs b/crates/derivation-pipeline/src/lib.rs index 9ce63dee..4b32fbf6 100644 --- a/crates/derivation-pipeline/src/lib.rs +++ b/crates/derivation-pipeline/src/lib.rs @@ -29,7 +29,7 @@ use rollup_node_primitives::{ }; use rollup_node_providers::{BlockDataProvider, L1Provider}; use scroll_alloy_rpc_types_engine::{BlockDataHint, ScrollPayloadAttributes}; -use scroll_codec::{decoding::payload::PayloadData, Codec}; +use scroll_codec::{Codec, decoding::payload::PayloadData}; use scroll_db::{Database, DatabaseReadOperations, DatabaseTransactionProvider, L1MessageKey}; use tokio::time::Interval; @@ -68,6 +68,8 @@ pub struct DerivationPipeline

{ metrics: DerivationPipelineMetrics, /// The interval at which the derivation pipeline should report queue size metrics. queue_metrics_interval: Interval, + /// The L2 block number associated with the last processed payload attribute. + latest_processed_l2_block_number: u64, } impl Debug for DerivationPipeline

{ @@ -83,6 +85,7 @@ impl Debug for DerivationPipeline

{ .field("attributes_queue", &self.attributes_queue) .field("waker", &self.waker) .field("metrics", &self.metrics) + .field("latest_processed_l2_block_number", &self.latest_processed_l2_block_number) .finish() } } @@ -107,14 +110,15 @@ where waker: None, metrics: DerivationPipelineMetrics::default(), queue_metrics_interval: delayed_interval(QUEUE_METRICS_INTERVAL), + latest_processed_l2_block_number: 0, } } /// Handles a new batch by pushing it in its internal queue. Wakes the waker in order to trigger /// a call to poll. pub fn push_batch(&mut self, batch_info: BatchInfo, l1_block_number: u64) { - let block_info = Arc::new(batch_info); - self.batch_queue.push_back(WithFinalizedBlockNumber::new(l1_block_number, block_info)); + let batch_info = Arc::new(batch_info); + self.batch_queue.push_back(WithFinalizedBlockNumber::new(l1_block_number, batch_info)); if let Some(waker) = self.waker.take() { waker.wake() } @@ -127,6 +131,7 @@ where let metrics = self.metrics.clone(); let provider = self.l1_provider.clone(); let l1_v2_message_queue_start_index = self.l1_v2_message_queue_start_index; + let latest_processed_l2_block_number = self.latest_processed_l2_block_number; if let Some(info) = self.batch_queue.pop_front() { let block_number = info.number; @@ -145,16 +150,22 @@ where .ok_or((info.clone(), DerivationPipelineError::UnknownBatch(index)))?; // derive the attributes and attach the corresponding batch info. - let attrs = derive(batch, provider, tx, l1_v2_message_queue_start_index) - .await - .map_err(|err| (info.clone(), err))?; + let attrs = derive( + batch, + provider, + tx, + l1_v2_message_queue_start_index, + latest_processed_l2_block_number, + ) + .await + .map_err(|err| (info.clone(), err))?; // update metrics. metrics.derived_blocks.increment(attrs.len() as u64); let execution_duration = derive_start.elapsed().as_secs_f64(); metrics.blocks_per_second.set(attrs.len() as f64 / execution_duration); - Ok(attrs.into_iter().map(|attr| (attr, *info).into()).collect()) + Ok(attrs) }); return Some(WithFinalizedBatchInfo::new(index, block_number, fut)); } @@ -213,13 +224,13 @@ where // return attributes from the queue if any. if let Some(attribute) = this.attributes_queue.pop_front() { - return Poll::Ready(Some(attribute)) + return Poll::Ready(Some(attribute)); } // if future is None and the batch queue is empty, store the waker and return. if this.pipeline_future.is_none() && this.batch_queue.is_empty() { this.waker = Some(cx.waker().clone()); - return Poll::Pending + return Poll::Pending; } // if the future is None, handle the next batch. @@ -228,21 +239,33 @@ where } // poll the futures and handle result. - if let Some(Poll::Ready(res)) = this.pipeline_future.as_mut().map(|fut| fut.poll_unpin(cx)) + let l1_finalized_block_number = + this.pipeline_future.as_ref().map(|f| f.number).unwrap_or_default(); + if let Some(Poll::Ready(res)) = + this.pipeline_future.as_mut().map(|fut| fut.inner.poll_unpin(cx)) { match res { - WithFinalizedBatchInfo { inner: Ok(attributes), number, .. } => { + Ok(attributes) => { + if let Some(attr) = attributes.last() && + attr.l2_block_number > this.latest_processed_l2_block_number + { + this.latest_processed_l2_block_number = attr.l2_block_number + } + let attributes = attributes .into_iter() - .map(|attr| WithFinalizedBlockNumber::new(number, attr)); + .map(|attr| WithFinalizedBlockNumber::new(l1_finalized_block_number, attr)); this.attributes_queue.extend(attributes); this.pipeline_future = None; cx.waker().wake_by_ref(); } - WithFinalizedBatchInfo { inner: Err((batch_info, err)), number, .. } => { + Err((batch_info, err)) => { tracing::error!(target: "scroll::node::derivation_pipeline", batch_info = ?*batch_info, ?err, "failed to derive payload attributes for batch"); // retry polling the same batch. - this.batch_queue.push_front(WithFinalizedBlockNumber::new(number, batch_info)); + this.batch_queue.push_front(WithFinalizedBlockNumber::new( + l1_finalized_block_number, + batch_info, + )); let fut = this.handle_next_batch().expect("batch_queue not empty"); this.pipeline_future = Some(fut); // notify the waker that work can be done. @@ -261,7 +284,8 @@ pub async fn derive Result, DerivationPipelineError> { + latest_processed_l2_block_number: u64, +) -> Result, DerivationPipelineError> { // fetch the blob then decode the input batch. let blob = if let Some(hash) = batch.blob_versioned_hash { l1_provider.blob(batch.block_timestamp, hash).await? @@ -271,6 +295,8 @@ pub async fn derive( return Err(DerivationPipelineError::InvalidL1MessagesCount { expected: total_l1_messages, got: messages.len() as u64, - }) + }); } Ok(Box::new(messages.into_iter())) @@ -400,15 +444,15 @@ mod tests { use std::sync::Arc; use alloy_eips::Decodable2718; - use alloy_primitives::{address, b256, bytes, U256}; + use alloy_primitives::{U256, address, b256, bytes}; use futures::StreamExt; use rollup_node_primitives::L1MessageEnvelope; - use rollup_node_providers::{test_utils::MockL1Provider, L1ProviderError}; + use rollup_node_providers::{L1ProviderError, test_utils::MockL1Provider}; use scroll_alloy_consensus::TxL1Message; use scroll_alloy_rpc_types_engine::BlockDataHint; use scroll_codec::decoding::test_utils::read_to_bytes; use scroll_db::{ - test_utils::setup_test_db, DatabaseTransactionProvider, DatabaseWriteOperations, + DatabaseTransactionProvider, DatabaseWriteOperations, test_utils::setup_test_db, }; use std::collections::HashMap; @@ -443,7 +487,9 @@ mod tests { to: address!("781e90f1c8Fc4611c9b7497C3B47F99Ef6969CbC"), value: U256::ZERO, sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), - input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + input: bytes!( + "8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ), }, }; @@ -457,7 +503,9 @@ mod tests { to: address!("781e90f1c8fc4611c9b7497c3b47f99ef6969cbc"), value: U256::ZERO, sender: address!("7885BcBd5CeCEf1336b5300fb5186A12DDD8c478"), - input: bytes!("8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + input: bytes!( + "8ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ), }, }; @@ -497,12 +545,14 @@ mod tests { ScrollPayloadAttributesWithBatchInfo { payload_attributes: Default::default(), batch_info: BatchInfo { index: 9, hash: Default::default() }, + l2_block_number: 0, }, )] .into(), waker: None, metrics: Default::default(), queue_metrics_interval: delayed_interval(QUEUE_METRICS_INTERVAL), + latest_processed_l2_block_number: 0, }; // should clear all data related to batch index >= 9. @@ -564,15 +614,14 @@ mod tests { { if a.payload_attributes.timestamp == 1696935657 { attribute = a; - break + break; } } let expected = ScrollPayloadAttributes { - payload_attributes: PayloadAttributes { - timestamp: 1696935657, - ..Default::default() - }, - transactions: Some(vec![bytes!("f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd")]), + payload_attributes: PayloadAttributes { timestamp: 1696935657, ..Default::default() }, + transactions: Some(vec![bytes!( + "f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd" + )]), no_tx_pool: true, block_data_hint: BlockDataHint::none(), gas_limit: Some(10_000_000), @@ -626,15 +675,14 @@ mod tests { { if a.payload_attributes.timestamp == 1696935657 { attribute = a; - break + break; } } let expected = ScrollPayloadAttributes { - payload_attributes: PayloadAttributes { - timestamp: 1696935657, - ..Default::default() - }, - transactions: Some(vec![bytes!("f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd")]), + payload_attributes: PayloadAttributes { timestamp: 1696935657, ..Default::default() }, + transactions: Some(vec![bytes!( + "f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd" + )]), no_tx_pool: true, block_data_hint: BlockDataHint::none(), gas_limit: Some(10_000_000), @@ -670,34 +718,39 @@ mod tests { let l1_provider = MockL1Provider { l1_messages_provider, blobs: HashMap::new() }; let l2_provider = MockL2Provider; - let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider, u64::MAX).await?; - let attribute = - attributes.iter().find(|a| a.payload_attributes.timestamp == 1696935384).unwrap(); + let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider, u64::MAX, 0).await?; + let attribute = attributes + .iter() + .find(|a| a.payload_attributes.payload_attributes.timestamp == 1696935384) + .unwrap(); let expected = ScrollPayloadAttributes { - payload_attributes: PayloadAttributes { - timestamp: 1696935384, - ..Default::default() - }, - transactions: Some(vec![bytes!("7ef901b7218302904094781e90f1c8fc4611c9b7497c3b47f99ef6969cbc80b901848ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947885bcbd5cecef1336b5300fb5186a12ddd8c478"), bytes!("7ef901b7228302904094781e90f1c8fc4611c9b7497c3b47f99ef6969cbc80b901848ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947885bcbd5cecef1336b5300fb5186a12ddd8c478")]), + payload_attributes: PayloadAttributes { timestamp: 1696935384, ..Default::default() }, + transactions: Some(vec![ + bytes!( + "7ef901b7218302904094781e90f1c8fc4611c9b7497c3b47f99ef6969cbc80b901848ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf0000000000000000000000000000000000000000000000000006a94d74f430000000000000000000000000000000000000000000000000000000000000000002100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000ca266224613396a0e8d4c2497dbc4f33dd6cdeff000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947885bcbd5cecef1336b5300fb5186a12ddd8c478" + ), + bytes!( + "7ef901b7228302904094781e90f1c8fc4611c9b7497c3b47f99ef6969cbc80b901848ef1332e0000000000000000000000007f2b8c31f88b6006c382775eea88297ec1e3e9050000000000000000000000006ea73e05adc79974b931123675ea8f78ffdacdf000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e8748000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f000000000000000000000000982fe4a7cbd74bb3422ebe46333c3e8046c12c7f00000000000000000000000000000000000000000000000000470de4df8200000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000947885bcbd5cecef1336b5300fb5186a12ddd8c478" + ), + ]), no_tx_pool: true, block_data_hint: BlockDataHint::none(), gas_limit: Some(10_000_000), }; - assert_eq!(attribute, &expected); + assert_eq!(attribute.payload_attributes, expected); let attribute = attributes.last().unwrap(); let expected = ScrollPayloadAttributes { - payload_attributes: PayloadAttributes { - timestamp: 1696935657, - ..Default::default() - }, - transactions: Some(vec![bytes!("f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd")]), + payload_attributes: PayloadAttributes { timestamp: 1696935657, ..Default::default() }, + transactions: Some(vec![bytes!( + "f88c8202658417d7840082a4f294530000000000000000000000000000000000000280a4bede39b500000000000000000000000000000000000000000000000000000001669aa2f583104ec4a07461e6555f927393ebdf5f183738450c3842bc3b86a1db7549d9bee21fadd0b1a06d7ba96897bd9fb8e838a327d3ca34be66da11955f10d1fb2264949071e9e8cd" + )]), no_tx_pool: true, block_data_hint: BlockDataHint::none(), gas_limit: Some(10_000_000), }; - assert_eq!(attribute, &expected); + assert_eq!(attribute.payload_attributes, expected); Ok(()) } @@ -730,7 +783,9 @@ mod tests { to: address!("bA50F5340fb9f3bD074Bd638C9be13Ecb36e603D"), value: U256::ZERO, sender: address!("61d8d3E7F7c656493d1d76aAA1a836CEdfCBc27b"), - input: bytes!("8ef1332e0000000000000000000000008a54a2347da2562917304141ab67324615e9866d00000000000000000000000091e8addfe1358aca5314c644312d38237fc1101c000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e874800000000000000000000000098110937b5d6c5fcb0ba99480e585d2364e9809c00000000000000000000000098110937b5d6c5fcb0ba99480e585d2364e9809c000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + input: bytes!( + "8ef1332e0000000000000000000000008a54a2347da2562917304141ab67324615e9866d00000000000000000000000091e8addfe1358aca5314c644312d38237fc1101c000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e874800000000000000000000000098110937b5d6c5fcb0ba99480e585d2364e9809c00000000000000000000000098110937b5d6c5fcb0ba99480e585d2364e9809c000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ), }, }, L1MessageEnvelope { @@ -743,7 +798,9 @@ mod tests { to: address!("bA50F5340fb9f3bD074Bd638C9be13Ecb36e603D"), value: U256::ZERO, sender: address!("61d8d3E7F7c656493d1d76aAA1a836CEdfCBc27b"), - input: bytes!("8ef1332e0000000000000000000000008a54a2347da2562917304141ab67324615e9866d00000000000000000000000091e8addfe1358aca5314c644312d38237fc1101c000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e874800000000000000000000000098110937b5d6c5fcb0ba99480e585d2364e9809c00000000000000000000000098110937b5d6c5fcb0ba99480e585d2364e9809c000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + input: bytes!( + "8ef1332e0000000000000000000000008a54a2347da2562917304141ab67324615e9866d00000000000000000000000091e8addfe1358aca5314c644312d38237fc1101c000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e874800000000000000000000000098110937b5d6c5fcb0ba99480e585d2364e9809c00000000000000000000000098110937b5d6c5fcb0ba99480e585d2364e9809c000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ), }, }, L1MessageEnvelope { @@ -756,7 +813,9 @@ mod tests { to: address!("bA50F5340fb9f3bD074Bd638C9be13Ecb36e603D"), value: U256::ZERO, sender: address!("61d8d3E7F7c656493d1d76aAA1a836CEdfCBc27b"), - input: bytes!("8ef1332e0000000000000000000000008a54a2347da2562917304141ab67324615e9866d00000000000000000000000091e8addfe1358aca5314c644312d38237fc1101c0000000000000000000000000000000000000000000000004563918244f40000000000000000000000000000000000000000000000000000000000000000001500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e87480000000000000000000000004721cf824b6750b58d781fd1336d92a082704c7a0000000000000000000000004721cf824b6750b58d781fd1336d92a082704c7a0000000000000000000000000000000000000000000000004563918244f400000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"), + input: bytes!( + "8ef1332e0000000000000000000000008a54a2347da2562917304141ab67324615e9866d00000000000000000000000091e8addfe1358aca5314c644312d38237fc1101c0000000000000000000000000000000000000000000000004563918244f40000000000000000000000000000000000000000000000000000000000000000001500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000a4232e87480000000000000000000000004721cf824b6750b58d781fd1336d92a082704c7a0000000000000000000000004721cf824b6750b58d781fd1336d92a082704c7a0000000000000000000000000000000000000000000000004563918244f400000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ), }, }, ]; @@ -771,10 +830,10 @@ mod tests { let l2_provider = MockL2Provider; // derive attributes and extract l1 messages. - let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider, u64::MAX).await?; + let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider, u64::MAX, 0).await?; let derived_l1_messages: Vec<_> = attributes .into_iter() - .filter_map(|a| a.transactions) + .filter_map(|a| a.payload_attributes.transactions) .flatten() .filter_map(|rlp| { let buf = &mut rlp.as_ref(); @@ -827,10 +886,10 @@ mod tests { let l2_provider = MockL2Provider; // derive attributes and extract l1 messages. - let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider, u64::MAX).await?; + let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider, u64::MAX, 0).await?; let derived_l1_messages: Vec<_> = attributes .into_iter() - .filter_map(|a| a.transactions) + .filter_map(|a| a.payload_attributes.transactions) .flatten() .filter_map(|rlp| { let buf = &mut rlp.as_ref(); @@ -943,7 +1002,7 @@ mod tests { }; let l2_provider = MockL2Provider; - let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider, u64::MAX).await?; + let attributes: Vec<_> = derive(batch_data, l1_provider, l2_provider, u64::MAX, 0).await?; let attribute = attributes.last().unwrap(); let expected = ScrollPayloadAttributes { @@ -951,12 +1010,12 @@ mod tests { timestamp: 1725455077, ..Default::default() }, - transactions: Some(vec![bytes!("02f9017a830827501d8402c15db28404220c8b833bf0fa94d6238ad2887166031567616d9a54b21eb70e4dfd865af3107a4000b901042f73d60a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000005727465727400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045254525400000000000000000000000000000000000000000000000000000000c080a01ab3cf2a93857170eb1a8a564a00dc54d9dbc081aff236614c05f00f89564e7ea076143846b8e83dbbedc9f7f39d9e1efafd2aa323af5977acbc3b7559eaa61338"), bytes!("02f90213830827505d830ebf5b8403c6fdd68303160094aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a96557e8b05a2e0dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000000000001ce571940000000000000000000000000000000000000000000000000000000000000000c001a038385859bdc661006ee04173ef0c5e7d259f213b38ec65c5ac5664cc2263588aa06edfcce7499e39f78ff336265222272f75e3b8b6292bc5e7a9b785ec2764357f"), bytes!("f901d43c84039387008301eb0694dc3d8318fbaec2de49281843f5bba22e78338146870110d9316ec000b901647c2ccc45000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000006d1aa44dfe55c66e2dd413b045aaf3db92e8bf920000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004108690eca0b490e1a9ebaf85710cce8dd72d48eeb6e74f03fcf1ea58638afbe8808c5076a512e0993e77b117e938d8505bd41380209374a5fa1736040386f9c7a1c0000000000000000000000000000000000000000000000000000000000000083104ec3a00a9daf43e323158d459652563edb141a0df3f2b6d890f6307aac52c74e0bbbbfa02163e491f0cfbeec828ccf98b8877db9ba2a6552e18b2d4d3a8c5ded1d407d73"), bytes!("f8948201ef8402faf08083018a31940241fb446d6793866245b936f2c3418f818bdcd3879970b65dfdc000a4b6b55f250000000000000000000000000000000000000000000000000098c445ad57800083104ec4a097f352f786ffb1ddf9d942286cbd9ff6839f46093767c4326a1cf9bc1f117500a048cfccfe406c692cc717a670a0148fef79789aceb282cc3d0e6805593ad605cf"), bytes!("f90bd45c8402faf080830e3b1994a2a9fd768d482caf519d749d3123a133db278a66876a94d74f42ffffb90b645973bd5e000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f97000000000000000000000000000000000000000000000000006a94d74f42ffff000000000000000000000000000000000000000000000003e3fdab75eefcae8200000000000000000000000083412753e54768f8bed921e5556680e7a3e1910800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000066d85f8c0000000000000000000000000000000000000000000000000000000000000a600000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000009e4e21fd0e90000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000007600000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000005300000000000000000000000000000000000004000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f970000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000066d85f8c00000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000401b96cfd40000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000008f8ed95b3b3ed2979d1ee528f38ca3e481a94dd9000000000000000000000000530000000000000000000000000000000000000400000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000006a94d74f42ffff0000000000000000000000000000000000000000000000000000000000030f0b000000000000000000000000000000000000000000000000000000000000004063407a490000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000ccdf79ced5fd02af299d3548b4e35ed6163064bf00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000000000044a4e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000041783c314dc20000000000000003e6fce47750c3ecea0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f97000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000e7a23e2f9abf813ad55e55ce26c0712bf1593332000000000000000000000000000000000000000000000000006a94d74f42ffff000000000000000000000000000000000000000000000003da07eeddb6d6509a00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc8970000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000006a94d74f42ffff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a8337cce66f217701071a68a503caa8bf139b1840000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002317b22536f75726365223a22686970706f2d73776170222c22416d6f756e74496e555344223a2237322e323133343430313133383636222c22416d6f756e744f7574555344223a2237312e3931343239373937333238373232222c22526566657272616c223a22222c22466c616773223a302c22416d6f756e744f7574223a223731373638373037373539383535313532373730222c2254696d657374616d70223a313732353435353036382c22496e74656772697479496e666f223a7b224b65794944223a2231222c225369676e6174757265223a22436d38564441314d3466386b696f525546383976695344495765474e785858726c3842643651396a70493057764c652b6f4d655246394472484e73544c463045315a5842736e55384b4a393173693447674631524d74614d334c777030324f5136383879704e796e436b3978425a4b2b796b427074416647614b35516a49794f45712f36494d4a654d3772626f59444675713166414f7370394634683543714c44622f7469722b507562677131474b693742556a6d6433584463796239386a70377a5132783533744e52766e52683955484f44636932516252634a6e337272394157327252397653697a4b46336874676c546b794a6a61725251446e735644772f3274687447595a4e7a516a417361354b717236323679796e466f49493175387779714b547a6b3052512f6f464d4a7a55752b454563704d752b4c626a7835322f50556c6735526678666568507066666a4a53514a773d3d227d7d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec3a0aa2e2380709f2b0c6b8fcc48ba4c6942aea501a867d2bfe27a5979a9900b9692a044a21df53a177fff5c1348b3cdb23f82bab41b8fea58d68138234a302d87d904"), bytes!("f88d8201078403938700830100a794e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134da0883104ec3a054336f213352ee4faf92a752befcfe39c7a6a18ce3d7bcc56b6dc875454d76dba00e9ebd78c3aa468f4d311e3ebfeb0c8c79a1f3cfc3a26ed71d3665fc6820b5d5"), bytes!("02f8b28308275024830ebf5b8403c6fdd6830415a894ec53c830f4444a8a56455c6836b5d2aa794289aa80b844830cbbbd000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c00000000000000000000000000000000000000000000000021b745fecb550714c080a0e8f444aca5c459c27676e185579de1d6cb5eb88d4e350fd6dade07946ede16a8a0165e301acebf43a608e747e07b2e32ddd86cebb24ec98440c34b919c49fcedd7"), bytes!("02f9025483082750518403db832c8403db832c8308bcf394c47300428b6ad2c7d03bb76d05a176058b47e6b080b901e4f17325e70000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b490000000000000000000000000000000000000000000000000000000000000040000000000000000000000000295f5db3e40c5155271eaf9058d54b185c5fff1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002dbce60ebeaafb77e5472308f432f78ac3ae07d90000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000074670a3998d9d6622e32d0847ff5977c37e0ec91000000000000000000000000000000000000000000000000000000000004e900c080a0f63bb59e762a76fe9252065519362897d63795bedffe88fc922a683c82e7e8d0a07693bc90d37b2922650f8e065a0daac6ea71af62c83b4fa69285e7c511785b7a"), bytes!("f902ae819a8403ef1480830ae583940b4d5229bb5201e277d3937ce1704227c96bbc5f80b902443c0427150000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b4900000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001bd63bc394b1e44a60f0d5ea4fbb61937d973ddcd80b241370f7939607494853112eb2c36e5e4a5d7b9184961380642680541125dfdd9c0764b7a2efad85f926c30000000000000000000000001f4a828ff025fa8270bfd1d4d952e75079bb593d0000000000000000000000000000000000000000000000000000000066d868f00000000000000000000000005b0d7cfaf6557f026591fc29b8f050d7537b476400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000c5d859d4bb0963c8f946d3b3751e4976165b38e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000083104ec3a088eb2685bd6b79ae008d6b0ee74b09341d79f590c8b3faea5dfa2237644bc716a01482d3425fa581941b057a4d20960a90f20ce9e43fb425e537d565be705b3e10"), bytes!("02f8768308275083018b348398968085012d5fe6308275309409dcae886c35e45f2545c0087725e36e18b032eb865af3107a43ea80c001a0922e3023fc0a04bb29ec74efecebb381535ef2453907b101b342f8254fa73072a04b5c97606536ab8d9b7ffec96fab415729c53d18b5ff12f5a4fd148f4aa42d15"), bytes!("02f8b1830827505e830ebf5b8403c6fdd682d9c494e97c507e2b88ab55c61d528f506e13e35dcb8f1580b844a22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001c080a0dab66684749d0773893d7cce976dc4a8d2182db8a59044cd9bbd4d0d64f432a1a01bfe61ca3ceae4a81c3668369c36a0eda672f45d63e3935b13f2a694611da6d6"), bytes!("02f902138308275059830ebf5b8403c6fdd68306cff794c47300428b6ad2c7d03bb76d05a176058b47e6b080b901a4f17325e70000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b490000000000000000000000000000000000000000000000000000000000000040000000000000000000000000dcde5e9d35d5a1fe9e0eb3185459b3323e09b73b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000001121f46b5581b5285bc571703cd772b336aa12e600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000c001a054dc43a6d710d99764add84512d022b4961dd39bfe366967acec0d39a5ab820fa050362c7b199a5bae81b1b56b2bb70058f64a70a01044821232b2c11aef78250d"), bytes!("02f8b983082750288402e577518402f49919830309f194ec53c830f4444a8a56455c6836b5d2aa794289aa86d8bcb85faa78b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c0000000000000000000000000000000000000000000000000000d8bcb85faa78c080a0b12f8b14c62254ac38a2e0f567fa67c642ed485c43d9f2db2a1f93ada8173c86a0178e3a021c50b57fc6f949201d2e1667a243ba0ea94dbf3199abeecea6c20194"), bytes!("f88c81a78402faf080830100a794e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134da0883104ec3a059393dff7dc95d7e2f74053268bc1ab67e03ea0aa115929cd31912fca57d8c66a07330a31a06c957e6b4b31eee08a37c5dc15e31d1a37d4284475adc0a248fa920"),]), + transactions: Some(vec![bytes!("02f9017a830827501d8402c15db28404220c8b833bf0fa94d6238ad2887166031567616d9a54b21eb70e4dfd865af3107a4000b901042f73d60a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000005727465727400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045254525400000000000000000000000000000000000000000000000000000000c080a01ab3cf2a93857170eb1a8a564a00dc54d9dbc081aff236614c05f00f89564e7ea076143846b8e83dbbedc9f7f39d9e1efafd2aa323af5977acbc3b7559eaa61338"), bytes!("02f90213830827505d830ebf5b8403c6fdd68303160094aaaaaaaacb71bf2c8cae522ea5fa455571a7410680b901a4a15112f900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000014000000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000000000000001a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a96557e8b05a2e0dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000000000001ce571940000000000000000000000000000000000000000000000000000000000000000c001a038385859bdc661006ee04173ef0c5e7d259f213b38ec65c5ac5664cc2263588aa06edfcce7499e39f78ff336265222272f75e3b8b6292bc5e7a9b785ec2764357f"), bytes!("f901d43c84039387008301eb0694dc3d8318fbaec2de49281843f5bba22e78338146870110d9316ec000b901647c2ccc45000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000006d1aa44dfe55c66e2dd413b045aaf3db92e8bf920000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004108690eca0b490e1a9ebaf85710cce8dd72d48eeb6e74f03fcf1ea58638afbe8808c5076a512e0993e77b117e938d8505bd41380209374a5fa1736040386f9c7a1c0000000000000000000000000000000000000000000000000000000000000083104ec3a00a9daf43e323158d459652563edb141a0df3f2b6d890f6307aac52c74e0bbbbfa02163e491f0cfbeec828ccf98b8877db9ba2a6552e18b2d4d3a8c5ded1d407d73"), bytes!("f8948201ef8402faf08083018a31940241fb446d6793866245b936f2c3418f818bdcd3879970b65dfdc000a4b6b55f250000000000000000000000000000000000000000000000000098c445ad57800083104ec4a097f352f786ffb1ddf9d942286cbd9ff6839f46093767c4326a1cf9bc1f117500a048cfccfe406c692cc717a670a0148fef79789aceb282cc3d0e6805593ad605cf"), bytes!("f90bd45c8402faf080830e3b1994a2a9fd768d482caf519d749d3123a133db278a66876a94d74f42ffffb90b645973bd5e000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f97000000000000000000000000000000000000000000000000006a94d74f42ffff000000000000000000000000000000000000000000000003e3fdab75eefcae8200000000000000000000000083412753e54768f8bed921e5556680e7a3e1910800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000066d85f8c0000000000000000000000000000000000000000000000000000000000000a600000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b5000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000009e4e21fd0e90000000000000000000000000000000000000000000000000000000000000020000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000004e000000000000000000000000000000000000000000000000000000000000007600000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000005300000000000000000000000000000000000004000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f970000000000000000000000006131b5fae19ea4f9d964eac0408e4408b66337b50000000000000000000000000000000000000000000000000000000066d85f8c00000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000401b96cfd40000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000008f8ed95b3b3ed2979d1ee528f38ca3e481a94dd9000000000000000000000000530000000000000000000000000000000000000400000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000000000000000000000000000006a94d74f42ffff0000000000000000000000000000000000000000000000000000000000030f0b000000000000000000000000000000000000000000000000000000000000004063407a490000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc897000000000000000000000000ccdf79ced5fd02af299d3548b4e35ed6163064bf00000000000000000000000006efdbff2a14a7c8e15944d1f4a48f9f95f663a4000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f9700000000000000000000000000000000000000000000000000000000044a4e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000041783c314dc20000000000000003e6fce47750c3ecea0000000000000000000000005300000000000000000000000000000000000004000000000000000000000000ca77eb3fefe3725dc33bccb54edefc3d9f764f97000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000e7a23e2f9abf813ad55e55ce26c0712bf1593332000000000000000000000000000000000000000000000000006a94d74f42ffff000000000000000000000000000000000000000000000003da07eeddb6d6509a00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000002600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f40442e1cb0bdfb496e8b7405d0c1c48a81bc8970000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000006a94d74f42ffff0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a8337cce66f217701071a68a503caa8bf139b1840000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002317b22536f75726365223a22686970706f2d73776170222c22416d6f756e74496e555344223a2237322e323133343430313133383636222c22416d6f756e744f7574555344223a2237312e3931343239373937333238373232222c22526566657272616c223a22222c22466c616773223a302c22416d6f756e744f7574223a223731373638373037373539383535313532373730222c2254696d657374616d70223a313732353435353036382c22496e74656772697479496e666f223a7b224b65794944223a2231222c225369676e6174757265223a22436d38564441314d3466386b696f525546383976695344495765474e785858726c3842643651396a70493057764c652b6f4d655246394472484e73544c463045315a5842736e55384b4a393173693447674631524d74614d334c777030324f5136383879704e796e436b3978425a4b2b796b427074416647614b35516a49794f45712f36494d4a654d3772626f59444675713166414f7370394634683543714c44622f7469722b507562677131474b693742556a6d6433584463796239386a70377a5132783533744e52766e52683955484f44636932516252634a6e337272394157327252397653697a4b46336874676c546b794a6a61725251446e735644772f3274687447595a4e7a516a417361354b717236323679796e466f49493175387779714b547a6b3052512f6f464d4a7a55752b454563704d752b4c626a7835322f50556c6735526678666568507066666a4a53514a773d3d227d7d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000083104ec3a0aa2e2380709f2b0c6b8fcc48ba4c6942aea501a867d2bfe27a5979a9900b9692a044a21df53a177fff5c1348b3cdb23f82bab41b8fea58d68138234a302d87d904"), bytes!("f88d8201078403938700830100a794e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134da0883104ec3a054336f213352ee4faf92a752befcfe39c7a6a18ce3d7bcc56b6dc875454d76dba00e9ebd78c3aa468f4d311e3ebfeb0c8c79a1f3cfc3a26ed71d3665fc6820b5d5"), bytes!("02f8b28308275024830ebf5b8403c6fdd6830415a894ec53c830f4444a8a56455c6836b5d2aa794289aa80b844830cbbbd000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c00000000000000000000000000000000000000000000000021b745fecb550714c080a0e8f444aca5c459c27676e185579de1d6cb5eb88d4e350fd6dade07946ede16a8a0165e301acebf43a608e747e07b2e32ddd86cebb24ec98440c34b919c49fcedd7"), bytes!("02f9025483082750518403db832c8403db832c8308bcf394c47300428b6ad2c7d03bb76d05a176058b47e6b080b901e4f17325e70000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b490000000000000000000000000000000000000000000000000000000000000040000000000000000000000000295f5db3e40c5155271eaf9058d54b185c5fff1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002dbce60ebeaafb77e5472308f432f78ac3ae07d90000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004000000000000000000000000074670a3998d9d6622e32d0847ff5977c37e0ec91000000000000000000000000000000000000000000000000000000000004e900c080a0f63bb59e762a76fe9252065519362897d63795bedffe88fc922a683c82e7e8d0a07693bc90d37b2922650f8e065a0daac6ea71af62c83b4fa69285e7c511785b7a"), bytes!("f902ae819a8403ef1480830ae583940b4d5229bb5201e277d3937ce1704227c96bbc5f80b902443c0427150000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b4900000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001bd63bc394b1e44a60f0d5ea4fbb61937d973ddcd80b241370f7939607494853112eb2c36e5e4a5d7b9184961380642680541125dfdd9c0764b7a2efad85f926c30000000000000000000000001f4a828ff025fa8270bfd1d4d952e75079bb593d0000000000000000000000000000000000000000000000000000000066d868f00000000000000000000000005b0d7cfaf6557f026591fc29b8f050d7537b476400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000c5d859d4bb0963c8f946d3b3751e4976165b38e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000083104ec3a088eb2685bd6b79ae008d6b0ee74b09341d79f590c8b3faea5dfa2237644bc716a01482d3425fa581941b057a4d20960a90f20ce9e43fb425e537d565be705b3e10"), bytes!("02f8768308275083018b348398968085012d5fe6308275309409dcae886c35e45f2545c0087725e36e18b032eb865af3107a43ea80c001a0922e3023fc0a04bb29ec74efecebb381535ef2453907b101b342f8254fa73072a04b5c97606536ab8d9b7ffec96fab415729c53d18b5ff12f5a4fd148f4aa42d15"), bytes!("02f8b1830827505e830ebf5b8403c6fdd682d9c494e97c507e2b88ab55c61d528f506e13e35dcb8f1580b844a22cb4650000000000000000000000000cab6977a9c70e04458b740476b498b2140196410000000000000000000000000000000000000000000000000000000000000001c080a0dab66684749d0773893d7cce976dc4a8d2182db8a59044cd9bbd4d0d64f432a1a01bfe61ca3ceae4a81c3668369c36a0eda672f45d63e3935b13f2a694611da6d6"), bytes!("02f902138308275059830ebf5b8403c6fdd68306cff794c47300428b6ad2c7d03bb76d05a176058b47e6b080b901a4f17325e70000000000000000000000000000000000000000000000000000000000000020d57de4f41c3d3cc855eadef68f98c0d4edd22d57161d96b7c06d2f4336cc3b490000000000000000000000000000000000000000000000000000000000000040000000000000000000000000dcde5e9d35d5a1fe9e0eb3185459b3323e09b73b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000001121f46b5581b5285bc571703cd772b336aa12e600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000c001a054dc43a6d710d99764add84512d022b4961dd39bfe366967acec0d39a5ab820fa050362c7b199a5bae81b1b56b2bb70058f64a70a01044821232b2c11aef78250d"), bytes!("02f8b983082750288402e577518402f49919830309f194ec53c830f4444a8a56455c6836b5d2aa794289aa86d8bcb85faa78b844f2b9fdb8000000000000000000000000274c3795dadfebf562932992bf241ae087e0a98c0000000000000000000000000000000000000000000000000000d8bcb85faa78c080a0b12f8b14c62254ac38a2e0f567fa67c642ed485c43d9f2db2a1f93ada8173c86a0178e3a021c50b57fc6f949201d2e1667a243ba0ea94dbf3199abeecea6c20194"), bytes!("f88c81a78402faf080830100a794e6feca764b7548127672c189d303eb956c3ba37280a4e95a644f000000000000000000000000000000000000000000000000000000000134da0883104ec3a059393dff7dc95d7e2f74053268bc1ab67e03ea0aa115929cd31912fca57d8c66a07330a31a06c957e6b4b31eee08a37c5dc15e31d1a37d4284475adc0a248fa920"), ]), no_tx_pool: true, block_data_hint: BlockDataHint::none(), gas_limit: Some(10_000_000), }; - assert_eq!(attribute, &expected); + assert_eq!(attribute.payload_attributes, expected); Result::<(), eyre::Report>::Ok(()) }) @@ -1003,6 +1062,7 @@ mod tests { waker: None, metrics: Default::default(), queue_metrics_interval: delayed_interval(QUEUE_METRICS_INTERVAL), + latest_processed_l2_block_number: 0, } } diff --git a/crates/engine/src/driver.rs b/crates/engine/src/driver.rs index c2cff1f5..2b6b085e 100644 --- a/crates/engine/src/driver.rs +++ b/crates/engine/src/driver.rs @@ -1,12 +1,12 @@ -use super::{future::EngineFuture, ForkchoiceState}; +use super::{ForkchoiceState, future::EngineFuture}; use crate::{ + EngineDriverError, EngineDriverEvent, future::{BuildNewPayloadFuture, EngineDriverFutureResult}, metrics::EngineDriverMetrics, - EngineDriverError, EngineDriverEvent, }; use alloy_provider::Provider; -use futures::{ready, task::AtomicWaker, FutureExt, Stream}; +use futures::{FutureExt, Stream, ready, task::AtomicWaker}; use rollup_node_primitives::{ BlockInfo, ChainImport, MeteredFuture, ScrollPayloadAttributesWithBatchInfo, WithBlockNumber, }; @@ -100,22 +100,22 @@ where } /// Sets the finalized block info. - pub fn set_finalized_block_info(&mut self, block_info: BlockInfo) { + pub const fn set_finalized_block_info(&mut self, block_info: BlockInfo) { self.fcs.update_finalized_block_info(block_info); } /// Sets the safe block info. - pub fn set_safe_block_info(&mut self, block_info: BlockInfo) { + pub const fn set_safe_block_info(&mut self, block_info: BlockInfo) { self.fcs.update_safe_block_info(block_info); } /// Sets the head block info. - pub fn set_head_block_info(&mut self, block_info: BlockInfo) { + pub const fn set_head_block_info(&mut self, block_info: BlockInfo) { self.fcs.update_head_block_info(block_info); } /// Sets the payload building duration. - pub fn set_payload_building_duration(&mut self, block_building_duration: Duration) { + pub const fn set_payload_building_duration(&mut self, block_building_duration: Duration) { self.block_building_duration = block_building_duration; } diff --git a/crates/engine/src/fcs.rs b/crates/engine/src/fcs.rs index 1dbae201..e56b72ff 100644 --- a/crates/engine/src/fcs.rs +++ b/crates/engine/src/fcs.rs @@ -1,6 +1,6 @@ use alloy_chains::NamedChain; use alloy_eips::{BlockId, BlockNumberOrTag}; -use alloy_primitives::{Sealable, B256}; +use alloy_primitives::{B256, Sealable}; use alloy_provider::Provider; use alloy_rpc_types_engine::ForkchoiceState as AlloyForkchoiceState; use reth_chainspec::EthChainSpec; @@ -69,17 +69,17 @@ impl ForkchoiceState { } /// Updates the `head` block info. - pub fn update_head_block_info(&mut self, head: BlockInfo) { + pub const fn update_head_block_info(&mut self, head: BlockInfo) { self.head = head; } /// Updates the `safe` block info. - pub fn update_safe_block_info(&mut self, safe: BlockInfo) { + pub const fn update_safe_block_info(&mut self, safe: BlockInfo) { self.safe = safe; } /// Updates the `finalized` block info. - pub fn update_finalized_block_info(&mut self, finalized: BlockInfo) { + pub const fn update_finalized_block_info(&mut self, finalized: BlockInfo) { self.finalized = finalized; } diff --git a/crates/engine/src/future/mod.rs b/crates/engine/src/future/mod.rs index 41ea27bf..4e8eca33 100644 --- a/crates/engine/src/future/mod.rs +++ b/crates/engine/src/future/mod.rs @@ -1,5 +1,5 @@ -use super::{payload::block_matches_attributes, EngineDriverError}; -use crate::{api::*, ForkchoiceState}; +use super::{EngineDriverError, payload::block_matches_attributes}; +use crate::{ForkchoiceState, api::*}; use alloy_primitives::bytes::Bytes; use alloy_provider::Provider; @@ -275,7 +275,7 @@ where { tracing::trace!(target: "scroll::engine::future", ?fcs, ?payload_attributes_with_batch_info, "handling payload attributes"); - let ScrollPayloadAttributesWithBatchInfo { mut payload_attributes, batch_info } = + let ScrollPayloadAttributesWithBatchInfo { mut payload_attributes, batch_info, .. } = payload_attributes_with_batch_info.inner.clone(); let maybe_execution_payload = provider diff --git a/crates/node/src/main.rs b/crates/node/src/main.rs index 4497585d..93db3b76 100644 --- a/crates/node/src/main.rs +++ b/crates/node/src/main.rs @@ -14,7 +14,7 @@ fn main() { // Enable backtraces unless a RUST_BACKTRACE value has already been explicitly provided. if std::env::var_os("RUST_BACKTRACE").is_none() { - std::env::set_var("RUST_BACKTRACE", "1"); + unsafe { std::env::set_var("RUST_BACKTRACE", "1") }; } if let Err(err) = Cli::::parse().run( diff --git a/crates/primitives/src/attributes.rs b/crates/primitives/src/attributes.rs index c850f8c6..c3956064 100644 --- a/crates/primitives/src/attributes.rs +++ b/crates/primitives/src/attributes.rs @@ -1,4 +1,5 @@ use crate::BatchInfo; +use alloy_primitives::BlockNumber; use scroll_alloy_rpc_types_engine::ScrollPayloadAttributes; @@ -9,10 +10,17 @@ pub struct ScrollPayloadAttributesWithBatchInfo { pub payload_attributes: ScrollPayloadAttributes, /// The batch information from which the attributes originated. pub batch_info: BatchInfo, + /// The L2 block number that will be constructed with this payload. + pub l2_block_number: BlockNumber, } -impl From<(ScrollPayloadAttributes, BatchInfo)> for ScrollPayloadAttributesWithBatchInfo { - fn from(value: (ScrollPayloadAttributes, BatchInfo)) -> Self { - Self { payload_attributes: value.0, batch_info: value.1 } +impl ScrollPayloadAttributesWithBatchInfo { + /// Returns a new instance of a [`ScrollPayloadAttributesWithBatchInfo`]. + pub const fn new( + attributes: ScrollPayloadAttributes, + batch_info: BatchInfo, + l2_block_number: BlockNumber, + ) -> Self { + Self { payload_attributes: attributes, batch_info, l2_block_number } } } diff --git a/crates/primitives/src/block.rs b/crates/primitives/src/block.rs index ab7d8c08..94deadd7 100644 --- a/crates/primitives/src/block.rs +++ b/crates/primitives/src/block.rs @@ -2,12 +2,7 @@ use alloy_consensus::Header; use alloy_eips::{BlockNumHash, Decodable2718}; use alloy_primitives::{B256, U256}; use alloy_rpc_types_engine::ExecutionPayload; -use core::{ - cmp::Ordering, - future::Future, - pin::Pin, - task::{ready, Context, Poll}, -}; +use core::cmp::Ordering; use reth_primitives_traits::transaction::signed::SignedTransaction; use reth_scroll_primitives::{ScrollBlock, ScrollTransactionSigned}; use scroll_alloy_consensus::L1_MESSAGE_TRANSACTION_TYPE; @@ -102,16 +97,6 @@ impl WithBlockNumber { } } -impl Future for WithBlockNumber { - type Output = WithBlockNumber<::Output>; - - fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - let block_number = self.number; - let inner = ready!(Pin::new(&mut self.get_mut().inner).poll(cx)); - Poll::Ready(WithBlockNumber::new(block_number, inner)) - } -} - /// A type alias for a wrapper around a type to which a finalized batch information is attached. pub type WithFinalizedBatchInfo = WithBatchInfo; @@ -136,17 +121,6 @@ impl WithBatchInfo { } } -impl Future for WithBatchInfo { - type Output = WithBatchInfo<::Output>; - - fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { - let block_number = self.number; - let index = self.index; - let inner = ready!(Pin::new(&mut self.get_mut().inner).poll(cx)); - Poll::Ready(WithBatchInfo::new(index, block_number, inner)) - } -} - /// This struct represents an L2 block with a vector the hashes of the L1 messages included in the /// block. #[derive(Debug, Clone, PartialEq, Eq)] diff --git a/crates/scroll-wire/src/manager.rs b/crates/scroll-wire/src/manager.rs index 5b3c65c9..60fe6413 100644 --- a/crates/scroll-wire/src/manager.rs +++ b/crates/scroll-wire/src/manager.rs @@ -4,7 +4,7 @@ use futures::StreamExt; use reth_network::cache::LruCache; use reth_network_api::PeerId; use std::{ - collections::{hash_map::Entry, HashMap}, + collections::{HashMap, hash_map::Entry}, future::Future, pin::Pin, task::{Context, Poll}, @@ -61,7 +61,7 @@ impl ScrollWireManager { } /// Returns a mutable reference to the state of the `ScrollWire` protocol. - pub fn state_mut(&mut self) -> &mut HashMap> { + pub const fn state_mut(&mut self) -> &mut HashMap> { &mut self.state } } diff --git a/crates/sequencer/src/lib.rs b/crates/sequencer/src/lib.rs index 86d4f283..bceacb47 100644 --- a/crates/sequencer/src/lib.rs +++ b/crates/sequencer/src/lib.rs @@ -14,9 +14,9 @@ use std::{ use alloy_eips::eip2718::Encodable2718; use alloy_primitives::Address; use alloy_rpc_types_engine::PayloadAttributes; -use futures::{task::AtomicWaker, Stream}; +use futures::{Stream, task::AtomicWaker}; use reth_scroll_primitives::ScrollBlock; -use rollup_node_primitives::{L1MessageEnvelope, DEFAULT_BLOCK_DIFFICULTY}; +use rollup_node_primitives::{DEFAULT_BLOCK_DIFFICULTY, L1MessageEnvelope}; use rollup_node_providers::{L1MessageProvider, L1ProviderError}; use scroll_alloy_consensus::ScrollTransaction; use scroll_alloy_rpc_types_engine::{BlockDataHint, ScrollPayloadAttributes}; @@ -123,7 +123,7 @@ where } /// Set the L1 finalized block number. - pub fn set_l1_finalized_block_number(&mut self, l1_finalized_block_number: u64) { + pub const fn set_l1_finalized_block_number(&mut self, l1_finalized_block_number: u64) { self.l1_finalized_block_number = l1_finalized_block_number; } @@ -178,7 +178,7 @@ where } /// Handle a reorg event. - pub fn handle_reorg(&mut self, queue_index: Option, l1_block_number: u64) { + pub const fn handle_reorg(&mut self, queue_index: Option, l1_block_number: u64) { if let Some(index) = queue_index { self.l1_messages_queue_index = index; } @@ -186,7 +186,7 @@ where } /// Handle a new L1 block. - pub fn handle_new_l1_block(&mut self, block_number: u64) { + pub const fn handle_new_l1_block(&mut self, block_number: u64) { self.l1_block_number = block_number; }