diff --git a/src/rpc/rawtransaction_util.cpp b/src/rpc/rawtransaction_util.cpp --- a/src/rpc/rawtransaction_util.cpp +++ b/src/rpc/rawtransaction_util.cpp @@ -22,13 +22,19 @@ const UniValue &inputs_in, const UniValue &outputs_in, const UniValue &locktime) { - if (inputs_in.isNull() || outputs_in.isNull()) { + if (outputs_in.isNull()) { throw JSONRPCError( RPC_INVALID_PARAMETER, - "Invalid parameter, arguments 1 and 2 must be non-null"); + "Invalid parameter, output argument must be non-null"); + } + + UniValue inputs; + if (inputs_in.isNull()) { + inputs = UniValue::VARR; + } else { + inputs = inputs_in.get_array(); } - UniValue inputs = inputs_in.get_array(); const bool outputs_is_obj = outputs_in.isObject(); UniValue outputs = outputs_is_obj ? outputs_in.get_obj() : outputs_in.get_array(); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -4736,9 +4736,9 @@ { "inputs", RPCArg::Type::ARR, - RPCArg::Optional::NO, - "The inputs. Leave empty to add inputs automatically. See " - "add_inputs option.", + RPCArg::Optional::OMITTED_NAMED_ARG, + "Leave empty to add inputs automatically. See add_inputs " + "option.", { { "", diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -353,8 +353,8 @@ } else { for (auto spk_man : wallet->GetActiveScriptPubKeyMans()) { if (!spk_man->SetupGeneration()) { - error = Untranslated( - "Unable to generate initial keys"); + error = + Untranslated("Unable to generate initial keys"); status = DatabaseStatus::FAILED_CREATE; return nullptr; } diff --git a/test/functional/rpc_psbt.py b/test/functional/rpc_psbt.py --- a/test/functional/rpc_psbt.py +++ b/test/functional/rpc_psbt.py @@ -48,6 +48,10 @@ self.nodes[2].getnewaddress(): 90000000}, 0, {"add_inputs": True})['psbt'] assert_equal(len(self.nodes[0].decodepsbt(psbtx1)['tx']['vin']), 2) + # Inputs argument can be null + self.nodes[0].walletcreatefundedpsbt( + None, {self.nodes[2].getnewaddress(): 10}) + # Node 1 should not be able to add anything to it but still return the # psbtx same as before psbtx = self.nodes[1].walletprocesspsbt(psbtx1)['psbt']