From e5fdc145c28391f6aa290ef807cc7b320ce1e1e5 Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Wed, 2 Oct 2024 15:13:35 +0200 Subject: [PATCH 1/7] Make SealedHeader generic over header --- crates/primitives-traits/src/header/sealed.rs | 34 ++++++++++++++++--- crates/stages/stages/src/stages/headers.rs | 5 +-- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/crates/primitives-traits/src/header/sealed.rs b/crates/primitives-traits/src/header/sealed.rs index 9b11f080a462..a8bc7d9bfca1 100644 --- a/crates/primitives-traits/src/header/sealed.rs +++ b/crates/primitives-traits/src/header/sealed.rs @@ -12,24 +12,48 @@ use serde::{Deserialize, Serialize}; /// A [`Header`] that is sealed at a precalculated hash, use [`SealedHeader::unseal()`] if you want /// to modify header. -#[derive(Debug, Clone, PartialEq, Eq, Hash, AsRef, Deref, Serialize, Deserialize, Compact)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, AsRef, Deref, Serialize, Deserialize)] #[add_arbitrary_tests(rlp, compact)] -pub struct SealedHeader { +pub struct SealedHeader { /// Locked Header hash. hash: BlockHash, /// Locked Header fields. #[as_ref] #[deref] - header: Header, + header: H, } -impl SealedHeader { +impl Compact for SealedHeader { + fn to_compact(&self, buf: &mut B) -> usize + where + B: bytes::BufMut + AsMut<[u8]>, + { + let mut buffer = Vec::new(); + self.hash.to_compact(&mut buffer); + self.header.to_compact(&mut buffer); + buf.put(&buffer[..]); + buffer.len() + } + + fn from_compact(mut buf: &[u8], _: usize) -> (Self, &[u8]) { + let (hash, new_buf) = BlockHash::from_compact(buf, buf.len()); + buf = new_buf; + let (header, new_buf) = H::from_compact(buf, buf.len()); + buf = new_buf; + let sealed_header = Self { hash, header }; + (sealed_header, buf) + } +} + +impl SealedHeader { /// Creates the sealed header with the corresponding block hash. #[inline] - pub const fn new(header: Header, hash: BlockHash) -> Self { + pub const fn new(header: H, hash: BlockHash) -> Self { Self { header, hash } } +} +impl SealedHeader { /// Returns the sealed Header fields. #[inline] pub const fn header(&self) -> &Header { diff --git a/crates/stages/stages/src/stages/headers.rs b/crates/stages/stages/src/stages/headers.rs index 83771c4969d9..12e20917bfbb 100644 --- a/crates/stages/stages/src/stages/headers.rs +++ b/crates/stages/stages/src/stages/headers.rs @@ -11,7 +11,7 @@ use reth_db_api::{ }; use reth_etl::Collector; use reth_network_p2p::headers::{downloader::HeaderDownloader, error::HeadersDownloaderError}; -use reth_primitives::{SealedHeader, StaticFileSegment}; +use reth_primitives::{Header, SealedHeader, StaticFileSegment}; use reth_provider::{ providers::{StaticFileProvider, StaticFileWriter}, BlockHashReader, DBProvider, HeaderProvider, HeaderSyncGap, HeaderSyncGapProvider, @@ -121,7 +121,8 @@ where info!(target: "sync::stages::headers", progress = %format!("{:.2}%", (index as f64 / total_headers as f64) * 100.0), "Writing headers"); } - let (sealed_header, _) = SealedHeader::from_compact(&header_buf, header_buf.len()); + let (sealed_header, _) = + SealedHeader::
::from_compact(&header_buf, header_buf.len()); let (header, header_hash) = sealed_header.split(); if header.number == 0 { continue From 09203c28400a8e84880f938de67b496b523dbde9 Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Wed, 2 Oct 2024 15:19:19 +0200 Subject: [PATCH 2/7] Fix lint --- crates/optimism/storage/src/lib.rs | 2 +- crates/storage/db-api/src/models/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/optimism/storage/src/lib.rs b/crates/optimism/storage/src/lib.rs index 3d728f18743e..825055494698 100644 --- a/crates/optimism/storage/src/lib.rs +++ b/crates/optimism/storage/src/lib.rs @@ -43,7 +43,7 @@ mod tests { assert_eq!(PruneSegment::bitflag_encoded_bytes(), 1); assert_eq!(Receipt::bitflag_encoded_bytes(), 2); assert_eq!(ReceiptWithBloom::bitflag_encoded_bytes(), 0); - assert_eq!(SealedHeader::bitflag_encoded_bytes(), 0); + assert_eq!(SealedHeader::
::bitflag_encoded_bytes(), 0); assert_eq!(StageCheckpoint::bitflag_encoded_bytes(), 1); assert_eq!(StageUnitCheckpoint::bitflag_encoded_bytes(), 1); assert_eq!(StoredBlockBodyIndices::bitflag_encoded_bytes(), 1); diff --git a/crates/storage/db-api/src/models/mod.rs b/crates/storage/db-api/src/models/mod.rs index 2466a42c52cd..8e0161c7fb3c 100644 --- a/crates/storage/db-api/src/models/mod.rs +++ b/crates/storage/db-api/src/models/mod.rs @@ -337,7 +337,7 @@ mod tests { assert_eq!(PruneSegment::bitflag_encoded_bytes(), 1); assert_eq!(Receipt::bitflag_encoded_bytes(), 1); assert_eq!(ReceiptWithBloom::bitflag_encoded_bytes(), 0); - assert_eq!(SealedHeader::bitflag_encoded_bytes(), 0); + assert_eq!(SealedHeader::
::bitflag_encoded_bytes(), 0); assert_eq!(StageCheckpoint::bitflag_encoded_bytes(), 1); assert_eq!(StageUnitCheckpoint::bitflag_encoded_bytes(), 1); assert_eq!(StoredBlockBodyIndices::bitflag_encoded_bytes(), 1); From 6fa8f48fbc9746fb26f5eaae43a970f8b210c2b1 Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Fri, 4 Oct 2024 01:30:59 +0200 Subject: [PATCH 3/7] Fix lint --- crates/primitives-traits/src/header/sealed.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/primitives-traits/src/header/sealed.rs b/crates/primitives-traits/src/header/sealed.rs index 5ef0d8516319..b35e16fd3b4e 100644 --- a/crates/primitives-traits/src/header/sealed.rs +++ b/crates/primitives-traits/src/header/sealed.rs @@ -9,6 +9,7 @@ use core::mem; use derive_more::{AsRef, Deref}; use reth_codecs::{add_arbitrary_tests, Compact}; use serde::{Deserialize, Serialize}; +use alloc::vec::Vec; /// A [`Header`] that is sealed at a precalculated hash, use [`SealedHeader::unseal()`] if you want /// to modify header. From fdc327c06fcd26d21f1c2f3ad5956277c0645b25 Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Fri, 4 Oct 2024 01:34:04 +0200 Subject: [PATCH 4/7] Fix lint --- crates/primitives-traits/src/header/sealed.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/primitives-traits/src/header/sealed.rs b/crates/primitives-traits/src/header/sealed.rs index b35e16fd3b4e..1cb5e3bf835b 100644 --- a/crates/primitives-traits/src/header/sealed.rs +++ b/crates/primitives-traits/src/header/sealed.rs @@ -1,4 +1,5 @@ use super::Header; +use alloc::vec::Vec; use alloy_eips::BlockNumHash; use alloy_primitives::{keccak256, BlockHash, Sealable}; #[cfg(any(test, feature = "test-utils"))] @@ -9,7 +10,6 @@ use core::mem; use derive_more::{AsRef, Deref}; use reth_codecs::{add_arbitrary_tests, Compact}; use serde::{Deserialize, Serialize}; -use alloc::vec::Vec; /// A [`Header`] that is sealed at a precalculated hash, use [`SealedHeader::unseal()`] if you want /// to modify header. From 2e177a3c30068454f20a2742880fb0ba30515ca7 Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Fri, 4 Oct 2024 14:53:44 +0200 Subject: [PATCH 5/7] Remove Compact impl for SealedHeader --- crates/primitives-traits/src/header/sealed.rs | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/crates/primitives-traits/src/header/sealed.rs b/crates/primitives-traits/src/header/sealed.rs index 1cb5e3bf835b..68a0e15b1789 100644 --- a/crates/primitives-traits/src/header/sealed.rs +++ b/crates/primitives-traits/src/header/sealed.rs @@ -24,28 +24,6 @@ pub struct SealedHeader { header: H, } -impl Compact for SealedHeader { - fn to_compact(&self, buf: &mut B) -> usize - where - B: bytes::BufMut + AsMut<[u8]>, - { - let mut buffer = Vec::new(); - self.hash.to_compact(&mut buffer); - self.header.to_compact(&mut buffer); - buf.put(&buffer[..]); - buffer.len() - } - - fn from_compact(mut buf: &[u8], _: usize) -> (Self, &[u8]) { - let (hash, new_buf) = BlockHash::from_compact(buf, buf.len()); - buf = new_buf; - let (header, new_buf) = H::from_compact(buf, buf.len()); - buf = new_buf; - let sealed_header = Self { hash, header }; - (sealed_header, buf) - } -} - impl SealedHeader { /// Creates the sealed header with the corresponding block hash. #[inline] From 300305b8c4c8a92b2eff27a9a406428fba1a1313 Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Fri, 4 Oct 2024 15:00:49 +0200 Subject: [PATCH 6/7] Fix lint --- crates/primitives-traits/src/header/sealed.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/primitives-traits/src/header/sealed.rs b/crates/primitives-traits/src/header/sealed.rs index 68a0e15b1789..3a9791a21d20 100644 --- a/crates/primitives-traits/src/header/sealed.rs +++ b/crates/primitives-traits/src/header/sealed.rs @@ -1,5 +1,4 @@ use super::Header; -use alloc::vec::Vec; use alloy_eips::BlockNumHash; use alloy_primitives::{keccak256, BlockHash, Sealable}; #[cfg(any(test, feature = "test-utils"))] From 9505b8aeebbb95f6b6340dad933c650bfccfb155 Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Fri, 4 Oct 2024 15:11:14 +0200 Subject: [PATCH 7/7] Fix lint --- crates/primitives-traits/src/header/sealed.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/primitives-traits/src/header/sealed.rs b/crates/primitives-traits/src/header/sealed.rs index 3a9791a21d20..85b2cb322047 100644 --- a/crates/primitives-traits/src/header/sealed.rs +++ b/crates/primitives-traits/src/header/sealed.rs @@ -7,7 +7,7 @@ use alloy_rlp::{Decodable, Encodable}; use bytes::BufMut; use core::mem; use derive_more::{AsRef, Deref}; -use reth_codecs::{add_arbitrary_tests, Compact}; +use reth_codecs::add_arbitrary_tests; use serde::{Deserialize, Serialize}; /// A [`Header`] that is sealed at a precalculated hash, use [`SealedHeader::unseal()`] if you want