func (db *LevelDb) ProcessEBlockMultiBatch(eblock *common.EBlock) error { if eblock == nil { return nil } if db.lbatch == nil { return fmt.Errorf("db.lbatch == nil") } if len(eblock.Body.EBEntries) < 1 { return errors.New("Empty eblock!") } binaryEblock, err := eblock.MarshalBinary() if err != nil { return err } // Insert the binary entry block var key []byte = []byte{byte(TBL_EB)} hash, err := eblock.Hash() if err != nil { return err } key = append(key, hash.Bytes()...) db.lbatch.Put(key, binaryEblock) // Insert the entry block merkle root cross reference key = []byte{byte(TBL_EB_MR)} keyMR, err := eblock.KeyMR() if err != nil { return err } key = append(key, keyMR.Bytes()...) eBlockHash, err := eblock.Hash() if err != nil { return err } binaryEBHash, err := eBlockHash.MarshalBinary() if err != nil { return err } db.lbatch.Put(key, binaryEBHash) // Insert the entry block number cross reference key = []byte{byte(TBL_EB_CHAIN_NUM)} key = append(key, eblock.Header.ChainID.Bytes()...) bytes := make([]byte, 4) binary.BigEndian.PutUint32(bytes, eblock.Header.EBSequence) key = append(key, bytes...) db.lbatch.Put(key, binaryEBHash) // Update the chain head reference key = []byte{byte(TBL_CHAIN_HEAD)} key = append(key, eblock.Header.ChainID.Bytes()...) keyMR, err = eblock.KeyMR() if err != nil { return err } db.lbatch.Put(key, keyMR.Bytes()) return nil }