From 5cbd44f1c89533b11548b411abce416f49d2ad8b Mon Sep 17 00:00:00 2001 From: Byron Hambly Date: Mon, 5 Jun 2023 16:43:06 +0200 Subject: [PATCH] test: re-enable and fix script assets test Re-enables and fixes the script_assets_test by changing feature_taproot.py to include the genesis block hash when dumping the json tests. Requires the json file from https://github.com/ElementsProject/qa-assets/pull/1 Co-authored-by: Andrew Poelstra --- src/test/script_tests.cpp | 9 +++++---- test/functional/feature_taproot.py | 6 +++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index f8e1341ba1..3f3f60adac 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -1684,7 +1684,7 @@ static void AssetTest(const UniValue& test) size_t idx = test["index"].get_int64(); unsigned int test_flags = ParseScriptFlags(test["flags"].get_str()); bool fin = test.exists("final") && test["final"].get_bool(); - // ELEMENTS FIXME: update feature_taproot.py --dumptests to actually output these + // ELEMENTS: feature_taproot.py --dumptests outputs this field uint256 hash_genesis_block = test.exists("hash_genesis_block") ? uint256S(test["hash_genesis_block"].get_str()) : uint256{}; if (test.exists("success")) { @@ -1725,6 +1725,8 @@ BOOST_AUTO_TEST_CASE(script_assets_test) { // See src/test/fuzz/script_assets_test_minimizer.cpp for information on how to generate // the script_assets_test.json file used by this test. + // ELEMENTS: qa-assets repo can be cloned here https://github.com/ElementsProject/qa-assets + // then set DIR_UNIT_TEST_DATA env var to /path/to/qa-assets/unit_test_data when running this test const char* dir = std::getenv("DIR_UNIT_TEST_DATA"); BOOST_WARN_MESSAGE(dir != nullptr, "Variable DIR_UNIT_TEST_DATA unset, skipping script_assets_test"); @@ -1744,12 +1746,11 @@ BOOST_AUTO_TEST_CASE(script_assets_test) BOOST_CHECK(tests.isArray()); BOOST_CHECK(tests.size() > 0); -/* - ELEMENTS: temporarily disabled until we implement the new Taproot sighash and upload new qa-assets + g_con_elementsmode = true; for (size_t i = 0; i < tests.size(); i++) { AssetTest(tests[i]); } -*/ + g_con_elementsmode = false; file.close(); } diff --git a/test/functional/feature_taproot.py b/test/functional/feature_taproot.py index afe12b8419..030d538ce5 100755 --- a/test/functional/feature_taproot.py +++ b/test/functional/feature_taproot.py @@ -21,6 +21,7 @@ from test_framework.messages import ( CTxOut, CTxOutValue, CTxOutWitness, + ser_uint256, uint256_from_str, ) from test_framework.script import ( @@ -1179,12 +1180,15 @@ def dump_json_test(tx, input_utxos, idx, success, failure): # Determine flags to dump flags = LEGACY_FLAGS if spender.comment.startswith("legacy/") or spender.comment.startswith("inactive/") else TAPROOT_FLAGS + hash_genesis_block = bytearray(ser_uint256(g_genesis_hash)) + hash_genesis_block.reverse() fields = [ ("tx", tx.serialize().hex()), ("prevouts", [x.output.serialize().hex() for x in input_utxos]), ("index", idx), ("flags", flags), - ("comment", spender.comment) + ("comment", spender.comment), + ("hash_genesis_block", hash_genesis_block.hex()) ] # The "final" field indicates that a spend should be always valid, even with more validation flags enabled