code: func (p *BlockPuller) fetchLastBlockSeq(minRequestedSequence uint64, endpoint string, conn *grpc.ClientConn) (uint64, error) {
  	env, err := p.seekLastEnvelope()
  	if err != nil {
  		p.Logger.Errorf("Failed creating seek envelope for %s: %v", endpoint, err)
  		return 0, err
  	}
  
  	stream, err := p.requestBlocks(endpoint, NewImpatientStream(conn, p.FetchTimeout), env)
  	if err != nil {
  		return 0, err
  	}
  	defer stream.abort()
  
  	resp, err := stream.Recv()
  	if err != nil {
  		p.Logger.Errorf("Failed receiving the latest block from %s: %v", endpoint, err)
  		return 0, err
  	}
  
  	block, err := extractBlockFromResponse(resp)
  	if err != nil {
  		p.Logger.Warningf("Received %v from %s: %v", resp, endpoint, err)
  		return 0, err
  	}
  	stream.CloseSend()
  
  	seq := block.Header.Number
  	if seq < minRequestedSequence {
  		err := errors.Errorf("minimum requested sequence is %d but %s is at sequence %d", minRequestedSequence, endpoint, seq)
  		p.Logger.Infof("Skipping pulling from %s: %v", endpoint, err)
  		return 0, err
  	}
  
  	p.Logger.Infof("%s is at block sequence of %d", endpoint, seq)
  	return block.Header.Number, nil
  }
docs: // fetchLastBlockSeq returns the last block sequence of an endpoint with the given gRPC connection.