draft optional relay
This NIP defines events for relay discovery and the announcement of relay monitors.
30166 relay discovery events document relay characteristics inferred either from a relay's NIP 11 document, or via probing.
Information corresponding to field in a relay's NIP 11 document MAY contradict actual values if monitors find that a different policy is implemented than is advertised.
content MAY include the stringified JSON of the relay's NIP-11 informational document.
The only required tag is the d tag, which MUST be set to the relay's normalized URL. For relays not accessible via URL, a hex-encoded pubkey MAY be used instead.
Other tags include:
rtt-open- The relay's open round-trip time in milliseconds.rtt-read- The relay's read round-trip time in milliseconds.rtt-write- The relay's write round-trip time in milliseconds.n- The relay's network type. SHOULD be one ofclearnet,tor,i2p,lokiT- The relay type. Enumerated relay type formatted asPascalCase, e.g.PrivateInboxN- NIPs supported by the relayR- Keys corresponding to requirements per NIP 11'slimitationsarray, includingauth,writes,pow, andpayment. False values should be specified using a!prefix, for example!auth.t- A topic associated with this relayk- Accepted and unaccepted kinds (false values prepended by!)g- A NIP-52 geohash
Tags with more than one value should be repeated, rather than putting all values in a single tag, for example [["t", "cats"], ["t", "dogs"]], rather than [["t", "cats", "dogs"]].
Example:
{
"id": "<eventid>",
"pubkey": "<monitor's pubkey>",
"created_at": "<created_at [some recent date ...]>",
"signature": "<signature>",
"content": "<optional nip 11 document>",
"kind": 30166,
"tags": [
["d","wss://some.relay/"],
["n", "clearnet"],
["N", "40"],
["N", "33"],
["R", "!payment"],
["R", "auth"],
["g", "ww8p1r4t8"],
["l", "en", "ISO-639-1"],
["t", "nsfw" ],
["rtt-open", "234" ]
]
}Kind 10166 relay monitor announcements advertise the author's intent to publish 30166 events. This event is optional and is intended for monitors who intend to provide monitoring services at a regular and predictable frequency.
Tags include:
frequency- The frequency in seconds at which the monitor publishes events.timeout(optional) - The timeout values for various checks conducted by a monitor. Index1is the monitor's timeout in milliseconds. Index2describes what test the timeout is used for. If no index2is provided, it is inferred that the timeout provided applies to all tests.c- a lowercase string describing the checks conducted by a monitor. Examples includeopen,read,write,auth,nip11,dns, andgeo.g- NIP-52 geohash tag
Monitors SHOULD also publish a kind 0 profile and a kind 10002 relay selections event.
Example:
{
"id": "<eventid>",
"pubkey": "<monitor's pubkey>",
"created_at": "<created_at [some recent date ...]>",
"signature": "<signature>",
"content": "",
"tags": [
[ "timeout", "open", "5000" ],
[ "timeout", "read", "3000" ],
[ "timeout", "write", "3000" ],
[ "timeout", "nip11", "3000" ],
[ "frequency", "3600" ],
[ "c", "ws" ],
[ "c", "nip11" ],
[ "c", "ssl" ],
[ "c", "dns" ],
[ "c", "geo" ]
[ "g", "ww8p1r4t8" ]
]
}- Clients MUST NOT require
30166events to function. Absence of monitoring data MUST NOT prevent relay connections. - A monitor may publish erroneous
30166events, either by misconfiguration or malicious intent. - Clients SHOULD NOT trust a single source. Defenses include: web-of-trust filtering, querying multiple monitors, and discarding filter results if they would remove an unreasonable proportion of relays.