MCPcopy Create free account
hub / github.com/DNAProject/DNA / LoadChainConfig

Method LoadChainConfig

consensus/vbft/service.go:281–342  ·  view source on GitHub ↗
(blkNum uint32)

Source from the content-addressed store, hash-verified

279}
280
281func (self *Server) LoadChainConfig(blkNum uint32) error {
282 //get chainconfig from genesis block
283
284 block, _ := self.blockPool.getSealedBlock(blkNum)
285 if block == nil {
286 return fmt.Errorf("getSealedBlock err height:%d", blkNum)
287 }
288 var cfg vconfig.ChainConfig
289 if block.getNewChainConfig() != nil {
290 cfg = *block.getNewChainConfig()
291 self.LastConfigBlockNum = block.getLastConfigBlockNum()
292 } else {
293 cfgBlock := block
294 if block.getLastConfigBlockNum() != math.MaxUint32 {
295 cfgBlock, _ = self.blockPool.getSealedBlock(block.getLastConfigBlockNum())
296 if cfgBlock == nil {
297 return fmt.Errorf("failed to get cfg block height:%d", block.getLastConfigBlockNum())
298 }
299 }
300 if cfgBlock.getNewChainConfig() == nil {
301 panic("failed to get chain config from config block")
302 }
303 cfg = *cfgBlock.getNewChainConfig()
304 self.LastConfigBlockNum = cfgBlock.getLastConfigBlockNum()
305 }
306 self.metaLock.Lock()
307 self.config = &cfg
308 self.metaLock.Unlock()
309
310 self.metaLock.RLock()
311 defer self.metaLock.RUnlock()
312
313 if self.config.View == 0 || self.config.MaxBlockChangeView == 0 {
314 panic("invalid view or maxblockchangeview ")
315 }
316 // update msg delays
317 makeProposalTimeout = time.Duration(self.config.BlockMsgDelay * 2)
318 make2ndProposalTimeout = time.Duration(self.config.BlockMsgDelay)
319 endorseBlockTimeout = time.Duration(self.config.HashMsgDelay * 2)
320 commitBlockTimeout = time.Duration(self.config.HashMsgDelay * 3)
321 peerHandshakeTimeout = time.Duration(self.config.PeerHandshakeTimeout)
322 zeroTxBlockTimeout = time.Duration(self.config.BlockMsgDelay * 3)
323 // TODO: load sealed blocks from chainStore
324
325 // protected by server.metaLock
326 self.completedBlockNum = self.GetCommittedBlockNo()
327 self.currentBlockNum = self.GetCommittedBlockNo() + 1
328
329 log.Infof("committed: %d, current block no: %d", self.GetCommittedBlockNo(), self.GetCurrentBlockNo())
330
331 block, _ = self.blockPool.getSealedBlock(self.GetCommittedBlockNo())
332 if block == nil {
333 return fmt.Errorf("failed to get sealed block (%d)", self.GetCommittedBlockNo())
334 }
335 currentParticipantConfig, err := self.buildParticipantConfig(self.GetCurrentBlockNo(), block, self.config)
336 if err != nil {
337 return fmt.Errorf("failed to build participant config: %s", err)
338 }

Callers 1

initializeMethod · 0.95

Calls 8

GetCommittedBlockNoMethod · 0.95
GetCurrentBlockNoMethod · 0.95
InfofFunction · 0.92
getSealedBlockMethod · 0.80
ErrorfMethod · 0.80
getNewChainConfigMethod · 0.80
getLastConfigBlockNumMethod · 0.80

Tested by

no test coverage detected