diff --git a/src/script/descriptor.cpp b/src/script/descriptor.cpp index bd819d365ae..83a561a7e78 100644 --- a/src/script/descriptor.cpp +++ b/src/script/descriptor.cpp @@ -1843,20 +1843,20 @@ std::vector> ParsePubkey(uint32_t& key_exp_index bool any_ranged = false; bool all_bip32 = true; std::vector>> providers; - bool any_key_parsed = true; + bool any_key_parsed = false; size_t max_multipath_len = 0; while (expr.size()) { - if (!any_key_parsed && !Const(",", expr)) { + if (any_key_parsed && !Const(",", expr)) { error = strprintf("musig(): expected ',', got '%c'", expr[0]); return {}; } - any_key_parsed = false; auto arg = Expr(expr); auto pk = ParsePubkey(key_exp_index, arg, ParseScriptContext::MUSIG, out, error); if (pk.empty()) { error = strprintf("musig(): %s", error); return {}; } + any_key_parsed = true; any_ranged = any_ranged || pk.at(0)->IsRange(); all_bip32 = all_bip32 && pk.at(0)->IsBIP32(); @@ -1866,7 +1866,7 @@ std::vector> ParsePubkey(uint32_t& key_exp_index providers.emplace_back(std::move(pk)); key_exp_index++; } - if (any_key_parsed) { + if (!any_key_parsed) { error = "musig(): Must contain key expressions"; return {}; }