tempo_alloy/rpc/
header.rs

1use alloy_consensus::BlockHeader;
2use alloy_network::primitives::HeaderResponse;
3use alloy_primitives::{Address, B64, B256, BlockHash, Bloom, Bytes, U256};
4use alloy_rpc_types_eth::Header;
5use serde::{Deserialize, Serialize};
6use tempo_primitives::TempoHeader;
7
8/// Tempo RPC header response type.
9#[derive(Debug, Clone, Serialize, Deserialize, derive_more::Deref, derive_more::DerefMut)]
10#[serde(rename_all = "camelCase")]
11pub struct TempoHeaderResponse {
12    /// Inner [`Header`].
13    #[serde(flatten)]
14    #[deref]
15    #[deref_mut]
16    pub inner: Header<TempoHeader>,
17
18    /// Block timestamp in milliseconds.
19    #[serde(with = "alloy_serde::quantity")]
20    pub timestamp_millis: u64,
21}
22
23impl BlockHeader for TempoHeaderResponse {
24    fn parent_hash(&self) -> B256 {
25        self.inner.parent_hash()
26    }
27
28    fn ommers_hash(&self) -> B256 {
29        self.inner.ommers_hash()
30    }
31
32    fn beneficiary(&self) -> Address {
33        self.inner.beneficiary()
34    }
35
36    fn state_root(&self) -> B256 {
37        self.inner.state_root()
38    }
39
40    fn transactions_root(&self) -> B256 {
41        self.inner.transactions_root()
42    }
43
44    fn receipts_root(&self) -> B256 {
45        self.inner.receipts_root()
46    }
47
48    fn withdrawals_root(&self) -> Option<B256> {
49        self.inner.withdrawals_root()
50    }
51
52    fn logs_bloom(&self) -> Bloom {
53        self.inner.logs_bloom()
54    }
55
56    fn difficulty(&self) -> U256 {
57        self.inner.difficulty()
58    }
59
60    fn number(&self) -> u64 {
61        self.inner.number()
62    }
63
64    fn gas_limit(&self) -> u64 {
65        self.inner.gas_limit()
66    }
67
68    fn gas_used(&self) -> u64 {
69        self.inner.gas_used()
70    }
71
72    fn timestamp(&self) -> u64 {
73        self.inner.timestamp()
74    }
75
76    fn mix_hash(&self) -> Option<B256> {
77        self.inner.mix_hash()
78    }
79
80    fn nonce(&self) -> Option<B64> {
81        self.inner.nonce()
82    }
83
84    fn base_fee_per_gas(&self) -> Option<u64> {
85        self.inner.base_fee_per_gas()
86    }
87
88    fn blob_gas_used(&self) -> Option<u64> {
89        self.inner.blob_gas_used()
90    }
91
92    fn excess_blob_gas(&self) -> Option<u64> {
93        self.inner.excess_blob_gas()
94    }
95
96    fn parent_beacon_block_root(&self) -> Option<B256> {
97        self.inner.parent_beacon_block_root()
98    }
99
100    fn requests_hash(&self) -> Option<B256> {
101        self.inner.requests_hash()
102    }
103
104    fn extra_data(&self) -> &Bytes {
105        self.inner.extra_data()
106    }
107}
108
109impl HeaderResponse for TempoHeaderResponse {
110    fn hash(&self) -> BlockHash {
111        self.inner.hash()
112    }
113}
114
115impl AsRef<TempoHeader> for TempoHeaderResponse {
116    fn as_ref(&self) -> &TempoHeader {
117        &self.inner
118    }
119}