arbos_types/
message_with_meta.rs1use alloy_primitives::{B256, keccak256};
2use alloy_rlp::{RlpDecodable, RlpEncodable};
3
4use super::incoming_message::L1IncomingMessage;
5
6#[derive(Debug, Clone, Default, RlpEncodable, RlpDecodable)]
8pub struct MessageWithMetadata {
9 pub message: L1IncomingMessage,
10 pub delayed_messages_read: u64,
11}
12
13#[derive(Debug, Clone)]
15pub struct MessageWithMetadataAndBlockInfo {
16 pub message_with_meta: MessageWithMetadata,
17 pub block_hash: Option<B256>,
18 pub block_metadata: Option<Vec<u8>>,
19}
20
21impl MessageWithMetadata {
22 pub fn abi_hash(&self) -> B256 {
28 let serialized = self.message.serialize();
29 let mut data = Vec::new();
30 data.extend_from_slice(&serialized);
31 data.extend_from_slice(&self.delayed_messages_read.to_be_bytes());
32 keccak256(&data)
33 }
34
35 pub fn with_only_mel_consensus_fields(&self) -> Self {
37 MessageWithMetadata {
38 message: L1IncomingMessage {
39 header: self.message.header.clone(),
40 l2_msg: self.message.l2_msg.clone(),
41 legacy_batch_gas_cost: None,
42 batch_data_stats: None,
43 },
44 delayed_messages_read: self.delayed_messages_read,
45 }
46 }
47}