verifyOnce method

Future<bool> verifyOnce(
  1. Nip01Event event,
  2. EventVerifier verifier
)

Runs at most one verification for the same validated id and signature.

Implementation

Future<bool> verifyOnce(
  Nip01Event event,
  EventVerifier verifier,
) {
  final key = (id: event.id, signature: event.sig);
  final existing = _verificationInFlight[key];
  if (existing != null) {
    return existing;
  }

  final generation = _generation;
  late final Future<bool> future;
  future = Future<bool>.sync(() => verifier.verify(event)).then((valid) {
    if (valid && generation == _generation) {
      markVerified(event.id, event.sig);
    }
    return valid;
  }).whenComplete(() {
    if (identical(_verificationInFlight[key], future)) {
      _verificationInFlight.remove(key);
    }
  });
  _verificationInFlight[key] = future;
  return future;
}