// Seals the current open block, store it in db and create the next open block func newDirectoryBlock(chain *common.DChain) *common.DirectoryBlock { procLog.Debug("**** new Dir Block") // acquire the last block block := chain.NextBlock if devNet { block.Header.NetworkID = common.NETWORK_ID_TEST } else { block.Header.NetworkID = common.NETWORK_ID_EB } // Create the block add a new block for new coming entries chain.BlockMutex.Lock() block.Header.BlockCount = uint32(len(block.DBEntries)) // Calculate Merkle Root for FBlock and store it in header if block.Header.BodyMR == nil { block.Header.BodyMR, _ = block.BuildBodyMR() // Factoid1 block not in the right place... } block.IsSealed = true chain.AddDBlockToDChain(block) chain.NextDBHeight++ chain.NextBlock, _ = common.CreateDBlock(chain, block, 10) chain.BlockMutex.Unlock() block.DBHash, _ = common.CreateHash(block) block.BuildKeyMerkleRoot() //Store the block in db db.ProcessDBlockBatch(block) // Initialize the dirBlockInfo obj in db db.InsertDirBlockInfo(common.NewDirBlockInfoFromDBlock(block)) anchor.UpdateDirBlockInfoMap(common.NewDirBlockInfoFromDBlock(block)) procLog.Info("DirectoryBlock: block" + strconv.FormatUint(uint64(block.Header.DBHeight), 10) + " created for directory block chain: " + chain.ChainID.String()) // To be improved in milestone 2 SignDirectoryBlock() return block }
func createMissingDirBlockInfo() { fmt.Println("create DirBlockInfo for those un-anchored DirBlocks") //dblocks, _ := db.FetchAllDBlocks() for _, dblock := range dblocks { if _, ok := dirBlockInfoMap[dblock.Header.DBHeight]; ok { continue } else { dblock.BuildKeyMerkleRoot() //fmt.Printf("creating missing dirBlockInfo for dir block=%s\n", spew.Sdump(dblock)) dirBlockInfo := common.NewDirBlockInfoFromDBlock(&dblock) //fmt.Printf("creating missing dirBlockInfo. DirBlockInfo=%s\n", spew.Sdump(dirBlockInfo)) err := db.InsertDirBlockInfo(dirBlockInfo) if err != nil { fmt.Printf("InsertDirBlockInfo error: %s, DirBlockInfo=%s\n", err, spew.Sdump(dirBlockInfo)) } dirBlockInfoMap[dirBlockInfo.DBHeight] = dirBlockInfo } } }