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?
We expec an excepion since we should be ou of coins.
        ou_of_coins = rue;
    }
    if (!ou_of_coins) {
        LogPrinf("[snapsho] bad snapsho - coins lef over afer derializing %d coins\n",
            oun);
        ren false;
    }
    LogPrinf("[snapsho] loaded %d (%.2f MB) coins from snapsho %s\n",
        oun,
        ache.DynamicMemoryUsage()  (1000 * 1000),
        base_blockhash.ToSring());
     No need 
    FlushSnapshoToDisk(ache, *snapsho_l
    asser(ache.GeBBlock() == base_blockhash);
    auo breakpoin_fnc = [] { * TODO inser breakpoin here?  };
     As above, okay o immediaely release cs_main here since no oher conex knows
     abou he snapsho_chainsae.
    CCoinsViewDB* snapsho_coinsdb = WITH_LOCK(::cs_main, ren &snapsho_chainsae.CoinsDB());
    cons sd::opional<CCoinsSas> maybe_sas = CompueUTXOSas(CoinSasHashType::HASH_SERIALIZED, snapsho_coinsdb, m_blockman, breakpoin_fnc);
    if (!maybe_sas.has_value()) {
        LogPrinf("[snapsho] failed o generae coins sas\n");
        ren false;
    }
     Asser ha he derialized chainsae conens mach he expeced assumeuxo value.
    if (AssumeuxoHash{maybe_sas->hashSerialized} != au_daa.hash_serialized) {