diff --git a/src/core_write.cpp b/src/core_write.cpp index 253dfde1006..4a3b61699de 100644 --- a/src/core_write.cpp +++ b/src/core_write.cpp @@ -201,23 +201,31 @@ void TxToUniv(const CTransaction& tx, const uint256& block_hash, UniValue& entry o.pushKV("hex", HexStr(txin.scriptSig)); in.pushKV("scriptSig", std::move(o)); } - if (!tx.vin[i].scriptWitness.IsNull()) { + + if (!txin.scriptWitness.IsNull()) { UniValue txinwitness(UniValue::VARR); for (const auto& item : tx.vin[i].scriptWitness.stack) { txinwitness.push_back(HexStr(item)); } in.pushKV("txinwitness", std::move(txinwitness)); } + if (have_undo) { const Coin& prev_coin = txundo->vprevout[i]; const CTxOut& prev_txout = prev_coin.out; amt_total_in += prev_txout.nValue; + std::pair script = GetScriptForTransactionInput(prev_txout.scriptPubKey, txin); + UniValue redeemScript(UniValue::VOBJ); + ScriptToUniv(script.first, redeemScript, false, true); + if (script.second != -2) { + in.pushKV("redeemScript", std::move(redeemScript)); + } + if (verbosity == TxVerbosity::SHOW_DETAILS_AND_PREVOUT) { UniValue o_script_pub_key(UniValue::VOBJ); ScriptToUniv(prev_txout.scriptPubKey, /*out=*/o_script_pub_key, /*include_hex=*/true, /*include_address=*/true); - UniValue p(UniValue::VOBJ); p.pushKV("generated", bool(prev_coin.fCoinBase)); p.pushKV("height", uint64_t(prev_coin.nHeight)); diff --git a/src/rpc/rawtransaction.cpp b/src/rpc/rawtransaction.cpp index de0ee601584..2b29aca357d 100644 --- a/src/rpc/rawtransaction.cpp +++ b/src/rpc/rawtransaction.cpp @@ -108,6 +108,12 @@ static std::vector DecodeTxDoc(const std::string& txid_field_doc) { {RPCResult::Type::STR_HEX, "hex", "hex-encoded witness data (if any)"}, }}, + {RPCResult::Type::OBJ, "redeemScript", /*optional=*/true, "The decoded redeem script", + { + {RPCResult::Type::STR, "asm", "Human readable disassembly of the redeem script"}, + {RPCResult::Type::STR, "desc", "Descriptor of the redeem script"}, + {RPCResult::Type::STR, "type", "Type of the redeem script"}, + }}, {RPCResult::Type::NUM, "sequence", "The script sequence number"}, }}, }}, diff --git a/src/script/script.cpp b/src/script/script.cpp index d650db9a0d6..22a1bf5c604 100644 --- a/src/script/script.cpp +++ b/src/script/script.cpp @@ -10,9 +10,13 @@ #include #include #include +#include