mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 14:59:39 -04:00
test: add missing segwitv1 test cases to script_standard_tests
This commit is contained in:
parent
770d39a376
commit
41f2f058d0
1 changed files with 46 additions and 3 deletions
|
@ -197,11 +197,19 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_failure)
|
||||||
s << OP_RETURN << std::vector<unsigned char>({75}) << OP_ADD;
|
s << OP_RETURN << std::vector<unsigned char>({75}) << OP_ADD;
|
||||||
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::NONSTANDARD);
|
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.clear();
|
||||||
s << OP_0 << std::vector<unsigned char>(19, 0x01);
|
s << OP_0 << std::vector<unsigned char>(19, 0x01);
|
||||||
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::NONSTANDARD);
|
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>(31, 0x01);
|
||||||
|
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::WITNESS_UNKNOWN);
|
||||||
|
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
|
// TxoutType::ANCHOR but wrong witness version
|
||||||
s.clear();
|
s.clear();
|
||||||
s << OP_2 << std::vector<unsigned char>{0x4e, 0x73};
|
s << OP_2 << std::vector<unsigned char>{0x4e, 0x73};
|
||||||
|
@ -268,12 +276,33 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
|
||||||
BOOST_CHECK(ExtractDestination(s, address));
|
BOOST_CHECK(ExtractDestination(s, address));
|
||||||
BOOST_CHECK(std::get<WitnessV0ScriptHash>(address) == scripthash);
|
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
|
// TxoutType::WITNESS_UNKNOWN with unknown version
|
||||||
|
// -> segwit version 1 with an undefined program size (33 bytes in this test case)
|
||||||
s.clear();
|
s.clear();
|
||||||
s << OP_1 << ToByteVector(pubkey);
|
s << OP_1 << ToByteVector(pubkey);
|
||||||
BOOST_CHECK(ExtractDestination(s, address));
|
BOOST_CHECK(ExtractDestination(s, address));
|
||||||
WitnessUnknown unk{1, ToByteVector(pubkey)};
|
WitnessUnknown unk_v1{1, ToByteVector(pubkey)};
|
||||||
BOOST_CHECK(std::get<WitnessUnknown>(address) == unk);
|
BOOST_CHECK(std::get<WitnessUnknown>(address) == unk_v1);
|
||||||
|
s.clear();
|
||||||
|
// -> segwit versions 2+ are not specified yet
|
||||||
|
s << OP_2 << ToByteVector(xpk);
|
||||||
|
BOOST_CHECK(ExtractDestination(s, address));
|
||||||
|
WitnessUnknown unk_v2{2, ToByteVector(xpk)};
|
||||||
|
BOOST_CHECK(std::get<WitnessUnknown>(address) == unk_v2);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
|
BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
|
||||||
|
@ -341,6 +370,20 @@ BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
|
||||||
expected << OP_0 << ToByteVector(scriptHash);
|
expected << OP_0 << ToByteVector(scriptHash);
|
||||||
result = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));
|
result = GetScriptForDestination(WitnessV0ScriptHash(witnessScript));
|
||||||
BOOST_CHECK(result == expected);
|
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)
|
BOOST_AUTO_TEST_CASE(script_standard_taproot_builder)
|
||||||
|
|
Loading…
Add table
Reference in a new issue