refactor: deduplicate anchor witness program bytes (0x4e,0x73)

Co-authored-by: Gregory Sanders <gsanders87@gmail.com>
This commit is contained in:
Sebastian Falbesoner 2024-11-21 16:04:56 +01:00
parent 41f2f058d0
commit 8284229a28
3 changed files with 11 additions and 10 deletions

View file

@ -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 struct PayToAnchor : public WitnessUnknown
{ {
PayToAnchor() : WitnessUnknown(1, {0x4e, 0x73}) { PayToAnchor() : WitnessUnknown(1, ANCHOR_BYTES) {
Assume(CScript::IsPayToAnchor(1, {0x4e, 0x73})); Assume(CScript::IsPayToAnchor(1, ANCHOR_BYTES));
}; };
}; };

View file

@ -4,6 +4,7 @@
#include <test/data/bip341_wallet_vectors.json.h> #include <test/data/bip341_wallet_vectors.json.h>
#include <addresstype.h>
#include <key.h> #include <key.h>
#include <key_io.h> #include <key_io.h>
#include <script/script.h> #include <script/script.h>
@ -130,9 +131,8 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_success)
BOOST_CHECK(solutions[1] == ToByteVector(uint256::ONE)); BOOST_CHECK(solutions[1] == ToByteVector(uint256::ONE));
// TxoutType::ANCHOR // TxoutType::ANCHOR
std::vector<unsigned char> anchor_bytes{0x4e, 0x73};
s.clear(); s.clear();
s << OP_1 << anchor_bytes; s << OP_1 << ANCHOR_BYTES;
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::ANCHOR); BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::ANCHOR);
BOOST_CHECK(solutions.empty()); BOOST_CHECK(solutions.empty());
@ -212,7 +212,7 @@ BOOST_AUTO_TEST_CASE(script_standard_Solver_failure)
// 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 << ANCHOR_BYTES;
BOOST_CHECK(!s.IsPayToAnchor()); BOOST_CHECK(!s.IsPayToAnchor());
BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::WITNESS_UNKNOWN); BOOST_CHECK_EQUAL(Solver(s, solutions), TxoutType::WITNESS_UNKNOWN);
@ -284,9 +284,8 @@ BOOST_AUTO_TEST_CASE(script_standard_ExtractDestination)
BOOST_CHECK(std::get<WitnessV1Taproot>(address) == WitnessV1Taproot(xpk)); BOOST_CHECK(std::get<WitnessV1Taproot>(address) == WitnessV1Taproot(xpk));
// TxoutType::ANCHOR // TxoutType::ANCHOR
std::vector<unsigned char> anchor_bytes{0x4e, 0x73};
s.clear(); s.clear();
s << OP_1 << anchor_bytes; s << OP_1 << ANCHOR_BYTES;
BOOST_CHECK(ExtractDestination(s, address)); BOOST_CHECK(ExtractDestination(s, address));
BOOST_CHECK(std::get<PayToAnchor>(address) == PayToAnchor()); BOOST_CHECK(std::get<PayToAnchor>(address) == PayToAnchor());
@ -379,9 +378,8 @@ BOOST_AUTO_TEST_CASE(script_standard_GetScriptFor_)
BOOST_CHECK(result == expected); BOOST_CHECK(result == expected);
// PayToAnchor // PayToAnchor
std::vector<unsigned char> anchor_bytes{0x4e, 0x73};
expected.clear(); expected.clear();
expected << OP_1 << anchor_bytes; expected << OP_1 << ANCHOR_BYTES;
result = GetScriptForDestination(PayToAnchor()); result = GetScriptForDestination(PayToAnchor());
BOOST_CHECK(result == expected); BOOST_CHECK(result == expected);
} }

View file

@ -1040,7 +1040,7 @@ BOOST_AUTO_TEST_CASE(test_IsStandard)
} }
// Check anchor outputs // 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()); BOOST_CHECK(t.vout[0].scriptPubKey.IsPayToAnchor());
t.vout[0].nValue = 240; t.vout[0].nValue = 240;
CheckIsStandard(t); CheckIsStandard(t);