Make non-minimal OP_IF/NOTIF argument non-standard for P2WSH
This commit is contained in:
@@ -485,6 +485,12 @@ bool EvalScript(vector<vector<unsigned char> >& stack, const CScript& script, un
|
||||
if (stack.size() < 1)
|
||||
return set_error(serror, SCRIPT_ERR_UNBALANCED_CONDITIONAL);
|
||||
valtype& vch = stacktop(-1);
|
||||
if (flags & SCRIPT_VERIFY_MINIMALIF) {
|
||||
if (vch.size() > 1)
|
||||
return set_error(serror, SCRIPT_ERR_MINIMALIF);
|
||||
if (vch.size() == 1 && vch[0] != 1)
|
||||
return set_error(serror, SCRIPT_ERR_MINIMALIF);
|
||||
}
|
||||
fValue = CastToBool(vch);
|
||||
if (opcode == OP_NOTIF)
|
||||
fValue = !fValue;
|
||||
|
||||
@@ -82,15 +82,19 @@ enum
|
||||
// See BIP65 for details.
|
||||
SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9),
|
||||
|
||||
// Evaluating a pubkey that is not (0x04 + 64 bytes) or (0x02 or 0x03 + 32 bytes) by checksig causes script failure.
|
||||
// (softfork safe)
|
||||
SCRIPT_VERIFY_DERKEY = (1U << 10),
|
||||
// Evaluating a pubkey that is not (0x04 + 64 bytes) or (0x02 or 0x03 + 32 bytes) by checksig causes script failure.
|
||||
// (softfork safe)
|
||||
SCRIPT_VERIFY_DERKEY = (1U << 10),
|
||||
|
||||
// support CHECKSEQUENCEVERIFY opcode
|
||||
//
|
||||
// See BIP112 for details
|
||||
SCRIPT_VERIFY_CHECKSEQUENCEVERIFY = (1U << 10),
|
||||
|
||||
// Require the argument of OP_IF/NOTIF to be exactly 0x01 or empty vector
|
||||
//
|
||||
SCRIPT_VERIFY_MINIMALIF = (1U << 13),
|
||||
|
||||
// Signature(s) must be empty vector if an CHECK(MULTI)SIG operation failed
|
||||
//
|
||||
SCRIPT_VERIFY_NULLFAIL = (1U << 14),
|
||||
|
||||
@@ -63,6 +63,8 @@ const char* ScriptErrorString(const ScriptError serror)
|
||||
return "Non-canonical signature: S value is unnecessarily high";
|
||||
case SCRIPT_ERR_SIG_NULLDUMMY:
|
||||
return "Dummy CHECKMULTISIG argument must be zero";
|
||||
case SCRIPT_ERR_MINIMALIF:
|
||||
return "OP_IF/NOTIF argument must be minimal";
|
||||
case SCRIPT_ERR_SIG_NULLFAIL:
|
||||
return "Signature must be zero for failed CHECK(MULTI)SIG operation";
|
||||
case SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS:
|
||||
|
||||
@@ -39,7 +39,7 @@ typedef enum ScriptError_t
|
||||
SCRIPT_ERR_NEGATIVE_LOCKTIME,
|
||||
SCRIPT_ERR_UNSATISFIED_LOCKTIME,
|
||||
|
||||
/* BIP62 */
|
||||
/* Malleability */
|
||||
SCRIPT_ERR_SIG_HASHTYPE,
|
||||
SCRIPT_ERR_SIG_DER,
|
||||
SCRIPT_ERR_MINIMALDATA,
|
||||
@@ -48,13 +48,14 @@ typedef enum ScriptError_t
|
||||
SCRIPT_ERR_SIG_NULLDUMMY,
|
||||
SCRIPT_ERR_PUBKEYTYPE,
|
||||
SCRIPT_ERR_CLEANSTACK,
|
||||
SCRIPT_ERR_MINIMALIF,
|
||||
SCRIPT_ERR_SIG_NULLFAIL,
|
||||
|
||||
/* softfork safeness */
|
||||
SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS,
|
||||
|
||||
/* count acks */
|
||||
SCRIPT_ERR_COUNT_ACKS_INVALID_PARAM,
|
||||
|
||||
/* count acks */
|
||||
SCRIPT_ERR_COUNT_ACKS_INVALID_PARAM,
|
||||
|
||||
SCRIPT_ERR_ERROR_COUNT
|
||||
} ScriptError;
|
||||
|
||||
Reference in New Issue
Block a user