code: func (odr *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err error) {
  	lreq := LesRequest(req)
  
  	reqID := genReqID()
  	rq := &distReq{
  		getCost: func(dp distPeer) uint64 {
  			return lreq.GetCost(dp.(*peer))
  		},
  		canSend: func(dp distPeer) bool {
  			p := dp.(*peer)
  			if !p.isOnlyAnnounce {
  				return lreq.CanSend(p)
  			}
  			return false
  		},
  		request: func(dp distPeer) func() {
  			p := dp.(*peer)
  			cost := lreq.GetCost(p)
  			p.fcServer.QueuedRequest(reqID, cost)
  			return func() { lreq.Request(reqID, p) }
  		},
  	}
  
  	if err = odr.retriever.retrieve(ctx, reqID, rq, func(p distPeer, msg *Msg) error { return lreq.Validate(odr.db, msg) }, odr.stop); err == nil {
  		// retrieved from network, store in db
  		req.StoreResult(odr.db)
  	} else {
  		log.Debug("Failed to retrieve data from network", "err", err)
  	}
  	return
  }
docs: // Retrieve tries to fetch an object from the LES network.
  // If the network retrieval was successful, it stores the object in local db.