Branch data Line data Source code
1 : : // Copyright (c) 2009-2010 Satoshi Nakamoto 2 : : // Copyright (c) 2009-2020 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 : : #include <script/script_error.h> 7 : : 8 : : #include <string> 9 : : 10 : 0 : std::string ScriptErrorString(const ScriptError serror) 11 : : { 12 [ # # # # : 0 : switch (serror) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ] 13 : : { 14 : : case SCRIPT_ERR_OK: 15 [ # # ]: 0 : return "No error"; 16 : : case SCRIPT_ERR_EVAL_FALSE: 17 [ # # ]: 0 : return "Script evaluated without error but finished with a false/empty top stack element"; 18 : : case SCRIPT_ERR_VERIFY: 19 [ # # ]: 0 : return "Script failed an OP_VERIFY operation"; 20 : : case SCRIPT_ERR_EQUALVERIFY: 21 [ # # ]: 0 : return "Script failed an OP_EQUALVERIFY operation"; 22 : : case SCRIPT_ERR_CHECKMULTISIGVERIFY: 23 [ # # ]: 0 : return "Script failed an OP_CHECKMULTISIGVERIFY operation"; 24 : : case SCRIPT_ERR_CHECKSIGVERIFY: 25 [ # # ]: 0 : return "Script failed an OP_CHECKSIGVERIFY operation"; 26 : : case SCRIPT_ERR_NUMEQUALVERIFY: 27 [ # # ]: 0 : return "Script failed an OP_NUMEQUALVERIFY operation"; 28 : : case SCRIPT_ERR_SCRIPT_SIZE: 29 [ # # ]: 0 : return "Script is too big"; 30 : : case SCRIPT_ERR_PUSH_SIZE: 31 [ # # ]: 0 : return "Push value size limit exceeded"; 32 : : case SCRIPT_ERR_OP_COUNT: 33 [ # # ]: 0 : return "Operation limit exceeded"; 34 : : case SCRIPT_ERR_STACK_SIZE: 35 [ # # ]: 0 : return "Stack size limit exceeded"; 36 : : case SCRIPT_ERR_SIG_COUNT: 37 [ # # ]: 0 : return "Signature count negative or greater than pubkey count"; 38 : : case SCRIPT_ERR_PUBKEY_COUNT: 39 [ # # ]: 0 : return "Pubkey count negative or limit exceeded"; 40 : : case SCRIPT_ERR_BAD_OPCODE: 41 [ # # ]: 0 : return "Opcode missing or not understood"; 42 : : case SCRIPT_ERR_DISABLED_OPCODE: 43 [ # # ]: 0 : return "Attempted to use a disabled opcode"; 44 : : case SCRIPT_ERR_INVALID_STACK_OPERATION: 45 [ # # ]: 0 : return "Operation not valid with the current stack size"; 46 : : case SCRIPT_ERR_INVALID_ALTSTACK_OPERATION: 47 [ # # ]: 0 : return "Operation not valid with the current altstack size"; 48 : : case SCRIPT_ERR_OP_RETURN: 49 [ # # ]: 0 : return "OP_RETURN was encountered"; 50 : : case SCRIPT_ERR_UNBALANCED_CONDITIONAL: 51 [ # # ]: 0 : return "Invalid OP_IF construction"; 52 : : case SCRIPT_ERR_NEGATIVE_LOCKTIME: 53 [ # # ]: 0 : return "Negative locktime"; 54 : : case SCRIPT_ERR_UNSATISFIED_LOCKTIME: 55 [ # # ]: 0 : return "Locktime requirement not satisfied"; 56 : : case SCRIPT_ERR_SIG_HASHTYPE: 57 [ # # ]: 0 : return "Signature hash type missing or not understood"; 58 : : case SCRIPT_ERR_SIG_DER: 59 [ # # ]: 0 : return "Non-canonical DER signature"; 60 : : case SCRIPT_ERR_MINIMALDATA: 61 [ # # ]: 0 : return "Data push larger than necessary"; 62 : : case SCRIPT_ERR_SIG_PUSHONLY: 63 [ # # ]: 0 : return "Only push operators allowed in signatures"; 64 : : case SCRIPT_ERR_SIG_HIGH_S: 65 [ # # ]: 0 : return "Non-canonical signature: S value is unnecessarily high"; 66 : : case SCRIPT_ERR_SIG_NULLDUMMY: 67 [ # # ]: 0 : return "Dummy CHECKMULTISIG argument must be zero"; 68 : : case SCRIPT_ERR_MINIMALIF: 69 [ # # ]: 0 : return "OP_IF/NOTIF argument must be minimal"; 70 : : case SCRIPT_ERR_SIG_NULLFAIL: 71 [ # # ]: 0 : return "Signature must be zero for failed CHECK(MULTI)SIG operation"; 72 : : case SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS: 73 [ # # ]: 0 : return "NOPx reserved for soft-fork upgrades"; 74 : : case SCRIPT_ERR_DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM: 75 [ # # ]: 0 : return "Witness version reserved for soft-fork upgrades"; 76 : : case SCRIPT_ERR_DISCOURAGE_UPGRADABLE_TAPROOT_VERSION: 77 [ # # ]: 0 : return "Taproot version reserved for soft-fork upgrades"; 78 : : case SCRIPT_ERR_DISCOURAGE_OP_SUCCESS: 79 [ # # ]: 0 : return "OP_SUCCESSx reserved for soft-fork upgrades"; 80 : : case SCRIPT_ERR_DISCOURAGE_UPGRADABLE_PUBKEYTYPE: 81 [ # # ]: 0 : return "Public key version reserved for soft-fork upgrades"; 82 : : case SCRIPT_ERR_PUBKEYTYPE: 83 [ # # ]: 0 : return "Public key is neither compressed or uncompressed"; 84 : : case SCRIPT_ERR_CLEANSTACK: 85 [ # # ]: 0 : return "Stack size must be exactly one after execution"; 86 : : case SCRIPT_ERR_WITNESS_PROGRAM_WRONG_LENGTH: 87 [ # # ]: 0 : return "Witness program has incorrect length"; 88 : : case SCRIPT_ERR_WITNESS_PROGRAM_WITNESS_EMPTY: 89 [ # # ]: 0 : return "Witness program was passed an empty witness"; 90 : : case SCRIPT_ERR_WITNESS_PROGRAM_MISMATCH: 91 [ # # ]: 0 : return "Witness program hash mismatch"; 92 : : case SCRIPT_ERR_WITNESS_MALLEATED: 93 [ # # ]: 0 : return "Witness requires empty scriptSig"; 94 : : case SCRIPT_ERR_WITNESS_MALLEATED_P2SH: 95 [ # # ]: 0 : return "Witness requires only-redeemscript scriptSig"; 96 : : case SCRIPT_ERR_WITNESS_UNEXPECTED: 97 [ # # ]: 0 : return "Witness provided for non-witness script"; 98 : : case SCRIPT_ERR_WITNESS_PUBKEYTYPE: 99 [ # # ]: 0 : return "Using non-compressed keys in segwit"; 100 : : case SCRIPT_ERR_SCHNORR_SIG_SIZE: 101 [ # # ]: 0 : return "Invalid Schnorr signature size"; 102 : : case SCRIPT_ERR_SCHNORR_SIG_HASHTYPE: 103 [ # # ]: 0 : return "Invalid Schnorr signature hash type"; 104 : : case SCRIPT_ERR_SCHNORR_SIG: 105 [ # # ]: 0 : return "Invalid Schnorr signature"; 106 : : case SCRIPT_ERR_TAPROOT_WRONG_CONTROL_SIZE: 107 [ # # ]: 0 : return "Invalid Taproot control block size"; 108 : : case SCRIPT_ERR_TAPSCRIPT_VALIDATION_WEIGHT: 109 [ # # ]: 0 : return "Too much signature validation relative to witness weight"; 110 : : case SCRIPT_ERR_TAPSCRIPT_CHECKMULTISIG: 111 [ # # ]: 0 : return "OP_CHECKMULTISIG(VERIFY) is not available in tapscript"; 112 : : case SCRIPT_ERR_TAPSCRIPT_MINIMALIF: 113 [ # # ]: 0 : return "OP_IF/NOTIF argument must be minimal in tapscript"; 114 : : case SCRIPT_ERR_OP_CODESEPARATOR: 115 [ # # ]: 0 : return "Using OP_CODESEPARATOR in non-witness script"; 116 : : case SCRIPT_ERR_SIG_FINDANDDELETE: 117 [ # # ]: 0 : return "Signature is found in scriptCode"; 118 : : case SCRIPT_ERR_UNKNOWN_ERROR: 119 : 0 : case SCRIPT_ERR_ERROR_COUNT: 120 : 0 : default: break; 121 : : } 122 [ # # ]: 0 : return "unknown error"; 123 : 0 : }