mithril_stm/protocol/aggregate_signature/
aggregate_key.rs1use serde::{Deserialize, Serialize};
2
3use crate::{
4 ClosedKeyRegistration, MembershipDigest, Stake,
5 membership_commitment::{
6 MerkleBatchPath, MerkleTreeBatchCommitment, MerkleTreeConcatenationLeaf,
7 },
8};
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
13#[serde(bound(
14 serialize = "MerkleBatchPath<D::ConcatenationHash>: Serialize",
15 deserialize = "MerkleBatchPath<D::ConcatenationHash>: Deserialize<'de>"
16))]
17pub struct AggregateVerificationKey<D: MembershipDigest> {
18 mt_commitment: MerkleTreeBatchCommitment<D::ConcatenationHash, MerkleTreeConcatenationLeaf>,
19 total_stake: Stake,
20}
21
22impl<D: MembershipDigest> AggregateVerificationKey<D> {
23 pub(crate) fn get_merkle_tree_batch_commitment(
24 &self,
25 ) -> MerkleTreeBatchCommitment<D::ConcatenationHash, MerkleTreeConcatenationLeaf> {
26 self.mt_commitment.clone()
27 }
28
29 #[deprecated(
30 since = "0.5.0",
31 note = "Use `get_merkle_tree_batch_commitment` instead"
32 )]
33 pub fn get_mt_commitment(
34 &self,
35 ) -> MerkleTreeBatchCommitment<D::ConcatenationHash, MerkleTreeConcatenationLeaf> {
36 Self::get_merkle_tree_batch_commitment(self)
37 }
38
39 pub fn get_total_stake(&self) -> Stake {
40 self.total_stake
41 }
42}
43
44impl<D: MembershipDigest> PartialEq for AggregateVerificationKey<D> {
45 fn eq(&self, other: &Self) -> bool {
46 self.mt_commitment == other.mt_commitment && self.total_stake == other.total_stake
47 }
48}
49
50impl<D: MembershipDigest> Eq for AggregateVerificationKey<D> {}
51
52impl<D: MembershipDigest> From<&ClosedKeyRegistration<D>> for AggregateVerificationKey<D> {
53 fn from(reg: &ClosedKeyRegistration<D>) -> Self {
54 Self {
55 mt_commitment: reg.merkle_tree.to_merkle_tree_batch_commitment(),
56 total_stake: reg.total_stake,
57 }
58 }
59}