以太坊blockchain源码分析 (2)

⑤:检查区块哈希的当前状态,并确保链中没有任何坏块

for hash := range BadHashes { if header := bc.GetHeaderByHash(hash); header != nil { headerByNumber := bc.GetHeaderByNumber(header.Number.Uint64()) if headerByNumber != nil && headerByNumber.Hash() == header.Hash() { log.Error("Found bad hash, rewinding chain", "number", header.Number, "hash", header.ParentHash) bc.SetHead(header.Number.Uint64() - 1) log.Error("Chain rewind was successful, resuming normal operation") } } }

⑥:定时处理future block

go bc.update() ->procFutureBlocks ->InsertChain

总的来说做了以下几件事:

配置cacheConfig,创建各种lru缓存

初始化triegc

初始化stateDb:state.NewDatabase(db)

初始化区块和状态验证:NewBlockValidator()

初始化状态处理器:NewStateProcessor()

初始化区块头部链:NewHeaderChain()

查找创世区块:bc.genesisBlock = bc.GetBlockByNumber(0)

加载最新的状态数据:bc.loadLastState()

检查区块哈希的当前状态,并确保链中没有任何坏块

go bc.update() 定时处理future block

加载区块链状态

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsfyg.html