Onionoo feature: family ID
Whereas each relay is uniquely identified (by its fingerprint), families do not have unique identifiers. We want to change that. As it is currently unclear whether family ids will be implemented (prop 242), we (Virgil Griffith and Sean Saito) propose the stopgap solution that, at least within Onionoo, each family is assigned a unique positive integer (UUID) derived from the "first_seen" field of the oldest relay within its "effective_family" (symmetric family). If two families have exactly the same oldest "first_seen" field, the families are assigned UUIDs based on asciibetical order of the oldest relay's fingerprint.
How it works To compute the UUIDs, Onionoo would iterate over all effective families and record the earliest "first_seen" value within each effective family. The effective families are then sorted by their first_seen value (ties broken by asciibetical order), and assigned an index (UUID) starting from 1. This UUID number will be invariant under relays leaving / being added to the family. When a new effective_family is discovered it is assigned the next UUID.
Effective families Relays of an effective family are defined as a set of relays where every relay has a symmetric connection to every other relay, or, in other words, every relay points to every other relay. Work is currently being done (ticket #16276 (moved)) to resolve asymmetric connections between relays (where one relay points to a relay but that relay does not point back).
Finally, upon receiving a request with a specific relay's fingerprint, Onionoo would return:
- The symmetric family, a.k.a. the "effective family" of that relay. If there is none returns an empty list.
- The UUID (a positive integer) of that effective family.