chore: replace Compact with bincode on ETL usage of SealedHeader (#11442)

This commit is contained in:
joshieDo
2024-10-03 13:48:24 +02:00
committed by GitHub
parent fe1f189e69
commit 73d5ce78c3
6 changed files with 29 additions and 22 deletions

View File

@ -24,7 +24,7 @@ reth-evm.workspace = true
reth-exex.workspace = true
reth-network-p2p.workspace = true
reth-primitives = { workspace = true, features = ["secp256k1"] }
reth-primitives-traits.workspace = true
reth-primitives-traits = { workspace = true, features = ["serde-bincode-compat"] }
reth-provider.workspace = true
reth-execution-types.workspace = true
reth-prune.workspace = true
@ -52,6 +52,7 @@ itertools.workspace = true
rayon.workspace = true
num-traits = "0.2.15"
tempfile = { workspace = true, optional = true }
bincode.workspace = true
[dev-dependencies]
# reth

View File

@ -1,6 +1,5 @@
use alloy_primitives::{BlockHash, BlockNumber, B256};
use alloy_primitives::{BlockHash, BlockNumber, Bytes, B256};
use futures_util::StreamExt;
use reth_codecs::Compact;
use reth_config::config::EtlConfig;
use reth_consensus::Consensus;
use reth_db::{tables, RawKey, RawTable, RawValue};
@ -12,6 +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_traits::serde_bincode_compat;
use reth_provider::{
providers::{StaticFileProvider, StaticFileWriter},
BlockHashReader, DBProvider, HeaderProvider, HeaderSyncGap, HeaderSyncGapProvider,
@ -54,8 +54,8 @@ pub struct HeaderStage<Provider, Downloader: HeaderDownloader> {
sync_gap: Option<HeaderSyncGap>,
/// ETL collector with `HeaderHash` -> `BlockNumber`
hash_collector: Collector<BlockHash, BlockNumber>,
/// ETL collector with `BlockNumber` -> `SealedHeader`
header_collector: Collector<BlockNumber, SealedHeader>,
/// ETL collector with `BlockNumber` -> `BincodeSealedHeader`
header_collector: Collector<BlockNumber, Bytes>,
/// Returns true if the ETL collector has all necessary headers to fill the gap.
is_etl_ready: bool,
}
@ -121,7 +121,11 @@ 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 =
bincode::deserialize::<serde_bincode_compat::SealedHeader<'_>>(&header_buf)
.map_err(|err| StageError::Fatal(Box::new(err)))?
.into();
let (header, header_hash) = sealed_header.split();
if header.number == 0 {
continue
@ -240,7 +244,15 @@ where
let header_number = header.number;
self.hash_collector.insert(header.hash(), header_number)?;
self.header_collector.insert(header_number, header)?;
self.header_collector.insert(
header_number,
Bytes::from(
bincode::serialize(&serde_bincode_compat::SealedHeader::from(
&header,
))
.map_err(|err| StageError::Fatal(Box::new(err)))?,
),
)?;
// Headers are downloaded in reverse, so if we reach here, we know we have
// filled the gap.