func exportABlock(block *common.AdminBlock) { if block == nil || procLog.Level() < factomlog.Info { return } data, err := block.MarshalBinary() if err != nil { panic(err) } strChainID := block.Header.AdminChainID.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.Header.DBHeight), data, 0777) if err != nil { panic(err) } }
// ProcessABlockBatch inserts the AdminBlock func (db *LevelDb) ProcessABlockBatch(block *common.AdminBlock) 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 } abHash, err := block.PartialHash() if err != nil { return err } // Insert the binary factom block var key []byte = []byte{byte(TBL_AB)} key = append(key, abHash.Bytes()...) db.lbatch.Put(key, binaryBlock) // Insert the admin block number cross reference key = []byte{byte(TBL_AB_NUM)} key = append(key, block.Header.AdminChainID.Bytes()...) bytes := make([]byte, 4) binary.BigEndian.PutUint32(bytes, block.Header.DBHeight) key = append(key, bytes...) db.lbatch.Put(key, abHash.Bytes()) // Update the chain head reference key = []byte{byte(TBL_CHAIN_HEAD)} key = append(key, common.ADMIN_CHAINID...) db.lbatch.Put(key, abHash.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) ProcessABlockMultiBatch(block *common.AdminBlock) 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 } abHash, err := block.PartialHash() if err != nil { return err } // Insert the binary factom block var key = []byte{byte(TBL_AB)} key = append(key, abHash.Bytes()...) db.lbatch.Put(key, binaryBlock) // Insert the admin block number cross reference key = []byte{byte(TBL_AB_NUM)} key = append(key, common.ADMIN_CHAINID...) bytes := make([]byte, 4) binary.BigEndian.PutUint32(bytes, block.Header.DBHeight) key = append(key, bytes...) db.lbatch.Put(key, abHash.Bytes()) // Update the chain head reference key = []byte{byte(TBL_CHAIN_HEAD)} key = append(key, common.ADMIN_CHAINID...) db.lbatch.Put(key, abHash.Bytes()) return nil }