Skip to main content

reth_downloaders/bodies/
test_utils.rs

1//! Test helper impls for generating bodies
2
3#![allow(dead_code)]
4
5use alloy_consensus::BlockHeader;
6use alloy_primitives::map::B256Map;
7use reth_ethereum_primitives::BlockBody;
8use reth_network_p2p::bodies::response::BlockResponse;
9use reth_primitives_traits::{Block, SealedBlock, SealedHeader};
10
11pub(crate) fn zip_blocks<'a, B: Block>(
12    headers: impl Iterator<Item = &'a SealedHeader<B::Header>>,
13    bodies: &mut B256Map<B::Body>,
14) -> Vec<BlockResponse<B>> {
15    headers
16        .into_iter()
17        .map(|header| {
18            let body = bodies.remove(&header.hash()).expect("body exists");
19            if header.is_empty() {
20                BlockResponse::Empty(header.clone())
21            } else {
22                BlockResponse::Full(SealedBlock::from_sealed_parts(header.clone(), body))
23            }
24        })
25        .collect()
26}
27
28pub(crate) fn create_raw_bodies(
29    headers: impl IntoIterator<Item = SealedHeader>,
30    bodies: &mut B256Map<BlockBody>,
31) -> Vec<reth_ethereum_primitives::Block> {
32    headers
33        .into_iter()
34        .map(|header| {
35            let body = bodies.remove(&header.hash()).expect("body exists");
36            body.into_block(header.unseal())
37        })
38        .collect()
39}