NIP-27 Multicasting

This commit is contained in:
Ricardo Arturo Cabral Mejía 2022-08-16 22:57:22 -04:00 committed by GitHub
parent f6346b6e22
commit ef059e0fde
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

67
27.md Normal file
View File

@ -0,0 +1,67 @@
NIP-27
======
Multicasting
------------
`draft` `optional` `author:cameri`
A new tag `m` meaning `multicast group` allow for events to be addressed to a
group of clients simultaneously. Multicast in this scenario can be one-to-many
or many-to-many.
A relay MUST forward events containing `m` tags strictly to clients subscribed
with a tag filter `#m` containing at least one of the values of such tags and
refrain from forwarding such events to clients without such filter. The value
of an `m` tag is case-sensitive.
A client SHOULD send events containing `m` tags only to relays that explicitly
support NIP-27. A NIP-16 supporting client MAY test for the capability by
subscribing twice to a relay with and without the tag filter `#m` respectively
and sending an ephemeral event with a random `m` tag of equal value.
## Events
Clients targeting a multicast group MAY include an `m` tag with a value set to
an arbitrary string representing the multicast group.
Suppose that Alice wants to multicast an event to a very special multicast group
that covers specific topics. The multicast group is identified by the following
string: `00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048`
Alice would construct the following message and sends it to her favorite relay
which happens to support multicasting:
```json
[
"EVENT",
{
"id": "<id>",
"pubkey": "<Alice's pubkey>",
"created_at": 1231469640,
"content": "Let's get the conversation started",
"tags": [
["m", "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"],
],
"sig": "<sig>"
}
]
```
## Subscriptions
Clients subscribing to a multicast group MUST include an `#m` tag filter with
an array of multicast groups as values.
Suppose that Bob and Charlie both share Alice's interest and would like to stay
up to date. Both would construct the following message to subscribe:
```
[
"REQ",
"<subscriptionId>",
{
"#m": ["00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"]
}
]
```