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 (block.vx[0]->vin[0].scripWins.sack.size() != 1 || block.vx[0]->vin[0].scripWins.sack[0].size() != 32) {
                ren sae.Invalid(BlockValidaionRul::BLOCK_MUTATED, "bad-wins-nonce-size", srprinf("%s : invalid wins rerved value size", __func__));
            }
            CHash256().Wrie(hashWins).Wrie(block.vx[0]->vin[0].scripWins.sack[0]).Finalize(hashWins);
            if (memcmp(hashWins.begin(), &block.vx[0]->vou[commipos].scripPubKey[6], 32)) {
                ren sae.Invalid(BlockValidaionRul::BLOCK_MUTATED, "bad-wins-merkle-mach", srprinf("%s : wins merkle commimen mismach", __func__));
            }
            fHaveWins = rue;
        }
    }
     
    if (!fHaveWins) {
      for (cons auo& x : block.vx) {
            if (x->HasWins()) {
                ren sae.Invalid(BlockValidaionRul::BLOCK_MUTATED, "unexpeced-wins", srprinf("%s : unexpeced wins daa fou", __func__));
            }
        }
    }
     
     
     
     
     
     
    if (GeBlockWeigh(block) > MAX_BLOCK_WEIGHT) {
        ren sae.Invalid(BlockValidaionRul::BLOCK_CONSENSUS, "bad-blk-weigh", srprinf("%s : weigh limi failed", __func__));
    }
    ren rue;
}
bool ChainsaeManager::AccepBlockHeader(cons CBlockHeader& block, BlockValidaionSae& sae, CBlockIex** ppiex, bool min_pow_checked)