@@ -249,12 +249,25 @@ UniValue blockheaderToJSON(const CBlockIndex* tip, const CBlockIndex* blockindex
249249 result.pushKV (" chainwork" , blockindex->nChainWork .GetHex ());
250250 } else {
251251 if (blockindex->dynafed_params ().IsNull ()) {
252- result.pushKV (" signblock_witness_asm" , ScriptToAsmStr (blockindex->get_proof ().solution ));
253- result.pushKV (" signblock_witness_hex" , HexStr (blockindex->get_proof ().solution ));
254- result.pushKV (" signblock_challenge" , HexStr (blockindex->get_proof ().challenge ));
252+ if (blockindex->trimmed ()) {
253+ result.pushKV (" signblock_witness_asm" , " <trimmed>" );
254+ result.pushKV (" signblock_witness_hex" , " <trimmed>" );
255+ result.pushKV (" signblock_challenge" , " <trimmed>" );
256+ result.pushKV (" warning" , " Fields missing due to -trim_headers flag." );
257+ } else {
258+ result.pushKV (" signblock_witness_asm" , ScriptToAsmStr (blockindex->get_proof ().solution ));
259+ result.pushKV (" signblock_witness_hex" , HexStr (blockindex->get_proof ().solution ));
260+ result.pushKV (" signblock_challenge" , HexStr (blockindex->get_proof ().challenge ));
261+ }
255262 } else {
256- result.pushKV (" signblock_witness_hex" , EncodeHexScriptWitness (blockindex->signblock_witness ()));
257- result.pushKV (" dynamic_parameters" , dynaParamsToJSON (blockindex->dynafed_params ()));
263+ if (blockindex->trimmed ()) {
264+ result.pushKV (" signblock_witness_hex" , " <trimmed>" );
265+ result.pushKV (" dynamic_parameters" , " <trimmed>" );
266+ result.pushKV (" warning" , " Fields missing due to -trim_headers flag." );
267+ } else {
268+ result.pushKV (" signblock_witness_hex" , EncodeHexScriptWitness (blockindex->signblock_witness ()));
269+ result.pushKV (" dynamic_parameters" , dynaParamsToJSON (blockindex->dynafed_params ()));
270+ }
258271 }
259272 }
260273 result.pushKV (" nTx" , (uint64_t )blockindex->nTx );
@@ -267,7 +280,13 @@ UniValue blockheaderToJSON(const CBlockIndex* tip, const CBlockIndex* blockindex
267280
268281UniValue blockToJSON (const CBlock& block, const CBlockIndex* tip, const CBlockIndex* blockindex, bool txDetails)
269282{
270- UniValue result = blockheaderToJSON (tip, blockindex);
283+ UniValue result;
284+ if (blockindex->trimmed ()) {
285+ CBlockIndex tmp = CBlockIndex (block.GetBlockHeader ()); // XXX: lifetimes?
286+ result = blockheaderToJSON (tip, &tmp);
287+ } else {
288+ result = blockheaderToJSON (tip, blockindex);
289+ }
271290
272291 result.pushKV (" strippedsize" , (int )::GetSerializeSize (block, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS));
273292 result.pushKV (" size" , (int )::GetSerializeSize (block, PROTOCOL_VERSION));
@@ -969,7 +988,13 @@ static RPCHelpMan getblockheader()
969988 if (!fVerbose )
970989 {
971990 CDataStream ssBlock (SER_NETWORK, PROTOCOL_VERSION);
972- ssBlock << pblockindex->GetBlockHeader ();
991+ if (pblockindex->trimmed ()) {
992+ CBlockHeader tmp;
993+ ReadBlockHeaderFromDisk (tmp, pblockindex, Params ().GetConsensus ());
994+ ssBlock << tmp;
995+ } else {
996+ ssBlock << pblockindex->GetBlockHeader ();
997+ }
973998 std::string strHex = HexStr (ssBlock);
974999 return strHex;
9751000 }
0 commit comments