func exportFctBlock(block block.IFBlock) { if block == nil || procLog.Level() < factomlog.Info { return } data, err := block.MarshalBinary() if err != nil { panic(err) } strChainID := block.GetChainID().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.block", block.GetDBHeight()), data, 0777) if err != nil { panic(err) } }
// ProcessFBlockBatch inserts the factoid block func (db *LevelDb) ProcessFBlockBatch(block block.IFBlock) error { if block != nil { if db.lbatch == nil { db.lbatch = new(leveldb.Batch) } defer db.lbatch.Reset() binaryBlock, err := block.MarshalBinary() if err != nil { return err } scHash := block.GetHash() // Insert the binary factom block var key []byte = []byte{byte(TBL_SC)} key = append(key, scHash.Bytes()...) db.lbatch.Put(key, binaryBlock) // Insert the sc block number cross reference key = []byte{byte(TBL_SC_NUM)} key = append(key, block.GetChainID().Bytes()...) bytes := make([]byte, 4) binary.BigEndian.PutUint32(bytes, block.GetDBHeight()) key = append(key, bytes...) db.lbatch.Put(key, scHash.Bytes()) // Update the chain head reference key = []byte{byte(TBL_CHAIN_HEAD)} key = append(key, common.FACTOID_CHAINID...) db.lbatch.Put(key, scHash.Bytes()) err = db.lDb.Write(db.lbatch, db.wo) if err != nil { log.Println("batch failed %v\n", err) return err } } return nil }
func (db *LevelDb) ProcessFBlockMultiBatch(block block.IFBlock) error { if block == nil { return nil } if db.lbatch == nil { return fmt.Errorf("db.lbatch == nil") } binaryBlock, err := block.MarshalBinary() if err != nil { return err } scHash := block.GetHash() // Insert the binary factom block var key = []byte{byte(TBL_SC)} key = append(key, scHash.Bytes()...) db.lbatch.Put(key, binaryBlock) // Insert the sc block number cross reference key = []byte{byte(TBL_SC_NUM)} key = append(key, common.FACTOID_CHAINID...) bytes := make([]byte, 4) binary.BigEndian.PutUint32(bytes, block.GetDBHeight()) key = append(key, bytes...) db.lbatch.Put(key, scHash.Bytes()) // Update the chain head reference key = []byte{byte(TBL_CHAIN_HEAD)} key = append(key, common.FACTOID_CHAINID...) db.lbatch.Put(key, scHash.Bytes()) return nil }