mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-20 03:50:08 +00:00
03914234b3
NOP1 to NOP10 are reserved for future soft-fork upgrades. In the event of an upgrade such NOPs have *VERIFY behavior, meaning that if their arguments are not correct the script fails. Discouraging these NOPs by rejecting transactions containing them from the mempool ensures that we'll never accept transactions, nor mine blocks, with scripts that are now invalid according to the majority of hashing power even if we're not yet upgraded. Previously this wasn't an issue as the IsStandard() rules didn't allow upgradable NOPs anyway, but 7f3b4e95 relaxed the IsStandard() rules for P2SH redemptions allowing any redeemScript to be spent. We *do* allow upgradable NOPs in scripts so long as they are not executed. This is harmless as there is no opportunity for the script to be invalid post-upgrade.
70 lines
3.0 KiB
C++
70 lines
3.0 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2014 The Bitcoin developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#include "script_error.h"
|
|
|
|
const char* ScriptErrorString(const ScriptError serror)
|
|
{
|
|
switch (serror)
|
|
{
|
|
case SCRIPT_ERR_OK:
|
|
return "No error";
|
|
case SCRIPT_ERR_EVAL_FALSE:
|
|
return "Script evaluated without error but finished with a false/empty top stack element";
|
|
case SCRIPT_ERR_VERIFY:
|
|
return "Script failed an OP_VERIFY operation";
|
|
case SCRIPT_ERR_EQUALVERIFY:
|
|
return "Script failed an OP_EQUALVERIFY operation";
|
|
case SCRIPT_ERR_CHECKMULTISIGVERIFY:
|
|
return "Script failed an OP_CHECKMULTISIGVERIFY operation";
|
|
case SCRIPT_ERR_CHECKSIGVERIFY:
|
|
return "Script failed an OP_CHECKSIGVERIFY operation";
|
|
case SCRIPT_ERR_NUMEQUALVERIFY:
|
|
return "Script failed an OP_NUMEQUALVERIFY operation";
|
|
case SCRIPT_ERR_SCRIPT_SIZE:
|
|
return "Script is too big";
|
|
case SCRIPT_ERR_PUSH_SIZE:
|
|
return "Push value size limit exceeded";
|
|
case SCRIPT_ERR_OP_COUNT:
|
|
return "Operation limit exceeded";
|
|
case SCRIPT_ERR_STACK_SIZE:
|
|
return "Stack size limit exceeded";
|
|
case SCRIPT_ERR_SIG_COUNT:
|
|
return "Signature count negative or greater than pubkey count";
|
|
case SCRIPT_ERR_PUBKEY_COUNT:
|
|
return "Pubkey count negative or limit exceeded";
|
|
case SCRIPT_ERR_BAD_OPCODE:
|
|
return "Opcode missing or not understood";
|
|
case SCRIPT_ERR_DISABLED_OPCODE:
|
|
return "Attempted to use a disabled opcode";
|
|
case SCRIPT_ERR_INVALID_STACK_OPERATION:
|
|
return "Operation not valid with the current stack size";
|
|
case SCRIPT_ERR_INVALID_ALTSTACK_OPERATION:
|
|
return "Operation not valid with the current altstack size";
|
|
case SCRIPT_ERR_OP_RETURN:
|
|
return "OP_RETURN was encountered";
|
|
case SCRIPT_ERR_UNBALANCED_CONDITIONAL:
|
|
return "Invalid OP_IF construction";
|
|
case SCRIPT_ERR_SIG_HASHTYPE:
|
|
return "Signature hash type missing or not understood";
|
|
case SCRIPT_ERR_SIG_DER:
|
|
return "Non-canonical DER signature";
|
|
case SCRIPT_ERR_MINIMALDATA:
|
|
return "Data push larger than necessary";
|
|
case SCRIPT_ERR_SIG_PUSHONLY:
|
|
return "Only non-push operators allowed in signatures";
|
|
case SCRIPT_ERR_SIG_HIGH_S:
|
|
return "Non-canonical signature: S value is unnecessarily high";
|
|
case SCRIPT_ERR_SIG_NULLDUMMY:
|
|
return "Dummy CHECKMULTISIG argument must be zero";
|
|
case SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS:
|
|
return "NOPx reserved for soft-fork upgrades";
|
|
case SCRIPT_ERR_UNKNOWN_ERROR:
|
|
case SCRIPT_ERR_ERROR_COUNT:
|
|
default: break;
|
|
}
|
|
return "unknown error";
|
|
}
|