@@ -1043,13 +1043,19 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
1043
1043
bool sorted_multi = false ;
1044
1044
if (Func (" pk" , expr)) {
1045
1045
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
+ }
1047
1050
++key_exp_index;
1048
1051
return std::make_unique<PKDescriptor>(std::move (pubkey), ctx == ParseScriptContext::P2TR);
1049
1052
}
1050
1053
if ((ctx == ParseScriptContext::TOP || ctx == ParseScriptContext::P2SH || ctx == ParseScriptContext::P2WSH) && Func (" pkh" , expr)) {
1051
1054
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
+ }
1053
1059
++key_exp_index;
1054
1060
return std::make_unique<PKHDescriptor>(std::move (pubkey));
1055
1061
} else if (Func (" pkh" , expr)) {
@@ -1058,7 +1064,10 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
1058
1064
}
1059
1065
if (ctx == ParseScriptContext::TOP && Func (" combo" , expr)) {
1060
1066
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
+ }
1062
1071
++key_exp_index;
1063
1072
return std::make_unique<ComboDescriptor>(std::move (pubkey));
1064
1073
} else if (Func (" combo" , expr)) {
@@ -1081,7 +1090,10 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
1081
1090
}
1082
1091
auto arg = Expr (expr);
1083
1092
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
+ }
1085
1097
script_size += pk->GetSize () + 1 ;
1086
1098
providers.emplace_back (std::move (pk));
1087
1099
key_exp_index++;
@@ -1116,7 +1128,10 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
1116
1128
}
1117
1129
if ((ctx == ParseScriptContext::TOP || ctx == ParseScriptContext::P2SH) && Func (" wpkh" , expr)) {
1118
1130
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
+ }
1120
1135
key_exp_index++;
1121
1136
return std::make_unique<WPKHDescriptor>(std::move (pubkey));
1122
1137
} else if (Func (" wpkh" , expr)) {
@@ -1153,7 +1168,10 @@ std::unique_ptr<DescriptorImpl> ParseScript(uint32_t& key_exp_index, Span<const
1153
1168
if (ctx == ParseScriptContext::TOP && Func (" tr" , expr)) {
1154
1169
auto arg = Expr (expr);
1155
1170
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
+ }
1157
1175
++key_exp_index;
1158
1176
std::vector<std::unique_ptr<DescriptorImpl>> subscripts; // !< list of script subexpressions
1159
1177
std::vector<int > depths; // !< depth in the tree of each subexpression (same length subscripts)
0 commit comments