1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2018 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_SCRIPT_SCRIPT_ERROR_H
7 #define BITCOIN_SCRIPT_SCRIPT_ERROR_H
8 
9 #include <string>
10 
11 typedef enum ScriptError_t
12 {
13     SCRIPT_ERR_OK = 0,
14     SCRIPT_ERR_UNKNOWN_ERROR,
15     SCRIPT_ERR_EVAL_FALSE,
16     SCRIPT_ERR_OP_RETURN,
17 
18     /* Max sizes */
19     SCRIPT_ERR_SCRIPT_SIZE,
20     SCRIPT_ERR_PUSH_SIZE,
21     SCRIPT_ERR_OP_COUNT,
22     SCRIPT_ERR_STACK_SIZE,
23     SCRIPT_ERR_SIG_COUNT,
24     SCRIPT_ERR_PUBKEY_COUNT,
25 
26     /* Failed verify operations */
27     SCRIPT_ERR_VERIFY,
28     SCRIPT_ERR_EQUALVERIFY,
29     SCRIPT_ERR_CHECKMULTISIGVERIFY,
30     SCRIPT_ERR_CHECKSIGVERIFY,
31     SCRIPT_ERR_NUMEQUALVERIFY,
32 
33     /* Logical/Format/Canonical errors */
34     SCRIPT_ERR_BAD_OPCODE,
35     SCRIPT_ERR_DISABLED_OPCODE,
36     SCRIPT_ERR_INVALID_STACK_OPERATION,
37     SCRIPT_ERR_INVALID_ALTSTACK_OPERATION,
38     SCRIPT_ERR_UNBALANCED_CONDITIONAL,
39 
40     /* CHECKLOCKTIMEVERIFY and CHECKSEQUENCEVERIFY */
41     SCRIPT_ERR_NEGATIVE_LOCKTIME,
42     SCRIPT_ERR_UNSATISFIED_LOCKTIME,
43 
44     /* Malleability */
45     SCRIPT_ERR_SIG_HASHTYPE,
46     SCRIPT_ERR_SIG_DER,
47     SCRIPT_ERR_MINIMALDATA,
48     SCRIPT_ERR_SIG_PUSHONLY,
49     SCRIPT_ERR_SIG_HIGH_S,
50     SCRIPT_ERR_SIG_NULLDUMMY,
51     SCRIPT_ERR_PUBKEYTYPE,
52     SCRIPT_ERR_CLEANSTACK,
53     SCRIPT_ERR_MINIMALIF,
54     SCRIPT_ERR_SIG_NULLFAIL,
55 
56     /* softfork safeness */
57     SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS,
58     SCRIPT_ERR_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM,
59     SCRIPT_ERR_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION,
60     SCRIPT_ERR_DISCOURAGE_OP_SUCCESS,
61     SCRIPT_ERR_DISCOURAGE_UPGRADABLE_PUBKEYTYPE,
62 
63     /* segregated witness */
64     SCRIPT_ERR_WITNESS_PROGRAM_WRONG_LENGTH,
65     SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY,
66     SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH,
67     SCRIPT_ERR_WITNESS_MALLEATED,
68     SCRIPT_ERR_WITNESS_MALLEATED_P2SH,
69     SCRIPT_ERR_WITNESS_UNEXPECTED,
70     SCRIPT_ERR_WITNESS_PUBKEYTYPE,
71 
72     /* Taproot */
73     SCRIPT_ERR_SCHNORR_SIG_SIZE,
74     SCRIPT_ERR_SCHNORR_SIG_HASHTYPE,
75     SCRIPT_ERR_SCHNORR_SIG,
76     SCRIPT_ERR_TAPROOT_WRONG_CONTROL_SIZE,
77     SCRIPT_ERR_TAPSCRIPT_VALIDATION_WEIGHT,
78     SCRIPT_ERR_TAPSCRIPT_CHECKMULTISIG,
79     SCRIPT_ERR_TAPSCRIPT_MINIMALIF,
80 
81     /* Constant scriptCode */
82     SCRIPT_ERR_OP_CODESEPARATOR,
83     SCRIPT_ERR_SIG_FINDANDDELETE,
84 
85     SCRIPT_ERR_ERROR_COUNT
86 } ScriptError;
87 
88 #define SCRIPT_ERR_LAST SCRIPT_ERR_ERROR_COUNT
89 
90 std::string ScriptErrorString(const ScriptError error);
91 
92 #endif // BITCOIN_SCRIPT_SCRIPT_ERROR_H
93