1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2014 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 typedef enum ScriptError_t
10 {
11     SCRIPT_ERR_OK = 0,
12     SCRIPT_ERR_UNKNOWN_ERROR,
13     SCRIPT_ERR_EVAL_FALSE,
14     SCRIPT_ERR_OP_RETURN,
15 
16     /* Max sizes */
17     SCRIPT_ERR_SCRIPT_SIZE,
18     SCRIPT_ERR_PUSH_SIZE,
19     SCRIPT_ERR_OP_COUNT,
20     SCRIPT_ERR_STACK_SIZE,
21     SCRIPT_ERR_SIG_COUNT,
22     SCRIPT_ERR_PUBKEY_COUNT,
23 
24     /* Failed verify operations */
25     SCRIPT_ERR_VERIFY,
26     SCRIPT_ERR_EQUALVERIFY,
27     SCRIPT_ERR_CHECKMULTISIGVERIFY,
28     SCRIPT_ERR_CHECKSIGVERIFY,
29     SCRIPT_ERR_NUMEQUALVERIFY,
30 
31     /* Logical/Format/Canonical errors */
32     SCRIPT_ERR_BAD_OPCODE,
33     SCRIPT_ERR_DISABLED_OPCODE,
34     SCRIPT_ERR_INVALID_STACK_OPERATION,
35     SCRIPT_ERR_INVALID_ALTSTACK_OPERATION,
36     SCRIPT_ERR_UNBALANCED_CONDITIONAL,
37 
38     /* CHECKLOCKTIMEVERIFY and CHECKSEQUENCEVERIFY */
39     SCRIPT_ERR_NEGATIVE_LOCKTIME,
40     SCRIPT_ERR_UNSATISFIED_LOCKTIME,
41 
42     /* Malleability */
43     SCRIPT_ERR_SIG_HASHTYPE,
44     SCRIPT_ERR_SIG_DER,
45     SCRIPT_ERR_MINIMALDATA,
46     SCRIPT_ERR_SIG_PUSHONLY,
47     SCRIPT_ERR_SIG_HIGH_S,
48     SCRIPT_ERR_SIG_NULLDUMMY,
49     SCRIPT_ERR_PUBKEYTYPE,
50     SCRIPT_ERR_CLEANSTACK,
51     SCRIPT_ERR_MINIMALIF,
52     SCRIPT_ERR_SIG_NULLFAIL,
53 
54     /* softfork safeness */
55     SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS,
56     SCRIPT_ERR_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM,
57 
58     /* segregated witness */
59     SCRIPT_ERR_WITNESS_PROGRAM_WRONG_LENGTH,
60     SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY,
61     SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH,
62     SCRIPT_ERR_WITNESS_MALLEATED,
63     SCRIPT_ERR_WITNESS_MALLEATED_P2SH,
64     SCRIPT_ERR_WITNESS_UNEXPECTED,
65     SCRIPT_ERR_WITNESS_PUBKEYTYPE,
66 
67     SCRIPT_ERR_ERROR_COUNT
68 } ScriptError;
69 
70 #define SCRIPT_ERR_LAST SCRIPT_ERR_ERROR_COUNT
71 
72 const char* ScriptErrorString(const ScriptError error);
73 
74 #endif // BITCOIN_SCRIPT_SCRIPT_ERROR_H
75