diff --git a/ethstats/ethstats.go b/ethstats/ethstats.go index 10f611c795..aec8eb8bf6 100644 --- a/ethstats/ethstats.go +++ b/ethstats/ethstats.go @@ -537,15 +537,29 @@ func (s *Service) reportHistory(conn *websocket.Conn, list []uint64) error { // Gather the batch of blocks to report history := make([]*blockStats, len(indexes)) for i, number := range indexes { + // Retrieve the next block if it's known to us + var block *types.Block if s.eth != nil { - history[len(history)-1-i] = s.assembleBlockStats(s.eth.BlockChain().GetBlockByNumber(number)) + block = s.eth.BlockChain().GetBlockByNumber(number) } else { - history[len(history)-1-i] = s.assembleBlockStats(types.NewBlockWithHeader(s.les.BlockChain().GetHeaderByNumber(number))) + if header := s.les.BlockChain().GetHeaderByNumber(number); header != nil { + block = types.NewBlockWithHeader(header) + } + } + // If we do have the block, add to the history and continue + if block != nil { + history[len(history)-1-i] = s.assembleBlockStats(block) + continue } + // Ran out of blocks, cut the report short and send + history = history[len(history)-i:] } // Assemble the history report and send it to the server - log.Trace("Sending historical blocks to ethstats", "first", history[0].Number, "last", history[len(history)-1].Number) - + if len(history) > 0 { + log.Trace("Sending historical blocks to ethstats", "first", history[0].Number, "last", history[len(history)-1].Number) + } else { + log.Trace("No history to send to stats server") + } stats := map[string]interface{}{ "id": s.node, "history": history,