sp_consensus_sassafras/
digests.rs1use crate::{
21 ticket::TicketClaim, vrf::VrfSignature, AuthorityId, AuthorityIndex, AuthoritySignature,
22 EpochConfiguration, Randomness, Slot, SASSAFRAS_ENGINE_ID,
23};
24
25use codec::{Decode, Encode, MaxEncodedLen};
26use scale_info::TypeInfo;
27
28#[cfg(not(feature = "std"))]
29use alloc::vec::Vec;
30use sp_runtime::{DigestItem, RuntimeDebug};
31
32#[derive(Clone, RuntimeDebug, Encode, Decode, MaxEncodedLen, TypeInfo)]
36pub struct SlotClaim {
37 pub authority_idx: AuthorityIndex,
39 pub slot: Slot,
41 pub vrf_signature: VrfSignature,
43 pub ticket_claim: Option<TicketClaim>,
45}
46
47#[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug)]
51pub struct NextEpochDescriptor {
52 pub randomness: Randomness,
54 pub authorities: Vec<AuthorityId>,
56 pub config: Option<EpochConfiguration>,
60}
61
62#[derive(Decode, Encode, Clone, PartialEq, Eq)]
66pub enum ConsensusLog {
67 #[codec(index = 1)]
69 NextEpochData(NextEpochDescriptor),
70 #[codec(index = 2)]
72 OnDisabled(AuthorityIndex),
73}
74
75impl TryFrom<&DigestItem> for SlotClaim {
76 type Error = ();
77 fn try_from(item: &DigestItem) -> Result<Self, Self::Error> {
78 item.pre_runtime_try_to(&SASSAFRAS_ENGINE_ID).ok_or(())
79 }
80}
81
82impl From<&SlotClaim> for DigestItem {
83 fn from(claim: &SlotClaim) -> Self {
84 DigestItem::PreRuntime(SASSAFRAS_ENGINE_ID, claim.encode())
85 }
86}
87
88impl TryFrom<&DigestItem> for AuthoritySignature {
89 type Error = ();
90 fn try_from(item: &DigestItem) -> Result<Self, Self::Error> {
91 item.seal_try_to(&SASSAFRAS_ENGINE_ID).ok_or(())
92 }
93}
94
95impl From<&AuthoritySignature> for DigestItem {
96 fn from(signature: &AuthoritySignature) -> Self {
97 DigestItem::Seal(SASSAFRAS_ENGINE_ID, signature.encode())
98 }
99}