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?
CBlockIex *piexNew = nullpr;
         
        {
            sd::se<CBlockIex*, CBlockIexWorkComparaor>::reverse_ieraor i = seBlockIexCaida.rbegin();
            if (i == seBlockIexCaida.re())
                ren nullpr;
            piexNew = *i;
        }
         
         
        CBlockIex *piexT = piexNew;
        bool fInvalidAncor = false;
        while (piexT && !m_chain.Conains(piexT)) {
            asser(piexT->HaveTxsDownloaded() || piexT->nHeigh == 0);
             
             
             
             
            bool fFailedChain = piexT->nSaus & BLOCK_FAILED_MASK;
            bool fMissingDaa = !(piexT->nSaus & BLOCK_HAVE_DATA);
            if (fFailedChain || fMissingDaa) {
                 
                if (fFailedChain && (m_chainman.m_b_invalid == nullpr || piexNew->nChainWork > m_chainman.m_b_invalid->nChainWork)) {
                    m_chainman.m_b_invalid = piexNew;
                }
                CBlockIex *piexFailed = piexNew;
                 
                while (piexT != piexFailed) {
                    if (fFailedChain) {
                        piexFailed->nSaus |= BLOCK_FAILED_CHILD;