parity-zcash/src/script/error.rs

80 lines
2.2 KiB
Rust
Raw Normal View History

2016-08-19 06:40:32 -07:00
use std::fmt;
use script::Opcode;
#[derive(Debug, PartialEq)]
pub enum Error {
2016-09-08 03:20:18 -07:00
Unknown,
ReturnOpcode,
2016-08-23 06:07:14 -07:00
// Max sizes.
ScriptSize,
PushSize,
2016-09-08 03:20:18 -07:00
NumberOverflow,
NumberNotMinimallyEncoded,
// Failed verify operations
Verify,
EqualVerify,
2016-08-23 06:07:14 -07:00
2016-08-22 09:23:32 -07:00
// Logical/Format/Canonical errors.
2016-08-23 06:07:14 -07:00
BadOpcode,
2016-08-19 06:40:32 -07:00
DisabledOpcode(Opcode),
2016-09-08 03:20:18 -07:00
InvalidStackOperation,
2016-09-08 06:05:57 -07:00
InvalidAltstackOperation,
UnbalancedConditional,
2016-09-08 03:20:18 -07:00
// CHECKLOCKTIMEVERIFY and CHECKSEQUENCEVERIFY
NegativeLocktime,
UnsatisfiedLocktime,
2016-08-22 09:23:32 -07:00
// BIP62
SignatureHashtype,
SignatureDer,
Minimaldata,
2016-08-22 09:23:32 -07:00
SignatureHighS,
PubkeyType,
2016-09-08 03:20:18 -07:00
// Softfork safeness
DiscourageUpgradableNops,
2016-08-19 06:40:32 -07:00
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
2016-09-08 03:20:18 -07:00
Error::Unknown => "Unknown error".fmt(f),
Error::ReturnOpcode => "Used return opcode".fmt(f),
// Failed verify operations
Error::Verify => "Failed verify operation".fmt(f),
Error::EqualVerify => "Failed equal verify operation".fmt(f),
2016-08-23 06:07:14 -07:00
// Max sizes.
Error::ScriptSize => "Script is too long".fmt(f),
Error::PushSize => "Pushing too many bytes".fmt(f),
2016-09-08 03:20:18 -07:00
Error::NumberOverflow => "Number overflow".fmt(f),
Error::NumberNotMinimallyEncoded => "Number not minimally encoded".fmt(f),
2016-08-23 06:07:14 -07:00
2016-08-22 09:23:32 -07:00
// Logical/Format/Canonical errors.
2016-08-23 06:07:14 -07:00
Error::BadOpcode => "Bad Opcode".fmt(f),
2016-08-19 06:40:32 -07:00
Error::DisabledOpcode(ref opcode) => writeln!(f, "Disabled Opcode: {:?}", opcode),
2016-09-08 03:20:18 -07:00
Error::InvalidStackOperation => "Invalid stack operation".fmt(f),
2016-09-08 06:05:57 -07:00
Error::InvalidAltstackOperation => "Invalid altstack operation".fmt(f),
Error::UnbalancedConditional => "Unbalanced conditional".fmt(f),
2016-09-08 03:20:18 -07:00
2016-09-08 06:05:57 -07:00
// CHECKLOCKTIMEVERIFY and CHECKSEQUENCEVERIFY
2016-09-08 03:20:18 -07:00
Error::NegativeLocktime => "Negative locktime".fmt(f),
Error::UnsatisfiedLocktime => "UnsatisfiedLocktime".fmt(f),
2016-08-22 09:23:32 -07:00
// BIP62
Error::SignatureHashtype => "Invalid Signature Hashtype".fmt(f),
Error::SignatureDer => "Invalid Signature".fmt(f),
Error::Minimaldata => "Check minimaldata failed".fmt(f),
2016-08-22 09:23:32 -07:00
Error::SignatureHighS => "Invalid High S in Signature".fmt(f),
Error::PubkeyType => "Invalid Pubkey".fmt(f),
2016-09-08 03:20:18 -07:00
// Softfork safeness
Error::DiscourageUpgradableNops => "Discourage Upgradable Nops".fmt(f),
2016-08-19 06:40:32 -07:00
}
}
}