Changeset View
Changeset View
Standalone View
Standalone View
src/script/script_error.cpp
// Copyright (c) 2009-2010 Satoshi Nakamoto | // Copyright (c) 2009-2010 Satoshi Nakamoto | ||||
// Copyright (c) 2009-2016 The Bitcoin Core developers | // Copyright (c) 2009-2016 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include <script/script_error.h> | #include <script/script_error.h> | ||||
const char *ScriptErrorString(const ScriptError serror) { | const char *ScriptErrorString(const ScriptError serror) { | ||||
switch (serror) { | switch (serror) { | ||||
case SCRIPT_ERR_OK: | case ScriptError::OK: | ||||
return "No error"; | return "No error"; | ||||
case SCRIPT_ERR_EVAL_FALSE: | case ScriptError::EVAL_FALSE: | ||||
return "Script evaluated without error but finished with a " | return "Script evaluated without error but finished with a " | ||||
"false/empty top stack element"; | "false/empty top stack element"; | ||||
case SCRIPT_ERR_VERIFY: | case ScriptError::VERIFY: | ||||
return "Script failed an OP_VERIFY operation"; | return "Script failed an OP_VERIFY operation"; | ||||
case SCRIPT_ERR_EQUALVERIFY: | case ScriptError::EQUALVERIFY: | ||||
return "Script failed an OP_EQUALVERIFY operation"; | return "Script failed an OP_EQUALVERIFY operation"; | ||||
case SCRIPT_ERR_CHECKMULTISIGVERIFY: | case ScriptError::CHECKMULTISIGVERIFY: | ||||
return "Script failed an OP_CHECKMULTISIGVERIFY operation"; | return "Script failed an OP_CHECKMULTISIGVERIFY operation"; | ||||
case SCRIPT_ERR_CHECKSIGVERIFY: | case ScriptError::CHECKSIGVERIFY: | ||||
return "Script failed an OP_CHECKSIGVERIFY operation"; | return "Script failed an OP_CHECKSIGVERIFY operation"; | ||||
case SCRIPT_ERR_CHECKDATASIGVERIFY: | case ScriptError::CHECKDATASIGVERIFY: | ||||
return "Script failed an OP_CHECKDATASIGVERIFY operation"; | return "Script failed an OP_CHECKDATASIGVERIFY operation"; | ||||
case SCRIPT_ERR_NUMEQUALVERIFY: | case ScriptError::NUMEQUALVERIFY: | ||||
return "Script failed an OP_NUMEQUALVERIFY operation"; | return "Script failed an OP_NUMEQUALVERIFY operation"; | ||||
case SCRIPT_ERR_SCRIPT_SIZE: | case ScriptError::SCRIPT_SIZE: | ||||
return "Script is too big"; | return "Script is too big"; | ||||
case SCRIPT_ERR_PUSH_SIZE: | case ScriptError::PUSH_SIZE: | ||||
return "Push value size limit exceeded"; | return "Push value size limit exceeded"; | ||||
case SCRIPT_ERR_OP_COUNT: | case ScriptError::OP_COUNT: | ||||
return "Operation limit exceeded"; | return "Operation limit exceeded"; | ||||
case SCRIPT_ERR_STACK_SIZE: | case ScriptError::STACK_SIZE: | ||||
return "Stack size limit exceeded"; | return "Stack size limit exceeded"; | ||||
case SCRIPT_ERR_SIG_COUNT: | case ScriptError::SIG_COUNT: | ||||
return "Signature count negative or greater than pubkey count"; | return "Signature count negative or greater than pubkey count"; | ||||
case SCRIPT_ERR_PUBKEY_COUNT: | case ScriptError::PUBKEY_COUNT: | ||||
return "Pubkey count negative or limit exceeded"; | return "Pubkey count negative or limit exceeded"; | ||||
case SCRIPT_ERR_INVALID_OPERAND_SIZE: | case ScriptError::INVALID_OPERAND_SIZE: | ||||
return "Invalid operand size"; | return "Invalid operand size"; | ||||
case SCRIPT_ERR_INVALID_NUMBER_RANGE: | case ScriptError::INVALID_NUMBER_RANGE: | ||||
return "Given operand is not a number within the valid range " | return "Given operand is not a number within the valid range " | ||||
"[-2^31...2^31]"; | "[-2^31...2^31]"; | ||||
case SCRIPT_ERR_IMPOSSIBLE_ENCODING: | case ScriptError::IMPOSSIBLE_ENCODING: | ||||
return "The requested encoding is impossible to satisfy"; | return "The requested encoding is impossible to satisfy"; | ||||
case SCRIPT_ERR_INVALID_SPLIT_RANGE: | case ScriptError::INVALID_SPLIT_RANGE: | ||||
return "Invalid OP_SPLIT range"; | return "Invalid OP_SPLIT range"; | ||||
case SCRIPT_ERR_BAD_OPCODE: | case ScriptError::BAD_OPCODE: | ||||
return "Opcode missing or not understood"; | return "Opcode missing or not understood"; | ||||
case SCRIPT_ERR_DISABLED_OPCODE: | case ScriptError::DISABLED_OPCODE: | ||||
return "Attempted to use a disabled opcode"; | return "Attempted to use a disabled opcode"; | ||||
case SCRIPT_ERR_INVALID_STACK_OPERATION: | case ScriptError::INVALID_STACK_OPERATION: | ||||
return "Operation not valid with the current stack size"; | return "Operation not valid with the current stack size"; | ||||
case SCRIPT_ERR_INVALID_ALTSTACK_OPERATION: | case ScriptError::INVALID_ALTSTACK_OPERATION: | ||||
return "Operation not valid with the current altstack size"; | return "Operation not valid with the current altstack size"; | ||||
case SCRIPT_ERR_OP_RETURN: | case ScriptError::OP_RETURN: | ||||
return "OP_RETURN was encountered"; | return "OP_RETURN was encountered"; | ||||
case SCRIPT_ERR_UNBALANCED_CONDITIONAL: | case ScriptError::UNBALANCED_CONDITIONAL: | ||||
return "Invalid OP_IF construction"; | return "Invalid OP_IF construction"; | ||||
case SCRIPT_ERR_DIV_BY_ZERO: | case ScriptError::DIV_BY_ZERO: | ||||
return "Division by zero error"; | return "Division by zero error"; | ||||
case SCRIPT_ERR_MOD_BY_ZERO: | case ScriptError::MOD_BY_ZERO: | ||||
return "Modulo by zero error"; | return "Modulo by zero error"; | ||||
case SCRIPT_ERR_NEGATIVE_LOCKTIME: | case ScriptError::NEGATIVE_LOCKTIME: | ||||
return "Negative locktime"; | return "Negative locktime"; | ||||
case SCRIPT_ERR_UNSATISFIED_LOCKTIME: | case ScriptError::UNSATISFIED_LOCKTIME: | ||||
return "Locktime requirement not satisfied"; | return "Locktime requirement not satisfied"; | ||||
case SCRIPT_ERR_SIG_HASHTYPE: | case ScriptError::SIG_HASHTYPE: | ||||
return "Signature hash type missing or not understood"; | return "Signature hash type missing or not understood"; | ||||
case SCRIPT_ERR_SIG_DER: | case ScriptError::SIG_DER: | ||||
return "Non-canonical DER signature"; | return "Non-canonical DER signature"; | ||||
case SCRIPT_ERR_MINIMALDATA: | case ScriptError::MINIMALDATA: | ||||
return "Data push larger than necessary"; | return "Data push larger than necessary"; | ||||
case SCRIPT_ERR_SIG_PUSHONLY: | case ScriptError::SIG_PUSHONLY: | ||||
return "Only push operators allowed in signature scripts"; | return "Only push operators allowed in signature scripts"; | ||||
case SCRIPT_ERR_SIG_HIGH_S: | case ScriptError::SIG_HIGH_S: | ||||
return "Non-canonical signature: S value is unnecessarily high"; | return "Non-canonical signature: S value is unnecessarily high"; | ||||
case SCRIPT_ERR_SIG_NULLDUMMY: | case ScriptError::SIG_NULLDUMMY: | ||||
return "Dummy CHECKMULTISIG argument must be zero"; | return "Dummy CHECKMULTISIG argument must be zero"; | ||||
case SCRIPT_ERR_MINIMALIF: | case ScriptError::MINIMALIF: | ||||
return "OP_IF/NOTIF argument must be minimal"; | return "OP_IF/NOTIF argument must be minimal"; | ||||
case SCRIPT_ERR_SIG_NULLFAIL: | case ScriptError::SIG_NULLFAIL: | ||||
return "Signature must be zero for failed CHECK(MULTI)SIG " | return "Signature must be zero for failed CHECK(MULTI)SIG " | ||||
"operation"; | "operation"; | ||||
case SCRIPT_ERR_SIG_BADLENGTH: | case ScriptError::SIG_BADLENGTH: | ||||
return "Signature cannot be 65 bytes in CHECKMULTISIG"; | return "Signature cannot be 65 bytes in CHECKMULTISIG"; | ||||
case SCRIPT_ERR_SIG_NONSCHNORR: | case ScriptError::SIG_NONSCHNORR: | ||||
return "Only Schnorr signatures allowed in this operation"; | return "Only Schnorr signatures allowed in this operation"; | ||||
case SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS: | case ScriptError::DISCOURAGE_UPGRADABLE_NOPS: | ||||
return "NOPx reserved for soft-fork upgrades"; | return "NOPx reserved for soft-fork upgrades"; | ||||
case SCRIPT_ERR_PUBKEYTYPE: | case ScriptError::PUBKEYTYPE: | ||||
return "Public key is neither compressed or uncompressed"; | return "Public key is neither compressed or uncompressed"; | ||||
case SCRIPT_ERR_CLEANSTACK: | case ScriptError::CLEANSTACK: | ||||
return "Script did not clean its stack"; | return "Script did not clean its stack"; | ||||
case SCRIPT_ERR_NONCOMPRESSED_PUBKEY: | case ScriptError::NONCOMPRESSED_PUBKEY: | ||||
return "Using non-compressed public key"; | return "Using non-compressed public key"; | ||||
case SCRIPT_ERR_ILLEGAL_FORKID: | case ScriptError::ILLEGAL_FORKID: | ||||
return "Illegal use of SIGHASH_FORKID"; | return "Illegal use of SIGHASH_FORKID"; | ||||
case SCRIPT_ERR_MUST_USE_FORKID: | case ScriptError::MUST_USE_FORKID: | ||||
return "Signature must use SIGHASH_FORKID"; | return "Signature must use SIGHASH_FORKID"; | ||||
case SCRIPT_ERR_UNKNOWN_ERROR: | case ScriptError::UNKNOWN: | ||||
case SCRIPT_ERR_ERROR_COUNT: | case ScriptError::ERROR_COUNT: | ||||
default: | default: | ||||
break; | break; | ||||
} | } | ||||
return "unknown error"; | return "unknown error"; | ||||
} | } |