use {
num_derive::FromPrimitive,
solana_program::{decode_error::DecodeError, program_error::ProgramError},
thiserror::Error,
};
#[derive(Clone, Copy, Debug, Eq, Error, FromPrimitive, PartialEq)]
pub enum SlashingError {
#[error("Exceeds statue of limitations")]
ExceedsStatueOfLimitations,
#[error("Invalid shred variant")]
InvalidShredVariant,
#[error("Invalid Merkle shred")]
InvalidMerkleShred,
#[error("Invalid payload proof")]
InvalidPayloadProof,
#[error("Invalid erasure meta conflict")]
InvalidErasureMetaConflict,
#[error("Invalid instruction")]
InvalidInstruction,
#[error("Invalid last index conflict")]
InvalidLastIndexConflict,
#[error("Invalid shred version")]
InvalidShredVersion,
#[error("Invalid signature")]
InvalidSignature,
#[error("Legacy shreds are not eligible for slashing")]
LegacyShreds,
#[error("Proof buffer deserialization error")]
ProofBufferDeserializationError,
#[error("Proof buffer too small")]
ProofBufferTooSmall,
#[error("Deserialization error")]
ShredDeserializationError,
#[error("Shred type mismatch")]
ShredTypeMismatch,
#[error("Slot mismatch")]
SlotMismatch,
}
impl From<SlashingError> for ProgramError {
fn from(e: SlashingError) -> Self {
ProgramError::Custom(e as u32)
}
}
impl<T> DecodeError<T> for SlashingError {
fn type_of() -> &'static str {
"Slashing Error"
}
}