test: add missing segwitv1 test cases to script_standard_tests

This commit is contained in:
Sebastian Falbesoner 2024-11-21 15:01:43 +01:00
parent 22ef95dbe3
commit 6aca74ec13

View file

@ -197,10 +197,14 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_failure)
s << OP_RETURN << std::vector<unsigned char>({75}) << OP_ADD;
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::NONSTANDARD);
// TxoutType::WITNESS_UNKNOWN with incorrect program size
// TxoutType::WITNESS_V0_{KEY,SCRIPT}HASH with incorrect program size (-> consensus-invalid, i.e. non-standard)
s.clear();
s << OP_0 << std::vector<unsigned char>(19, 0x01);
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::NONSTANDARD);
// TxoutType::WITNESS_V1_TAPROOT with incorrect program size (-> undefined, but still policy-valid)
s.clear();
s << OP_1 << std::vector<unsigned char>(33, 0x01);
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::WITNESS_UNKNOWN);
// TxoutType::ANCHOR but wrong witness version
s.clear();
@ -268,11 +272,25 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
BOOST_CHECK(ExtractDestination(s, address));
BOOST_CHECK(std::get<WitnessV0ScriptHash>(address) == scripthash);
// TxoutType::WITNESS_V1_TAPROOT
s.clear();
auto xpk = XOnlyPubKey(pubkey);
s << OP_1 << ToByteVector(xpk);
BOOST_CHECK(ExtractDestination(s, address));
BOOST_CHECK(std::get<WitnessV1Taproot>(address) == WitnessV1Taproot(xpk));
// TxoutType::ANCHOR
std::vector<unsigned char> anchor_bytes{0x4e, 0x73};
s.clear();
s << OP_1 << anchor_bytes;
BOOST_CHECK(ExtractDestination(s, address));
BOOST_CHECK(std::get<PayToAnchor>(address) == PayToAnchor());
// TxoutType::WITNESS_UNKNOWN with unknown version
s.clear();
s << OP_1 << ToByteVector(pubkey);
s << OP_2 << ToByteVector(xpk);
BOOST_CHECK(ExtractDestination(s, address));
WitnessUnknown unk{1, ToByteVector(pubkey)};
WitnessUnknown unk{2, ToByteVector(xpk)};
BOOST_CHECK(std::get<WitnessUnknown>(address) == unk);
}
@ -341,6 +359,20 @@ BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
expected << OP_0 << ToByteVector(scriptHash);
result = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));
BOOST_CHECK(result == expected);
// WitnessV1Taproot
auto xpk = XOnlyPubKey(pubkeys[0]);
expected.clear();
expected << OP_1 << ToByteVector(xpk);
result = GetScriptForDestination(WitnessV1Taproot(xpk));
BOOST_CHECK(result == expected);
// PayToAnchor
std::vector<unsigned char> anchor_bytes{0x4e, 0x73};
expected.clear();
expected << OP_1 << anchor_bytes;
result = GetScriptForDestination(PayToAnchor());
BOOST_CHECK(result == expected);
}
BOOST_AUTO_TEST_CASE(script_standard_taproot_builder)