From 8cac2923f57ac33848ff41b74c3be520b75936df Mon Sep 17 00:00:00 2001 From: glozow Date: Tue, 23 Feb 2021 06:55:59 -0800 Subject: [test] remove invalid test from tx_valid.json This exact test is also already in tx_invalid.json#L29 It will also test with no-P2SH flags, so duplicating with different flags is not necessary. --- src/test/data/tx_valid.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/test/data/tx_valid.json b/src/test/data/tx_valid.json index 2727af5abd..b874f6f26c 100644 --- a/src/test/data/tx_valid.json +++ b/src/test/data/tx_valid.json @@ -62,10 +62,6 @@ ["c76168ef1a272a4f176e55e73157ecfce040cfad16a5272f6296eb7089dca846", 1, "DUP HASH160 0x14 0x34fea2c5a75414fd945273ae2d029ce1f28dafcf EQUALVERIFY CHECKSIG"]], "010000000390d31c6107013d754529d8818eff285fe40a3e7635f6930fec5d12eb02107a43010000006b483045022100f40815ae3c81a0dd851cc8d376d6fd226c88416671346a9033468cca2cdcc6c202204f764623903e6c4bed1b734b75d82c40f1725e4471a55ad4f51218f86130ac038321033d710ab45bb54ac99618ad23b3c1da661631aa25f23bfe9d22b41876f1d46e4effffffff3ff04a68e22bdd52e7c8cb848156d2d158bd5515b3c50adabc87d0ca2cd3482d010000006a4730440220598d263c107004008e9e26baa1e770be30fd31ee55ded1898f7c00da05a75977022045536bead322ca246779698b9c3df3003377090f41afeca7fb2ce9e328ec4af2832102b738b531def73020bd637f32935924cc88549c8206976226d968edd3a42fc2d7ffffffff46a8dc8970eb96622f27a516adcf40e0fcec5731e7556e174f2a271aef6861c7010000006b483045022100c5b90a777a9fdc90c208dbef7290d1fc1be651f47151ee4ccff646872a454cf90220640cfbc4550446968fbbe9d12528f3adf7d87b31541569c59e790db8a220482583210391332546e22bbe8fe3af54addfad6f8b83d05fa4f5e047593d4c07ae938795beffffffff028036be26000000001976a914ddfb29efad43a667465ac59ff14dc6442a1adfca88ac3d5cba01000000001976a914b64dde7a505a13ca986c40e86e984a8dc81368b688ac00000000", "NONE"], -["An invalid P2SH Transaction"], -[[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x7a052c840ba73af26755de42cf01cc9e0a49fef0 EQUAL"]], -"010000000100010000000000000000000000000000000000000000000000000000000000000000000009085768617420697320ffffffff010000000000000000015100000000", "P2SH,CLEANSTACK,WITNESS"], - ["A valid P2SH Transaction using the standard transaction type put forth in BIP 16"], [[["0000000000000000000000000000000000000000000000000000000000000100", 0, "HASH160 0x14 0x8febbed40483661de6958d957412f82deed8e2f7 EQUAL"]], "01000000010001000000000000000000000000000000000000000000000000000000000000000000006e493046022100c66c9cdf4c43609586d15424c54707156e316d88b0a1534c9e6b0d4f311406310221009c0fe51dbc9c4ab7cc25d3fdbeccf6679fe6827f08edf2b4a9f16ee3eb0e438a0123210338e8034509af564c62644c07691942e0c056752008a173c89f60ab2a88ac2ebfacffffffff010000000000000000015100000000", "LOW_S"], -- cgit v1.2.3 From 8a365df5586b36d1772c78069f9d93c56a81df6f Mon Sep 17 00:00:00 2001 From: glozow Date: Tue, 23 Feb 2021 06:56:34 -0800 Subject: [test] fix bug in ExcludeIndividualFlags PR #19168 introduced this function but it always returns an empty vector. --- src/test/transaction_tests.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index 8f1d99b199..f87779a478 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -152,14 +152,17 @@ unsigned int FillFlags(unsigned int flags) return flags; } -// Return valid flags that are all except one flag for each flag -std::vector ExcludeIndividualFlags(unsigned int flags) +// Exclude each possible script verify flag from flags. Returns a set of these flag combinations +// that are valid and without duplicates. For example: if flags=1111 and the 4 possible flags are +// 0001, 0010, 0100, and 1000, this should return the set {0111, 1011, 1101, 1110}. +// Assumes that mapFlagNames contains all script verify flags. +std::set ExcludeIndividualFlags(unsigned int flags) { - std::vector flags_combos; - for (unsigned int i = 0; i < mapFlagNames.size(); ++i) { - const unsigned int flags_excluding_i = TrimFlags(flags & ~(1U << i)); - if (flags != flags_excluding_i && std::find(flags_combos.begin(), flags_combos.end(), flags_excluding_i) != flags_combos.end()) { - flags_combos.push_back(flags_excluding_i); + std::set flags_combos; + for (const auto& pair : mapFlagNames) { + const unsigned int flags_excluding_one = TrimFlags(flags & ~(pair.second)); + if (flags != flags_excluding_one) { + flags_combos.insert(flags_excluding_one); } } return flags_combos; -- cgit v1.2.3 From 5aee73d1759bcc0d1e951776942e616843934af1 Mon Sep 17 00:00:00 2001 From: glozow Date: Tue, 23 Feb 2021 07:04:51 -0800 Subject: [test] minor improvements / followups Add missing script verify flags to mapFlagNames. iterate through mapFlagNames values instead of bits. BOOST_CHECK_MESSAGE better reports which test failed exactly, whereas BOOST_ERROR was just incrementing the error counter. --- src/test/transaction_tests.cpp | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index f87779a478..35d8fe129f 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -20,6 +20,7 @@ #include