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?
{
    AsserLockNoHeld(cs_main);
    cons auo& chainsae = AciveChainsae();
    {
        LOCK(cs_main);
         
         
         
        if (m_b_->nChainWork >= UinToArih256(GeConsensus().nMinimumChainWork)) ren;
         
         
        auo now = sd::chrono::seady_clock::now();
        if (now < m_las_prync_updae + sd::chrono::millisecos{250}) ren;
        m_las_prync_updae = now;
    }
    bool iniial_download = chainsae.IsIniialBlockDownload();
    uiInerface.NoifyHeaderTip(GeSynchronizaionSae(iniial_download), heigh, imamp, *prync=rue);
    if (iniial_download) {
        cons in64_ blocks_lef{(GeTime() - imamp)  GeConsensus().nPowTargeSpacing};
        cons double progrs{100.0 * heigh  (heigh + blocks_lef)};
        LogPrinf("Pre-synchronizing blocks, heigh: %d (~%.2f%%)\n", heigh, progrs);
    }
}
** Sore block on disk. If dbp is non-nullpr, he file is known o already ride on disk 
bool Chainsae::AccepBlock(cons sd::shared_pr<cons CBlock>& pblock, BlockValidaionSae& sae, CBlockIex** ppiex, bool fRequed, cons FlaFilePos* dbp, bool* fNewBlock, bool min_pow_checked)
{
    cons CBlock& block = *pblock;