reth_downloaders/bodies/
test_utils.rs
1#![allow(dead_code)]
4
5use alloy_consensus::BlockHeader;
6use alloy_primitives::B256;
7use reth_db::DatabaseEnv;
8use reth_db_api::{database::Database, tables, transaction::DbTxMut};
9use reth_network_p2p::bodies::response::BlockResponse;
10use reth_primitives::{BlockBody, SealedBlock, SealedHeader};
11use reth_primitives_traits::Block;
12use std::collections::HashMap;
13
14pub(crate) fn zip_blocks<'a, B: Block>(
15 headers: impl Iterator<Item = &'a SealedHeader<B::Header>>,
16 bodies: &mut HashMap<B256, B::Body>,
17) -> Vec<BlockResponse<B>> {
18 headers
19 .into_iter()
20 .map(|header| {
21 let body = bodies.remove(&header.hash()).expect("body exists");
22 if header.is_empty() {
23 BlockResponse::Empty(header.clone())
24 } else {
25 BlockResponse::Full(SealedBlock::from_sealed_parts(header.clone(), body))
26 }
27 })
28 .collect()
29}
30
31pub(crate) fn create_raw_bodies(
32 headers: impl IntoIterator<Item = SealedHeader>,
33 bodies: &mut HashMap<B256, BlockBody>,
34) -> Vec<reth_primitives::Block> {
35 headers
36 .into_iter()
37 .map(|header| {
38 let body = bodies.remove(&header.hash()).expect("body exists");
39 body.into_block(header.unseal())
40 })
41 .collect()
42}
43
44#[inline]
45pub(crate) fn insert_headers(db: &DatabaseEnv, headers: &[SealedHeader]) {
46 db.update(|tx| {
47 for header in headers {
48 tx.put::<tables::CanonicalHeaders>(header.number, header.hash()).unwrap();
49 tx.put::<tables::Headers>(header.number, header.clone_header()).unwrap();
50 }
51 })
52 .expect("failed to commit")
53}