diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -2886,10 +2886,18 @@ if (CanDirectFetch() && pindex->nHeight >= m_chainman.ActiveChain().Height() - MAX_CMPCTBLOCK_DEPTH) { - CBlockHeaderAndShortTxIDs cmpctblock(*pblock); - m_connman.PushMessage( - &pfrom, - msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, cmpctblock)); + if (a_recent_compact_block && + a_recent_compact_block->header.GetHash() == + pindex->GetBlockHash()) { + m_connman.PushMessage(&pfrom, + msgMaker.Make(NetMsgType::CMPCTBLOCK, + *a_recent_compact_block)); + } else { + CBlockHeaderAndShortTxIDs cmpctblock(*pblock); + m_connman.PushMessage( + &pfrom, msgMaker.Make(nSendFlags, NetMsgType::CMPCTBLOCK, + cmpctblock)); + } } else { m_connman.PushMessage( &pfrom, msgMaker.Make(nSendFlags, NetMsgType::BLOCK, *pblock)); @@ -7019,11 +7027,10 @@ LOCK(m_most_recent_block_mutex); if (m_most_recent_block_hash == pBestIndex->GetBlockHash()) { - CBlockHeaderAndShortTxIDs cmpctblock( - *m_most_recent_block); m_connman.PushMessage( - pto, msgMaker.Make(NetMsgType::CMPCTBLOCK, - cmpctblock)); + pto, + msgMaker.Make(NetMsgType::CMPCTBLOCK, + *m_most_recent_compact_block)); fGotBlockFromCache = true; } }