Skip to main content

bsv_script/
error.rs

1/// Error types for script operations.
2///
3/// Covers parsing errors, encoding/decoding failures, address validation,
4/// and script classification problems.
5#[derive(Debug, thiserror::Error)]
6pub enum ScriptError {
7    /// Generic invalid script error.
8    #[error("invalid script: {0}")]
9    InvalidScript(String),
10
11    /// An unrecognized or invalid opcode was encountered.
12    #[error("invalid opcode: {0}")]
13    InvalidOpcode(u8),
14
15    /// Invalid opcode data encountered during ASM parsing.
16    #[error("invalid opcode data")]
17    InvalidOpcodeData,
18
19    /// Attempted to use AppendOpcodes for a push data opcode.
20    #[error("use append_push_data for push data funcs: {0}")]
21    InvalidOpcodeType(String),
22
23    /// Invalid address string.
24    #[error("invalid address: {0}")]
25    InvalidAddress(String),
26
27    /// Invalid address length after Base58 decoding.
28    #[error("invalid address length for '{0}'")]
29    InvalidAddressLength(String),
30
31    /// Address type not supported (not P2PKH mainnet/testnet).
32    #[error("address not supported {0}")]
33    UnsupportedAddress(String),
34
35    /// Script too large.
36    #[error("script too large: {0} bytes")]
37    ScriptTooLarge(usize),
38
39    /// Invalid hex string.
40    #[error("invalid hex: {0}")]
41    InvalidHex(String),
42
43    /// Hex decoding error.
44    #[error("hex decode error: {0}")]
45    HexDecode(#[from] hex::FromHexError),
46
47    /// Script is empty when a non-empty script was expected.
48    #[error("script is empty")]
49    EmptyScript,
50
51    /// Script is not a P2PKH script.
52    #[error("not a P2PKH")]
53    NotP2PKH,
54
55    /// Not enough data in script to complete a push operation.
56    #[error("not enough data")]
57    DataTooSmall,
58
59    /// Push data exceeds maximum allowed size.
60    #[error("data too big")]
61    DataTooBig,
62
63    /// A push data part exceeds protocol limits.
64    #[error("part too big '{0}'")]
65    PartTooBig(usize),
66
67    /// Script index is out of range.
68    #[error("script index out of range")]
69    IndexOutOfRange,
70
71    /// Bad character in Base58 encoding.
72    #[error("bad char")]
73    EncodingBadChar,
74
75    /// Encoded value is too long for the target type.
76    #[error("too long")]
77    EncodingTooLong,
78
79    /// Address version byte is not recognized (not 0x00 or 0x6f).
80    #[error("not version 0 or 6f")]
81    EncodingInvalidVersion,
82
83    /// Base58Check checksum does not match.
84    #[error("checksum failed")]
85    EncodingChecksumFailed,
86
87    /// Interpreter error.
88    #[error("interpreter error: {0}")]
89    InterpreterError(String),
90
91    /// Error from primitives crate.
92    #[error("primitives error: {0}")]
93    Primitives(#[from] bsv_primitives::PrimitivesError),
94}