docs: function legacySync (peer) {
      if(!legacy) return
  
      var drain //we need to keep a reference to drain
                //so we can abort it when we get an error.
      function hasLegacy (hashes) {
        var ary = Object.keys(hashes).filter(function (k) {
          return hashes[k] < 0
        })
        if(ary.length)
          peer.blobs.has(ary, function (err, haves) {
            if(err) drain.abort(err) //ERROR: abort this stream.
            else haves.forEach(function (have, i) {
              if(have) has(peer.id, ary[i], have)
            })
          })
      }
  
      function notPeer (err) {
        if(err) dead(peer.id)
      }
  
      drain = pull.drain(function (hash) {
        has(peer.id, hash, true)
      }, notPeer)
  
  
      pull(peer.blobs.changes(), drain)
  
      hasLegacy(want)
  
      //a stream of hashes
      pull(notify.listen(), pull.drain(hasLegacy, notPeer))
    }