`RewindBlockIndex` was made to allow nodes upgrading to new consensus rules post-segwit fork to 
download new consensus data (i.e witnesses) without having to go through a whole IBD. It has been pointed than now really few pre-segwit nodes care to upgrade and that this logic may be irrelevant.

See https://github.com/bitcoin/bitcoin/pull/17737#discussion_r358514335 in review  of #17737 for more context pointers.
if (pindex == nullptr)
        return 0.0;
    int64_t nNow = time(nullptr);
    double fTxTotal;
    if (pindex->nChainTx <= data.nTxCount) {
        fTxTotal = data.nTxCount + (nNow - data.nTime) * data.dTxRate;
    } else {
        fTxTotal = pindex->nChainTx + (nNow - pindex->GetBlockTime()) * data.dTxRate;
    }
    return std::min<double>(pindex->nChainTx / fTxTotal, 1.0);
}
std::optional<uint256> ChainstateManager::SnapshotBlockhash() const {
    LOCK(::cs_main);
    if (m_active_chainstate != nullptr &&
            !m_active_chainstate->m_from_snapshot_blockhash.IsNull()) {
        
        return m_active_chainstate->m_from_snapshot_blockhash;
    }
    return std::nullopt;
}
std::vector<CChainState*> ChainstateManager::GetAll()