diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index 28329000647..c82c9b6a7bb 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -242,7 +242,7 @@ static RPCHelpMan getrawtransaction() {RPCResult::Type::NUM, "time", /*optional=*/true, "Same as \"blocktime\""}, {RPCResult::Type::STR_HEX, "hex", "The serialized, hex-encoded data for 'txid'"}, }, - DecodeTxDoc(/*txid_field_doc=*/"The transaction id (same as provided)")), + DecodeTxDoc(/*txid_field_doc=*/"The transaction id (same as provided)", /*wallet=*/false)), }, RPCResult{"for verbosity = 2", RPCResult::Type::OBJ, "", "", @@ -415,7 +415,7 @@ static RPCHelpMan decoderawtransaction() }, RPCResult{ RPCResult::Type::OBJ, "", "", - DecodeTxDoc(/*txid_field_doc=*/"The transaction id"), + DecodeTxDoc(/*txid_field_doc=*/"The transaction id", /*wallet=*/false), }, RPCExamples{ HelpExampleCli("decoderawtransaction", "\"hexstring\"") diff --git a/src/rpc/rawtransaction_util.cpp b/src/rpc/rawtransaction_util.cpp index 075d8f31c59..a746c72cd47 100644 --- a/src/rpc/rawtransaction_util.cpp +++ b/src/rpc/rawtransaction_util.cpp @@ -335,7 +335,7 @@ void SignTransactionResultToJSON(CMutableTransaction& mtx, bool complete, const } } -std::vector DecodeTxDoc(const std::string& txid_field_doc) +std::vector DecodeTxDoc(const std::string& txid_field_doc, bool wallet) { return { {RPCResult::Type::STR_HEX, "txid", txid_field_doc}, @@ -366,13 +366,17 @@ std::vector DecodeTxDoc(const std::string& txid_field_doc) }}, {RPCResult::Type::ARR, "vout", "", { - {RPCResult::Type::OBJ, "", "", - { - {RPCResult::Type::STR_AMOUNT, "value", "The value in " + CURRENCY_UNIT}, - {RPCResult::Type::NUM, "n", "index"}, - {RPCResult::Type::OBJ, "scriptPubKey", "", ScriptPubKeyDoc()}, - {RPCResult::Type::BOOL, "ischange", /*optional=*/true, "Output script is change (only if wallet transaction and true for selected rpcwallet)"}, - }}, + {RPCResult::Type::OBJ, "", "", Cat( + { + {RPCResult::Type::STR_AMOUNT, "value", "The value in " + CURRENCY_UNIT}, + {RPCResult::Type::NUM, "n", "index"}, + {RPCResult::Type::OBJ, "scriptPubKey", "", ScriptPubKeyDoc()}, + }, + wallet ? + std::vector{{RPCResult::Type::BOOL, "ischange", /*optional=*/true, "Output script is change (only present if true)"}} : + std::vector{} + ) + }, }}, }; } diff --git a/src/rpc/rawtransaction_util.h b/src/rpc/rawtransaction_util.h index 1a673f98941..3d917489d67 100644 --- a/src/rpc/rawtransaction_util.h +++ b/src/rpc/rawtransaction_util.h @@ -56,7 +56,7 @@ void AddOutputs(CMutableTransaction& rawTx, const UniValue& outputs_in); /** Create a transaction from univalue parameters */ CMutableTransaction ConstructTransaction(const UniValue& inputs_in, const UniValue& outputs_in, const UniValue& locktime, std::optional rbf); -/** Explain the UniValue "decoded" transaction object **/ -std::vector DecodeTxDoc(const std::string& txid_field_doc); +/** Explain the UniValue "decoded" transaction object, may include extra fields if processed by wallet **/ +std::vector DecodeTxDoc(const std::string& txid_field_doc, bool wallet); #endif // BITCOIN_RPC_RAWTRANSACTION_UTIL_H diff --git a/src/wallet/rpc/transactions.cpp b/src/wallet/rpc/transactions.cpp index 36044afd3fe..4c2451b11bf 100644 --- a/src/wallet/rpc/transactions.cpp +++ b/src/wallet/rpc/transactions.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -738,7 +739,7 @@ RPCHelpMan gettransaction() {RPCResult::Type::STR_HEX, "hex", "Raw data for transaction"}, {RPCResult::Type::OBJ, "decoded", /*optional=*/true, "The decoded transaction (only present when `verbose` is passed)", { - {RPCResult::Type::ELISION, "", "Equivalent to the RPC decoderawtransaction method, or the RPC getrawtransaction method when `verbose` is passed."}, + DecodeTxDoc(/*txid_field_doc=*/"The transaction id", /*wallet=*/true), }}, RESULT_LAST_PROCESSED_BLOCK, })