diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp index 11d313928d9..abd99fc365e 100644 --- a/src/script/interpreter.cpp +++ b/src/script/interpreter.cpp @@ -2163,31 +2163,35 @@ size_t CountWitnessSigOps(const CScript& scriptSig, const CScript& scriptPubKey, return 0; } +const std::map& ScriptFlagNamesToEnum() +{ #define FLAG_NAME(flag) {std::string(#flag), SCRIPT_VERIFY_##flag} -const std::map g_verify_flag_names{ - FLAG_NAME(P2SH), - FLAG_NAME(STRICTENC), - FLAG_NAME(DERSIG), - FLAG_NAME(LOW_S), - FLAG_NAME(SIGPUSHONLY), - FLAG_NAME(MINIMALDATA), - FLAG_NAME(NULLDUMMY), - FLAG_NAME(DISCOURAGE_UPGRADABLE_NOPS), - FLAG_NAME(CLEANSTACK), - FLAG_NAME(MINIMALIF), - FLAG_NAME(NULLFAIL), - FLAG_NAME(CHECKLOCKTIMEVERIFY), - FLAG_NAME(CHECKSEQUENCEVERIFY), - FLAG_NAME(WITNESS), - FLAG_NAME(DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM), - FLAG_NAME(WITNESS_PUBKEYTYPE), - FLAG_NAME(CONST_SCRIPTCODE), - FLAG_NAME(TAPROOT), - FLAG_NAME(DISCOURAGE_UPGRADABLE_PUBKEYTYPE), - FLAG_NAME(DISCOURAGE_OP_SUCCESS), - FLAG_NAME(DISCOURAGE_UPGRADABLE_TAPROOT_VERSION), -}; + static const std::map g_names_to_enum{ + FLAG_NAME(P2SH), + FLAG_NAME(STRICTENC), + FLAG_NAME(DERSIG), + FLAG_NAME(LOW_S), + FLAG_NAME(SIGPUSHONLY), + FLAG_NAME(MINIMALDATA), + FLAG_NAME(NULLDUMMY), + FLAG_NAME(DISCOURAGE_UPGRADABLE_NOPS), + FLAG_NAME(CLEANSTACK), + FLAG_NAME(MINIMALIF), + FLAG_NAME(NULLFAIL), + FLAG_NAME(CHECKLOCKTIMEVERIFY), + FLAG_NAME(CHECKSEQUENCEVERIFY), + FLAG_NAME(WITNESS), + FLAG_NAME(DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM), + FLAG_NAME(WITNESS_PUBKEYTYPE), + FLAG_NAME(CONST_SCRIPTCODE), + FLAG_NAME(TAPROOT), + FLAG_NAME(DISCOURAGE_UPGRADABLE_PUBKEYTYPE), + FLAG_NAME(DISCOURAGE_OP_SUCCESS), + FLAG_NAME(DISCOURAGE_UPGRADABLE_TAPROOT_VERSION), + }; #undef FLAG_NAME + return g_names_to_enum; +} std::vector GetScriptFlagNames(script_verify_flags flags) { @@ -2196,7 +2200,7 @@ std::vector GetScriptFlagNames(script_verify_flags flags) return res; } script_verify_flags leftover = flags; - for (const auto& [name, flag] : g_verify_flag_names) { + for (const auto& [name, flag] : ScriptFlagNamesToEnum()) { if ((flags & flag) != 0) { res.push_back(name); leftover &= ~flag; diff --git a/src/script/interpreter.h b/src/script/interpreter.h index 986b6b0d78a..7f8a1f7a411 100644 --- a/src/script/interpreter.h +++ b/src/script/interpreter.h @@ -381,7 +381,7 @@ size_t CountWitnessSigOps(const CScript& scriptSig, const CScript& scriptPubKey, int FindAndDelete(CScript& script, const CScript& b); -extern const std::map g_verify_flag_names; +const std::map& ScriptFlagNamesToEnum(); std::vector GetScriptFlagNames(script_verify_flags flags); diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index b2a70057d5b..0ab9fbb4799 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -50,7 +50,7 @@ typedef std::vector valtype; static CFeeRate g_dust{DUST_RELAY_TX_FEE}; static bool g_bare_multi{DEFAULT_PERMIT_BAREMULTISIG}; -static const std::map& mapFlagNames = g_verify_flag_names; +static const std::map& mapFlagNames = ScriptFlagNamesToEnum(); script_verify_flags ParseScriptFlags(std::string strFlags) {