forked from jito-foundation/jito-solana
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor: Split vote_instruction.rs into multiple files (#22502)
- Loading branch information
Showing
7 changed files
with
615 additions
and
581 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
//! Vote program errors | ||
use { | ||
log::*, | ||
num_derive::{FromPrimitive, ToPrimitive}, | ||
solana_sdk::decode_error::DecodeError, | ||
thiserror::Error, | ||
}; | ||
|
||
/// Reasons the vote might have had an error | ||
#[derive(Error, Debug, Clone, PartialEq, FromPrimitive, ToPrimitive)] | ||
pub enum VoteError { | ||
#[error("vote already recorded or not in slot hashes history")] | ||
VoteTooOld, | ||
|
||
#[error("vote slots do not match bank history")] | ||
SlotsMismatch, | ||
|
||
#[error("vote hash does not match bank hash")] | ||
SlotHashMismatch, | ||
|
||
#[error("vote has no slots, invalid")] | ||
EmptySlots, | ||
|
||
#[error("vote timestamp not recent")] | ||
TimestampTooOld, | ||
|
||
#[error("authorized voter has already been changed this epoch")] | ||
TooSoonToReauthorize, | ||
|
||
// TODO: figure out how to migrate these new errors | ||
#[error("Old state had vote which should not have been popped off by vote in new state")] | ||
LockoutConflict, | ||
|
||
#[error("Proposed state had earlier slot which should have been popped off by later vote")] | ||
NewVoteStateLockoutMismatch, | ||
|
||
#[error("Vote slots are not ordered")] | ||
SlotsNotOrdered, | ||
|
||
#[error("Confirmations are not ordered")] | ||
ConfirmationsNotOrdered, | ||
|
||
#[error("Zero confirmations")] | ||
ZeroConfirmations, | ||
|
||
#[error("Confirmation exceeds limit")] | ||
ConfirmationTooLarge, | ||
|
||
#[error("Root rolled back")] | ||
RootRollBack, | ||
|
||
#[error("Confirmations for same vote were smaller in new proposed state")] | ||
ConfirmationRollBack, | ||
|
||
#[error("New state contained a vote slot smaller than the root")] | ||
SlotSmallerThanRoot, | ||
|
||
#[error("New state contained too many votes")] | ||
TooManyVotes, | ||
|
||
#[error("every slot in the vote was older than the SlotHashes history")] | ||
VotesTooOldAllFiltered, | ||
} | ||
|
||
impl<E> DecodeError<E> for VoteError { | ||
fn type_of() -> &'static str { | ||
"VoteError" | ||
} | ||
} | ||
|
||
#[cfg(test)] | ||
mod tests { | ||
use {super::*, solana_sdk::instruction::InstructionError}; | ||
|
||
#[test] | ||
fn test_custom_error_decode() { | ||
use num_traits::FromPrimitive; | ||
fn pretty_err<T>(err: InstructionError) -> String | ||
where | ||
T: 'static + std::error::Error + DecodeError<T> + FromPrimitive, | ||
{ | ||
if let InstructionError::Custom(code) = err { | ||
let specific_error: T = T::decode_custom_error_to_enum(code).unwrap(); | ||
format!( | ||
"{:?}: {}::{:?} - {}", | ||
err, | ||
T::type_of(), | ||
specific_error, | ||
specific_error, | ||
) | ||
} else { | ||
"".to_string() | ||
} | ||
} | ||
assert_eq!( | ||
"Custom(0): VoteError::VoteTooOld - vote already recorded or not in slot hashes history", | ||
pretty_err::<VoteError>(VoteError::VoteTooOld.into()) | ||
) | ||
} | ||
} |
Oops, something went wrong.