1use {
4 num_derive::FromPrimitive,
5 solana_program::{decode_error::DecodeError, program_error::ProgramError},
6 thiserror::Error,
7};
8
9#[derive(Clone, Copy, Debug, Eq, Error, FromPrimitive, PartialEq)]
11pub enum SlashingError {
12 #[error("Exceeds statue of limitations")]
14 ExceedsStatueOfLimitations,
15
16 #[error("Invalid shred variant")]
18 InvalidShredVariant,
19
20 #[error("Invalid Merkle shred")]
22 InvalidMerkleShred,
23
24 #[error("Invalid payload proof")]
26 InvalidPayloadProof,
27
28 #[error("Invalid erasure meta conflict")]
30 InvalidErasureMetaConflict,
31
32 #[error("Invalid instruction")]
34 InvalidInstruction,
35
36 #[error("Invalid last index conflict")]
38 InvalidLastIndexConflict,
39
40 #[error("Invalid shred version")]
42 InvalidShredVersion,
43
44 #[error("Invalid signature")]
46 InvalidSignature,
47
48 #[error("Legacy shreds are not eligible for slashing")]
50 LegacyShreds,
51
52 #[error("Proof buffer deserialization error")]
54 ProofBufferDeserializationError,
55
56 #[error("Proof buffer too small")]
58 ProofBufferTooSmall,
59
60 #[error("Deserialization error")]
62 ShredDeserializationError,
63
64 #[error("Shred type mismatch")]
66 ShredTypeMismatch,
67
68 #[error("Slot mismatch")]
70 SlotMismatch,
71}
72
73impl From<SlashingError> for ProgramError {
74 fn from(e: SlashingError) -> Self {
75 ProgramError::Custom(e as u32)
76 }
77}
78
79impl<T> DecodeError<T> for SlashingError {
80 fn type_of() -> &'static str {
81 "Slashing Error"
82 }
83}