mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-24 10:17:45 -03:00
Merge a3a4d199e2
into 66aa6a47bd
This commit is contained in:
commit
15cd4e7e44
3 changed files with 41 additions and 8 deletions
|
@ -117,10 +117,13 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
/** Witness program for Pay-to-Anchor output script type */
|
||||
static const std::vector<unsigned char> anchor_bytes{0x4e, 0x73};
|
||||
|
||||
struct PayToAnchor : public WitnessUnknown
|
||||
{
|
||||
PayToAnchor() : WitnessUnknown(1, {0x4e, 0x73}) {
|
||||
Assume(CScript::IsPayToAnchor(1, {0x4e, 0x73}));
|
||||
PayToAnchor() : WitnessUnknown(1, anchor_bytes) {
|
||||
Assume(CScript::IsPayToAnchor(1, anchor_bytes));
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include <test/data/bip341_wallet_vectors.json.h>
|
||||
|
||||
#include <addresstype.h>
|
||||
#include <key.h>
|
||||
#include <key_io.h>
|
||||
#include <script/script.h>
|
||||
|
@ -130,7 +131,6 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
|
|||
BOOST_CHECK(solutions[1] == ToByteVector(uint256::ONE));
|
||||
|
||||
// TxoutType::ANCHOR
|
||||
std::vector<unsigned char> anchor_bytes{0x4e, 0x73};
|
||||
s.clear();
|
||||
s << OP_1 << anchor_bytes;
|
||||
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::ANCHOR);
|
||||
|
@ -197,14 +197,18 @@ 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();
|
||||
s << OP_2 << std::vector<unsigned char>{0x4e, 0x73};
|
||||
s << OP_2 << anchor_bytes;
|
||||
BOOST_CHECK(!s.IsPayToAnchor());
|
||||
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::WITNESS_UNKNOWN);
|
||||
|
||||
|
@ -268,11 +272,24 @@ 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
|
||||
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 +358,19 @@ 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
|
||||
expected.clear();
|
||||
expected << OP_1 << anchor_bytes;
|
||||
result = GetScriptForDestination(PayToAnchor());
|
||||
BOOST_CHECK(result == expected);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(script_standard_taproot_builder)
|
||||
|
|
|
@ -1040,7 +1040,7 @@ BOOST_AUTO_TEST_CASE(test_IsStandard)
|
|||
}
|
||||
|
||||
// Check anchor outputs
|
||||
t.vout[0].scriptPubKey = CScript() << OP_1 << std::vector<unsigned char>{0x4e, 0x73};
|
||||
t.vout[0].scriptPubKey = CScript() << OP_1 << anchor_bytes;
|
||||
BOOST_CHECK(t.vout[0].scriptPubKey.IsPayToAnchor());
|
||||
t.vout[0].nValue = 240;
|
||||
CheckIsStandard(t);
|
||||
|
|
Loading…
Add table
Reference in a new issue