sui_sdk_types/crypto/
validator.rs1use super::Bls12381PublicKey;
2use super::Bls12381Signature;
3use crate::checkpoint::EpochId;
4use crate::checkpoint::StakeUnit;
5
6#[derive(Clone, Debug, PartialEq, Eq)]
17#[cfg_attr(
18 feature = "serde",
19 derive(serde_derive::Serialize, serde_derive::Deserialize)
20)]
21#[cfg_attr(feature = "proptest", derive(test_strategy::Arbitrary))]
22pub struct ValidatorCommittee {
23 pub epoch: EpochId,
24 pub members: Vec<ValidatorCommitteeMember>,
25}
26
27#[derive(Clone, Debug, PartialEq, Eq)]
38#[cfg_attr(
39 feature = "serde",
40 derive(serde_derive::Serialize, serde_derive::Deserialize)
41)]
42#[cfg_attr(feature = "proptest", derive(test_strategy::Arbitrary))]
43pub struct ValidatorCommitteeMember {
44 pub public_key: Bls12381PublicKey,
45 pub stake: StakeUnit,
46}
47
48#[derive(Clone, Debug, PartialEq)]
66#[cfg_attr(
67 feature = "serde",
68 derive(serde_derive::Serialize, serde_derive::Deserialize)
69)]
70#[cfg_attr(feature = "proptest", derive(test_strategy::Arbitrary))]
71pub struct ValidatorAggregatedSignature {
72 pub epoch: EpochId,
73 pub signature: Bls12381Signature,
74 pub bitmap: crate::Bitmap,
75}
76
77#[derive(Clone, Debug, PartialEq, Eq)]
89#[cfg_attr(
90 feature = "serde",
91 derive(serde_derive::Serialize, serde_derive::Deserialize)
92)]
93#[cfg_attr(feature = "proptest", derive(test_strategy::Arbitrary))]
94pub struct ValidatorSignature {
95 pub epoch: EpochId,
96 pub public_key: Bls12381PublicKey,
97 pub signature: Bls12381Signature,
98}
99
100#[cfg(test)]
101mod test {
102 use super::*;
103
104 #[cfg(target_arch = "wasm32")]
105 use wasm_bindgen_test::wasm_bindgen_test as test;
106
107 #[cfg(feature = "serde")]
108 #[test]
109 fn aggregated_signature_fixture() {
110 use base64ct::Base64;
111 use base64ct::Encoding;
112
113 const FIXTURE: &str = "CgAAAAAAAACZrBcXiqa0ttztfwrBxKzQRzIRnZhbmsQV7tqNXwiZQrRC+dVDbdua1Ety9uy2pCUSOjAAAAEAAAAAAAAAEAAAAAAA";
114 let bcs = Base64::decode_vec(FIXTURE).unwrap();
115
116 let signature: ValidatorAggregatedSignature = bcs::from_bytes(&bcs).unwrap();
117 let bytes = bcs::to_bytes(&signature).unwrap();
118 assert_eq!(bcs, bytes);
119 }
120}