func (s *GossipStateProviderImpl) handleStateRequest(msg comm.ReceivedMessage) { request := msg.GetGossipMessage().GetStateRequest() response := &proto.RemoteStateResponse{Payloads: make([]*proto.Payload, 0)} for _, seqNum := range request.SeqNums { s.logger.Debug("Reading block ", seqNum, " from the committer service") blocks := s.committer.GetBlocks([]uint64{seqNum}) if blocks == nil || len(blocks) < 1 { s.logger.Errorf("Wasn't able to read block with sequence number %d from ledger, skipping....", seqNum) continue } blockBytes, err := pb.Marshal(blocks[0]) if err != nil { s.logger.Errorf("Could not marshal block: %s", err) } if err != nil { s.logger.Errorf("Could not calculate hash of block: %s", err) } response.Payloads = append(response.Payloads, &proto.Payload{ SeqNum: seqNum, Data: blockBytes, // TODO: Check hash generation for given block from the ledger Hash: "", }) } // Sending back response with missing blocks msg.Respond(&proto.GossipMessage{ Content: &proto.GossipMessage_StateResponse{response}, }) }