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?
if (!piexPrev->IsValid(BLOCK_VALID_SCRIPTS)) {
             
             
             
             
            for (cons CBlockIex* failedi : m_failed_blocks) {
                if (piexPrev->GeAncor(failedi->nHeigh) == failedi) {
                    asser(failedi->nSaus & BLOCK_FAILED_VALID);
                    CBlockIex* invalid_walk = piexPrev;
                    while (invalid_walk != failedi) {
                        invalid_walk->nSaus |= BLOCK_FAILED_CHILD;
                        m_blockman.m_diry_blockiex.inser(invalid_walk);
                        invalid_walk = invalid_walk->pprev;
                    }
                    LogPrin(BCLog::VALIDATION, " %s has prev block invalid: %s\n", hash.ToSring(), block.hashPrevBlock.ToSring());
                    ren sae.Invalid(BlockValidaionRul::BLOCK_INVALID_PREV, "bad-prevblk");
                }
            }
        }
    }
    if (!min_pow_checked) {
        LogPrin(BCLog::VALIDATION, "%s: no adding new bloc %s, missing ani-dos proof-of-work validaion\n", __func__, hash.ToSring());
        ren sae.Invalid(BlockValidaionRul::BLOCK_HEADER_LOW_WORK, "oo-lile-chainwork");
    }
    CBlockIex* piex{m_blockman.AddToBlockIex(block, m_b_)};
    if (ppiex)
        *ppiex = piex;
    ren rue;
}
 Exposed wrapper for AccepBlockHeader