Fill out dust limit unit test for known types except bare multisig

This commit is contained in:
Greg Sanders 2023-01-11 15:27:10 -05:00
parent 329d7e379d
commit b093f5619f

View file

@ -937,23 +937,58 @@ BOOST_AUTO_TEST_CASE(test_IsStandard)
CheckIsNotStandard(t, "bare-multisig");
g_bare_multi = DEFAULT_PERMIT_BAREMULTISIG;
// Check compressed P2PK outputs dust threshold (must have leading 02 or 03)
t.vout[0].scriptPubKey = CScript() << std::vector<unsigned char>(33, 0x02) << OP_CHECKSIG;
t.vout[0].nValue = 576;
CheckIsStandard(t);
t.vout[0].nValue = 575;
CheckIsNotStandard(t, "dust");
// Check uncompressed P2PK outputs dust threshold (must have leading 04/06/07)
t.vout[0].scriptPubKey = CScript() << std::vector<unsigned char>(65, 0x04) << OP_CHECKSIG;
t.vout[0].nValue = 672;
CheckIsStandard(t);
t.vout[0].nValue = 671;
CheckIsNotStandard(t, "dust");
// Check P2PKH outputs dust threshold
t.vout[0].scriptPubKey = CScript() << OP_DUP << OP_HASH160 << std::vector<unsigned char>(20, 0) << OP_EQUALVERIFY << OP_CHECKSIG;
t.vout[0].nValue = 546;
CheckIsStandard(t);
t.vout[0].nValue = 545;
CheckIsNotStandard(t, "dust");
// Check P2SH outputs dust threshold
t.vout[0].scriptPubKey = CScript() << OP_HASH160 << std::vector<unsigned char>(20, 0) << OP_EQUAL;
t.vout[0].nValue = 540;
CheckIsStandard(t);
t.vout[0].nValue = 539;
CheckIsNotStandard(t, "dust");
// Check P2WPKH outputs dust threshold
t.vout[0].scriptPubKey = CScript() << OP_0 << ParseHex("ffffffffffffffffffffffffffffffffffffffff");
t.vout[0].scriptPubKey = CScript() << OP_0 << std::vector<unsigned char>(20, 0);
t.vout[0].nValue = 294;
CheckIsStandard(t);
t.vout[0].nValue = 293;
CheckIsNotStandard(t, "dust");
// Check P2WSH outputs dust threshold
t.vout[0].scriptPubKey = CScript() << OP_0 << ParseHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
t.vout[0].scriptPubKey = CScript() << OP_0 << std::vector<unsigned char>(32, 0);
t.vout[0].nValue = 330;
CheckIsStandard(t);
t.vout[0].nValue = 329;
CheckIsNotStandard(t, "dust");
// Check future Witness Program versions dust threshold
for (int op = OP_2; op <= OP_16; op += 1) {
t.vout[0].scriptPubKey = CScript() << (opcodetype)op << ParseHex("ffff");
// Check P2TR outputs dust threshold (Invalid xonly key ok!)
t.vout[0].scriptPubKey = CScript() << OP_1 << std::vector<unsigned char>(32, 0);
t.vout[0].nValue = 330;
CheckIsStandard(t);
t.vout[0].nValue = 329;
CheckIsNotStandard(t, "dust");
// Check future Witness Program versions dust threshold (non-32-byte pushes are undefined for version 1)
for (int op = OP_1; op <= OP_16; op += 1) {
t.vout[0].scriptPubKey = CScript() << (opcodetype)op << std::vector<unsigned char>(2, 0);
t.vout[0].nValue = 240;
CheckIsStandard(t);