diff --git a/src/core_io.h b/src/core_io.h index cc885a9c49..3a06c3af4b 100644 --- a/src/core_io.h +++ b/src/core_io.h @@ -15,6 +15,7 @@ class CBlock; class CBlockHeader; class CScript; +struct CScriptWitness; class CTransaction; struct CMutableTransaction; class uint256; @@ -45,6 +46,7 @@ int ParseSighashString(const UniValue& sighash); UniValue ValueFromAmount(const CAmount amount); std::string FormatScript(const CScript& script); std::string EncodeHexTx(const CTransaction& tx, const int serializeFlags = 0); +UniValue EncodeHexScriptWitness(const CScriptWitness& witness); std::string SighashToStr(unsigned char sighash_type); void ScriptPubKeyToUniv(const CScript& scriptPubKey, UniValue& out, bool fIncludeHex, bool include_addresses); void ScriptToUniv(const CScript& script, UniValue& out, bool include_address); diff --git a/src/core_write.cpp b/src/core_write.cpp index c763e52f7b..c8ed99d7eb 100644 --- a/src/core_write.cpp +++ b/src/core_write.cpp @@ -169,6 +169,15 @@ std::string EncodeHexTx(const CTransaction& tx, const int serializeFlags) return HexStr(ssTx); } +UniValue EncodeHexScriptWitness(const CScriptWitness& witness) +{ + UniValue witness_hex(UniValue::VARR); + for (const auto &item : witness.stack) { + witness_hex.push_back(HexStr(item)); + } + return witness_hex; +} + void ScriptToUniv(const CScript& script, UniValue& out, bool include_address) { out.pushKV("asm", ScriptToAsmStr(script)); diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 69a38545b4..90fd14b18b 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -216,9 +216,11 @@ UniValue blockheaderToJSON(const CBlockIndex* tip, const CBlockIndex* blockindex result.pushKV("difficulty", GetDifficulty(blockindex)); result.pushKV("chainwork", blockindex->nChainWork.GetHex()); } else { - result.pushKV("signblock_witness_asm", ScriptToAsmStr(blockindex->proof.solution)); - result.pushKV("signblock_witness_hex", HexStr(blockindex->proof.solution)); - if (!blockindex->dynafed_params.IsNull()) { + if (blockindex->dynafed_params.IsNull()) { + result.pushKV("signblock_witness_asm", ScriptToAsmStr(blockindex->proof.solution)); + result.pushKV("signblock_witness_hex", HexStr(blockindex->proof.solution)); + } else { + result.pushKV("signblock_witness_hex", EncodeHexScriptWitness(blockindex->m_signblock_witness)); result.pushKV("dynamic_parameters", dynaParamsToJSON(blockindex->dynafed_params)); } }