This is part of the assumeutxo project:
Parent PR: #15606 Issue: #15605 Specification: https://github.com/jamesob/assumeutxo-docs/tree/master/proposal
This changeset introduces ChainstateManager
, which is responsible for creating and managing access to multiple chainstates. Until we allow chainstate creation from UTXO snapshots (next assumeutxo PR?) it’s basically unnecessary, but it is a prerequisite for background IBD support.
Changes are also made to the initialization process to make use of g_chainman
and thus clear the way for multiple chainstates being loaded on startup.
One immediate benefit of this change is that we no longer have the g_blockman
global, but instead have the ChainstateManager inject a reference of its shared BlockManager into any chainstate it creates.
Another immediate benefit is that uses of ChainActive()
and ChainstateActive()
are now covered by lock annotations. Because use of g_chainman
is annotated to require cs_main, these two functions subsequently follow.
Because of whitespace changes, this diff looks bigger than it is. E.g., 4813167d98 is most easily reviewed with
0git show --color-moved=dimmed_zebra -w 4813167d98