// Initialize the entry chains in memory from db func initEChainFromDB(chain *common.EChain) { eBlocks, _ := db.FetchAllEBlocksByChain(chain.ChainID) sort.Sort(util.ByEBlockIDAccending(*eBlocks)) for i := 0; i < len(*eBlocks); i = i + 1 { if uint32(i) != (*eBlocks)[i].Header.EBSequence { panic(errors.New("BlockID does not equal index for chain:" + chain.ChainID.String() + " block:" + fmt.Sprintf("%v", (*eBlocks)[i].Header.EBSequence))) } } var err error if len(*eBlocks) == 0 { chain.NextBlockHeight = 0 chain.NextBlock, err = common.MakeEBlock(chain, nil) if err != nil { panic(err) } } else { chain.NextBlockHeight = uint32(len(*eBlocks)) chain.NextBlock, err = common.MakeEBlock(chain, &(*eBlocks)[len(*eBlocks)-1]) if err != nil { panic(err) } } // Initialize chain with the first entry (Name and rules) for non-server mode if nodeMode != common.SERVER_NODE && chain.FirstEntry == nil && len(*eBlocks) > 0 { chain.FirstEntry, _ = db.FetchEntryByHash((*eBlocks)[0].Body.EBEntries[0]) if chain.FirstEntry != nil { db.InsertChain(chain) } } }
// Seals the current open block, store it in db and create the next open block func newEntryBlock(chain *common.EChain) *common.EBlock { // acquire the last block block := chain.NextBlock if block == nil { return nil } if len(block.Body.EBEntries) < 1 { procLog.Debug("No new entry found. No block created for chain: " + chain.ChainID.String()) return nil } // Create the block and add a new block for new coming entries block.Header.DBHeight = dchain.NextDBHeight block.Header.EntryCount = uint32(len(block.Body.EBEntries)) chain.NextBlockHeight++ var err error chain.NextBlock, err = common.MakeEBlock(chain, block) if err != nil { procLog.Debug("EntryBlock Error: " + err.Error()) return nil } //Store the block in db db.ProcessEBlockBatch(block) procLog.Infof("EntryBlock: block" + strconv.FormatUint(uint64(block.Header.EBSequence), 10) + " created for chain: " + chain.ChainID.String()) return block }