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_INVALID_CHECKBITS_SIGNATURE, "CHECKBITS_SIGNATURE"}, | |||||
{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,769 Lines • ▼ Show 20 Lines | tests.push_back( | ||||
"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 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_UNKNOWN_ERROR)); | |||||
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_INVALID_CHECKBITS_SIGNATURE)); | |||||
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_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 negative bits", | |||||
newmultisigflags) | |||||
.Num(-0b110) | |||||
.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, | |||||
"CHECKMULTISIG null dummy with schnorr sigs " | |||||
"(with SCRIPT_ENABLE_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_INVALID_CHECKBITS_SIGNATURE)); | |||||
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(0b10000001) | |||||
.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) | |||||
.Push("81") | |||||
.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) | |||||
.Num(0xfffff) | |||||
.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) | |||||
.Num(0xfffff + 1) | |||||
.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) | |||||
.Num(0x100000) | |||||
.PushSigSchnorr(keys.key0) | |||||
.ScriptError(SCRIPT_ERR_PUBKEY_COUNT)); | |||||
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_2DUP << 20 << OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 1-of-20", newmultisigflags) | |||||
.Num(0x80000) | |||||
.PushSigSchnorr(keys.key0)); | |||||
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), first 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), last 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), first 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), last key garbage", | |||||
newmultisigflags) | |||||
.Num(0b110) | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1)); | |||||
// Tests of new-checkmultisig with unreal flag combinations. For example | |||||
// checkbits=0 (but not null) is testable by leaving MINIMALDATA off and | |||||
// pushing a non-null representation of 0. | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG << OP_NOT, | |||||
"New-CHECKMULTISIG non-null checkbits=0 with sigs", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG | SCRIPT_VERIFY_NULLFAIL) | |||||
.Push("00") | |||||
.PushSigSchnorr(keys.key0) | |||||
.PushSigSchnorr(keys.key1) | |||||
.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 | |||||
<< OP_NOT, | |||||
"New-CHECKMULTISIG non-null checkbits=0 with sigs without NULLFAIL", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG) | |||||
.Push("00") | |||||
.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 << OP_NOT, | |||||
"New-CHECKMULTISIG non-null checkbits=0 with ECDSA sigs", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG | SCRIPT_VERIFY_NULLFAIL) | |||||
.Push("00") | |||||
.PushSigECDSA(keys.key0) | |||||
.PushSigECDSA(keys.key1) | |||||
.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 << OP_NOT, | |||||
"New-CHECKMULTISIG non-null checkbits=0 with " | |||||
"ECDSA sigs without NULLFAIL", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG) | |||||
.Push("00") | |||||
.PushSigECDSA(keys.key0) | |||||
.PushSigECDSA(keys.key1)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_2 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG << OP_NOT, | |||||
"New-CHECKMULTISIG non-null checkbits=0 and null sigs", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG | SCRIPT_VERIFY_NULLFAIL) | |||||
.Push("00") | |||||
.Num(0) | |||||
.Num(0)); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG non-null checkbits=0 nSigsCount=0", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG | SCRIPT_VERIFY_NULLFAIL) | |||||
.Push("00")); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 4-byte checkbits=0 nSigsCount=0", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG | SCRIPT_VERIFY_NULLFAIL) | |||||
.Push("00000080")); | |||||
tests.push_back( | |||||
TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG 5-byte checkbits=0 nSigsCount=0", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG | SCRIPT_VERIFY_NULLFAIL) | |||||
.Push("0000000000") | |||||
.ScriptError(SCRIPT_ERR_UNKNOWN_ERROR)); | |||||
// And, a test with minimaldata on. | |||||
tests.push_back(TestBuilder(CScript() << OP_0 << ToByteVector(keys.pubkey0C) | |||||
<< ToByteVector(keys.pubkey1C) | |||||
<< ToByteVector(keys.pubkey2C) << OP_3 | |||||
<< OP_CHECKMULTISIG, | |||||
"New-CHECKMULTISIG non-null checkbits=0 " | |||||
"nSigsCount=0 with MINIMALDATA", | |||||
SCRIPT_ENABLE_SCHNORR_MULTISIG | | |||||
SCRIPT_VERIFY_NULLFAIL | | |||||
SCRIPT_VERIFY_MINIMALDATA) | |||||
.Push("80") | |||||
.ScriptError(SCRIPT_ERR_UNKNOWN_ERROR)); | |||||
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))); | ||||
for (unsigned int idx = 0; idx < json_tests.size(); idx++) { | for (unsigned int idx = 0; idx < json_tests.size(); idx++) { | ||||
▲ Show 20 Lines • Show All 803 Lines • Show Last 20 Lines |