signet_zenith/
trevm.rs

1use crate::Zenith;
2use alloy::rlp::BufMut;
3use trevm::journal::{JournalDecode, JournalDecodeError, JournalEncode};
4
5const ZENITH_HEADER_BYTES: usize = 32 + 32 + 32 + 20 + 32;
6
7impl JournalEncode for Zenith::BlockHeader {
8    fn serialized_size(&self) -> usize {
9        ZENITH_HEADER_BYTES
10    }
11
12    fn encode(&self, buf: &mut dyn BufMut) {
13        let Self { rollupChainId, hostBlockNumber, gasLimit, rewardAddress, blockDataHash } = self;
14
15        rollupChainId.encode(buf);
16        hostBlockNumber.encode(buf);
17        gasLimit.encode(buf);
18        rewardAddress.encode(buf);
19        blockDataHash.encode(buf);
20    }
21}
22
23impl JournalDecode for Zenith::BlockHeader {
24    fn decode(buf: &mut &[u8]) -> Result<Self, JournalDecodeError> {
25        Ok(Self {
26            rollupChainId: JournalDecode::decode(buf)?,
27            hostBlockNumber: JournalDecode::decode(buf)?,
28            gasLimit: JournalDecode::decode(buf)?,
29            rewardAddress: JournalDecode::decode(buf)?,
30            blockDataHash: JournalDecode::decode(buf)?,
31        })
32    }
33}
34
35#[cfg(test)]
36mod test {
37    use super::*;
38    use alloy::primitives::{Address, B256, U256};
39
40    fn roundtrip<T: JournalDecode + JournalEncode + PartialEq>(expected: &T) {
41        let enc = JournalEncode::encoded(expected);
42        assert_eq!(enc.len(), expected.serialized_size(), "{}", core::any::type_name::<T>());
43        let dec = T::decode(&mut enc.as_ref()).expect("decoding failed");
44        assert_eq!(&dec, expected);
45    }
46
47    #[test]
48    fn journal() {
49        roundtrip(&Zenith::BlockHeader {
50            rollupChainId: U256::from(1),
51            hostBlockNumber: U256::from(1),
52            gasLimit: U256::from(1),
53            rewardAddress: Address::repeat_byte(0xa),
54            blockDataHash: B256::repeat_byte(0xa),
55        });
56    }
57}