docs: function (hash, cb) {
        if(isArray(hash)) {
          for(var i = 0; i < hash.length; i++)
            if(!isBlobId(hash[i]))
              return cb(new Error('invalid hash:'+hash[i]))
        }
        else if(!isBlobId(hash))
          return cb(new Error('invalid hash:'+hash))
  
        if(!legacy) {
          blobs.has.call(this, hash, cb)
        }
        else {
        //LEGACY LEGACY LEGACY
          if(this === self || !this || this === global) { // a local call
            return blobs.has.call(this, hash, cb)
          }
          //ELSE, interpret remote calls to has as a WANT request.
          //handling this by calling process (which calls size())
          //avoids a race condition in the tests.
          //(and avoids doubling the number of calls)
          var a = Array.isArray(hash) ? hash : [hash]
          var o = {}
          a.forEach(function (h) { o[h] = -1 })
          //since this is always "has" process will never use the second arg.
          process(o, null, function (err, res) {
            var a = []; for(var k in o) a.push(res[k] > 0)
            cb(null, Array.isArray(hash) ? a : a[0])
          })
        //LEGACY LEGACY LEGACY
        }
      }