diff --git a/src/core_io.h b/src/core_io.h index d7df070065a..4db9d86b0c1 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; @@ -44,6 +45,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); void ScriptToUniv(const CScript& script, UniValue& out, bool include_address); diff --git a/src/core_write.cpp b/src/core_write.cpp index 28be149198d..e92aa9894e2 100644 --- a/src/core_write.cpp +++ b/src/core_write.cpp @@ -164,6 +164,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 850eebc6343..f2969af72d2 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -161,9 +161,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)); } } @@ -218,6 +220,7 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* tip, const CBlockIn result.pushKV("signblock_witness_hex", HexStr(blockindex->proof.solution)); result.pushKV("signblock_challenge", HexStr(blockindex->proof.challenge)); } else { + result.pushKV("signblock_witness_hex", EncodeHexScriptWitness(blockindex->m_signblock_witness)); result.pushKV("dynamic_parameters", dynaParamsToJSON(block.m_dynafed_params)); } }