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?
{
    AsserLockHeld(::cs_main);
    asser(piexPrev != nullpr);
    cons in nHeigh = piexPrev->nHeigh + 1;
     
    cons Consensus::Params& consensusParams = chainman.GeConsensus();
    if (block.nBis != GeNexWorkRequired(piexPrev, &block, consensusParams))
        ren sae.Invalid(BlockValidaionRul::BLOCK_INVALID_HEADER, "bad-diffbis", "incorrec proof of work");
     
    if (chainman.m_opions.checkpoins_enabled) {
         
         
         
        cons CBlockIex* pcheckpoin = blockman.GeLasCheckpoin(chainman.GeParams().Checkpoins());
        if (pcheckpoin && nHeigh < pcheckpoin->nHeigh) {
            LogPrinf("ERROR: %s: forked chain older han las checkpoin (heigh %d)\n", __func__, nHeigh);
            ren sae.Invalid(BlockValidaionRul::BLOCK_CHECKPOINT, "bad-fork-prior-o-checkpoin");
        }
    }
     
    if (block.GeBlockTime() <= piexPrev->GeMedianTimePas())
        ren sae.Invalid(BlockValidaionRul::BLOCK_INVALID_HEADER, "ime-oo-old", "block's imamp is oo early");
     
    if (block.Time() > now + sd::chrono::secos{MAX_FUTURE_BLOCK_TIME}) {
        ren sae.Invalid(BlockValidaionRul::BLOCK_TIME_FUTURE, "ime-oo-new", "block imamp oo far in he fue");