#[derive(Debug, thiserror::Error)]
pub enum ScriptError {
#[error("invalid script: {0}")]
InvalidScript(String),
#[error("invalid opcode: {0}")]
InvalidOpcode(u8),
#[error("invalid opcode data")]
InvalidOpcodeData,
#[error("use append_push_data for push data funcs: {0}")]
InvalidOpcodeType(String),
#[error("invalid address: {0}")]
InvalidAddress(String),
#[error("invalid address length for '{0}'")]
InvalidAddressLength(String),
#[error("address not supported {0}")]
UnsupportedAddress(String),
#[error("script too large: {0} bytes")]
ScriptTooLarge(usize),
#[error("invalid hex: {0}")]
InvalidHex(String),
#[error("hex decode error: {0}")]
HexDecode(#[from] hex::FromHexError),
#[error("script is empty")]
EmptyScript,
#[error("not a P2PKH")]
NotP2PKH,
#[error("not enough data")]
DataTooSmall,
#[error("data too big")]
DataTooBig,
#[error("part too big '{0}'")]
PartTooBig(usize),
#[error("script index out of range")]
IndexOutOfRange,
#[error("bad char")]
EncodingBadChar,
#[error("too long")]
EncodingTooLong,
#[error("not version 0 or 6f")]
EncodingInvalidVersion,
#[error("checksum failed")]
EncodingChecksumFailed,
#[error("interpreter error: {0}")]
InterpreterError(String),
#[error("primitives error: {0}")]
Primitives(#[from] bsv_primitives::PrimitivesError),
}