use agglayer_primitives::Digest;
use serde::{Deserialize, Serialize};
use sha2::{Digest as Sha256Digest, Sha256};
use crate::NetworkId;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[cfg_attr(feature = "testutils", derive(arbitrary::Arbitrary))]
pub struct AggchainProofPublicValues {
pub prev_local_exit_root: Digest,
pub new_local_exit_root: Digest,
pub l1_info_root: Digest,
pub origin_network: NetworkId,
pub commit_imported_bridge_exits: Digest,
pub aggchain_params: Digest,
}
impl AggchainProofPublicValues {
pub fn hash(&self) -> [u8; 32] {
let AggchainProofPublicValues {
prev_local_exit_root,
new_local_exit_root,
l1_info_root,
origin_network,
commit_imported_bridge_exits,
aggchain_params,
} = self;
let public_values = [
prev_local_exit_root.as_slice(),
new_local_exit_root.as_slice(),
l1_info_root.as_slice(),
&origin_network.to_le_bytes(),
commit_imported_bridge_exits.as_slice(),
aggchain_params.as_slice(),
]
.concat();
Sha256::digest(&public_values).into()
}
}