use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum ProposerAppealGround {
HeadersIdentical,
ProposerIndexMismatch,
SignatureAInvalid,
SignatureBInvalid,
SlotMismatch,
ValidatorNotActiveAtEpoch,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ProposerSlashingAppeal {
pub ground: ProposerAppealGround,
#[serde(with = "serde_bytes")]
pub witness: Vec<u8>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum AttesterAppealGround {
AttestationsIdentical,
NotSlashableByPredicate,
EmptyIntersection,
SignatureAInvalid,
SignatureBInvalid,
InvalidIndexedAttestationStructure,
ValidatorNotInIntersection {
validator_index: u32,
},
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct AttesterSlashingAppeal {
pub ground: AttesterAppealGround,
#[serde(with = "serde_bytes")]
pub witness: Vec<u8>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum InvalidBlockAppealGround {
BlockActuallyValid,
ProposerSignatureInvalid,
FailureReasonMismatch,
EvidenceEpochMismatch,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct InvalidBlockAppeal {
pub ground: InvalidBlockAppealGround,
#[serde(with = "serde_bytes")]
pub witness: Vec<u8>,
}