Consider a proposal about advertising protocols of intro points, rend points, and onion services
While writing onion service code in Arti, we're finding places where we'd like the onion client to know the supported protocols of the intro point, and onion service; and where we'd like the onion service to know the supported protocols of the rendezvous point.
Currently, the algorithm for Intro points and Rend points is something like,
- Look up the listed relay in your consensus, and use its protocols if you find them.
- Otherwise, use the minimal supported protocols ("required-relay-protocols") listed in the consensus.
For onion services, you can't assume support for any protocol. We could assume that the onion service has the protocols listed in "required-client-protocols", but those are updated as infrequently as possible. When we do need the onion service to advertise support for something new, we have to add a new field in the service descriptor.
I suggest that instead we could write a proposal to do some or all of the following:
- Encode intro points' protocol lists in the service descriptor
- Encode rendezvous points' protocol lists in the INTRODUCE2 body
- Create a new "protocols" line in the onion service descriptor, containing a subset of the onion service's supported protocols.