// FetchAllABlocks gets all of the admin blocks func (db *LevelDb) FetchAllABlocks() (aBlocks []common.AdminBlock, err error) { db.dbLock.RLock() defer db.dbLock.RUnlock() var fromkey = []byte{byte(TBL_AB)} // Table Name (1 bytes) // Timestamp (8 bytes) var tokey = []byte{byte(TBL_AB + 1)} // Table Name (1 bytes) var iter iterator.Iterator aBlockSlice := make([]common.AdminBlock, 0, 10) iter = db.lDb.NewIterator(&util.Range{Start: fromkey, Limit: tokey}, db.ro) for iter.Next() { var aBlock common.AdminBlock _, err := aBlock.UnmarshalBinaryData(iter.Value()) if err != nil { return nil, err } //TODO: to be optimized?? _, err = aBlock.PartialHash() if err != nil { return nil, err } aBlockSlice = append(aBlockSlice, aBlock) } iter.Release() err = iter.Error() return aBlockSlice, nil }
func ParseAdminBlock(chainID, hash string, rawBlock []byte, blockTime string) (*Block, error) { answer := new(Block) aBlock := new(common.AdminBlock) _, err := aBlock.UnmarshalBinaryData(rawBlock) if err != nil { return nil, err } answer.ChainID = chainID fullHash, err := aBlock.LedgerKeyMR() if err != nil { return nil, err } answer.FullHash = fullHash.String() partialHash, err := aBlock.PartialHash() if err != nil { return nil, err } answer.PartialHash = partialHash.String() answer.EntryCount = len(aBlock.ABEntries) answer.PrevBlockHash = fmt.Sprintf("%x", aBlock.Header.PrevLedgerKeyMR.GetBytes()) answer.EntryList = make([]*Entry, answer.EntryCount) answer.BinaryString = fmt.Sprintf("%x", rawBlock) for i, v := range aBlock.ABEntries { marshalled, err := v.MarshalBinary() if err != nil { return nil, err } entry := new(Entry) entry.BinaryString = fmt.Sprintf("%x", marshalled) entry.Hash = v.Hash().String() entry.Timestamp = blockTime entry.ChainID = chainID entry.JSONString, err = v.JSONString() if err != nil { return nil, err } entry.SpewString = v.Spew() entry.ShortEntry = v.Interpret() answer.EntryList[i] = entry } answer.JSONString, err = aBlock.JSONString() if err != nil { return nil, err } answer.SpewString = aBlock.Spew() answer.BinaryString = fmt.Sprintf("%x", rawBlock) answer.IsAdminBlock = true return answer, nil }