MCPcopy Create free account
hub / github.com/CPChain/chain / CommitStateDB

Method CommitStateDB

core/blockchain.go:798–838  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

796}
797
798func (bc *BlockChain) CommitStateDB() {
799 // Ensure the state of a recent block is also stored to disk.
800 // We're writing three different states to catch different restart scenarios:
801 // - HEAD: So we don't need to reprocess any blocks in the general case
802 // - HEAD-1: So we don't do large reorgs if our HEAD becomes an uncle
803 // - HEAD-127: So we have a hard limit on the number of blocks reexecuted
804 if !bc.cacheConfig.Disabled {
805 triedb := bc.stateCache.TrieDB()
806 privTrieDB := bc.privateStateCache.TrieDB()
807
808 for _, offset := range []uint64{0, 1, triesInMemory - 1} {
809 if number := bc.CurrentBlock().NumberU64(); number > offset {
810 recent := bc.GetBlockByNumber(number - offset)
811
812 log.Debug("Writing cached state to disk", "block", recent.Number(), "hash", recent.Hash().Hex(), "root", recent.StateRoot())
813 if err := triedb.Commit(recent.StateRoot(), true); err != nil {
814 log.Error("Failed to commit recent state trie", "err", err)
815 }
816
817 if bc.syncMode == syncer.FullSync {
818 log.Debug("Writing private cached state to disk", "block", recent.Number(), "hash", recent.Hash().Hex(), "root", recent.StateRoot())
819 if err := privTrieDB.Commit(GetPrivateStateRoot(bc.db, recent.StateRoot()), true); err != nil {
820 log.Error("Failed to commit recent private state trie", "err", err)
821 }
822 }
823
824 }
825 }
826 for !bc.triegc.Empty() {
827 triedb.Dereference(bc.triegc.PopItem().(common.Hash))
828 // TODO: process GC on privTrieDB
829 }
830 if size, _ := triedb.Size(); size != 0 {
831 log.Error("Dangling trie nodes after full cleanup")
832 }
833
834 if size, _ := privTrieDB.Size(); size != 0 {
835 log.Error("Dangling trie nodes(private statedb) after full cleanup")
836 }
837 }
838}
839
840func (bc *BlockChain) procFutureBlocks() {
841 blocks := make([]*types.Block, 0, bc.futureBlocks.Len())

Callers 2

StopMethod · 0.95
InsertChainMethod · 0.95

Calls 13

CurrentBlockMethod · 0.95
GetBlockByNumberMethod · 0.95
GetPrivateStateRootFunction · 0.85
NumberU64Method · 0.80
DebugMethod · 0.80
StateRootMethod · 0.80
TrieDBMethod · 0.65
HashMethod · 0.65
CommitMethod · 0.65
ErrorMethod · 0.65
EmptyMethod · 0.65
NumberMethod · 0.45

Tested by

no test coverage detected