func exportEChain(chain *common.EChain) { if procLog.Level() < factomlog.Info { return } eBlocks, _ := db.FetchAllEBlocksByChain(chain.ChainID) sort.Sort(util.ByEBlockIDAccending(*eBlocks)) for _, block := range *eBlocks { data, err := block.MarshalBinary() if err != nil { panic(err) } strChainID := chain.ChainID.String() if fileNotExists(dataStorePath + strChainID) { err := os.MkdirAll(dataStorePath+strChainID, 0777) if err == nil { procLog.Info("Created directory " + dataStorePath + strChainID) } else { procLog.Error(err) } } err = ioutil.WriteFile(fmt.Sprintf(dataStorePath+strChainID+"/store.%09d.%09d.block", block.Header.EBSequence, block.Header.DBHeight), data, 0777) if err != nil { panic(err) } } }
// 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) } } }