فهرست منبع

Merge pull request #13856 from karalabe/ethstats-sanity-checks

ethstats: sanity check ethstats history queries
Péter Szilágyi 8 سال پیش
والد
کامیت
e50a5b7771
1فایلهای تغییر یافته به همراه18 افزوده شده و 4 حذف شده
  1. 18 4
      ethstats/ethstats.go

+ 18 - 4
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,