@ -611,6 +611,10 @@ func (s *Service) reportBlock(conn *connWrapper, block *types.Block) error {
// Gather the block details from the header or block chain
// Gather the block details from the header or block chain
details := s . assembleBlockStats ( block )
details := s . assembleBlockStats ( block )
// Short circuit if the block detail is not available.
if details == nil {
return nil
}
// Assemble the block report and send it to the server
// Assemble the block report and send it to the server
log . Trace ( "Sending new block to ethstats" , "number" , details . Number , "hash" , details . Hash )
log . Trace ( "Sending new block to ethstats" , "number" , details . Number , "hash" , details . Hash )
@ -638,10 +642,16 @@ func (s *Service) assembleBlockStats(block *types.Block) *blockStats {
// check if backend is a full node
// check if backend is a full node
fullBackend , ok := s . backend . ( fullNodeBackend )
fullBackend , ok := s . backend . ( fullNodeBackend )
if ok {
if ok {
// Retrieve current chain head if no block is given.
if block == nil {
if block == nil {
head := fullBackend . CurrentBlock ( )
head := fullBackend . CurrentBlock ( )
block , _ = fullBackend . BlockByNumber ( context . Background ( ) , rpc . BlockNumber ( head . Number . Uint64 ( ) ) )
block , _ = fullBackend . BlockByNumber ( context . Background ( ) , rpc . BlockNumber ( head . Number . Uint64 ( ) ) )
}
}
// Short circuit if no block is available. It might happen when
// the blockchain is reorging.
if block == nil {
return nil
}
header = block . Header ( )
header = block . Header ( )
td = fullBackend . GetTd ( context . Background ( ) , header . Hash ( ) )
td = fullBackend . GetTd ( context . Background ( ) , header . Hash ( ) )