espresso_types/v0/v0_3/
header.rs1use crate::{v0_1::RewardMerkleCommitment, NsTable};
2
3use super::{
4 BlockMerkleCommitment, BuilderSignature, FeeInfo, FeeMerkleCommitment, L1BlockInfo,
5 ResolvableChainConfig,
6};
7use ark_serialize::CanonicalSerialize;
8use committable::{Commitment, Committable, RawCommitmentBuilder};
9use hotshot_types::{data::VidCommitment, utils::BuilderCommitment};
10use serde::{Deserialize, Serialize};
11
12#[derive(Clone, Debug, Deserialize, Serialize, Hash, PartialEq, Eq)]
14pub struct Header {
15 pub(crate) chain_config: ResolvableChainConfig,
17 pub(crate) height: u64,
18 pub(crate) timestamp: u64,
19 pub(crate) l1_head: u64,
20 pub(crate) l1_finalized: Option<L1BlockInfo>,
21 pub(crate) payload_commitment: VidCommitment,
22 pub(crate) builder_commitment: BuilderCommitment,
23 pub(crate) ns_table: NsTable,
24 pub(crate) block_merkle_tree_root: BlockMerkleCommitment,
25 pub(crate) fee_merkle_tree_root: FeeMerkleCommitment,
26 pub(crate) fee_info: FeeInfo,
27 pub(crate) builder_signature: Option<BuilderSignature>,
28 pub(crate) reward_merkle_tree_root: RewardMerkleCommitment,
29}
30
31impl Committable for Header {
32 fn commit(&self) -> Commitment<Self> {
33 let mut bmt_bytes = vec![];
34 self.block_merkle_tree_root
35 .serialize_with_mode(&mut bmt_bytes, ark_serialize::Compress::Yes)
36 .unwrap();
37 let mut fmt_bytes = vec![];
38 self.fee_merkle_tree_root
39 .serialize_with_mode(&mut fmt_bytes, ark_serialize::Compress::Yes)
40 .unwrap();
41
42 let mut rwd_bytes = vec![];
43 self.reward_merkle_tree_root
44 .serialize_with_mode(&mut rwd_bytes, ark_serialize::Compress::Yes)
45 .unwrap();
46
47 RawCommitmentBuilder::new(&Self::tag())
48 .field("chain_config", self.chain_config.commit())
49 .u64_field("height", self.height)
50 .u64_field("timestamp", self.timestamp)
51 .u64_field("l1_head", self.l1_head)
52 .optional("l1_finalized", &self.l1_finalized)
53 .constant_str("payload_commitment")
54 .fixed_size_bytes(self.payload_commitment.as_ref())
55 .constant_str("builder_commitment")
56 .fixed_size_bytes(self.builder_commitment.as_ref())
57 .field("ns_table", self.ns_table.commit())
58 .var_size_field("block_merkle_tree_root", &bmt_bytes)
59 .var_size_field("fee_merkle_tree_root", &fmt_bytes)
60 .field("fee_info", self.fee_info.commit())
61 .var_size_field("reward_merkle_tree_root", &rwd_bytes)
62 .finalize()
63 }
64
65 fn tag() -> String {
66 crate::v0_1::Header::tag()
67 }
68}