Changeset View
Changeset View
Standalone View
Standalone View
src/test/script_tests.cpp
Show First 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | static ScriptErrorDesc script_errors[] = { | ||||
{SCRIPT_ERR_OP_COUNT, "OP_COUNT"}, | {SCRIPT_ERR_OP_COUNT, "OP_COUNT"}, | ||||
{SCRIPT_ERR_STACK_SIZE, "STACK_SIZE"}, | {SCRIPT_ERR_STACK_SIZE, "STACK_SIZE"}, | ||||
{SCRIPT_ERR_SIG_COUNT, "SIG_COUNT"}, | {SCRIPT_ERR_SIG_COUNT, "SIG_COUNT"}, | ||||
{SCRIPT_ERR_PUBKEY_COUNT, "PUBKEY_COUNT"}, | {SCRIPT_ERR_PUBKEY_COUNT, "PUBKEY_COUNT"}, | ||||
{SCRIPT_ERR_INVALID_OPERAND_SIZE, "OPERAND_SIZE"}, | {SCRIPT_ERR_INVALID_OPERAND_SIZE, "OPERAND_SIZE"}, | ||||
{SCRIPT_ERR_INVALID_NUMBER_RANGE, "INVALID_NUMBER_RANGE"}, | {SCRIPT_ERR_INVALID_NUMBER_RANGE, "INVALID_NUMBER_RANGE"}, | ||||
{SCRIPT_ERR_IMPOSSIBLE_ENCODING, "IMPOSSIBLE_ENCODING"}, | {SCRIPT_ERR_IMPOSSIBLE_ENCODING, "IMPOSSIBLE_ENCODING"}, | ||||
{SCRIPT_ERR_INVALID_SPLIT_RANGE, "SPLIT_RANGE"}, | {SCRIPT_ERR_INVALID_SPLIT_RANGE, "SPLIT_RANGE"}, | ||||
{SCRIPT_ERR_INVALID_CHECKBITS, "CHECKBITS"}, | |||||
{SCRIPT_ERR_VERIFY, "VERIFY"}, | {SCRIPT_ERR_VERIFY, "VERIFY"}, | ||||
{SCRIPT_ERR_EQUALVERIFY, "EQUALVERIFY"}, | {SCRIPT_ERR_EQUALVERIFY, "EQUALVERIFY"}, | ||||
{SCRIPT_ERR_CHECKMULTISIGVERIFY, "CHECKMULTISIGVERIFY"}, | {SCRIPT_ERR_CHECKMULTISIGVERIFY, "CHECKMULTISIGVERIFY"}, | ||||
{SCRIPT_ERR_CHECKSIGVERIFY, "CHECKSIGVERIFY"}, | {SCRIPT_ERR_CHECKSIGVERIFY, "CHECKSIGVERIFY"}, | ||||
{SCRIPT_ERR_CHECKDATASIGVERIFY, "CHECKDATASIGVERIFY"}, | {SCRIPT_ERR_CHECKDATASIGVERIFY, "CHECKDATASIGVERIFY"}, | ||||
{SCRIPT_ERR_NUMEQUALVERIFY, "NUMEQUALVERIFY"}, | {SCRIPT_ERR_NUMEQUALVERIFY, "NUMEQUALVERIFY"}, | ||||
{SCRIPT_ERR_BAD_OPCODE, "BAD_OPCODE"}, | {SCRIPT_ERR_BAD_OPCODE, "BAD_OPCODE"}, | ||||
{SCRIPT_ERR_DISABLED_OPCODE, "DISABLED_OPCODE"}, | {SCRIPT_ERR_DISABLED_OPCODE, "DISABLED_OPCODE"}, | ||||
▲ Show 20 Lines • Show All 1,768 Lines • ▼ Show 20 Lines | tests.push_back( | ||||
"recovered-pubkey CHECKMULTISIG with " | "recovered-pubkey CHECKMULTISIG with " | ||||
"64-byte DER w/ SCHNORR_MULTISIG", | "64-byte DER w/ SCHNORR_MULTISIG", | ||||
newmultisigflags) | newmultisigflags) | ||||
.Num(0) | .Num(0) | ||||
.PushECDSASigFromParts(rdata, sdata) | .PushECDSASigFromParts(rdata, sdata) | ||||
.PushECDSARecoveredPubKey(rdata, sdata) | .PushECDSARecoveredPubKey(rdata, sdata) | ||||
.ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | .ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | ||||
} | } | ||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG << OP_NOT, | |||||
"CHECKMULTISIG 2-of-3 w/ SCHNORR_MULTISIG " | |||||
"(return-false still valid via legacy mode)", | |||||
newmultisigflags) | |||||
.Num(0) | |||||
.Num(0) | |||||
.Num(0)); | |||||
tests.push_back(TestBuilder(CScript() << OP_0 << OP_0 << OP_CHECKMULTISIG, | |||||
"CHECKMULTISIG 0-of-0 w/ SCHNORR_MULTISIG", | |||||
newmultisigflags) | |||||
.Num(0)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_0 << ToByteVector(ParseHex("BEEF")) << OP_1 | |||||
<< OP_CHECKMULTISIG, | |||||
"CHECKMULTISIG 0-of-1 w/ SCHNORR_MULTISIG, null dummy", | |||||
newmultisigflags) | |||||
.Num(0)); | |||||
// Tests of new-checkmultisig actually turned on (flag on & dummy element is | |||||
// not null). | |||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | |||||
<< OP_1 << OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-1", newmultisigflags) | |||||
.Num(0b1) | |||||
.PushSigSchnorr(keys.key0)); | |||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) | |||||
<< OP_1 << OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-1 nonminimal bits", | |||||
newmultisigflags) | |||||
.Push("0100") | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back(TestBuilder(CScript() << OP_3 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 3-of-3", newmultisigflags) | |||||
.Num(0b111) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2)); | |||||
tests.push_back(TestBuilder(CScript() << OP_4 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 4-of-3", newmultisigflags) | |||||
.Num(0b1111) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2) | |||||
.ScriptError(SCRIPT_ERR_SIG_COUNT)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 (110)", | |||||
newmultisigflags) | |||||
.Num(0b110) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 (101)", | |||||
newmultisigflags) | |||||
.Num(0b101) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key2)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 (011)", | |||||
newmultisigflags) | |||||
.Num(0b011) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 mismatched bits", | |||||
newmultisigflags) | |||||
.Num(0b011) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key2) | |||||
.ScriptError(SCRIPT_ERR_SIG_NULLFAIL)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 all bits set", | |||||
newmultisigflags) | |||||
.Num(0b111) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 extra high bit set", | |||||
newmultisigflags) | |||||
.Num(0b1110) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 too high bit set", | |||||
newmultisigflags) | |||||
.Num(0b1010) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 too few bits set", | |||||
newmultisigflags) | |||||
.Num(0b010) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 with no bits set " | |||||
"(attempt to malleate return-false)", | |||||
newmultisigflags) | |||||
.Push("00") | |||||
.Num(0) | |||||
.Num(0) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back(TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"CHECKMULTISIG null dummy with schnorr sigs " | |||||
"(with SCHNORR_MULTISIG on)", | |||||
newmultisigflags) | |||||
.Num(0) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.ScriptError(SCRIPT_ERR_SIG_BADLENGTH)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 misordered signatures", | |||||
newmultisigflags) | |||||
.Num(0b110) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_SIG_NULLFAIL)); | |||||
tests.push_back( | |||||
TestBuilder( | |||||
CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) << OP_DUP << OP_2DUP | |||||
<< OP_2DUP << ToByteVector(keys.pubkey2C) << OP_8 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-8 right way to represent 0b10000001", | |||||
newmultisigflags) | |||||
.Num(-1) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key2)); | |||||
tests.push_back( | |||||
TestBuilder( | |||||
CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) << OP_DUP << OP_2DUP | |||||
<< OP_2DUP << ToByteVector(keys.pubkey2C) << OP_8 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-8 wrong way to represent 0b10000001", | |||||
newmultisigflags & ~SCRIPT_VERIFY_MINIMALDATA) | |||||
.Num(0b10000001) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key2) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back(TestBuilder(CScript() | |||||
<< OP_OVER << OP_DUP << OP_DUP << OP_2DUP | |||||
<< OP_3DUP << OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< 20 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_OVER | |||||
<< OP_DUP << OP_DUP << OP_2DUP << OP_3DUP | |||||
<< OP_3DUP << OP_3DUP << OP_3DUP << 20 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 20-of-20", newmultisigflags) | |||||
.Push("ffff0f") | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() | |||||
<< OP_OVER << OP_DUP << OP_DUP << OP_2DUP << OP_3DUP | |||||
<< OP_3DUP << OP_3DUP << OP_3DUP << 20 | |||||
<< ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_OVER << OP_DUP | |||||
<< OP_DUP << OP_2DUP << OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< OP_3DUP << 20 << OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 20-of-20 checkbits +1", newmultisigflags) | |||||
.Push("000010") | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0C) << OP_DUP | |||||
<< ToByteVector(keys.pubkey1C) << OP_3DUP | |||||
<< OP_3DUP << OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< OP_3DUP << 21 << OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-21", newmultisigflags) | |||||
.Push("000010") | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_PUBKEY_COUNT)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() | |||||
<< OP_1 << ToByteVector(keys.pubkey1C) << OP_DUP | |||||
<< OP_2DUP << OP_3DUP << OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< OP_3DUP << ToByteVector(keys.pubkey0C) << 20 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-20 top key", newmultisigflags) | |||||
.Push("010000") | |||||
.PushSigSchnorr(keys.key0)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() | |||||
<< OP_1 << ToByteVector(keys.pubkey1C) << OP_DUP | |||||
<< OP_2DUP << OP_3DUP << OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< OP_3DUP << ToByteVector(keys.pubkey0C) << 20 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-20 top key; wrong endianness", | |||||
newmultisigflags) | |||||
.Push("000001") | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_SIG_NULLFAIL)); | |||||
tests.push_back( | |||||
TestBuilder( | |||||
CScript() << OP_1 << ToByteVector(keys.pubkey1C) << OP_DUP | |||||
<< OP_2DUP << OP_3DUP << OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< OP_3DUP << ToByteVector(keys.pubkey0C) << 20 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-20 top key; truncating zeros not allowed", | |||||
newmultisigflags) | |||||
.Num(0b00000000000000000001) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) << OP_DUP | |||||
<< OP_2DUP << OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< OP_3DUP << OP_3DUP << 20 << OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-20 bottom key", newmultisigflags) | |||||
.Push("000008") | |||||
.PushSigSchnorr(keys.key0)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) << OP_DUP | |||||
<< OP_2DUP << OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< OP_3DUP << OP_3DUP << 20 << OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-20 bottom key; wrong endianness", | |||||
newmultisigflags) | |||||
.Push("080000") | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_SIG_NULLFAIL)); | |||||
tests.push_back(TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< OP_DUP << OP_2DUP << OP_3DUP | |||||
<< OP_3DUP << OP_3DUP << OP_3DUP | |||||
<< OP_3DUP << 20 << OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-20 bottom key; " | |||||
"truncating zeros not allowed", | |||||
newmultisigflags) | |||||
.Push("0800") | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_2 << ToByteVector(ParseHex("BEEF")) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 (011), bottom key garbage", | |||||
newmultisigflags) | |||||
.Num(0b011) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(ParseHex("BEEF")) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 (011), top key garbage", | |||||
newmultisigflags) | |||||
.Num(0b011) | |||||
.PushSigSchnorr(keys.key1) | |||||
.PushSigSchnorr(keys.key2) | |||||
.ScriptError(SCRIPT_ERR_PUBKEYTYPE)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_2 << ToByteVector(ParseHex("BEEF")) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 (110), bottom key garbage", | |||||
newmultisigflags) | |||||
.Num(0b110) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.ScriptError(SCRIPT_ERR_PUBKEYTYPE)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(ParseHex("BEEF")) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 2-of-3 (110), top key garbage", | |||||
newmultisigflags) | |||||
.Num(0b110) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1)); | |||||
tests.push_back(TestBuilder(CScript() << OP_0 << OP_0 << OP_CHECKMULTISIG, | |||||
"CHECKMULTISIG 0-of-0 with SCHNORR_MULTISIG, " | |||||
"dummy must be null", | |||||
newmultisigflags) | |||||
.Push("00") | |||||
.ScriptError(SCRIPT_ERR_INVALID_CHECKBITS)); | |||||
tests.push_back(TestBuilder(CScript() | |||||
<< OP_0 << ToByteVector(ParseHex("BEEF")) | |||||
<< OP_1 << OP_CHECKMULTISIG, | |||||
"CHECKMULTISIG 0-of-1 with SCHNORR_MULTISIG, " | |||||
"dummy need not be null", | |||||
newmultisigflags) | |||||
.Push("00")); | |||||
tests.push_back( | |||||
TestBuilder( | |||||
CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | |||||
<< OP_CHECKMULTISIG, | |||||
"SCHNORR_MULTISIG implies that NULLDUMMY flag has no effect", | |||||
newmultisigflags | SCRIPT_VERIFY_NULLDUMMY) | |||||
.Num(0b1) | |||||
.PushSigSchnorr(keys.key0)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_1 << ToByteVector(keys.pubkey0) << OP_1 | |||||
<< OP_CHECKMULTISIGVERIFY << OP_1, | |||||
"New-CHECKMULTISIG works for OP_CHECKMULTISIGVERIFY too.", | |||||
newmultisigflags) | |||||
.Num(0b1) | |||||
.PushSigSchnorr(keys.key0)); | |||||
std::set<std::string> tests_set; | std::set<std::string> tests_set; | ||||
{ | { | ||||
UniValue json_tests = read_json(std::string( | UniValue json_tests = read_json(std::string( | ||||
json_tests::script_tests, | json_tests::script_tests, | ||||
json_tests::script_tests + sizeof(json_tests::script_tests))); | json_tests::script_tests + sizeof(json_tests::script_tests))); | ||||
▲ Show 20 Lines • Show All 804 Lines • Show Last 20 Lines |