hdp_primitives/processed_types/
header.rs

1use alloy::hex;
2use serde::{Deserialize, Serialize};
3use serde_with::serde_as;
4
5use crate::{
6    block::header::RlpBlockHeader,
7    serde::{deserialize_hex, serialize_hex},
8};
9
10#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Eq, Hash)]
11pub struct ProcessedHeaderProof {
12    pub leaf_idx: u64,
13    pub mmr_path: Vec<String>,
14}
15
16impl ProcessedHeaderProof {
17    pub fn new(leaf_idx: u64, mmr_path: Vec<String>) -> Self {
18        ProcessedHeaderProof { leaf_idx, mmr_path }
19    }
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Eq, Hash)]
23#[serde_as]
24pub struct ProcessedHeader {
25    #[serde(serialize_with = "serialize_hex", deserialize_with = "deserialize_hex")]
26    pub rlp: Vec<u8>,
27    pub proof: ProcessedHeaderProof,
28}
29
30impl ProcessedHeader {
31    pub fn new(rlp: RlpBlockHeader, leaf_idx: u64, mmr_path: Vec<String>) -> Self {
32        let rlp = hex::decode(rlp.value).expect("Cannot decode RLP block header to bytes");
33        let proof = ProcessedHeaderProof::new(leaf_idx, mmr_path);
34        ProcessedHeader { rlp, proof }
35    }
36}