code: func (p *Peer) SendOfferedHashes(s *server, f, t uint64) error {
  	var sp opentracing.Span
  	ctx, sp := spancontext.StartSpan(
  		context.TODO(),
  		"send.offered.hashes",
  	)
  	defer sp.Finish()
  
  	defer metrics.GetOrRegisterResettingTimer("send.offered.hashes", nil).UpdateSince(time.Now())
  
  	hashes, from, to, proof, err := s.setNextBatch(f, t)
  	if err != nil {
  		return err
  	}
  	// true only when quitting
  	if len(hashes) == 0 {
  		return nil
  	}
  	if proof == nil {
  		proof = &HandoverProof{
  			Handover: &Handover{},
  		}
  	}
  	s.currentBatch = hashes
  	msg := &OfferedHashesMsg{
  		HandoverProof: proof,
  		Hashes:        hashes,
  		From:          from,
  		To:            to,
  		Stream:        s.stream,
  	}
  	log.Trace("Swarm syncer offer batch", "peer", p.ID(), "stream", s.stream, "len", len(hashes), "from", from, "to", to)
  	ctx = context.WithValue(ctx, "stream_send_tag", "send.offered.hashes")
  	return p.SendPriority(ctx, msg, s.priority)
  }
docs: // SendOfferedHashes sends OfferedHashesMsg protocol msg