use crate::substrate::sp_core::vrf::VrfSignature;
use codec::{Decode, Encode};
pub use subxt_core::config::substrate::ConsensusEngineId;
pub mod babe {
use super::*;
pub const BABE_ENGINE_ID: ConsensusEngineId = *b"BABE";
#[derive(Clone, Encode, Decode, Debug)]
pub struct PrimaryPreDigest {
pub authority_index: u32,
pub slot: u64,
pub vrf_signature: VrfSignature,
}
#[derive(Clone, Encode, Decode, Debug)]
pub struct SecondaryPlainPreDigest {
pub authority_index: u32,
pub slot: u64,
}
#[derive(Clone, Encode, Decode, Debug)]
pub struct SecondaryVRFPreDigest {
pub authority_index: u32,
pub slot: u64,
pub vrf_signature: VrfSignature,
}
#[derive(Clone, Encode, Decode, Debug)]
pub enum PreDigest {
#[codec(index = 1)]
Primary(PrimaryPreDigest),
#[codec(index = 2)]
SecondaryPlain(SecondaryPlainPreDigest),
#[codec(index = 3)]
SecondaryVRF(SecondaryVRFPreDigest),
}
impl PreDigest {
pub fn authority_index(&self) -> u32 {
match self {
PreDigest::Primary(primary) => primary.authority_index,
PreDigest::SecondaryPlain(secondary) => secondary.authority_index,
PreDigest::SecondaryVRF(secondary) => secondary.authority_index,
}
}
pub fn slot(&self) -> u64 {
match self {
PreDigest::Primary(primary) => primary.slot,
PreDigest::SecondaryPlain(secondary) => secondary.slot,
PreDigest::SecondaryVRF(secondary) => secondary.slot,
}
}
pub fn is_primary(&self) -> bool {
matches!(self, PreDigest::Primary(..))
}
pub fn vrf_signature(&self) -> Option<&VrfSignature> {
match self {
PreDigest::Primary(primary) => Some(&primary.vrf_signature),
PreDigest::SecondaryVRF(secondary) => Some(&secondary.vrf_signature),
PreDigest::SecondaryPlain(_) => None,
}
}
}
}