@@ -1043,13 +1043,19 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
10431043 bool sorted_multi = false ;
10441044 if (Func (" pk" , expr)) {
10451045 auto pubkey = ParsePubkey (key_exp_index, expr, ctx, out, error);
1046- if (!pubkey) return nullptr ;
1046+ if (!pubkey) {
1047+ error = strprintf (" pk(): %s" , error);
1048+ return nullptr ;
1049+ }
10471050 ++key_exp_index;
10481051 return std::make_unique<PKDescriptor>(std::move (pubkey), ctx == ParseScriptContext::P2TR);
10491052 }
10501053 if ((ctx == ParseScriptContext::TOP || ctx == ParseScriptContext::P2SH || ctx == ParseScriptContext::P2WSH) && Func (" pkh" , expr)) {
10511054 auto pubkey = ParsePubkey (key_exp_index, expr, ctx, out, error);
1052- if (!pubkey) return nullptr ;
1055+ if (!pubkey) {
1056+ error = strprintf (" pkh(): %s" , error);
1057+ return nullptr ;
1058+ }
10531059 ++key_exp_index;
10541060 return std::make_unique<PKHDescriptor>(std::move (pubkey));
10551061 } else if (Func (" pkh" , expr)) {
@@ -1058,7 +1064,10 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
10581064 }
10591065 if (ctx == ParseScriptContext::TOP && Func (" combo" , expr)) {
10601066 auto pubkey = ParsePubkey (key_exp_index, expr, ctx, out, error);
1061- if (!pubkey) return nullptr ;
1067+ if (!pubkey) {
1068+ error = strprintf (" combo(): %s" , error);
1069+ return nullptr ;
1070+ }
10621071 ++key_exp_index;
10631072 return std::make_unique<ComboDescriptor>(std::move (pubkey));
10641073 } else if (Func (" combo" , expr)) {
@@ -1081,7 +1090,10 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
10811090 }
10821091 auto arg = Expr (expr);
10831092 auto pk = ParsePubkey (key_exp_index, arg, ctx, out, error);
1084- if (!pk) return nullptr ;
1093+ if (!pk) {
1094+ error = strprintf (" Multi: %s" , error);
1095+ return nullptr ;
1096+ }
10851097 script_size += pk->GetSize () + 1 ;
10861098 providers.emplace_back (std::move (pk));
10871099 key_exp_index++;
@@ -1116,7 +1128,10 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
11161128 }
11171129 if ((ctx == ParseScriptContext::TOP || ctx == ParseScriptContext::P2SH) && Func (" wpkh" , expr)) {
11181130 auto pubkey = ParsePubkey (key_exp_index, expr, ParseScriptContext::P2WPKH, out, error);
1119- if (!pubkey) return nullptr ;
1131+ if (!pubkey) {
1132+ error = strprintf (" wpkh(): %s" , error);
1133+ return nullptr ;
1134+ }
11201135 key_exp_index++;
11211136 return std::make_unique<WPKHDescriptor>(std::move (pubkey));
11221137 } else if (Func (" wpkh" , expr)) {
@@ -1153,7 +1168,10 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
11531168 if (ctx == ParseScriptContext::TOP && Func (" tr" , expr)) {
11541169 auto arg = Expr (expr);
11551170 auto internal_key = ParsePubkey (key_exp_index, arg, ParseScriptContext::P2TR, out, error);
1156- if (!internal_key) return nullptr ;
1171+ if (!internal_key) {
1172+ error = strprintf (" tr(): %s" , error);
1173+ return nullptr ;
1174+ }
11571175 ++key_exp_index;
11581176 std::vector<std::unique_ptr<DescriptorImpl>> subscripts; // !< list of script subexpressions
11591177 std::vector<int > depths; // !< depth in the tree of each subexpression (same length subscripts)
0 commit comments