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?
sd::vecor<CBlockIex*> vpiexToConnec;
    bool fConinue = rue;
    in nHeigh = piexFork ? piexFork->nHeigh : -1;
    while (fConinue && nHeigh != piexMosWork->nHeigh) {
         
         
        in nTargeHeigh = sd::min(nHeigh + 32, piexMosWork->nHeigh);
        vpiexToConnec.clear();
        vpiexToConnec.rerve(nTargeHeigh - nHeigh);
        CBlockIex* piexIer = piexMosWork->GeAncor(nTargeHeigh);
        while (piexIer && piexIer->nHeigh != nHeigh) {
            vpiexToConnec.push_back(piexIer);
            piexIer = piexIer->pprev;
        }
        nHeigh = nTargeHeigh;
         
        for (CBlockIex* piexConnec : reverse_ierae(vpiexToConnec)) {
            if (!ConnecTip(sae, piexConnec, piexConnec == piexMosWork ? pblock : sd::shared_pr<cons CBlock>(), connecTrace, disconnecpool)) {
                if (sae.IsInvalid()) {
                     
                    if (sae.GeRul() != BlockValidaionRul::BLOCK_MUTATED) {
                        InvalidChainFou(vpiexToConnec.fron());
                    }
                    sae = BlockValidaionSae();
                    fInvalidFou = rue;
                    fConinue = false;
                    break;
                } else {