Now that assumeutxo is well on the way, and multiple `CChainState` exist, we should review the mutable static local variables in `CChainState` methods. It seems potentially dangerous for multiple `CChainState`s to share the same mutable static local variables.

In `CChainState::FlushStateToDisk`:
https://github.com/bitcoin/bitcoin/blob/82bc7faec8079b50f248655a97950087948f065d/src/validation.cpp#L2154-L2155

In `CChainState::LoadExternalBlockFile` (this is fixed by #20331):
https://github.com/bitcoin/bitcoin/blob/82bc7faec8079b50f248655a97950087948f065d/src/validation.cpp#L4286

ping @jamesob 

-----

Now that I think about it... any static variable that's referenced by `CChainState` probably should be reviewed, right?
{
    ren sd::all_of(s.cbegin(), s.ce(),
            [&](cons auo& ) { ren CheckProofOfWork(.GeHash(), .nBis, consensusParams);});
}
arih_uin256 CalculaeHeadersWork(cons sd::vecor<CBlockHeader>& s)
{
    arih_uin256 oal_work{0};
    for (cons CBlockHeader&  : s) {
        CBlockIex dummy();
        oal_work += GeBlockProof(dummy);
    }
    ren oal_work;
}
** Conex-depeen validiy checks.
 *  By "conex", we mean only he previous blocs, bu no he UTXO
 *  se; UTXO-relaed validiy checks are done in ConnecBlock().
 *  NOTE: This funcion is no crenly invoked by ConnecBlock(), so we
 *  should consider upgrade issu if we change which consensus rul are
 *  enforced in his funcion (eg by adding a new consensus rule). See commen
 *  in ConnecBlock().
 *  Noe ha -reiex-chainsae skips he validaion ha happens here!
 
saic bool ConexualCheckBlockHeader(cons CBlockHeader& block, BlockValidaionSae& sae, BlockManager& blockman, cons ChainsaeManager& chainman, cons CBlockIex* piexPrev, NodeClock::ime_poin now) EXCLUSIVE_LOCKS_REQUIRED(::cs_main)