@@ -249,11 +249,23 @@ UniValue blockheaderToJSON(const CBlockIndex* tip, const CBlockIndex* blockindex
249
249
result.pushKV (" chainwork" , blockindex->nChainWork .GetHex ());
250
250
} else {
251
251
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 ));
252
+ if (blockindex->trimmed ()) {
253
+ result.pushKV (" signblock_witness_asm" , " <trimmed>" );
254
+ result.pushKV (" signblock_witness_hex" , " <trimmed>" );
255
+ result.pushKV (" warning" , " Fields missing due to -trim_headers flag." );
256
+ } else {
257
+ result.pushKV (" signblock_witness_asm" , ScriptToAsmStr (blockindex->get_proof ().solution ));
258
+ result.pushKV (" signblock_witness_hex" , HexStr (blockindex->get_proof ().solution ));
259
+ }
254
260
} else {
255
- result.pushKV (" signblock_witness_hex" , EncodeHexScriptWitness (blockindex->signblock_witness ()));
256
- result.pushKV (" dynamic_parameters" , dynaParamsToJSON (blockindex->dynafed_params ()));
261
+ if (blockindex->trimmed ()) {
262
+ result.pushKV (" signblock_witness_hex" , " <trimmed>" );
263
+ result.pushKV (" dynamic_parameters" , " <trimmed>" );
264
+ result.pushKV (" warning" , " Fields missing due to -trim_headers flag." );
265
+ } else {
266
+ result.pushKV (" signblock_witness_hex" , EncodeHexScriptWitness (blockindex->signblock_witness ()));
267
+ result.pushKV (" dynamic_parameters" , dynaParamsToJSON (blockindex->dynafed_params ()));
268
+ }
257
269
}
258
270
}
259
271
result.pushKV (" nTx" , (uint64_t )blockindex->nTx );
@@ -266,7 +278,13 @@ UniValue blockheaderToJSON(const CBlockIndex* tip, const CBlockIndex* blockindex
266
278
267
279
UniValue blockToJSON (const CBlock& block, const CBlockIndex* tip, const CBlockIndex* blockindex, bool txDetails)
268
280
{
269
- UniValue result = blockheaderToJSON (tip, blockindex);
281
+ UniValue result;
282
+ if (blockindex->trimmed ()) {
283
+ CBlockIndex tmp = CBlockIndex (block.GetBlockHeader ()); // XXX: lifetimes?
284
+ result = blockheaderToJSON (tip, &tmp);
285
+ } else {
286
+ result = blockheaderToJSON (tip, blockindex);
287
+ }
270
288
271
289
result.pushKV (" strippedsize" , (int )::GetSerializeSize (block, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS));
272
290
result.pushKV (" size" , (int )::GetSerializeSize (block, PROTOCOL_VERSION));
@@ -968,7 +986,13 @@ static RPCHelpMan getblockheader()
968
986
if (!fVerbose )
969
987
{
970
988
CDataStream ssBlock (SER_NETWORK, PROTOCOL_VERSION);
971
- ssBlock << pblockindex->GetBlockHeader ();
989
+ if (pblockindex->trimmed ()) {
990
+ CBlockHeader tmp;
991
+ ReadBlockHeaderFromDisk (tmp, pblockindex, Params ().GetConsensus ());
992
+ ssBlock << tmp;
993
+ } else {
994
+ ssBlock << pblockindex->GetBlockHeader ();
995
+ }
972
996
std::string strHex = HexStr (ssBlock);
973
997
return strHex;
974
998
}
0 commit comments