// Add DBEntry from an SC Block func (c *DChain) AddFBlockToDBEntry(b block.IFBlock) (err error) { dbEntry := &DBEntry{} dbEntry.ChainID = new(Hash) dbEntry.ChainID.SetBytes(b.GetChainID().Bytes()) dbEntry.KeyMR = new(Hash) dbEntry.KeyMR.SetBytes(b.GetHash().Bytes()) if len(c.NextBlock.DBEntries) < 3 { panic("3 DBEntries not initialized properly for block: " + string(c.NextDBHeight)) } c.BlockMutex.Lock() // Ablock is always at the first entry // First three entries are ABlock, CBlock, FBlock c.NextBlock.DBEntries[2] = dbEntry c.BlockMutex.Unlock() return nil }
// 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 }